diff --git a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx index 494cbcee..ea009012 100644 --- a/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx +++ b/src/components/floor-plan/modal/placementShape/PlacementShapeSetting.jsx @@ -13,6 +13,7 @@ import { addedRoofsState, roofDisplaySelector, roofMaterialsAtom } from '@/store import { useCommonCode } from '@/hooks/common/useCommonCode' import QSelectBox from '@/components/common/select/QSelectBox' import { globalLocaleStore } from '@/store/localeAtom' +import { autoOuterLineFixState } from '@/store/outerLineAtom' import { getChonByDegree, getDegreeByChon } from '@/util/canvas-util' import { usePolygon } from '@/hooks/usePolygon' @@ -107,6 +108,8 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla const [pdfFacadePages, setPdfFacadePages] = useState('') const [pdfFloorPages, setPdfFloorPages] = useState('') const [pdfAnalyzing, setPdfAnalyzing] = useState(false) + // 외벽선 자동 확정(auto fix) 전역 옵션 — 기본 ON + const [autoOuterLineFix, setAutoOuterLineFix] = useRecoilState(autoOuterLineFixState) const { setIsGlobalLoading } = useContext(QcastContext) const pdfInputRef = useRef(null) // 진행 중인 PDF 분석 요청 추적 — 언마운트(라우팅 이탈) 시 abort 하고, 늦게 도착한 결과가 @@ -633,6 +636,23 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla + + {getMessage('modal.placement.initial.setting.size.pdf.autofix.label')} + + +
+ {getMessage('modal.placement.initial.setting.size.pdf.autofix.info')} +
+ + )} diff --git a/src/locales/ja.json b/src/locales/ja.json index 2e98e8e1..7ce1eb5a 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -42,6 +42,8 @@ "modal.placement.initial.setting.size.pdf.page.example.floor": "例) 3, 4", "modal.placement.initial.setting.size.pdf.page.all.info": "全ページを解析するため処理時間が長くなる場合があります。図面内の立面図·平面図ページが特定できる場合はページ指定を推奨します。", "modal.placement.initial.setting.size.pdf.page.specify.info": "立面図·平面図が含まれるページ番号をそれぞれ入力してください。指定したページのみ読み込み素早く屋根を自動作成します。", + "modal.placement.initial.setting.size.pdf.autofix.label": "外壁線の自動確定", + "modal.placement.initial.setting.size.pdf.autofix.info": "オンにするとPDF解析後、外壁線を自動で確定し屋根形状設定へ進みます。", "modal.placement.initial.setting.size.pdf.error.mime": "PDF ファイルのみアップロード可能です。", "modal.placement.initial.setting.size.pdf.error.too.large": "ファイルサイズが 20MB を超えています。", "modal.placement.initial.setting.size.pdf.error.no.file": "先に PDF ファイルをアップロードしてください。", diff --git a/src/locales/ko.json b/src/locales/ko.json index a3645a44..f213f6c1 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -42,6 +42,8 @@ "modal.placement.initial.setting.size.pdf.page.example.floor": "예) 3, 4", "modal.placement.initial.setting.size.pdf.page.all.info": "모든 페이지를 분석하므로 처리 시간이 길어질 수 있습니다. 도면 내 입면도·평면도 페이지가 확인되면 페이지 지정을 권장합니다.", "modal.placement.initial.setting.size.pdf.page.specify.info": "입면도·평면도가 포함된 페이지 번호를 각각 입력해주세요. 지정한 페이지만 읽어 빠르게 지붕을 자동 작성합니다.", + "modal.placement.initial.setting.size.pdf.autofix.label": "외벽선 자동 확정", + "modal.placement.initial.setting.size.pdf.autofix.info": "켜면 PDF 분석 후 외벽선을 자동으로 확정하고 지붕형상 설정 단계로 넘어갑니다.", "modal.placement.initial.setting.size.pdf.error.mime": "PDF 파일만 업로드할 수 있습니다.", "modal.placement.initial.setting.size.pdf.error.too.large": "파일 크기가 20MB 를 초과합니다.", "modal.placement.initial.setting.size.pdf.error.no.file": "PDF 파일을 먼저 업로드해 주세요.", diff --git a/src/store/outerLineAtom.js b/src/store/outerLineAtom.js index 361bc526..b1779609 100644 --- a/src/store/outerLineAtom.js +++ b/src/store/outerLineAtom.js @@ -68,3 +68,12 @@ export const outerLineFixState = atom({ key: 'outerLineFixState', default: false, }) + +/** + * PDF 도면 임포트 시 외벽선 자동 확정(auto fix) 여부 — 전역 설정, 기본 ON + * (런타임 확정 상태인 outerLineFixState 와는 별개의 옵션 플래그) + */ +export const autoOuterLineFixState = atom({ + key: 'autoOuterLineFixState', + default: true, +})