Merge pull request '[2272] 한쪽흐름 처마 offset 반전 수정 — margin/padding 판정을 면적비교로 교체' (#889) from dev into dev-deploy
Reviewed-on: #889
This commit is contained in:
commit
ddc5bd050a
@ -1921,16 +1921,19 @@ 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 의 point가 기준 polygon의 밖에 있는지 판단한다.
|
||||
const allPointsOutside = result.every((point) => !originPolygon.inPolygon(point))
|
||||
// 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)
|
||||
|
||||
if (allPointsOutside) {
|
||||
if (isMarginOutside) {
|
||||
offsetPolygon = createMarginPolygon(polygon, wall.lines).vertices
|
||||
} else {
|
||||
offsetPolygon = createPaddingPolygon(polygon, wall.lines).vertices
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user