diff --git a/src/util/skeleton-utils.js b/src/util/skeleton-utils.js index 3102b667..3bf0eaf5 100644 --- a/src/util/skeleton-utils.js +++ b/src/util/skeleton-utils.js @@ -903,21 +903,25 @@ if((roof.moveUpDown??0 > 0) ) { if(isIn){ newPStart.x = wallBaseLine.x1; //추가 수직 - getAddLine({ x: wallBaseLine.x1, y: newPEnd.y }, { x: wallBaseLine.x1, y: wallBaseLine.y1 }, ) + getAddLine({ x: wallBaseLine.x1, y: newPEnd.y }, { x: wallBaseLine.x1, y: wallBaseLine.y1 }) //추가 라인? findPoints.push({ x: wallBaseLine.x1, y: wallBaseLine.y1 }); }else if(isOut) { const moveX = Math.abs(wallLine.y1 - wallBaseLine.y1) const dist = Math.abs(roofLine.y1 - wallLine.y1) - newPStart.x += moveX - wallLine.x1 += moveX - findPoints.push({ x: newPStart.x , y: newPEnd.y}); - - getAddLine({ x: wallLine.x1, y: wallLine.y2 }, { x: roofLine.x1, y: wallLine.y2 }, ) - - - + const aStartX = Math.abs(newPStart.x + moveX) + const bStartX = Math.abs(wallLine.x1 + moveX) + //newPStart.x += moveX + //wallLine.x1 += moveX + findPoints.push({ x: aStartX , y: newPEnd.y}); + const inLine = findLineContainingPoint(innerLines, { x: aStartX , y: newPEnd.y}) + console.log("startLines:::::::", inLine); + getAddLine({ x: bStartX, y: wallLine.y1 },{ x: roofLine.x1, y: wallLine.y1 }) + getAddLine({ x: bStartX, y: wallLine.y2 }, { x: inLine.x2, y: inLine.y2 }, 'pink' ) +const eLineX = Math.abs( bStartX - wallLine.x1) + newPEnd.x += eLineX + newPStart.x = aStartX } @@ -971,14 +975,20 @@ if((roof.moveUpDown??0 > 0) ) { if (getOrientation(roofLine) === 'vertical') { //green 수직 + if(wallLine.y1 <= wallBaseLine.y1 ) isIn = true + if(wallBaseLine.y1 <= wallLine.y1 ) isOut = true + let isCross = false if (Math.abs(currentRoofLine.x2 - roofLine.x1) < 0.1 || Math.abs(currentRoofLine.x1 - roofLine.x2) < 0.1) { isCross = true; } - if(newPStart.y <= wallBaseLine.y1 && wallBaseLine.y1 < wallBaseLine.y2 && wallBaseLine.y2 < newPEnd.y){//가장 왼쪽v - newPStart = { x: roofLine.x1, y: roofLine.y1 } - newPEnd = { x: roofLine.x2, y: (isCross) ? currentRoofLine.y1 : wallBaseLine.y1 } + if(newPStart.y <= wallBaseLine.y1 && wallBaseLine.y1 < wallBaseLine.y2 && wallBaseLine.y2 < newPEnd.y){//in bottom left + if(isIn){ + newPStart = { x: roofLine.x1, y: roofLine.y1 } + newPEnd = { x: roofLine.x2, y: (isCross) ? currentRoofLine.y1 : wallBaseLine.y1 } + } + }else if(newPEnd.y <= wallBaseLine.y2 && wallBaseLine.y2 < wallBaseLine.y1 && wallBaseLine.y1 <= newPStart.y){ //하단 오른쪽v newPStart = { x: roofLine.x1, y: roofLine.y1 } @@ -999,17 +1009,21 @@ if((roof.moveUpDown??0 > 0) ) { newPStart = { x: roofLine.x1, y: roofLine.y1 } newPEnd = { x: roofLine.x2, y: (isCross) ? currentRoofLine.y1 : wallBaseLine.y1 } - }else if(wallBaseLine.y1 <= newPStart.y && newPStart.y <= wallBaseLine.y2 && wallBaseLine.y2 <= newPEnd.y) { // bottom left + }else if(wallBaseLine.y1 <= newPStart.y && newPStart.y <= wallBaseLine.y2 && wallBaseLine.y2 <= newPEnd.y) { // out bottom left //bottom left + if(isIn){ + newPStart = { x: roofLine.x1, y: (isCross) ? currentRoofLine.y1 : wallBaseLine.y1 } + newPEnd = { x: roofLine.x2, y: roofLine.y2 } - newPStart = { x: roofLine.x1, y: (isCross) ? currentRoofLine.y1 : wallBaseLine.y1 } - newPEnd = { x: roofLine.x2, y: roofLine.y2 } + //대각선 라인을 보조라인으로 그린다. + if(isCross){ + getAddLine( { x: wallBaseLine.x1, y: wallBaseLine.y1 }, { x: roofLine.x1, y: currentRoofLine.y1 }, 'yellow') + } + }else if(isOut){ - //대각선 라인을 보조라인으로 그린다. - if(isCross){ - getAddLine( { x: wallBaseLine.x1, y: wallBaseLine.y1 }, { x: roofLine.x1, y: currentRoofLine.y1 }, 'yellow') } + }else if (wallBaseLine.y2 <= newPEnd.y && newPEnd.y <= wallBaseLine.y1 && wallBaseLine.y1 <= newPStart.y) { //하단 왼쪽 newPStart = { x: roofLine.x1, y: (isCross) ? currentRoofLine.y1 : wallBaseLine.y1 }