[1514]sk수정2
This commit is contained in:
parent
8f5b2c3730
commit
4c248f5766
@ -416,9 +416,13 @@ export const skeletonBuilder = (roofId, canvas, textMode) => {
|
||||
const edx = ep.x - sp.x, edy = ep.y - sp.y
|
||||
const len = Math.hypot(edx, edy)
|
||||
if (len === 0) return { sp: { ...sp }, ep: { ...ep } }
|
||||
|
||||
// 수직 벡터 계산 (항상 바깥 방향)
|
||||
let nx = -edy / len, ny = edx / len
|
||||
const mid = { x: (sp.x + ep.x) / 2, y: (sp.y + ep.y) / 2 }
|
||||
if (nx * (centroid.x - mid.x) + ny * (centroid.y - mid.y) > 0) { nx = -nx; ny = -ny }
|
||||
|
||||
// 방향 결정 로직 제거 - 항상 바깥으로 확장
|
||||
// if (nx * (centroid.x - mid.x) + ny * (centroid.y - mid.y) > 0) { nx = -nx; ny = -ny }
|
||||
|
||||
return {
|
||||
sp: { x: sp.x + nx * offset, y: sp.y + ny * offset },
|
||||
ep: { x: ep.x + nx * offset, y: ep.y + ny * offset }
|
||||
@ -446,40 +450,40 @@ export const skeletonBuilder = (roofId, canvas, textMode) => {
|
||||
})
|
||||
|
||||
// 중복 좌표 및 일직선 위의 불필요한 점 제거 (L자 확장 시 사각형으로 단순화)
|
||||
const simplifyPolygon = (pts) => {
|
||||
let result = [...pts]
|
||||
// const simplifyPolygon = (pts) => {
|
||||
// let result = [...pts]
|
||||
|
||||
// L자형 보호를 위해 최소 4개 점 유지
|
||||
if (result.length <= 4) return result
|
||||
// // 복잡한 형태 보호를 위해 최소 6개 점 유지
|
||||
// if (result.length <= 6) return result
|
||||
|
||||
let changed = true
|
||||
while (changed) {
|
||||
changed = false
|
||||
for (let i = result.length - 1; i >= 0; i--) {
|
||||
const next = result[(i + 1) % result.length]
|
||||
if (Math.abs(result[i].x - next.x) < 1.0 && Math.abs(result[i].y - next.y) < 1.0) {
|
||||
result.splice(i, 1)
|
||||
changed = true
|
||||
}
|
||||
}
|
||||
// 최소 4개 점 유지 확인
|
||||
if (result.length <= 4) break
|
||||
// let changed = true
|
||||
// while (changed) {
|
||||
// changed = false
|
||||
// for (let i = result.length - 1; i >= 0; i--) {
|
||||
// const next = result[(i + 1) % result.length]
|
||||
// if (Math.abs(result[i].x - next.x) < 1.0 && Math.abs(result[i].y - next.y) < 1.0) {
|
||||
// result.splice(i, 1)
|
||||
// changed = true
|
||||
// }
|
||||
// }
|
||||
// // 최소 6개 점 유지 확인
|
||||
// if (result.length <= 6) break
|
||||
|
||||
for (let i = result.length - 1; i >= 0 && result.length > 3; i--) {
|
||||
const prev = result[(i - 1 + result.length) % result.length]
|
||||
const curr = result[i]
|
||||
const next = result[(i + 1) % result.length]
|
||||
const cross = (curr.x - prev.x) * (next.y - prev.y) - (curr.y - prev.y) * (next.x - prev.x)
|
||||
// 임계값 증가로 과도한 단순화 방지
|
||||
if (Math.abs(cross) < 20) {
|
||||
result.splice(i, 1)
|
||||
changed = true
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
changRoofLinePoints = simplifyPolygon(changRoofLinePoints)
|
||||
// for (let i = result.length - 1; i >= 0 && result.length > 3; i--) {
|
||||
// const prev = result[(i - 1 + result.length) % result.length]
|
||||
// const curr = result[i]
|
||||
// const next = result[(i + 1) % result.length]
|
||||
// const cross = (curr.x - prev.x) * (next.y - prev.y) - (curr.y - prev.y) * (next.x - prev.x)
|
||||
// // 복잡한 형태 보호를 위해 임계값 대폭 증가
|
||||
// if (Math.abs(cross) < 50) {
|
||||
// result.splice(i, 1)
|
||||
// changed = true
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return result
|
||||
// }
|
||||
// changRoofLinePoints = simplifyPolygon(changRoofLinePoints)
|
||||
|
||||
let roofLineContactPoints = [...changRoofLinePoints]
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user