This commit is contained in:
ysCha 2025-11-11 18:43:12 +09:00
parent c8727a71fd
commit e3196488c2

View File

@ -505,8 +505,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
const existingLines = new Set(); // 이미 추가된 라인을 추적하기 위한 Set const existingLines = new Set(); // 이미 추가된 라인을 추적하기 위한 Set
skeletonLines.forEach(line => { skeletonLines.forEach(sktLine => {
let { p1, p2, attributes, lineStyle } = line; let { p1, p2, attributes, lineStyle } = sktLine;
// 라인을 고유하게 식별할 수 있는 키 생성 (정규화된 좌표로 정렬하여 비교) // 라인을 고유하게 식별할 수 있는 키 생성 (정규화된 좌표로 정렬하여 비교)
const lineKey = [ const lineKey = [
@ -520,8 +520,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
const direction = getLineDirection( const direction = getLineDirection(
{ x: line.p1.x, y: line.p1.y }, { x: sktLine.p1.x, y: sktLine.p1.y },
{ x: line.p2.x, y: line.p2.y } { x: sktLine.p2.x, y: sktLine.p2.y }
); );
const innerLine = new QLine([p1.x, p1.y, p2.x, p2.y], { const innerLine = new QLine([p1.x, p1.y, p2.x, p2.y], {
@ -529,18 +529,18 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
fontSize: roof.fontSize, fontSize: roof.fontSize,
stroke: lineStyle.color, stroke: lineStyle.color,
strokeWidth: lineStyle.width, strokeWidth: lineStyle.width,
name: (line.attributes.isOuterEdge)?'eaves': attributes.type, name: (sktLine.attributes.isOuterEdge)?'eaves': attributes.type,
attributes: attributes, attributes: attributes,
direction: direction, direction: direction,
isBaseLine: line.attributes.isOuterEdge, isBaseLine: sktLine.attributes.isOuterEdge,
lineName: (line.attributes.isOuterEdge)?'outerLine': attributes.type, lineName: (sktLine.attributes.isOuterEdge)?'outerLine': attributes.type,
selectable:(!line.attributes.isOuterEdge), selectable:(!sktLine.attributes.isOuterEdge),
roofId: roofId, roofId: roofId,
}); });
//skeleton 라인에서 처마선은 삭제 //skeleton 라인에서 처마선은 삭제
if(innerLine.lineName === 'outerLine'){ if(innerLine.lineName === 'outerLine'){
//line은 시계방향이다.p1 -> p2
let idx = 0; let idx = 0;
//const orgWallLine = wall.lines //const orgWallLine = wall.lines
@ -560,12 +560,80 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
if (!lineExists) { if (!lineExists) {
addLines.push(line); addLines.push(sktLine);
console.log("addLines:::"+addLines)
let p1Line = findClosestRoofLine(p1, roof.lines) let p1Line = findClosestRoofLine(p1, roof.lines)
let p2Line = findClosestRoofLine(p2, roof.lines) let p2Line = findClosestRoofLine(p2, roof.lines)
let p1wallLine = findClosestRoofLine(p1, wall.lines)
let p2wallLine = findClosestRoofLine(p2, wall.lines)
console.log("p1LineV",p1Line)
console.log("p2LineV",p2Line)
console.log("p1wallLineV",p1wallLine)
console.log("p2wallLineV",p2wallLine)
//외벽선과 접점이 없으면
if(p1Line.distance > 0 && p2Line.distance > 0) {
}
if(p1Line.distance === 0 && p2Line.distance === 0) {
return
}
console.log("p1Line.line.startPoint.x:::::",p1Line.line.startPoint)
console.log("p1Line.line.endPoint.x:::::",p1Line.line.endPoint)
console.log("p2Line.line.startPoint.x:::::",p2Line.line.startPoint)
console.log("p2Line.line.endPoint.x:::::",p2Line.line.endPoint)
console.log("p1,p2:::::",p1, p2)
if(isSamePoint(p1, p1Line.line.startPoint) || isSamePoint(p1, p1Line.line.endPoint)) {
p1.y = p2wallLine.line.endPoint.y
return
}
if(isSamePoint(p2, p2Line.line.startPoint) || isSamePoint(p2, p2Line.line.endPoint)) {
p2.y = p1wallLine.line.endPoint.y
return
}
if(p1Line.distance > 0 && p2Line.distance === 0 ){
console.log("수평이면 수평을 연장")
// p1.x = p1Line.line.endPoint.x
// p1.y = p1Line.line.endPoint.y
// p2.x = p1wallLine.line.endPoint.y
// p2.y =
}
if(p1Line.distance === 0 && p2Line.distance > 0 ) {
console.log("수직이면 수평을 연장")
// p1.x = p2Line.line.endPoint.x
// p1.y = p2Line.line.endPoint.y
// p2.x = p1wallLine.line.endPoint.x
// p2.y = p1.y
}
const linesAtP1 = roof.lines.filter(roofLines => {
console.log(roofLines.startPoint, roofLines.endPoint);
console.log(isSamePoint(roofLines.startPoint, p1))
console.log(isSamePoint(roofLines.endPoint, p1))
return isSamePoint(roofLines.startPoint, p1) || isSamePoint(roofLines.endPoint, p1);
});
const linesAtP2 = roof.lines.filter(roofLines => {
console.log(roofLines.startPoint, roofLines.endPoint);
console.log(isSamePoint(roofLines.startPoint, p2))
console.log(isSamePoint(roofLines.endPoint, p2))
return isSamePoint(roofLines.startPoint, p2) || isSamePoint(roofLines.endPoint, p2);
});
// if(p2Line.distance > p1Line.distance){ // if(p2Line.distance > p1Line.distance){
// p1Line = p2Line; // p1Line = p2Line;
// p2Line = p1Line; // p2Line = p1Line;
@ -583,6 +651,29 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
// p2.y = p2Line.line.endPoint.y // p2.y = p2Line.line.endPoint.y
// } // }
const lineId = `${p1.x},${p1.y}-${p2.x},${p2.y}`;
const newLine2 = new QLine(
[p1.x, p1.y, p2.x, p2.y],
{
parentId : roof.id,
fontSize : roof.fontSize,
stroke : 'yellow',
strokeWidth: lineStyle.width,
name : (sktLine.attributes.isOuterEdge) ? 'eaves' : attributes.type,
attributes : attributes,
direction : direction,
isBaseLine : sktLine.attributes.isOuterEdge,
lineName : (sktLine.attributes.isOuterEdge) ? 'outerLine' : attributes.type,
selectable : (!sktLine.attributes.isOuterEdge),
roofId : roofId,
lineId: lineId
}
);
canvas.add(newLine2);
/*
console.log("그리는 선::::",p1,p2) console.log("그리는 선::::",p1,p2)
console.log("그리는 선::::",p1Line,p2Line) console.log("그리는 선::::",p1Line,p2Line)
@ -624,14 +715,22 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
if(yMatch){ if(yMatch){
p1.x = p1Line.intersectionPoint.x; p1.x = p1Line.intersectionPoint.x;
p1.y = p1Line.intersectionPoint.y; p1.y = p1Line.intersectionPoint.y;
p2.x = p1Line.intersectionPoint.x; p2.x = p1.x;
//p2.y = p2.y p2.y = p1wallLine.line.startPoint.y;
console.log("p1LineV",p1Line)
console.log("p2LineV",p2Line)
console.log("p1wallLineV",p1wallLine)
console.log("p2wallLineV",p2wallLine)
} }
if(xMatch){ if(xMatch){
p1.x = p2Line.intersectionPoint.x; p1.x = p2Line.intersectionPoint.x;
p1.y = p2Line.intersectionPoint.y; p1.y = p2Line.intersectionPoint.y;
//p2.x = p2.x p2.x = p2wallLine.line.endPoint.x;
p2.y = p2Line.intersectionPoint.y; p2.y = p1.y;
console.log("p1LineH",p1Line)
console.log("p2LineH",p2Line)
console.log("p1wallLineH",p1wallLine)
console.log("p2wallLineH",p2wallLine)
} }
@ -640,31 +739,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
console.log("New p1:", p1); console.log("New p1:", p1);
console.log("New p2:", p2); console.log("New p2:", p2);
if( !xMatch && !yMatch) { if( !xMatch && !yMatch) {
const lineId = `${p1.x},${p1.y}-${p2.x},${p2.y}`; //그림
}
const newLine2 = new QLine(
[p1.x, p1.y, p2.x, p2.y],
{
parentId : roof.id,
fontSize : roof.fontSize,
stroke : 'red',
strokeWidth: lineStyle.width,
name : (line.attributes.isOuterEdge) ? 'eaves' : attributes.type,
attributes : attributes,
direction : direction,
isBaseLine : line.attributes.isOuterEdge,
lineName : (line.attributes.isOuterEdge) ? 'outerLine' : attributes.type,
selectable : (!line.attributes.isOuterEdge),
roofId : roofId,
lineId: lineId
}
);
canvas.add(newLine2);
}
*/
} }