in/out top left vertical

This commit is contained in:
yscha 2025-12-03 00:22:16 +09:00
parent 61dc458250
commit fe47bbee23

View File

@ -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 }