Compare commits

..

No commits in common. "9c11d340d006f54e4542ab857bf134cf283776b4" and "ee568e83acd684c21485b53eff2a08b49760e7e0" have entirely different histories.

View File

@ -1921,19 +1921,16 @@ export function useMode() {
})
const polygon = createRoofPolygon(wall.points)
const originPolygon = new QPolygon(wall.points, { fontSize: 0 })
originPolygon.setViewLengthText(false)
let offsetPolygon
let result = createMarginPolygon(polygon, wall.lines).vertices
// margin polygon 이 기준 polygon 보다 바깥인지(면적 증가) 판단한다.
// [한쪽흐름-OFFSET-FIX 2026-06-05] 기존 점-내부판정(inPolygon)은 offset=0 변(케라바·한쪽흐름)의
// 코너가 원본 경계에 남고 inPolygon 의 경계점 nudge 비대칭으로 골짜기(凹凸) 형상에서 inside 오판 →
// padding 오선택 → 처마 offset 반전. 처마(offset>0)는 항상 바깥으로 나오므로 정답은 면적이 커지는 margin.
// winding·골짜기 수에 무관한 면적 절대값 비교로 판정한다.
const polygonArea = (pts) => Math.abs(pts.reduce((s, p, i) => { const q = pts[(i + 1) % pts.length]; return s + (p.x * q.y - q.x * p.y) }, 0))
const isMarginOutside = polygonArea(result) >= polygonArea(polygon.vertices)
//margin polygon 의 point가 기준 polygon의 밖에 있는지 판단한다.
const allPointsOutside = result.every((point) => !originPolygon.inPolygon(point))
if (isMarginOutside) {
if (allPointsOutside) {
offsetPolygon = createMarginPolygon(polygon, wall.lines).vertices
} else {
offsetPolygon = createPaddingPolygon(polygon, wall.lines).vertices