feat(pdf-import): 외벽선 자동 확정(auto fix) 토글 추가 — 전역 옵션·기본 ON
배치면 초기설정 PDF 입력 화면에 '외벽선 자동 확정' 토글을 추가한다. - autoOuterLineFixState 전역 atom 신설(기본값 true), outerLineFixState 와 별개의 옵션 플래그 - ko/ja i18n 라벨·설명 키 추가 - toggle-btn 스위치를 읽기 페이지 설정 행 아래 배치, 분석 중에는 비활성화 실제 PDF 자동 확정 동작 연결(usePdfImport)은 별도 작업으로 분리. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
ce295dd8ff
commit
fafee78c8a
@ -13,6 +13,7 @@ import { addedRoofsState, roofDisplaySelector, roofMaterialsAtom } from '@/store
|
|||||||
import { useCommonCode } from '@/hooks/common/useCommonCode'
|
import { useCommonCode } from '@/hooks/common/useCommonCode'
|
||||||
import QSelectBox from '@/components/common/select/QSelectBox'
|
import QSelectBox from '@/components/common/select/QSelectBox'
|
||||||
import { globalLocaleStore } from '@/store/localeAtom'
|
import { globalLocaleStore } from '@/store/localeAtom'
|
||||||
|
import { autoOuterLineFixState } from '@/store/outerLineAtom'
|
||||||
|
|
||||||
import { getChonByDegree, getDegreeByChon } from '@/util/canvas-util'
|
import { getChonByDegree, getDegreeByChon } from '@/util/canvas-util'
|
||||||
import { usePolygon } from '@/hooks/usePolygon'
|
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 [pdfFacadePages, setPdfFacadePages] = useState('')
|
||||||
const [pdfFloorPages, setPdfFloorPages] = useState('')
|
const [pdfFloorPages, setPdfFloorPages] = useState('')
|
||||||
const [pdfAnalyzing, setPdfAnalyzing] = useState(false)
|
const [pdfAnalyzing, setPdfAnalyzing] = useState(false)
|
||||||
|
// 외벽선 자동 확정(auto fix) 전역 옵션 — 기본 ON
|
||||||
|
const [autoOuterLineFix, setAutoOuterLineFix] = useRecoilState(autoOuterLineFixState)
|
||||||
const { setIsGlobalLoading } = useContext(QcastContext)
|
const { setIsGlobalLoading } = useContext(QcastContext)
|
||||||
const pdfInputRef = useRef(null)
|
const pdfInputRef = useRef(null)
|
||||||
// 진행 중인 PDF 분석 요청 추적 — 언마운트(라우팅 이탈) 시 abort 하고, 늦게 도착한 결과가
|
// 진행 중인 PDF 분석 요청 추적 — 언마운트(라우팅 이탈) 시 abort 하고, 늦게 도착한 결과가
|
||||||
@ -633,6 +636,23 @@ export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, pla
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>{getMessage('modal.placement.initial.setting.size.pdf.autofix.label')}</th>
|
||||||
|
<td>
|
||||||
|
<label className="toggle-btn">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
checked={autoOuterLineFix}
|
||||||
|
disabled={pdfAnalyzing}
|
||||||
|
onChange={(e) => setAutoOuterLineFix(e.target.checked)}
|
||||||
|
/>
|
||||||
|
<span className="slider"></span>
|
||||||
|
</label>
|
||||||
|
<div style={{ fontSize: '12px', color: '#bbb', marginTop: '4px' }}>
|
||||||
|
{getMessage('modal.placement.initial.setting.size.pdf.autofix.info')}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@ -42,6 +42,8 @@
|
|||||||
"modal.placement.initial.setting.size.pdf.page.example.floor": "例) 3, 4",
|
"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.all.info": "全ページを解析するため処理時間が長くなる場合があります。図面内の立面図·平面図ページが特定できる場合はページ指定を推奨します。",
|
||||||
"modal.placement.initial.setting.size.pdf.page.specify.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.mime": "PDF ファイルのみアップロード可能です。",
|
||||||
"modal.placement.initial.setting.size.pdf.error.too.large": "ファイルサイズが 20MB を超えています。",
|
"modal.placement.initial.setting.size.pdf.error.too.large": "ファイルサイズが 20MB を超えています。",
|
||||||
"modal.placement.initial.setting.size.pdf.error.no.file": "先に PDF ファイルをアップロードしてください。",
|
"modal.placement.initial.setting.size.pdf.error.no.file": "先に PDF ファイルをアップロードしてください。",
|
||||||
|
|||||||
@ -42,6 +42,8 @@
|
|||||||
"modal.placement.initial.setting.size.pdf.page.example.floor": "예) 3, 4",
|
"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.all.info": "모든 페이지를 분석하므로 처리 시간이 길어질 수 있습니다. 도면 내 입면도·평면도 페이지가 확인되면 페이지 지정을 권장합니다.",
|
||||||
"modal.placement.initial.setting.size.pdf.page.specify.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.mime": "PDF 파일만 업로드할 수 있습니다.",
|
||||||
"modal.placement.initial.setting.size.pdf.error.too.large": "파일 크기가 20MB 를 초과합니다.",
|
"modal.placement.initial.setting.size.pdf.error.too.large": "파일 크기가 20MB 를 초과합니다.",
|
||||||
"modal.placement.initial.setting.size.pdf.error.no.file": "PDF 파일을 먼저 업로드해 주세요.",
|
"modal.placement.initial.setting.size.pdf.error.no.file": "PDF 파일을 먼저 업로드해 주세요.",
|
||||||
|
|||||||
@ -68,3 +68,12 @@ export const outerLineFixState = atom({
|
|||||||
key: 'outerLineFixState',
|
key: 'outerLineFixState',
|
||||||
default: false,
|
default: false,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PDF 도면 임포트 시 외벽선 자동 확정(auto fix) 여부 — 전역 설정, 기본 ON
|
||||||
|
* (런타임 확정 상태인 outerLineFixState 와는 별개의 옵션 플래그)
|
||||||
|
*/
|
||||||
|
export const autoOuterLineFixState = atom({
|
||||||
|
key: 'autoOuterLineFixState',
|
||||||
|
default: true,
|
||||||
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user