직선라인 임시맞춤

This commit is contained in:
ysCha 2026-02-12 14:17:59 +09:00
parent afef45c1c1
commit 168e68d3f0

View File

@ -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);