dev #931
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user