[1449]3.변별 offset 설정 sk 설정
This commit is contained in:
parent
43df05beee
commit
d43d18088a
@ -369,10 +369,10 @@ export const skeletonBuilder = (roofId, canvas, textMode) => {
|
|||||||
|
|
||||||
/** 외벽선 */
|
/** 외벽선 */
|
||||||
const wall = canvas.getObjects().find((object) => object.name === POLYGON_TYPE.WALL && object.attributes.roofId === roofId)
|
const wall = canvas.getObjects().find((object) => object.name === POLYGON_TYPE.WALL && object.attributes.roofId === roofId)
|
||||||
//const baseLines = wall.baseLines.filter((line) => line.attributes.planeSize > 0)
|
const baseLines = wall.baseLines.filter((line) => line.attributes.planeSize > 0)
|
||||||
|
// roof.points 순서와 맞춰야 offset 매핑이 정확함
|
||||||
|
const baseLinePoints = createOrderedBasePoints(roof.points, baseLines)
|
||||||
|
|
||||||
const baseLines = canvas.getObjects().filter((object) => object.name === 'baseLine' && object.parentId === roofId) || []
|
|
||||||
const baseLinePoints = baseLines.map((line) => ({ x: line.left, y: line.top }))
|
|
||||||
|
|
||||||
const outerLines = canvas.getObjects().filter((object) => object.name === 'outerLinePoint') || []
|
const outerLines = canvas.getObjects().filter((object) => object.name === 'outerLinePoint') || []
|
||||||
const outerLinePoints = outerLines.map((line) => ({ x: line.left, y: line.top }))
|
const outerLinePoints = outerLines.map((line) => ({ x: line.left, y: line.top }))
|
||||||
@ -391,16 +391,46 @@ export const skeletonBuilder = (roofId, canvas, textMode) => {
|
|||||||
const moveFlowLine = roof.moveFlowLine || 0 // Provide a default value
|
const moveFlowLine = roof.moveFlowLine || 0 // Provide a default value
|
||||||
const moveUpDown = roof.moveUpDown || 0 // Provide a default value
|
const moveUpDown = roof.moveUpDown || 0 // Provide a default value
|
||||||
|
|
||||||
let points = roof.points
|
const isClosedPolygon = (points) =>
|
||||||
|
points.length > 1 && isSamePoint(points[0], points[points.length - 1])
|
||||||
|
|
||||||
|
const roofLinePoints = isClosedPolygon(roof.points) ? roof.points.slice(0, -1) : roof.points
|
||||||
|
const orderedBaseLinePoints = isClosedPolygon(baseLinePoints) ? baseLinePoints.slice(0, -1) : baseLinePoints
|
||||||
|
|
||||||
|
console.log('roofLinePoints:', roofLinePoints)
|
||||||
|
console.log('baseLinePoints:', orderedBaseLinePoints)
|
||||||
|
|
||||||
|
// baseLinePoint에서 roofLinePoint 방향으로 45도 대각선 확장 후 가장 가까운 접점 계산
|
||||||
|
let roofLineContactPoints = orderedBaseLinePoints.map((point, index) => {
|
||||||
|
const roofPoint = roofLinePoints[index]
|
||||||
|
if (!roofPoint) return point
|
||||||
|
|
||||||
|
const dx = roofPoint.x - point.x
|
||||||
|
const dy = roofPoint.y - point.y
|
||||||
|
const absDx = Math.abs(dx)
|
||||||
|
const absDy = Math.abs(dy)
|
||||||
|
|
||||||
|
// 거리가 0이면 이미 같은 위치
|
||||||
|
if (absDx === 0 && absDy === 0) return point
|
||||||
|
|
||||||
|
const step = Math.min(absDx, absDy)
|
||||||
|
if (step === 0) return point
|
||||||
|
|
||||||
|
const nextX = point.x + Math.sign(dx) * step
|
||||||
|
const nextY = point.y + Math.sign(dy) * step
|
||||||
|
return {
|
||||||
|
x: Number(nextX.toFixed(1)),
|
||||||
|
y: Number(nextY.toFixed(1))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
//마루이동
|
//마루이동
|
||||||
if (moveFlowLine !== 0 || moveUpDown !== 0) {
|
if (moveFlowLine !== 0 || moveUpDown !== 0) {
|
||||||
points = movingLineFromSkeleton(roofId, canvas)
|
roofLineContactPoints = movingLineFromSkeleton(roofId, canvas)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('points:', points)
|
console.log('points:', roofLineContactPoints)
|
||||||
const geoJSONPolygon = toGeoJSON(points)
|
const geoJSONPolygon = toGeoJSON(roofLineContactPoints)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// SkeletonBuilder는 닫히지 않은 폴리곤을 기대하므로 마지막 점 제거
|
// SkeletonBuilder는 닫히지 않은 폴리곤을 기대하므로 마지막 점 제거
|
||||||
@ -436,7 +466,7 @@ export const skeletonBuilder = (roofId, canvas, textMode) => {
|
|||||||
}
|
}
|
||||||
canvas.skeleton = []
|
canvas.skeleton = []
|
||||||
canvas.skeleton = cleanSkeleton
|
canvas.skeleton = cleanSkeleton
|
||||||
canvas.skeleton.lastPoints = points
|
canvas.skeleton.lastPoints = roofLineContactPoints
|
||||||
canvas.set('skeleton', cleanSkeleton)
|
canvas.set('skeleton', cleanSkeleton)
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
|
|
||||||
@ -3656,4 +3686,3 @@ function findInteriorPoint(line, polygonLines) {
|
|||||||
end: endIsValley
|
end: endIsValley
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user