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,
+})