diff --git a/src/util/skeleton-utils.js b/src/util/skeleton-utils.js index 599345e2..f9a9360d 100644 --- a/src/util/skeleton-utils.js +++ b/src/util/skeleton-utils.js @@ -947,7 +947,12 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { if(Math.abs(wallBaseLine.y1 - wallLine.y1) < 0.1) { if(inLine){ - getAddLine({ y: bStartY, x: wallLine.x2 }, { y: inLine.y2, x: inLine.x2 }, 'pink') + if(inLine.x1 < inLine.x2) { + getAddLine({ y: bStartY, x: wallLine.x2 }, { y: inLine.y2, x: inLine.x2 }, 'pink') + }else{ + getAddLine({ y: inLine.y2, x: inLine.x2 },{ y: bStartY, x: wallLine.x2 }, 'pink') + } + } getAddLine({ y: bStartY, x: wallLine.x2 }, { y: roofLine.y1, x: wallLine.x1 }, 'magenta') getAddLine({ y: newLine.y1, x: newLine.x1 }, { y: newLine.y2, x: wallLine.x2 }, 'Gray') @@ -957,7 +962,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { newPStart.y = Big(newPStart.y).minus(cLineY).toNumber(); const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) if(inLine){ - getAddLine({ y: newPStart.y, x: newPStart.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + if(inLine.x1 < inLine.x2) { + getAddLine({ y: newPStart.y, x: newPStart.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1},{ y: newPStart.y, x: newPStart.x }, 'purple') + } }else { newPStart.y = wallLine.y1; } @@ -980,7 +989,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { if(Math.abs(wallBaseLine.y2 - wallLine.y2) < 0.1) { if(inLine){ - getAddLine({ y: bStartY, x: wallLine.x1 }, { y: inLine.y2, x: inLine.x2 }, 'pink') + if(inLine.x1 < inLine.x2) { + getAddLine({ y: bStartY, x: wallLine.x1 }, { y: inLine.y2, x: inLine.x2 }, 'pink') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 }, { y: bStartY, x: wallLine.x1 }, 'pink') + } } getAddLine({ y: bStartY, x: wallLine.x1 }, { y: roofLine.y2, x: wallLine.x2 }, 'magenta') getAddLine({ y: newLine.y2, x: newLine.x2 }, { y: newLine.y1, x: wallLine.x1 }, 'Gray') @@ -990,14 +1003,18 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { newPEnd.y = Big(newPEnd.y).plus(cLineY).toNumber(); const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) if(inLine){ - getAddLine({ y: newPEnd.y, x: newPEnd.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + if(inLine.x1 < inLine.x2) { + getAddLine({ y: newPEnd.y, x: newPEnd.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 },{ y: newPEnd.y, x: newPEnd.x }, 'purple') + } }else { newPEnd.y = wallLine.y2 } } - } + } }else if(condition === 'right_in') { if (isStartEnd.start ) { @@ -1065,7 +1082,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { if(Math.abs(wallBaseLine.y1 - wallLine.y1) < 0.1) { if(inLine){ - getAddLine({ y: bStartY, x: wallLine.x2 }, { y: inLine.y2, x: inLine.x2 }, 'pink') + if(inLine.x2 < inLine.x1) { + getAddLine({ y: bStartY, x: wallLine.x2 }, { y: inLine.y2, x: inLine.x2 }, 'pink') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 },{ y: bStartY, x: wallLine.x2 }, 'pink') + } } getAddLine({ y: bStartY, x: wallLine.x2 }, { y: roofLine.y1, x: wallLine.x1 }, 'magenta') getAddLine({ y: newLine.y1, x: newLine.x1 }, { y: newLine.y2, x: wallLine.x2 }, 'Gray') @@ -1075,7 +1096,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { newPStart.y = Big(newPStart.y).plus(cLineY).toNumber(); const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) if(inLine){ - getAddLine({ y: newPStart.y, x: newPStart.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + if(inLine.x2 < inLine.x1 ) { + getAddLine({ y: newPStart.y, x: newPStart.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 },{ y: newPStart.y, x: newPStart.x }, 'purple') + } }else { newPStart.y = wallLine.y1; } @@ -1096,7 +1121,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { let idx = (roofLines.length < index + 1)?0:index const newLine = roofLines[idx+1]; if(inLine){ - getAddLine({ y: bStartY, x: wallLine.x1 }, { y: inLine.y2, x: inLine.x2 }, 'pink') + if(inLine.x2 < inLine.x1) { + getAddLine({ y: bStartY, x: wallLine.x1 }, { y: inLine.y2, x: inLine.x2 }, 'pink') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 },{ y: bStartY, x: wallLine.x1 }, 'pink') + } } if(Math.abs(wallBaseLine.y2 - wallLine.y2) < 0.1) { getAddLine({ y: bStartY, x: wallLine.x1 }, { y: roofLine.y2, x: wallLine.x2 }, 'magenta') @@ -1107,7 +1136,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { newPEnd.y = Big(newPEnd.y).minus(cLineY).toNumber(); const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) if(inLine){ - getAddLine({ y: newPEnd.y, x: newPEnd.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + if(inLine.x2 < inLine.x1) { + getAddLine({ y: newPEnd.y, x: newPEnd.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 }, { y: newPEnd.y, x: newPEnd.x }, 'purple') + } }else { newPEnd.y = wallLine.y2; } @@ -1205,7 +1238,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { if(Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) { if(inLine){ - getAddLine({ x: bStartX, y: wallLine.y1 }, { x: inLine.x2, y: inLine.y2 }, 'pink') + if(inLine.y2 > inLine.y1 ) { + getAddLine({ x: bStartX, y: wallLine.y1 }, { x: inLine.x2, y: inLine.y2 }, 'pink') + }else{ + getAddLine({ x: inLine.x1, y: inLine.y1 }, { x: bStartX, y: wallLine.y1 }, 'pink') + } } getAddLine({ x: bStartX, y: wallLine.y1 }, { x: roofLine.x1, y: wallLine.y1 }, 'magenta') getAddLine({ x: newLine.x1, y: newLine.y1 }, { x: newLine.x1, y: wallLine.y1 }, 'Gray') @@ -1215,7 +1252,12 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { newPStart.x = Big(newPStart.x).plus(cLineX).toNumber(); const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) if(inLine){ - getAddLine({ y: newPStart.y, x: newPStart.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + if(inLine.y2 > inLine.y1 ) { + getAddLine({ y: newPStart.y, x: newPStart.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 }, { y: newPStart.y, x: newPStart.x } , 'purple') + } + }else { newPStart.x = wallLine.x1; } @@ -1236,7 +1278,12 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { if(Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) { if(inLine){ - getAddLine({ x: bStartX, y: wallLine.y1 }, { x: inLine.x2, y: inLine.y2 }, 'pink') + if(inLine.y2 > inLine.y1 ){ + getAddLine({ x: bStartX, y: wallLine.y1 }, { x: inLine.x2, y: inLine.y2 }, 'pink') + }else{ + getAddLine({ x: inLine.x1, y: inLine.y1 },{ x: bStartX, y: wallLine.y1 }, 'pink') + } + } getAddLine({ x: bStartX, y: wallLine.y1 }, { x: roofLine.x2, y: wallLine.y2 }, 'magenta') getAddLine({ x: newLine.x2, y: newLine.y2 }, { x: newLine.x1, y: wallLine.y1 }, 'Gray') @@ -1246,7 +1293,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { newPEnd.x = Big(newPEnd.x).minus(cLineX).toNumber(); const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) if(inLine){ - getAddLine({ y: newPEnd.y, x: newPEnd.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + if(inLine.y2 > inLine.y1 ) { + getAddLine({ y: newPEnd.y, x: newPEnd.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 },{ y: newPEnd.y, x: newPEnd.x }, 'purple') + } }else { newPEnd.x = wallLine.x2; } @@ -1315,17 +1366,25 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { if(Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) { if(inLine){ - getAddLine({ x: bStartX, y: wallLine.y1 }, { x: inLine.x2, y: inLine.y2 }, 'pink') + if(inLine.y2 < inLine.y1 ) { + getAddLine({ x: bStartX, y: wallLine.y1 }, { x: inLine.x2, y: inLine.y2 }, 'pink') + }else{ + getAddLine({ x: inLine.x1, y: inLine.y1 },{ x: bStartX, y: wallLine.y1 }, 'pink') + } } getAddLine({ x: bStartX, y: wallLine.y1 }, { x: roofLine.x1, y: wallLine.y1 }, 'magenta') getAddLine({ x: newLine.x1, y: newLine.y1 }, { x: newLine.x1, y: wallLine.y1 }, 'Gray') - findPoints.push({ x: aStartX, y: newPEnd.y }); + findPoints.push({ x: aStartX, y: newPEnd.y, position: 'bottom_out_start' }); }else{ const cLineX = Big(wallBaseLine.y1).minus(wallLine.y1).abs().toNumber() newPStart.x = Big(newPStart.x).minus(cLineX).toNumber(); const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) if(inLine){ - getAddLine({ y: newPStart.y, x: newPStart.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + if(inLine.y2 < inLine.y1 ) { + getAddLine({ y: newPStart.y, x: newPStart.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 }, { y: newPStart.y, x: newPStart.x }, 'purple') + } }else{ newPStart.x = wallLine.x1; } @@ -1347,7 +1406,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { if(Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) { if(inLine){ - getAddLine({ x: bStartX, y: wallLine.y1 }, { x: inLine.x2, y: inLine.y2 }, 'pink') + if(inLine.y2 < inLine.y1 ) { + getAddLine({ x: bStartX, y: wallLine.y1 }, { x: inLine.x2, y: inLine.y2 }, 'pink') + }else{ + getAddLine({ x: inLine.x2, y: inLine.y2 }, { x: bStartX, y: wallLine.y1 }, 'pink') + } } getAddLine({ x: bStartX, y: wallLine.y1 }, { x: roofLine.x2, y: wallLine.y2 }, 'magenta') getAddLine({ x: newLine.x2, y: newLine.y2 }, { x: newLine.x1, y: wallLine.y1 }, 'Gray') @@ -1357,7 +1420,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => { newPEnd.x = Big(newPEnd.x).plus(cLineX).toNumber(); const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) if(inLine){ - getAddLine({ y: newPEnd.y, x: newPEnd.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + if(inLine.y2 < inLine.y1 ) { + getAddLine({ y: newPEnd.y, x: newPEnd.x }, { y: inLine.y2, x: inLine.x2 }, 'purple') + }else{ + getAddLine({ y: inLine.y1, x: inLine.x1 },{ y: newPEnd.y, x: newPEnd.x }, 'purple') + } }else{ newPEnd.x = wallLine.x2; } @@ -3064,6 +3131,38 @@ function updateAndAddLine(innerLines, targetPoint) { if(foundLine.x2 <= foundLine.x1){ isUpdatingStart = true; } + }else if(targetPoint.position === "top_out_start"){ + if(foundLine.y2 >= foundLine.y1){ + isUpdatingStart = true; + } + }else if(targetPoint.position === "top_out_end"){ + if(foundLine.y2 > foundLine.y1){ + isUpdatingStart = true; + } + }else if(targetPoint.position === "bottom_out_start"){ + if(foundLine.y2 <= foundLine.y1){ + isUpdatingStart = true; + } + }else if(targetPoint.position === "bottom_out_end"){ + if(foundLine.y2 <= foundLine.y1){ + isUpdatingStart = true; + } + }else if(targetPoint.position === "left_out_start"){ + if(foundLine.x2 >= foundLine.x1){ + isUpdatingStart = true; + } + }else if(targetPoint.position === "left_out_end"){ + if(foundLine.x2 >= foundLine.x1){ + isUpdatingStart = true; + } + }else if(targetPoint.position === "right_out_start"){ + if(foundLine.x2 <= foundLine.x1){ + isUpdatingStart = true; + } + }else if(targetPoint.position === "right_out_end"){ + if(foundLine.x2 <= foundLine.x1){ + isUpdatingStart = true; + } } const updatedLine = {