dev #872

Merged
ysCha merged 111 commits from dev into dev-deploy 2026-05-29 16:09:40 +09:00
2 changed files with 222 additions and 214 deletions
Showing only changes of commit 2eee9edbc5 - Show all commits

View File

@ -36,6 +36,7 @@ import { calcLineActualSize2 } from '@/util/qpolygon-utils'
import { notifyLowPitchRestrictionForRoofs, isLowPitchRestricted, LOW_PITCH_RESTRICTED_ROOF_IDS } from '@/util/roof-pitch-warning'
// [LOW-PITCH-DIAG 2026-05-06 TEMP] 진단용 — 검증 후 import + 호출 함께 제거
import { debugCapture } from '@/util/debugCapture'
import { logger } from '@/util/logger'
export function useRoofAllocationSetting(id) {
const canvas = useRecoilValue(canvasState)
@ -217,7 +218,7 @@ export function useRoofAllocationSetting(id) {
}))
setCurrentRoofList(normalizedRoofs)
} catch (error) {
console.error('Data fetching error:', error)
logger.error('Data fetching error:', error)
}
}
@ -521,7 +522,7 @@ export function useRoofAllocationSetting(id) {
const extLines = roofBase.lines.filter((l) => l.lineName === 'extensionLine')
if (extLines.length === 0) {
console.log(`[INTEGRATE] roofBase.id=${roofBase.id} extensionLine 없음 → skip`)
logger.log(`[INTEGRATE] roofBase.id=${roofBase.id} extensionLine 없음 → skip`)
return
}
@ -563,7 +564,7 @@ export function useRoofAllocationSetting(id) {
})
if (!sk) {
console.log(
logger.log(
`[INTEGRATE] ext 짝없음 ` +
`(${extP1.x.toFixed(1)},${extP1.y.toFixed(1)})→(${extP2.x.toFixed(1)},${extP2.y.toFixed(1)})`
)
@ -571,8 +572,9 @@ export function useRoofAllocationSetting(id) {
}
// [2026-04-30] sk 가 이미 SK 빌드 단계에서 연장된 경우 → merge 스킵.
if (sk.__extended) {
console.log(
// [save/load 보존 2026-05-13] runtime __extended 는 저장 시 사라지므로 attributes.extended 도 함께 검사.
if (sk.__extended || sk.attributes?.extended) {
logger.log(
`[INTEGRATE] sk 이미 연장됨(id=${sk.id}) → merge 스킵, ext 는 lines 에서만 제거(canvas 유지)`
)
extLinesOnly.push(ext)
@ -617,7 +619,7 @@ export function useRoofAllocationSetting(id) {
})
mergedLine.length = totalLen
console.log(
logger.log(
`[INTEGRATE] merge ` +
`ext=(${extP1.x.toFixed(1)},${extP1.y.toFixed(1)})→(${extP2.x.toFixed(1)},${extP2.y.toFixed(1)}) len=${extLen.toFixed(1)} ` +
`sk[${sk.lineName || sk.name}]=(${skP1.x.toFixed(1)},${skP1.y.toFixed(1)})→(${skP2.x.toFixed(1)},${skP2.y.toFixed(1)}) len=${skLen.toFixed(1)} ` +
@ -630,7 +632,7 @@ export function useRoofAllocationSetting(id) {
})
if (merged.length === 0 && extLinesOnly.length === 0) {
console.log(`[INTEGRATE] 통합 대상 없음 ext=${extLines.length}`)
logger.log(`[INTEGRATE] 통합 대상 없음 ext=${extLines.length}`)
return
}
@ -646,7 +648,7 @@ export function useRoofAllocationSetting(id) {
removedExt.forEach((l) => canvas.remove(l))
removedSk.forEach((l) => canvas.remove(l))
console.log(
logger.log(
`[INTEGRATE] 완료 roofBase.id=${roofBase.id} ` +
`ext제거=${removedExt.length} sk제거=${removedSk.length} merged=${merged.length} ` +
`extKeptInCanvas=${extLinesOnly.length} ` +
@ -660,7 +662,7 @@ export function useRoofAllocationSetting(id) {
const apply = () => {
const roofBases = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF && !obj.roofMaterial)
const wallLines = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.WALL)
console.log(`[ALLOC] apply() 진입. roofBases=${roofBases.length}`)
logger.log(`[ALLOC] apply() 진입. roofBases=${roofBases.length}`)
roofBases.forEach((roofBase) => {
try {
// 지붕 할당 로직에 extensionLine 추가
@ -675,7 +677,7 @@ export function useRoofAllocationSetting(id) {
snapByLineName[o.lineName] = (snapByLineName[o.lineName] || 0) + 1
snapByName[o.name || '?'] = (snapByName[o.name || '?'] || 0) + 1
})
console.log(
logger.log(
`[ALLOC-DEBUG] roofBase.id=${roofBase.id} ` +
`roofBase.lines=${roofBase.lines?.length || 0} ` +
`roofBase.innerLines=${roofBase.innerLines?.length || 0} ` +
@ -684,15 +686,15 @@ export function useRoofAllocationSetting(id) {
`byName=${JSON.stringify(snapByName)}`
)
roofEaveHelpLines.forEach((o, i) => {
console.log(
logger.log(
` [ALLOC-DEBUG] picked[${i}] name=${o.name} lineName=${o.lineName} ` +
`(${o.x1?.toFixed(1)},${o.y1?.toFixed(1)})→(${o.x2?.toFixed(1)},${o.y2?.toFixed(1)}) ` +
`len=${Math.hypot((o.x2 || 0) - (o.x1 || 0), (o.y2 || 0) - (o.y1 || 0)).toFixed(1)}`
)
})
// console.log('roofBase.id:', roofBase.id)
// console.log('roofEaveHelpLines:', roofEaveHelpLines)
// console.log('extensionLines found:', roofEaveHelpLines.filter(l => l.lineName === 'extensionLine'))
// logger.log('roofBase.id:', roofBase.id)
// logger.log('roofEaveHelpLines:', roofEaveHelpLines)
// logger.log('extensionLines found:', roofEaveHelpLines.filter(l => l.lineName === 'extensionLine'))
if (roofEaveHelpLines.length > 0) {
if (roofBase.lines) {
// Filter out any eaveHelpLines that are already in lines to avoid duplicates
@ -703,8 +705,8 @@ export function useRoofAllocationSetting(id) {
// extensionLine과 일반 eaveHelpLine 분리
const extensionLines = newEaveLines.filter(line => line.lineName === 'extensionLine')
const normalEaveLines = newEaveLines.filter(line => line.lineName === 'eaveHelpLine')
// console.log('extensionLines count:', extensionLines.length)
// console.log('normalEaveLines count:', normalEaveLines.length)
// logger.log('extensionLines count:', extensionLines.length)
// logger.log('normalEaveLines count:', normalEaveLines.length)
// 일반 eaveHelpLine만 Overlap 판단에 사용
const linesToKeep = roofBase.lines.filter(roofLine => {
@ -747,7 +749,7 @@ export function useRoofAllocationSetting(id) {
isPointInside(eX2, eY2, rX1, rY1, rX2, rY2);
if (isOverlapping) {
console.log('Removing overlapping line:', roofLine);
logger.log('Removing overlapping line:', roofLine);
return true; // 포개지는 경우에만 삭제
}
}
@ -759,7 +761,7 @@ export function useRoofAllocationSetting(id) {
// Combine remaining lines with newEaveLines
roofBase.lines = [...linesToKeep, ...normalEaveLines, ...extensionLines];
// [ALLOC-DEBUG] 병합 결과 breakdown
console.log(
logger.log(
`[ALLOC-DEBUG] 병합완료 roofBase.id=${roofBase.id} ` +
`linesToKeep=${linesToKeep.length} ` +
`normalEave=${normalEaveLines.length} ` +
@ -767,7 +769,7 @@ export function useRoofAllocationSetting(id) {
`total=${roofBase.lines.length}`
)
roofBase.lines.forEach((ln, i) => {
console.log(
logger.log(
` [ALLOC-DEBUG] merged[${i}] name=${ln.name || '?'} lineName=${ln.lineName || '?'} ` +
`(${ln.x1?.toFixed(1)},${ln.y1?.toFixed(1)})→(${ln.x2?.toFixed(1)},${ln.y2?.toFixed(1)})`
)
@ -812,7 +814,7 @@ export function useRoofAllocationSetting(id) {
integrateExtensionLines(roofBase)
// [ALLOC-DEBUG] split 직전 최종 입력
console.log(
logger.log(
`[ALLOC-DEBUG] split 직전 roofBase.id=${roofBase.id} ` +
`separatePolygon=${roofBase.separatePolygon?.length || 0} ` +
`lines=${roofBase.lines?.length || 0} ` +
@ -826,7 +828,7 @@ export function useRoofAllocationSetting(id) {
splitPolygonWithLines(roofBase)
}
} catch (e) {
console.log(e)
logger.log(e)
canvas.discardActiveObject()
return
}

File diff suppressed because it is too large Load Diff