임시 완성1

This commit is contained in:
ysCha 2025-11-24 17:20:27 +09:00
parent 77c0fe7edc
commit d6ff90090f

View File

@ -623,30 +623,36 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
canvas.renderAll()
})
function sortCurrentRoofLines(lines) {
function sortCurrentRoofLines(lines) {
return [...lines].sort((a, b) => {
// 시작점과 끝점 중 더 작은 좌표를 기준으로 정렬
const getMinPoint = (line) => {
const x1 = line.x1 ?? line.get('x1')
const y1 = line.y1 ?? line.get('y1')
const x2 = line.x2 ?? line.get('x2')
const y2 = line.y2 ?? line.get('y2')
// x 좌표가 작은 점을 선택, 같으면 y 좌표가 작은 점
if (x1 < x2 || (x1 === x2 && y1 < y2)) {
return { x: x1, y: y1 }
// Get all coordinates in a consistent order
const getCoords = (line) => {
const x1 = line.x1 ?? line.get('x1');
const y1 = line.y1 ?? line.get('y1');
const x2 = line.x2 ?? line.get('x2');
const y2 = line.y2 ?? line.get('y2');
// Sort points left-to-right, then top-to-bottom
return x1 < x2 || (x1 === x2 && y1 < y2)
? [x1, y1, x2, y2]
: [x2, y2, x1, y1];
};
const aCoords = getCoords(a);
const bCoords = getCoords(b);
// Compare each coordinate in order
for (let i = 0; i < 4; i++) {
if (Math.abs(aCoords[i] - bCoords[i]) > 0.1) {
return aCoords[i] - bCoords[i];
}
return { x: x2, y: y2 }
}
const aPoint = getMinPoint(a)
const bPoint = getMinPoint(b)
if (aPoint.x !== bPoint.x) return aPoint.x - bPoint.x
return aPoint.y - bPoint.y
})
return 0;
});
}
// function sortCurrentRoofLines(lines) {
// return [...lines].sort((a, b) => {
// const aX = a.x1 ?? a.get('x1')
@ -689,8 +695,9 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
return false
}
const movedStart = Math.abs(moveLine.x1 - origin.x1) > EPSILON || Math.abs(moveLine.y1 - origin.y1) > EPSILON
const movedEnd = Math.abs(moveLine.x2 - origin.x2) > EPSILON || Math.abs(moveLine.y2 - origin.y2) > EPSILON
const movedStart = Math.abs(moveLine.x1 - wallLine.x1) > EPSILON || Math.abs(moveLine.y1 - origin.y1) > EPSILON
const movedEnd = Math.abs(moveLine.x2 - wallLine.x2) > EPSILON || Math.abs(moveLine.y2 - origin.y2) > EPSILON
const fullyMoved = movedStart && movedEnd
@ -722,23 +729,38 @@ let newPEnd //= {x:movedLines.x2, y:movedLines.y2}
newPEnd.y = wallBaseLine.y2;
} else if(wallBaseLine.y1 <= newPStart.y && newPStart.y <= wallBaseLine.y2 && wallBaseLine.y2 <= newPEnd.y){
newPStart.y = wallBaseLine.y1;
} else if(wallBaseLine.y2 <= newPEnd.y && newPStart.y <= wallBaseLine.y1 ) { // 위가운데
newPEnd.y = wallBaseLine.y2;
newPStart.y = wallBaseLine.y1;
} else if(wallBaseLine.y1 <= newPStart.y && newPEnd.y <= wallBaseLine.y2 ) { // 아래가운데
newPEnd.y = wallBaseLine.y1;
newPStart.y = wallBaseLine.y2;
}
}else if(getOrientation(roofLine) === 'horizontal') {
if(newPEnd.x <= wallBaseLine.x2 && wallBaseLine.x2 <= newPStart.x && newPStart.x <= wallBaseLine.x1){
if(newPEnd.x <= wallBaseLine.x2 && wallBaseLine.x2 <= newPStart.x && newPStart.x <= wallBaseLine.x1){ //위 왼쪽
newPStart.x = wallBaseLine.x1;
} else if(wallBaseLine.x2 <= newPEnd.x && newPEnd.x <= wallBaseLine.x1 && wallBaseLine.x1 <= newPStart.x){
} else if(wallBaseLine.x2 <= newPEnd.x && newPEnd.x <= wallBaseLine.x1 && wallBaseLine.x1 <= newPStart.x){ //아래오르쪽
newPEnd.x = wallBaseLine.x2;
} else if(newPStart.x <= wallBaseLine.x1 && wallBaseLine.x1 <= newPEnd.x && newPEnd.x <= wallBaseLine.x2){
} else if(newPStart.x <= wallBaseLine.x1 && wallBaseLine.x1 <= newPEnd.x && newPEnd.x <= wallBaseLine.x2){ //위 오른쪽
newPEnd.x = wallBaseLine.x2;
} else if(wallBaseLine.x1 <= newPStart.x && newPStart.x <= wallBaseLine.x2 && wallBaseLine.x2 <= newPEnd.x){
} else if(wallBaseLine.x1 <= newPStart.x && newPStart.x <= wallBaseLine.x2 && wallBaseLine.x2 <= newPEnd.x){ //아래 왼쪽
newPStart.x = wallBaseLine.x1;
} else if(wallBaseLine.x2 <= newPEnd.x && newPStart.x <= wallBaseLine.x1 ) { // 위가운데
newPEnd.x = wallBaseLine.x2;
newPStart.x = wallBaseLine.x1;
} else if(wallBaseLine.x1 <= newPStart.x && newPEnd.x <= wallBaseLine.x2 ) { // 아래가운데
newPEnd.x = wallBaseLine.x1;
newPStart.x = wallBaseLine.x2;
}
}
movedLines.push({ index, newPStart, newPEnd })
@ -850,9 +872,9 @@ console.log("innerLines:::::", innerLines)
console.log("movedLines", movedLines)
// --- 사용 예시 ---
const polygons = findConnectedLines(movedLines, innerLines, canvas, roofId, roof);
console.log("polygon", polygons);
canvas.renderAll
// const polygons = findConnectedLines(movedLines, innerLines, canvas, roofId, roof);
// console.log("polygon", polygons);
// canvas.renderAll
return innerLines;
}
/*