diff --git a/src/util/skeleton-utils.js b/src/util/skeleton-utils.js index 8a25ae80..8c41c9c7 100644 --- a/src/util/skeleton-utils.js +++ b/src/util/skeleton-utils.js @@ -473,6 +473,9 @@ export const skeletonBuilder = (roofId, canvas, textMode) => { roofLineContactPoints = movingLineFromSkeleton(roofId, canvas) } + // changRoofLinePoints 좌표를 roof.skeletonPoints에 저장 (원본 roof.points는 유지) + roof.skeletonPoints = changRoofLinePoints.map(p => ({ x: p.x, y: p.y })) + console.log('points:', changRoofLinePoints) const geoJSONPolygon = toGeoJSON(changRoofLinePoints) @@ -1766,10 +1769,28 @@ function processEavesEdge(roofId, canvas, skeleton, edgeResult, skeletonLines) { } let eavesLines = [] + // 확장된 외곽선 판별용 + const skPts = roof.skeletonPoints || [] + const isSkeletonOuterEdge = (p1, p2, tolerance = 0.5) => { + for (let si = 0; si < skPts.length; si++) { + const sp1 = skPts[si] + const sp2 = skPts[(si + 1) % skPts.length] + if ((Math.abs(p1.x - sp1.x) < tolerance && Math.abs(p1.y - sp1.y) < tolerance && + Math.abs(p2.x - sp2.x) < tolerance && Math.abs(p2.y - sp2.y) < tolerance) || + (Math.abs(p1.x - sp2.x) < tolerance && Math.abs(p1.y - sp2.y) < tolerance && + Math.abs(p2.x - sp1.x) < tolerance && Math.abs(p2.y - sp1.y) < tolerance)) { + return true + } + } + return false + } + for (let i = 0; i < polygonPoints.length; i++) { const p1 = polygonPoints[i]; const p2 = polygonPoints[(i + 1) % polygonPoints.length]; + // 확장된 외곽선에 해당하는 edge는 스킵 + if (skPts.length > 0 && isSkeletonOuterEdge(p1, p2)) continue // 지붕 경계선과 교차 확인 및 클리핑 const clippedLine = clipLineToRoofBoundary(p1, p2, roof.lines, roof.moveSelectLine);