dev #930

Merged
ysCha merged 95 commits from dev into dev-deploy 2026-06-23 18:00:25 +09:00
Showing only changes of commit d5b2426596 - Show all commits

View File

@ -1598,6 +1598,29 @@ export const drawGableRoof = (roofId, canvas, textMode) => {
} else if (Math.abs(normalizedAngle - 90) <= tolerance) {
isVertical = true
}
// [GABLE-H8 2026-06-23] 노치 결합면에서 직교정렬이 만든 same-direction roofLine 이 기존 마루
// 구간 안에 완전히 포함되면(= 마루 위 중복선, isAlready 는 끝점 정확매칭이라 못 거름) 그리지 않는다.
// 마루가 이미 그 경계를 닫고 있으므로 중복 roofLine(H-8 과길이 원인)만 제거. cross-direction(hip)·
// 부분겹침은 건드리지 않아 정상 A타입 회귀 없음.
const _segSameDir = (analyze.isHorizontal && isHorizontal) || (analyze.isVertical && isVertical)
if (_segSameDir) {
const segV = Math.abs(points[0] - points[2]) < 1
const sMin = segV ? Math.min(points[1], points[3]) : Math.min(points[0], points[2])
const sMax = segV ? Math.max(points[1], points[3]) : Math.max(points[0], points[2])
const coveredByRidge = ridgeLines.find((rg) => {
const rgV = Math.abs(rg.x1 - rg.x2) < 1
if (rgV !== segV) return false
if (segV) {
if (Math.abs(rg.x1 - points[0]) >= 1) return false
return Math.min(rg.y1, rg.y2) - 1 <= sMin && sMax <= Math.max(rg.y1, rg.y2) + 1
}
if (Math.abs(rg.y1 - points[1]) >= 1) return false
return Math.min(rg.x1, rg.x2) - 1 <= sMin && sMax <= Math.max(rg.x1, rg.x2) + 1
})
if (coveredByRidge) {
return true
}
}
if (analyze.isHorizontal) {
//현재라인이 수평선일때
if (isHorizontal) {