skt 2025121901

This commit is contained in:
ysCha 2025-12-19 09:19:26 +09:00
parent e93ecf169d
commit 8be85a3f9e

View File

@ -69,9 +69,9 @@ const movingLineFromSkeleton = (roofId, canvas) => {
for (const line of oppositeLine) { for (const line of oppositeLine) {
if (line.position === 'left') { if (line.position === 'left') {
if (isSamePoint(newPoint, line.start)) { if (isSamePoint(newPoint, line.start)) {
newPoint.x = Big(line.start.x).plus(absMove).abs().toNumber(); newPoint.x = Big(line.start.x).plus(absMove).toNumber();
} else if (isSamePoint(newPoint, line.end)) { } else if (isSamePoint(newPoint, line.end)) {
newPoint.x = Big(line.end.x).plus(absMove).abs().toNumber(); newPoint.x = Big(line.end.x).plus(absMove).toNumber();
} }
break; break;
@ -196,7 +196,7 @@ const movingLineFromSkeleton = (roofId, canvas) => {
// } // }
}else if (moveDirection === 'out'){ }else if (moveDirection === 'out'){
if(isSamePoint(roof.basePoints[index], originalStartPoint) || isSamePoint(roof.basePoints[index], originalEndPoint)) { if(isSamePoint(roof.basePoints[index], originalStartPoint) || isSamePoint(roof.basePoints[index], originalEndPoint)) {
point.y = Big(point.y).plus(moveUpDownLength).abs().toNumber(); point.y = Big(point.y).plus(moveUpDownLength).toNumber();
} }
// if (isSamePoint(roof.basePoints[index], originalEndPoint)) { // if (isSamePoint(roof.basePoints[index], originalEndPoint)) {
// point.y = Big(point.y).plus(absMove).toNumber(); // point.y = Big(point.y).plus(absMove).toNumber();
@ -206,31 +206,31 @@ const movingLineFromSkeleton = (roofId, canvas) => {
}else if (position === 'top'){ }else if (position === 'top'){
if(moveDirection === 'in'){ if(moveDirection === 'in'){
if(isSamePoint(roof.basePoints[index], originalStartPoint)) { if(isSamePoint(roof.basePoints[index], originalStartPoint)) {
point.y = Big(point.y).plus(moveUpDownLength).abs().toNumber(); point.y = Big(point.y).plus(moveUpDownLength).toNumber();
} }
if (isSamePoint(roof.basePoints[index], originalEndPoint)) { if (isSamePoint(roof.basePoints[index], originalEndPoint)) {
point.y = Big(point.y).plus(moveUpDownLength).abs().toNumber(); point.y = Big(point.y).plus(moveUpDownLength).toNumber();
} }
}else if(moveDirection === 'out'){ }else if(moveDirection === 'out'){
if(isSamePoint(roof.basePoints[index], originalStartPoint)) { if(isSamePoint(roof.basePoints[index], originalStartPoint)) {
point.y = Big(point.y).minus(moveUpDownLength).abs().toNumber(); point.y = Big(point.y).minus(moveUpDownLength).toNumber();
} }
if (isSamePoint(roof.basePoints[index], originalEndPoint)) { if (isSamePoint(roof.basePoints[index], originalEndPoint)) {
point.y = Big(point.y).minus(moveUpDownLength).abs().toNumber(); point.y = Big(point.y).minus(moveUpDownLength).toNumber();
} }
} }
}else if(position === 'left'){ }else if(position === 'left'){
if(moveDirection === 'in'){ if(moveDirection === 'in'){
if(isSamePoint(roof.basePoints[index], originalStartPoint) || isSamePoint(roof.basePoints[index], originalEndPoint)) { if(isSamePoint(roof.basePoints[index], originalStartPoint) || isSamePoint(roof.basePoints[index], originalEndPoint)) {
point.x = Big(point.x).plus(moveUpDownLength).abs().toNumber(); point.x = Big(point.x).plus(moveUpDownLength).toNumber();
} }
// if (isSamePoint(roof.basePoints[index], originalEndPoint)) { // if (isSamePoint(roof.basePoints[index], originalEndPoint)) {
// point.x = Big(point.x).plus(absMove).toNumber(); // point.x = Big(point.x).plus(absMove).toNumber();
// } // }
}else if(moveDirection === 'out'){ }else if(moveDirection === 'out'){
if(isSamePoint(roof.basePoints[index], originalStartPoint) || isSamePoint(roof.basePoints[index], originalEndPoint)) { if(isSamePoint(roof.basePoints[index], originalStartPoint) || isSamePoint(roof.basePoints[index], originalEndPoint)) {
point.x = Big(point.x).minus(moveUpDownLength).abs().toNumber(); point.x = Big(point.x).minus(moveUpDownLength).toNumber();
} }
// if (isSamePoint(roof.basePoints[index], originalEndPoint)) { // if (isSamePoint(roof.basePoints[index], originalEndPoint)) {
// point.x = Big(point.x).minus(absMove).toNumber(); // point.x = Big(point.x).minus(absMove).toNumber();
@ -243,14 +243,14 @@ const movingLineFromSkeleton = (roofId, canvas) => {
point.x = Big(point.x).minus(moveUpDownLength).toNumber(); point.x = Big(point.x).minus(moveUpDownLength).toNumber();
} }
if (isSamePoint(roof.basePoints[index], originalEndPoint)) { if (isSamePoint(roof.basePoints[index], originalEndPoint)) {
point.x = Big(point.x).minus(moveUpDownLength).abs().toNumber(); point.x = Big(point.x).minus(moveUpDownLength).toNumber();
} }
}else if(moveDirection === 'out'){ }else if(moveDirection === 'out'){
if(isSamePoint(roof.basePoints[index], originalStartPoint)) { if(isSamePoint(roof.basePoints[index], originalStartPoint)) {
point.x = Big(point.x).plus(moveUpDownLength).abs().toNumber(); point.x = Big(point.x).plus(moveUpDownLength).toNumber();
} }
if (isSamePoint(roof.basePoints[index], originalEndPoint)) { if (isSamePoint(roof.basePoints[index], originalEndPoint)) {
point.x = Big(point.x).plus(moveUpDownLength).abs().toNumber(); point.x = Big(point.x).plus(moveUpDownLength).toNumber();
} }
} }
@ -596,9 +596,6 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
}); });
}else{ }else{
@ -608,8 +605,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
canvas.renderAll(); canvas.renderAll();
}); });
//if((roof.moveUpDown??0 > 0) ) { if (Math.abs(roof.moveUpDown ?? 0) > 0 || Math.abs(roof.moveFlowLine ?? 0) > 0) {
const getMoveUpDownLine = () => {
// 같은 라인이 없으므로 새 다각형 라인 생성 // 같은 라인이 없으므로 새 다각형 라인 생성
//라인 편집 //라인 편집
// let i = 0 // let i = 0
@ -657,19 +654,6 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
// function sortCurrentRoofLines(lines) {
// return [...lines].sort((a, b) => {
// const aX = a.x1 ?? a.get('x1')
// const aY = a.y1 ?? a.get('y1')
// const bX = b.x1 ?? b.get('x1')
// const bY = b.y1 ?? b.get('y1')
// if (aX !== bX) return aX - bX
// return aY - bY
// })
// }
// 각 라인 집합 정렬 // 각 라인 집합 정렬
// roofLines의 방향에 맞춰 currentRoofLines의 방향을 조정 // roofLines의 방향에 맞춰 currentRoofLines의 방향을 조정
@ -728,9 +712,9 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
// const sortedWallLines = sortCurrentRoofLines(wall.lines); // const sortedWallLines = sortCurrentRoofLines(wall.lines);
// roofLines의 방향에 맞춰 currentRoofLines 조정 후 정렬 // roofLines의 방향에 맞춰 currentRoofLines 조정 후 정렬
const alignedCurrentRoofLines = alignLineDirection(currentRoofLines, roofLines); const alignedCurrentRoofLines = alignLineDirection(currentRoofLines, roofLines);
const sortedCurrentRoofLines = sortCurrentRoofLines(alignedCurrentRoofLines); const sortedCurrentRoofLines = sortCurrentRoofLines(alignedCurrentRoofLines)
// const sortedRoofLines = sortCurrentRoofLines(roofLines); // const sortedRoofLines = sortCurrentRoofLines(roofLines);
const sortedWallBaseLines = sortCurrentRoofLines(wall.baseLines); const sortedWallBaseLines = sortCurrentRoofLines(wall.baseLines)
// const sortedBaseLines = sortBaseLinesByWallLines(wall.baseLines, wallLines); // const sortedBaseLines = sortBaseLinesByWallLines(wall.baseLines, wallLines);
const sortRoofLines = sortBaseLinesByWallLines(roofLines, wallLines); const sortRoofLines = sortBaseLinesByWallLines(roofLines, wallLines);
@ -744,27 +728,27 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
const movedLines = [] const movedLines = []
// 조건에 맞는 라인들만 필터링 // 조건에 맞는 라인들만 필터링
const validWallLines = wallLines.filter((wallLine, index) => wallLine.idx - 1 === index); const validWallLines = [...wallLines]
.sort((a, b) => a.idx - b.idx)
.filter((wallLine, index) => wallLine.idx - 1 === index);
wallLines.length > 3 && wallLines.forEach((wallLine, index) => {
wallLines.forEach((wallLine, index) => { const originalIndex = wallLines.indexOf(wallLine)
const roofLine = sortRoofLines[originalIndex]
const originalIndex = wallLines.indexOf(wallLine); const currentRoofLine = currentRoofLines[originalIndex]
const roofLine = sortRoofLines[originalIndex]; const moveLine = wall.baseLines[originalIndex]
const currentRoofLine = currentRoofLines[originalIndex]; const wallBaseLine = wall.baseLines[originalIndex]
const moveLine = wall.baseLines[originalIndex];
const wallBaseLine = wall.baseLines[originalIndex];
// const roofLine = sortRoofLines[index]; // const roofLine = sortRoofLines[index];
if(roofLine.attributes.wallLine !== wallLine.id || (roofLine.idx - 1) !== index ){ // if (roofLine.attributes.wallLine !== wallLine.id || (roofLine.idx - 1) !== index) {
console.log("wallLine2::::", wallLine.id) // console.log("wallLine2::::", wallLine.id)
console.log('roofLine:::',roofLine.attributes.wallLine) // console.log('roofLine:::', roofLine.attributes.wallLine)
console.log("w:::",wallLine.startPoint, wallLine.endPoint) // console.log("w:::", wallLine.startPoint, wallLine.endPoint)
console.log("R:::",roofLine.startPoint, roofLine.endPoint) // console.log("R:::", roofLine.startPoint, roofLine.endPoint)
console.log("not matching roofLine", roofLine); // console.log("not matching roofLine", roofLine);
return false // return false
}//roofLines.find(line => line.attributes.wallLineId === wallLine.attributes.wallId); // }//roofLines.find(line => line.attributes.wallLineId === wallLine.attributes.wallId);
// const currentRoofLine = currentRoofLines[index]; // const currentRoofLine = currentRoofLines[index];
// const moveLine = wall.baseLines[index] // const moveLine = wall.baseLines[index]
@ -772,27 +756,27 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
//console.log("wallBaseLine", wallBaseLine); //console.log("wallBaseLine", wallBaseLine);
//roofline 외곽선 설정 //roofline 외곽선 설정
console.log("index::::", index) console.log('index::::', index)
console.log('roofLine:::', roofLine) console.log('roofLine:::', roofLine)
console.log('wallLine', wallLine) console.log('wallLine', wallLine)
console.log('wallBaseLine', wallBaseLine) console.log('wallBaseLine', wallBaseLine)
const origin = moveLine.attributes?.originPoint const origin = moveLine.attributes?.originPoint
if (!origin) return if (!origin) return
if (isSamePoint(moveLine, wallLine)) { console.log('moveLine:', moveLine.x1, moveLine.y1, moveLine.x2, moveLine.y2)
console.log('wallLine:', wallLine.x1, wallLine.y1, wallLine.x2, wallLine.y2)
console.log('isSamePoint result:', isSameLine2(moveLine, wallLine))
return false if (isSameLine2(moveLine, wallLine)) {
return
} }
const movedStart = Math.abs(moveLine.x1 - wallLine.x1) > EPSILON || Math.abs(moveLine.y1 - origin.y1) > 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 movedEnd = Math.abs(moveLine.x2 - wallLine.x2) > EPSILON || Math.abs(moveLine.y2 - origin.y2) > EPSILON
const fullyMoved = movedStart && movedEnd const fullyMoved = movedStart && movedEnd
//반시계 방향 //반시계 방향
let newPStart //= {x:roofLine.x1, y:roofLine.y1} let newPStart //= {x:roofLine.x1, y:roofLine.y1}
let newPEnd //= {x:movedLines.x2, y:movedLines.y2} let newPEnd //= {x:movedLines.x2, y:movedLines.y2}
@ -808,22 +792,25 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
const line = new QLine([p1.x, p1.y, p2.x, p2.y], { const line = new QLine([p1.x, p1.y, p2.x, p2.y], {
parentId: roof.id, parentId: roof.id,
fontSize: roof.fontSize, fontSize: roof.fontSize,
stroke : '#3FBAE6', stroke: 'black',
strokeWidth: 4, strokeWidth: 4,
name: 'eaveHelpLine', name: 'eaveHelpLine',
lineName: 'eaveHelpLine', lineName: 'eaveHelpLine',
selectable : true,
visible: true, visible: true,
roofId: roofId, roofId: roofId,
selectable: true,
hoverCursor: 'pointer',
attributes: { attributes: {
type: 'eaveHelpLine', type: 'eaveHelpLine',
isStart: true, isStart: true,
pitch: wallLine.attributes.pitch, pitch: wallLine.attributes.pitch,
} },
}); })
//coordinateText(line)
coordinateText(line)
canvas.add(line) canvas.add(line)
canvas.renderAll(); line.bringToFront()
canvas.renderAll()
return line return line
} }
@ -832,9 +819,7 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
newPStart = { x: roofLine.x1, y: roofLine.y1 } newPStart = { x: roofLine.x1, y: roofLine.y1 }
newPEnd = { x: roofLine.x2, y: roofLine.y2 } newPEnd = { x: roofLine.x2, y: roofLine.y2 }
const getInnerLines = (lines, point) => { const getInnerLines = (lines, point) => {}
}
let isIn = false let isIn = false
let isOut = false let isOut = false
@ -845,34 +830,39 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
const mLine = getSelectLinePosition(wall, wallBaseLine) const mLine = getSelectLinePosition(wall, wallBaseLine)
if (getOrientation(roofLine) === 'vertical') { if (getOrientation(roofLine) === 'vertical') {
if (['left', 'right'].includes(mLine.position)) { if (['left', 'right'].includes(mLine.position)) {
if (Math.abs(wallLine.x1 - wallBaseLine.x1) < 0.1 || Math.abs(wallLine.x2 - wallBaseLine.x2) < 0.1) { if (Math.abs(wallLine.x1 - wallBaseLine.x1) < 0.1 || Math.abs(wallLine.x2 - wallBaseLine.x2) < 0.1) {
return false return false
} }
const positionType = const isLeftPosition = mLine.position === 'left'
(mLine.position === 'left' && wallLine.x1 < wallBaseLine.x1) || const isRightPosition = mLine.position === 'right'
(mLine.position === 'right' && wallLine.x1 > wallBaseLine.x1) const isInPosition =
? 'in' : 'out'; (isLeftPosition && wallLine.x1 < wallBaseLine.x1) ||
const condition = `${mLine.position}_${positionType}`; (isRightPosition && wallLine.x1 > wallBaseLine.x1) ||
(isLeftPosition && wallLine.x2 < wallBaseLine.x2) ||
(isRightPosition && wallLine.x2 > wallBaseLine.x2)
const positionType = isInPosition ? 'in' : 'out'
const condition = `${mLine.position}_${positionType}`
let isStartEnd = findInteriorPoint(wallBaseLine, sortedBaseLines) let isStartEnd = findInteriorPoint(wallBaseLine, sortedBaseLines)
let sPoint, ePoint; let sPoint, ePoint
if (condition === 'left_in') { if (condition === 'left_in') {
isIn = true isIn = true
if (isStartEnd.start) { if (isStartEnd.start) {
newPEnd.y = roofLine.y2; newPEnd.y = roofLine.y2
newPEnd.x = roofLine.x2; newPEnd.x = roofLine.x2
const moveDist = Big(wallBaseLine.x1).minus(wallLine.x1).abs().toNumber() const moveDist = Big(wallBaseLine.x1).minus(wallLine.x1).abs().toNumber()
ePoint = {x: wallBaseLine.x1, y: wallBaseLine.y1}; ePoint = { x: wallBaseLine.x1, y: wallBaseLine.y1 }
newPStart.y = wallBaseLine.y1 newPStart.y = wallBaseLine.y1
findPoints.push({ x: ePoint.x, y: ePoint.y, position: 'left_in_start' }); findPoints.push({ x: ePoint.x, y: ePoint.y, position: 'left_in_start' })
const newPointX = Big(roofLine.x1).plus(moveDist).abs().toNumber() const newPointX = Big(roofLine.x1).plus(moveDist).abs().toNumber()
const pDist = Big(wallLine.x1).minus(roofLine.x1).abs().toNumber() const pDist = Big(wallLine.x1).minus(roofLine.x1).toNumber()
const pLineY = Big(roofLine.y1).minus(0).abs().toNumber() const pLineY = Big(roofLine.y1).minus(0).abs().toNumber()
let idx = (0 > index - 1)?roofLines.length:index let idx = 0 > index - 1 ? roofLines.length : index
const pLineX = roofLines[idx - 1].x1 const pLineX = roofLines[idx - 1].x1
getAddLine({ x: newPStart.x, y: newPStart.y }, { x: ePoint.x, y: ePoint.y }, 'blue') getAddLine({ x: newPStart.x, y: newPStart.y }, { x: ePoint.x, y: ePoint.y }, 'blue')
@ -885,18 +875,18 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
if (isStartEnd.end) { if (isStartEnd.end) {
newPStart.y = roofLine.y1; newPStart.y = roofLine.y1
newPStart.x = roofLine.x1; newPStart.x = roofLine.x1
const moveDist = Big(wallBaseLine.x2).minus(wallLine.x2).abs().toNumber() const moveDist = Big(wallBaseLine.x2).minus(wallLine.x2).abs().toNumber()
ePoint = {x: wallBaseLine.x2, y: wallBaseLine.y2}; ePoint = { x: wallBaseLine.x2, y: wallBaseLine.y2 }
newPEnd.y = wallBaseLine.y2 newPEnd.y = wallBaseLine.y2
findPoints.push({ x: ePoint.x, y: ePoint.y, position: 'left_in_end' }); findPoints.push({ x: ePoint.x, y: ePoint.y, position: 'left_in_end' })
const newPointX = Big(roofLine.x1).plus(moveDist).abs().toNumber() const newPointX = Big(roofLine.x1).plus(moveDist).toNumber()
const pDist = Big(wallLine.x1).minus(roofLine.x1).abs().toNumber() const pDist = Big(wallLine.x1).minus(roofLine.x1).abs().toNumber()
const pLineY = Big(roofLine.y2).minus(0).abs().toNumber() const pLineY = Big(roofLine.y2).minus(0).toNumber()
let idx = (roofLines.length < index + 1)?0:index let idx = roofLines.length < index + 1 ? 0 : index
const pLineX = roofLines[idx + 1].x2 const pLineX = roofLines[idx + 1].x2
getAddLine({ x: newPEnd.x, y: newPEnd.y }, { x: ePoint.x, y: ePoint.y }, 'blue') getAddLine({ x: newPEnd.x, y: newPEnd.y }, { x: ePoint.x, y: ePoint.y }, 'blue')
@ -908,11 +898,9 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
//getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: newPointX, y: roofLine.y2 }, 'orange') //getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: newPointX, y: roofLine.y2 }, 'orange')
} }
} else if (condition === 'left_out') { } else if (condition === 'left_out') {
console.log("left_out::::isStartEnd:::::", isStartEnd); console.log('left_out::::isStartEnd:::::', isStartEnd)
if (isStartEnd.start) { if (isStartEnd.start) {
const moveDist = Big(wallLine.x1).minus(wallBaseLine.x1).abs().toNumber() const moveDist = Big(wallLine.x1).minus(wallBaseLine.x1).abs().toNumber()
const aStartY = Big(roofLine.y1).minus(moveDist).abs().toNumber() const aStartY = Big(roofLine.y1).minus(moveDist).abs().toNumber()
const bStartY = Big(wallLine.y1).minus(moveDist).abs().toNumber() const bStartY = Big(wallLine.y1).minus(moveDist).abs().toNumber()
@ -921,8 +909,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
const eLineY = Big(bStartY).minus(wallLine.y1).abs().toNumber() const eLineY = Big(bStartY).minus(wallLine.y1).abs().toNumber()
newPStart.y = aStartY newPStart.y = aStartY
newPEnd.y = roofLine.y2 //Big(roofLine.y2).minus(eLineY).toNumber() newPEnd.y = roofLine.y2 //Big(roofLine.y2).minus(eLineY).toNumber()
let idx = (0 >= index - 1)?roofLines.length:index let idx = 0 >= index - 1 ? roofLines.length : index
const newLine = roofLines[idx-1]; const newLine = roofLines[idx - 1]
if (Math.abs(wallBaseLine.y1 - wallLine.y1) < 0.1) { if (Math.abs(wallBaseLine.y1 - wallLine.y1) < 0.1) {
if (inLine) { if (inLine) {
@ -931,14 +919,13 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} else { } else {
getAddLine({ y: inLine.y2, x: inLine.x2 }, { y: bStartY, x: wallLine.x2 }, 'pink') 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: 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') getAddLine({ y: newLine.y1, x: newLine.x1 }, { y: newLine.y2, x: wallLine.x2 }, 'Gray')
findPoints.push({ y: aStartY, x: newPStart.x, position: 'left_out_start' }); findPoints.push({ y: aStartY, x: newPStart.x, position: 'left_out_start' })
} else { } else {
const cLineY = Big(wallBaseLine.x1).minus(wallLine.x1).abs().toNumber() const cLineY = Big(wallBaseLine.x1).minus(wallLine.x1).abs().toNumber()
newPStart.y = Big(newPStart.y).minus(cLineY).toNumber(); newPStart.y = Big(newPStart.y).minus(cLineY).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x })
if (inLine) { if (inLine) {
if (inLine.x1 < inLine.x2) { if (inLine.x1 < inLine.x2) {
@ -949,8 +936,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} else { } else {
//newPStart.y = wallLine.y1; //newPStart.y = wallLine.y1;
//외곽 라인 그리기 //외곽 라인 그리기
const rLineM = Big(wallBaseLine.x2).minus(roofLine.x2).abs().toNumber(); const rLineM = Big(wallBaseLine.x2).minus(roofLine.x2).abs().toNumber()
newPStart.y = Big(wallBaseLine.y1).minus(rLineM).abs().toNumber(); newPStart.y = Big(wallBaseLine.y1).minus(rLineM).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x })
if (inLine) { if (inLine) {
if (inLine.x2 > inLine.x1) { if (inLine.x2 > inLine.x1) {
@ -960,22 +947,20 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
} }
} }
} }
} }
if (isStartEnd.end) { if (isStartEnd.end) {
const moveDist = Big(wallLine.x1).minus(wallBaseLine.x1).abs().toNumber() const moveDist = Big(wallLine.x1).minus(wallBaseLine.x1).abs().toNumber()
const aStartY = Big(roofLine.y2).plus(moveDist).abs().toNumber() const aStartY = Big(roofLine.y2).plus(moveDist).toNumber()
const bStartY = Big(wallLine.y2).plus(moveDist).abs().toNumber() const bStartY = Big(wallLine.y2).plus(moveDist).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: aStartY, x: roofLine.x1 }) const inLine = findLineContainingPoint(innerLines, { y: aStartY, x: roofLine.x1 })
console.log("startLines:::::::", inLine); console.log('startLines:::::::', inLine)
const eLineY = Big(bStartY).minus(wallLine.y2).abs().toNumber() const eLineY = Big(bStartY).minus(wallLine.y2).abs().toNumber()
newPEnd.y = aStartY newPEnd.y = aStartY
newPStart.y = roofLine.y1 //Big(roofLine.y1).plus(eLineY).toNumber() newPStart.y = roofLine.y1 //Big(roofLine.y1).plus(eLineY).toNumber()
let idx = (roofLines.length < index + 1)?0:index let idx = roofLines.length < index + 1 ? 0 : index
const newLine = roofLines[idx+1]; const newLine = roofLines[idx + 1]
if (Math.abs(wallBaseLine.y2 - wallLine.y2) < 0.1) { if (Math.abs(wallBaseLine.y2 - wallLine.y2) < 0.1) {
if (inLine) { if (inLine) {
@ -987,10 +972,10 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
getAddLine({ y: bStartY, x: wallLine.x1 }, { y: roofLine.y2, x: wallLine.x2 }, 'magenta') 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') getAddLine({ y: newLine.y2, x: newLine.x2 }, { y: newLine.y1, x: wallLine.x1 }, 'Gray')
findPoints.push({ y: aStartY, x: newPEnd.x, position: 'left_out_end' }); findPoints.push({ y: aStartY, x: newPEnd.x, position: 'left_out_end' })
} else { } else {
const cLineY = Big(wallBaseLine.x2).minus(wallLine.x2).abs().toNumber() const cLineY = Big(wallBaseLine.x2).minus(wallLine.x2).abs().toNumber()
newPEnd.y = Big(newPEnd.y).plus(cLineY).abs().toNumber(); newPEnd.y = Big(newPEnd.y).plus(cLineY).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x })
if (inLine) { if (inLine) {
if (inLine.x1 < inLine.x2) { if (inLine.x1 < inLine.x2) {
@ -999,12 +984,11 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
getAddLine({ y: inLine.y1, x: inLine.x1 }, { y: newPEnd.y, x: newPEnd.x }, 'purple') getAddLine({ y: inLine.y1, x: inLine.x1 }, { y: newPEnd.y, x: newPEnd.x }, 'purple')
} }
} else { } else {
// newPEnd.y = wallLine.y2 // newPEnd.y = wallLine.y2
//외곽 라인 그리기 //외곽 라인 그리기
const rLineM = Big(wallBaseLine.x2).minus(roofLine.x2).abs().toNumber(); const rLineM = Big(wallBaseLine.x2).minus(roofLine.x2).abs().toNumber()
newPEnd.y = Big(wallBaseLine.y2).plus(rLineM).abs().toNumber(); newPEnd.y = Big(wallBaseLine.y2).plus(rLineM).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x })
if (inLine) { if (inLine) {
if (inLine.x2 > inLine.x1) { if (inLine.x2 > inLine.x1) {
@ -1014,25 +998,23 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
} }
} }
} }
findPoints.push({ y: newPStart.y, x: newPEnd.x, position: 'left_out_end' }); findPoints.push({ y: newPStart.y, x: newPEnd.x, position: 'left_out_end' })
} }
} else if (condition === 'right_in') { } else if (condition === 'right_in') {
if (isStartEnd.start) { if (isStartEnd.start) {
newPEnd.y = roofLine.y2
newPEnd.y = roofLine.y2; newPEnd.x = roofLine.x2
newPEnd.x = roofLine.x2;
const moveDist = Big(wallBaseLine.x1).minus(wallLine.x1).abs().toNumber() const moveDist = Big(wallBaseLine.x1).minus(wallLine.x1).abs().toNumber()
ePoint = {x: wallBaseLine.x1, y: wallBaseLine.y1}; ePoint = { x: wallBaseLine.x1, y: wallBaseLine.y1 }
newPStart.y = wallBaseLine.y1 newPStart.y = wallBaseLine.y1
findPoints.push({ x: ePoint.x, y: ePoint.y, position: 'right_in_start'}); findPoints.push({ x: ePoint.x, y: ePoint.y, position: 'right_in_start' })
const newPointX = Big(roofLine.x1).minus(moveDist).abs().toNumber() const newPointX = Big(roofLine.x1).minus(moveDist).abs().toNumber()
const pDist = Big(wallLine.x1).minus(roofLine.x1).abs().toNumber() const pDist = Big(wallLine.x1).minus(roofLine.x1).abs().toNumber()
const pLineY = Big(roofLine.y1).minus(0).abs().toNumber() const pLineY = Big(roofLine.y1).minus(0).abs().toNumber()
let idx = (0 >= index - 1)?roofLines.length:index let idx = 0 >= index - 1 ? roofLines.length : index
const pLineX = roofLines[idx - 1].x1 const pLineX = roofLines[idx - 1].x1
getAddLine({ x: newPStart.x, y: newPStart.y }, { x: ePoint.x, y: ePoint.y }, 'blue') getAddLine({ x: newPStart.x, y: newPStart.y }, { x: ePoint.x, y: ePoint.y }, 'blue')
@ -1045,18 +1027,18 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
if (isStartEnd.end) { if (isStartEnd.end) {
newPStart.y = roofLine.y1; newPStart.y = roofLine.y1
newPStart.x = roofLine.x1; newPStart.x = roofLine.x1
const moveDist = Big(wallBaseLine.x2).minus(wallLine.x2).abs().toNumber() const moveDist = Big(wallBaseLine.x2).minus(wallLine.x2).abs().toNumber()
ePoint = {x: wallBaseLine.x2, y: wallBaseLine.y2}; ePoint = { x: wallBaseLine.x2, y: wallBaseLine.y2 }
newPEnd.y = wallBaseLine.y2 newPEnd.y = wallBaseLine.y2
findPoints.push({ x: ePoint.x, y: ePoint.y, position: 'right_in_end' }); findPoints.push({ x: ePoint.x, y: ePoint.y, position: 'right_in_end' })
const newPointX = Big(roofLine.x1).minus(moveDist).toNumber() const newPointX = Big(roofLine.x1).minus(moveDist).toNumber()
const pDist = Big(wallLine.x1).minus(roofLine.x1).abs().toNumber() const pDist = Big(wallLine.x1).minus(roofLine.x1).abs().toNumber()
const pLineY = Big(roofLine.y2).minus(0).abs().toNumber() const pLineY = Big(roofLine.y2).minus(0).abs().toNumber()
let idx = (roofLines.length < index + 1)?0:index let idx = roofLines.length < index + 1 ? 0 : index
const pLineX = roofLines[idx + 1].x2 const pLineX = roofLines[idx + 1].x2
getAddLine({ x: newPEnd.x, y: newPEnd.y }, { x: ePoint.x, y: ePoint.y }, 'blue') getAddLine({ x: newPEnd.x, y: newPEnd.y }, { x: ePoint.x, y: ePoint.y }, 'blue')
@ -1068,20 +1050,20 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: newPointX, y: roofLine.y2 }, 'orange') getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: newPointX, y: roofLine.y2 }, 'orange')
} }
} else if (condition === 'right_out') { } else if (condition === 'right_out') {
console.log("right_out::::isStartEnd:::::", isStartEnd); console.log('right_out::::isStartEnd:::::', isStartEnd)
if (isStartEnd.start ) { //x1 inside if (isStartEnd.start) {
//x1 inside
const moveDist = Big(wallLine.x1).minus(wallBaseLine.x1).abs().toNumber() const moveDist = Big(wallLine.x1).minus(wallBaseLine.x1).abs().toNumber()
const aStartY = Big(roofLine.y1).plus(moveDist).abs().toNumber() const aStartY = Big(roofLine.y1).plus(moveDist).abs().toNumber()
const bStartY = Big(wallLine.y1).plus(moveDist).abs().toNumber() const bStartY = Big(wallLine.y1).plus(moveDist).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: aStartY, x: roofLine.x1 }) const inLine = findLineContainingPoint(innerLines, { y: aStartY, x: roofLine.x1 })
console.log("startLines:::::::", inLine); console.log('startLines:::::::', inLine)
const eLineY = Big(bStartY).minus(wallLine.y1).abs().toNumber() const eLineY = Big(bStartY).minus(wallLine.y1).abs().toNumber()
newPStart.y = aStartY newPStart.y = aStartY
newPEnd.y = roofLine.y2 //Big(roofLine.y2).plus(eLineY).toNumber() newPEnd.y = roofLine.y2 //Big(roofLine.y2).plus(eLineY).toNumber()
let idx = (0 >= index - 1)?roofLines.length:index let idx = 0 >= index - 1 ? roofLines.length : index
const newLine = roofLines[idx-1]; const newLine = roofLines[idx - 1]
if (Math.abs(wallBaseLine.y1 - wallLine.y1) < 0.1) { if (Math.abs(wallBaseLine.y1 - wallLine.y1) < 0.1) {
if (inLine) { if (inLine) {
@ -1093,10 +1075,10 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
getAddLine({ y: bStartY, x: wallLine.x2 }, { y: roofLine.y1, x: wallLine.x1 }, 'magenta') 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') getAddLine({ y: newLine.y1, x: newLine.x1 }, { y: newLine.y2, x: wallLine.x2 }, 'Gray')
findPoints.push({ y: aStartY, x: newPEnd.x, position: 'right_out_start' }); findPoints.push({ y: aStartY, x: newPEnd.x, position: 'right_out_start' })
} else { } else {
const cLineY = Big(wallBaseLine.x1).minus(wallLine.x1).abs().toNumber() const cLineY = Big(wallBaseLine.x1).minus(wallLine.x1).abs().toNumber()
newPStart.y = Big(newPStart.y).plus(cLineY).abs().toNumber(); newPStart.y = Big(newPStart.y).plus(cLineY).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x })
if (inLine) { if (inLine) {
if (inLine.x2 < inLine.x1) { if (inLine.x2 < inLine.x1) {
@ -1107,8 +1089,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} else { } else {
//newPStart.y = wallLine.y1; //newPStart.y = wallLine.y1;
//외곽 라인 그리기 //외곽 라인 그리기
const rLineM = Big(wallBaseLine.x1).minus(roofLine.x1).abs().toNumber(); const rLineM = Big(wallBaseLine.x1).minus(roofLine.x1).abs().toNumber()
newPStart.y = Big(wallBaseLine.y1).plus(rLineM).abs().toNumber(); newPStart.y = Big(wallBaseLine.y1).plus(rLineM).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x })
if (inLine) { if (inLine) {
if (inLine.x2 > inLine.x1) { if (inLine.x2 > inLine.x1) {
@ -1117,11 +1099,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
getAddLine({ y: inLine.y2, x: inLine.x2 }, { y: newPStart.y, x: newPStart.x }, 'purple') getAddLine({ y: inLine.y2, x: inLine.x2 }, { y: newPStart.y, x: newPStart.x }, 'purple')
} }
} }
} }
} }
} }
if (isStartEnd.end) { if (isStartEnd.end) {
@ -1129,12 +1108,12 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
const aStartY = Big(roofLine.y2).minus(moveDist).abs().toNumber() const aStartY = Big(roofLine.y2).minus(moveDist).abs().toNumber()
const bStartY = Big(wallLine.y2).minus(moveDist).abs().toNumber() const bStartY = Big(wallLine.y2).minus(moveDist).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: aStartY, x: roofLine.x1 }) const inLine = findLineContainingPoint(innerLines, { y: aStartY, x: roofLine.x1 })
console.log("startLines:::::::", inLine); console.log('startLines:::::::', inLine)
const eLineY = Big(bStartY).minus(wallLine.y2).abs().toNumber() const eLineY = Big(bStartY).minus(wallLine.y2).abs().toNumber()
newPEnd.y = aStartY newPEnd.y = aStartY
newPStart.y = roofLine.y1 //Big(roofLine.y1).minus(eLineY).toNumber() newPStart.y = roofLine.y1 //Big(roofLine.y1).minus(eLineY).toNumber()
let idx = (roofLines.length < index + 1)?0:index let idx = roofLines.length < index + 1 ? 0 : index
const newLine = roofLines[idx+1]; const newLine = roofLines[idx + 1]
if (inLine) { if (inLine) {
if (inLine.x2 < inLine.x1) { if (inLine.x2 < inLine.x1) {
getAddLine({ y: bStartY, x: wallLine.x1 }, { y: inLine.y2, x: inLine.x2 }, 'pink') getAddLine({ y: bStartY, x: wallLine.x1 }, { y: inLine.y2, x: inLine.x2 }, 'pink')
@ -1145,10 +1124,10 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
if (Math.abs(wallBaseLine.y2 - wallLine.y2) < 0.1) { if (Math.abs(wallBaseLine.y2 - wallLine.y2) < 0.1) {
getAddLine({ y: bStartY, x: wallLine.x1 }, { y: roofLine.y2, x: wallLine.x2 }, 'magenta') 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') getAddLine({ y: newLine.y2, x: newLine.x2 }, { y: newLine.y1, x: wallLine.x1 }, 'Gray')
findPoints.push({ y: aStartY, x: newPEnd.x, position: 'right_out_end' }); findPoints.push({ y: aStartY, x: newPEnd.x, position: 'right_out_end' })
} else { } else {
const cLineY = Big(wallBaseLine.x2).minus(wallLine.x2).abs().toNumber() const cLineY = Big(wallBaseLine.x2).minus(wallLine.x2).abs().toNumber()
newPEnd.y = Big(newPEnd.y).minus(cLineY).toNumber(); newPEnd.y = Big(newPEnd.y).minus(cLineY).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x })
if (inLine) { if (inLine) {
if (inLine.x2 < inLine.x1) { if (inLine.x2 < inLine.x1) {
@ -1160,8 +1139,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
//newPEnd.y = wallLine.y2; //newPEnd.y = wallLine.y2;
//외곽 라인 그리기 //외곽 라인 그리기
const rLineM = Big(wallBaseLine.x2).minus(roofLine.x2).abs().toNumber(); const rLineM = Big(wallBaseLine.x2).minus(roofLine.x2).abs().toNumber()
newPEnd.y = Big(wallBaseLine.y2).minus(rLineM).abs().toNumber(); newPEnd.y = Big(wallBaseLine.y2).minus(rLineM).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x })
if (inLine) { if (inLine) {
if (inLine.x2 > inLine.x1) { if (inLine.x2 > inLine.x1) {
@ -1170,51 +1149,52 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
getAddLine({ y: inLine.y2, x: inLine.x2 }, { y: newPEnd.y, x: newPEnd.x }, 'purple') getAddLine({ y: inLine.y2, x: inLine.x2 }, { y: newPEnd.y, x: newPEnd.x }, 'purple')
} }
} }
}
} }
} }
} }
} }
} else if (getOrientation(roofLine) === 'horizontal') { //red }
} else if (getOrientation(roofLine) === 'horizontal') {
//red
if (['top', 'bottom'].includes(mLine.position)) { if (['top', 'bottom'].includes(mLine.position)) {
if (Math.abs(wallLine.y1 - wallBaseLine.y1) < 0.1 || Math.abs(wallLine.y2 - wallBaseLine.y2) < 0.1) { if (Math.abs(wallLine.y1 - wallBaseLine.y1) < 0.1 || Math.abs(wallLine.y2 - wallBaseLine.y2) < 0.1) {
return false return false
} }
const positionType = const isTopPosition = mLine.position === 'top'
(mLine.position === 'top' && wallLine.y1 < wallBaseLine.y1) || const isBottomPosition = mLine.position === 'bottom'
(mLine.position === 'bottom' && wallLine.y1 > wallBaseLine.y1) const isInPosition =
? 'in' : 'out'; (isTopPosition && wallLine.y1 < wallBaseLine.y1) ||
(isBottomPosition && wallLine.y1 > wallBaseLine.y1) ||
(isTopPosition && wallLine.y2 < wallBaseLine.y2) ||
(isBottomPosition && wallLine.y2 > wallBaseLine.y2)
const condition = `${mLine.position}_${positionType}`; const positionType = isInPosition ? 'in' : 'out'
const condition = `${mLine.position}_${positionType}`
let isStartEnd = findInteriorPoint(wallBaseLine, sortedBaseLines) let isStartEnd = findInteriorPoint(wallBaseLine, sortedBaseLines)
let sPoint, ePoint; let sPoint, ePoint
if (condition === 'top_in') { if (condition === 'top_in') {
if (isStartEnd.start) { if (isStartEnd.start) {
const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber() const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber()
sPoint = {x: wallBaseLine.x1, y: wallBaseLine.y1}; sPoint = { x: wallBaseLine.x1, y: wallBaseLine.y1 }
newPStart.x = wallBaseLine.x1; newPStart.x = wallBaseLine.x1
const newPointY = Big(roofLine.y2).plus(moveDist).toNumber()
const newPointY = Big(roofLine.y2).plus(moveDist).abs().toNumber()
const pDist = Big(wallLine.y2).minus(roofLine.y2).abs().toNumber() const pDist = Big(wallLine.y2).minus(roofLine.y2).abs().toNumber()
const pLineX = Big(roofLine.x1).minus(0).abs().toNumber() const pLineX = Big(roofLine.x1).minus(0).toNumber()
let idx = (0 >= index - 1)?roofLines.length:index let idx = 0 >= index - 1 ? roofLines.length : index
const pLineY = roofLines[idx - 1].y1 const pLineY = roofLines[idx - 1].y1
getAddLine({ x: newPStart.x, y: newPStart.y }, { x: sPoint.x, y: sPoint.y }, 'blue') getAddLine({ x: newPStart.x, y: newPStart.y }, { x: sPoint.x, y: sPoint.y }, 'blue')
findPoints.push({ x: sPoint.x, y: sPoint.y, position: 'top_in_start' }); findPoints.push({ x: sPoint.x, y: sPoint.y, position: 'top_in_start' })
if (Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) { if (Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) {
getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green') getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green')
getAddLine({ x: pLineX, y: newPointY }, { x: sPoint.x, y: sPoint.y }, 'pink') getAddLine({ x: pLineX, y: newPointY }, { x: sPoint.x, y: sPoint.y }, 'pink')
} }
//getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: roofLine.x2, y: newPointY }, 'orange') //getAddLine({ x: roofLine.x2, y: roofLine.y2 }, { x: roofLine.x2, y: newPointY }, 'orange')
} }
if (isStartEnd.end) { if (isStartEnd.end) {
@ -1222,38 +1202,36 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
sPoint = { x: wallBaseLine.x2, y: wallBaseLine.y2 } sPoint = { x: wallBaseLine.x2, y: wallBaseLine.y2 }
newPEnd.x = wallBaseLine.x2 newPEnd.x = wallBaseLine.x2
const newPointY = Big(roofLine.y1).plus(moveDist).abs().toNumber() const newPointY = Big(roofLine.y1).plus(moveDist).toNumber()
const pDist = Big(wallLine.y1).minus(roofLine.y1).abs().toNumber() const pDist = Big(wallLine.y1).minus(roofLine.y1).abs().toNumber()
const pLineX = Big(roofLine.x2).minus(0).abs().toNumber() const pLineX = Big(roofLine.x2).minus(0).abs().toNumber()
let idx = roofLines.length < index + 1 ? 0 : index let idx = roofLines.length < index + 1 ? 0 : index
const pLineY = roofLines[idx + 1].y2 const pLineY = roofLines[idx + 1].y2
getAddLine({ x: newPEnd.x, y: newPEnd.y }, { x: sPoint.x, y: sPoint.y }, 'blue') getAddLine({ x: newPEnd.x, y: newPEnd.y }, { x: sPoint.x, y: sPoint.y }, 'blue')
findPoints.push({ x: sPoint.x, y: sPoint.y, position: 'top_in_end' }); findPoints.push({ x: sPoint.x, y: sPoint.y, position: 'top_in_end' })
if (Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) { if (Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) {
getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green') getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green')
getAddLine({ x: pLineX, y: newPointY }, { x: sPoint.x, y: sPoint.y }, 'pink') getAddLine({ x: pLineX, y: newPointY }, { x: sPoint.x, y: sPoint.y }, 'pink')
} }
//getAddLine({ x: roofLine.x1, y: roofLine.y1 }, { x: roofLine.x1, y: newPointY }, 'orange') //getAddLine({ x: roofLine.x1, y: roofLine.y1 }, { x: roofLine.x1, y: newPointY }, 'orange')
} }
} else if (condition === 'top_out') { } else if (condition === 'top_out') {
console.log("top_out isStartEnd:::::::", isStartEnd); console.log('top_out isStartEnd:::::::', isStartEnd)
if (isStartEnd.start) { if (isStartEnd.start) {
const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber() const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber()
const aStartX = Big(roofLine.x1).plus(moveDist).abs().toNumber() const aStartX = Big(roofLine.x1).plus(moveDist).toNumber()
const bStartX = Big(wallLine.x1).plus(moveDist).abs().toNumber() const bStartX = Big(wallLine.x1).plus(moveDist).toNumber()
const inLine = findLineContainingPoint(innerLines, { x: aStartX, y: newPEnd.y }) const inLine = findLineContainingPoint(innerLines, { x: aStartX, y: newPEnd.y })
const eLineX = Big(bStartX).minus(wallLine.x1).abs().toNumber() const eLineX = Big(bStartX).minus(wallLine.x1).abs().toNumber()
newPEnd.x = roofLine.x2 //Big(newPEnd.x).plus(eLineX).toNumber() newPEnd.x = roofLine.x2 //Big(newPEnd.x).plus(eLineX).toNumber()
newPStart.x = aStartX newPStart.x = aStartX
let idx = (0 > index - 1)?roofLines.length:index let idx = 0 > index - 1 ? roofLines.length : index
const newLine = roofLines[idx-1]; const newLine = roofLines[idx - 1]
if (Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) { if (Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) {
if (inLine) { if (inLine) {
@ -1265,10 +1243,10 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
getAddLine({ x: bStartX, y: wallLine.y1 }, { x: roofLine.x1, y: wallLine.y1 }, 'magenta') 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') getAddLine({ x: newLine.x1, y: newLine.y1 }, { x: newLine.x1, y: wallLine.y1 }, 'Gray')
findPoints.push({ x: aStartX, y: newPEnd.y, position: 'top_out_start' }); findPoints.push({ x: aStartX, y: newPEnd.y, position: 'top_out_start' })
} else { } else {
const cLineX = Big(wallBaseLine.y1).minus(wallLine.y1).abs().toNumber() const cLineX = Big(wallBaseLine.y1).minus(wallLine.y1).abs().toNumber()
newPStart.x = Big(newPStart.x).plus(cLineX).abs().toNumber(); newPStart.x = Big(newPStart.x).plus(cLineX).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x })
if (inLine) { if (inLine) {
if (inLine.y2 > inLine.y1) { if (inLine.y2 > inLine.y1) {
@ -1276,11 +1254,10 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} else { } else {
getAddLine({ y: inLine.y1, x: inLine.x1 }, { y: newPStart.y, x: newPStart.x }, 'purple') getAddLine({ y: inLine.y1, x: inLine.x1 }, { y: newPStart.y, x: newPStart.x }, 'purple')
} }
} else { } else {
//외곽 라인 그리기 //외곽 라인 그리기
const rLineM = Big(wallBaseLine.y1).minus(roofLine.y1).abs().toNumber(); const rLineM = Big(wallBaseLine.y1).minus(roofLine.y1).abs().toNumber()
newPStart.x = Big(wallBaseLine.x1).plus(rLineM).abs().toNumber(); newPStart.x = Big(wallBaseLine.x1).plus(rLineM).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x })
if (inLine) { if (inLine) {
if (inLine.y2 > inLine.y1) { if (inLine.y2 > inLine.y1) {
@ -1290,7 +1267,6 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
} }
} }
} }
} }
if (isStartEnd.end) { if (isStartEnd.end) {
@ -1298,12 +1274,12 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
const aStartX = Big(roofLine.x2).minus(moveDist).abs().toNumber() const aStartX = Big(roofLine.x2).minus(moveDist).abs().toNumber()
const bStartX = Big(wallLine.x2).minus(moveDist).abs().toNumber() const bStartX = Big(wallLine.x2).minus(moveDist).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { x: aStartX, y: newPEnd.y }) const inLine = findLineContainingPoint(innerLines, { x: aStartX, y: newPEnd.y })
console.log("startLines:::::::", inLine); console.log('startLines:::::::', inLine)
const eLineX = Big(bStartX).minus(wallLine.x2).abs().toNumber() const eLineX = Big(bStartX).minus(wallLine.x2).abs().toNumber()
newPStart.x = roofLine.x1;//Big(newPStart.x).minus(eLineX).abs().toNumber() newPStart.x = roofLine.x1 //Big(newPStart.x).minus(eLineX).abs().toNumber()
newPEnd.x = aStartX newPEnd.x = aStartX
let idx = (roofLines.length < index + 1)?0:index let idx = roofLines.length < index + 1 ? 0 : index
const newLine = roofLines[idx+1]; const newLine = roofLines[idx + 1]
if (Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) { if (Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) {
if (inLine) { if (inLine) {
@ -1312,14 +1288,13 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} else { } else {
getAddLine({ x: inLine.x1, y: inLine.y1 }, { x: bStartX, y: wallLine.y1 }, 'pink') 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: 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') getAddLine({ x: newLine.x2, y: newLine.y2 }, { x: newLine.x1, y: wallLine.y1 }, 'Gray')
findPoints.push({ x: aStartX, y: newPEnd.y, position: 'top_out_end' }); findPoints.push({ x: aStartX, y: newPEnd.y, position: 'top_out_end' })
} else { } else {
const cLineX = Big(wallLine.y2).minus(wallBaseLine.y2).abs().toNumber() const cLineX = Big(wallLine.y2).minus(wallBaseLine.y2).abs().toNumber()
newPEnd.x = Big(newPEnd.x).minus(cLineX).toNumber(); newPEnd.x = Big(newPEnd.x).minus(cLineX).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x })
if (inLine) { if (inLine) {
if (inLine.y2 > inLine.y1) { if (inLine.y2 > inLine.y1) {
@ -1330,8 +1305,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} else { } else {
//newPEnd.x = wallLine.x2; //newPEnd.x = wallLine.x2;
//외곽 라인 그리기 //외곽 라인 그리기
const rLineM = Big(wallBaseLine.y2).minus(roofLine.y2).abs().toNumber(); const rLineM = Big(wallBaseLine.y2).minus(roofLine.y2).abs().toNumber()
newPEnd.x = Big(wallBaseLine.x2).minus(rLineM).abs().toNumber(); newPEnd.x = Big(wallBaseLine.x2).minus(rLineM).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x })
if (inLine) { if (inLine) {
if (inLine.y1 > inLine.y2) { if (inLine.y1 > inLine.y2) {
@ -1341,24 +1316,22 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
} }
} }
} }
} }
} else if (condition === 'bottom_in') { } else if (condition === 'bottom_in') {
if (isStartEnd.start) { if (isStartEnd.start) {
const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber() const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber()
sPoint = {x: wallBaseLine.x1, y: wallBaseLine.y1}; sPoint = { x: wallBaseLine.x1, y: wallBaseLine.y1 }
newPStart.x = wallBaseLine.x1; newPStart.x = wallBaseLine.x1
const newPointY = Big(roofLine.y2).minus(moveDist).toNumber() const newPointY = Big(roofLine.y2).minus(moveDist).toNumber()
const pDist = Big(wallLine.y2).minus(roofLine.y2).abs().toNumber() const pDist = Big(wallLine.y2).minus(roofLine.y2).abs().toNumber()
const pLineX = Big(roofLine.x1).minus(0).abs().toNumber() const pLineX = Big(roofLine.x1).minus(0).abs().toNumber()
let idx = (0 > index - 1)?roofLines.length:index let idx = 0 > index - 1 ? roofLines.length : index
const pLineY = roofLines[idx - 1].y1 const pLineY = roofLines[idx - 1].y1
getAddLine({ x: newPStart.x, y: newPStart.y }, { x: sPoint.x, y: sPoint.y }, 'blue') getAddLine({ x: newPStart.x, y: newPStart.y }, { x: sPoint.x, y: sPoint.y }, 'blue')
findPoints.push({ x: sPoint.x, y: sPoint.y, position: 'bottom_in_start' }); findPoints.push({ x: sPoint.x, y: sPoint.y, position: 'bottom_in_start' })
if (Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) { if (Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) {
getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green') getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green')
@ -1369,40 +1342,37 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
if (isStartEnd.end) { if (isStartEnd.end) {
const moveDist = Big(wallLine.y2).minus(wallBaseLine.y2).abs().toNumber() const moveDist = Big(wallLine.y2).minus(wallBaseLine.y2).abs().toNumber()
sPoint = {x: wallBaseLine.x2, y: wallBaseLine.y2}; sPoint = { x: wallBaseLine.x2, y: wallBaseLine.y2 }
newPEnd.x = wallBaseLine.x2; newPEnd.x = wallBaseLine.x2
const newPointY = Big(roofLine.y1).minus(moveDist).toNumber() const newPointY = Big(roofLine.y1).minus(moveDist).toNumber()
const pDist = Big(wallLine.y1).minus(roofLine.y1).abs().toNumber() const pDist = Big(wallLine.y1).minus(roofLine.y1).abs().toNumber()
const pLineX = Big(roofLine.x2).minus(0).abs().toNumber() const pLineX = Big(roofLine.x2).minus(0).abs().toNumber()
let idx = (roofLines.length < index + 1)?0:index let idx = roofLines.length < index + 1 ? 0 : index
const pLineY = roofLines[idx + 1].y2 const pLineY = roofLines[idx + 1].y2
getAddLine({ x: newPEnd.x, y: newPEnd.y }, { x: sPoint.x, y: sPoint.y }, 'blue') getAddLine({ x: newPEnd.x, y: newPEnd.y }, { x: sPoint.x, y: sPoint.y }, 'blue')
findPoints.push({ x: sPoint.x, y: sPoint.y, position: 'bottom_in_end' }); findPoints.push({ x: sPoint.x, y: sPoint.y, position: 'bottom_in_end' })
if (Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) { if (Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) {
getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green') getAddLine({ x: pLineX, y: pLineY }, { x: pLineX, y: newPointY }, 'green')
getAddLine({ x: pLineX, y: newPointY }, { x: sPoint.x, y: sPoint.y }, 'pink') getAddLine({ x: pLineX, y: newPointY }, { x: sPoint.x, y: sPoint.y }, 'pink')
} }
getAddLine({ x: roofLine.x1, y: roofLine.y1 }, { x: roofLine.x1, y: newPointY }, 'orange') getAddLine({ x: roofLine.x1, y: roofLine.y1 }, { x: roofLine.x1, y: newPointY }, 'orange')
} }
} else if (condition === 'bottom_out') { } else if (condition === 'bottom_out') {
console.log("bottom_out isStartEnd:::::::", isStartEnd); console.log('bottom_out isStartEnd:::::::', isStartEnd)
if (isStartEnd.start) { if (isStartEnd.start) {
const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber() const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber()
const aStartX = Big(roofLine.x1).minus(moveDist).abs().toNumber() const aStartX = Big(roofLine.x1).minus(moveDist).abs().toNumber()
const bStartX = Big(wallLine.x1).minus(moveDist).abs().toNumber() const bStartX = Big(wallLine.x1).minus(moveDist).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { x: aStartX, y: roofLine.y1 }) const inLine = findLineContainingPoint(innerLines, { x: aStartX, y: roofLine.y1 })
console.log("startLines:::::::", inLine); console.log('startLines:::::::', inLine)
const eLineX = Big(bStartX).minus(wallLine.x1).abs().toNumber() const eLineX = Big(bStartX).minus(wallLine.x1).abs().toNumber()
newPEnd.x = roofLine.x2 //Big(roofLine.x2).minus(eLineX).toNumber() newPEnd.x = roofLine.x2 //Big(roofLine.x2).minus(eLineX).toNumber()
newPStart.x = aStartX newPStart.x = aStartX
let idx = (0 > index - 1)?roofLines.length:index let idx = 0 > index - 1 ? roofLines.length : index
const newLine = roofLines[idx-1]; const newLine = roofLines[idx - 1]
if (Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) { if (Math.abs(wallBaseLine.x1 - wallLine.x1) < 0.1) {
if (inLine) { if (inLine) {
@ -1414,10 +1384,10 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
getAddLine({ x: bStartX, y: wallLine.y1 }, { x: roofLine.x1, y: wallLine.y1 }, 'magenta') 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') getAddLine({ x: newLine.x1, y: newLine.y1 }, { x: newLine.x1, y: wallLine.y1 }, 'Gray')
findPoints.push({ x: aStartX, y: newPEnd.y, position: 'bottom_out_start' }); findPoints.push({ x: aStartX, y: newPEnd.y, position: 'bottom_out_start' })
} else { } else {
const cLineX = Big(wallBaseLine.y1).minus(wallLine.y1).abs().toNumber() const cLineX = Big(wallBaseLine.y1).minus(wallLine.y1).abs().toNumber()
newPStart.x = Big(newPStart.x).minus(cLineX).toNumber(); newPStart.x = Big(newPStart.x).minus(cLineX).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x })
if (inLine) { if (inLine) {
if (inLine.y2 < inLine.y1) { if (inLine.y2 < inLine.y1) {
@ -1428,8 +1398,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} else { } else {
//newPStart.x = wallLine.x1; //newPStart.x = wallLine.x1;
//외곽 라인 그리기 //외곽 라인 그리기
const rLineM = Big(wallBaseLine.y1).minus(roofLine.y1).abs().toNumber(); const rLineM = Big(wallBaseLine.y1).minus(roofLine.y1).abs().toNumber()
newPStart.x = Big(wallBaseLine.x1).minus(rLineM).abs().toNumber(); newPStart.x = Big(wallBaseLine.x1).minus(rLineM).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x }) const inLine = findLineContainingPoint(innerLines, { y: newPStart.y, x: newPStart.x })
if (inLine) { if (inLine) {
if (inLine.y2 > inLine.y1) { if (inLine.y2 > inLine.y1) {
@ -1439,21 +1409,20 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
} }
} }
} }
} }
if (isStartEnd.end) { if (isStartEnd.end) {
const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber() const moveDist = Big(wallLine.y1).minus(wallBaseLine.y1).abs().toNumber()
const aStartX = Big(roofLine.x2).plus(moveDist).abs().toNumber() const aStartX = Big(roofLine.x2).plus(moveDist).toNumber()
const bStartX = Big(wallLine.x2).plus(moveDist).abs().toNumber() const bStartX = Big(wallLine.x2).plus(moveDist).toNumber()
const inLine = findLineContainingPoint(innerLines, { x: aStartX, y: roofLine.y1 }) const inLine = findLineContainingPoint(innerLines, { x: aStartX, y: roofLine.y1 })
console.log("startLines:::::::", inLine); console.log('startLines:::::::', inLine)
const eLineX = Big(bStartX).minus(wallLine.x2).abs().toNumber() const eLineX = Big(bStartX).minus(wallLine.x2).abs().toNumber()
newPEnd.x = aStartX newPEnd.x = aStartX
newPStart.x = roofLine.x1;//Big(roofLine.x1).plus(eLineX).toNumber() newPStart.x = roofLine.x1 //Big(roofLine.x1).plus(eLineX).toNumber()
let idx = (roofLines.length < index + 1)?0:index let idx = roofLines.length < index + 1 ? 0 : index
const newLine = roofLines[idx + 1]; const newLine = roofLines[idx + 1]
if (Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) { if (Math.abs(wallBaseLine.x2 - wallLine.x2) < 0.1) {
if (inLine) { if (inLine) {
@ -1465,10 +1434,10 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
getAddLine({ x: bStartX, y: wallLine.y1 }, { x: roofLine.x2, y: wallLine.y2 }, 'magenta') 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') getAddLine({ x: newLine.x2, y: newLine.y2 }, { x: newLine.x1, y: wallLine.y1 }, 'Gray')
findPoints.push({ x: aStartX, y: newPEnd.y, position: 'bottom_out_end' }); findPoints.push({ x: aStartX, y: newPEnd.y, position: 'bottom_out_end' })
} else { } else {
const cLineX = Big(wallBaseLine.y2).minus(wallLine.y2).abs().toNumber() const cLineX = Big(wallBaseLine.y2).minus(wallLine.y2).abs().toNumber()
newPEnd.x = Big(newPEnd.x).plus(cLineX).abs().toNumber(); newPEnd.x = Big(newPEnd.x).plus(cLineX).toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x })
if (inLine) { if (inLine) {
if (inLine.y2 < inLine.y1) { if (inLine.y2 < inLine.y1) {
@ -1479,8 +1448,8 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} else { } else {
//newPEnd.x = wallLine.x2; //newPEnd.x = wallLine.x2;
//외곽 라인 그리기 //외곽 라인 그리기
const rLineM = Big(wallBaseLine.y2).minus(roofLine.y2).abs().toNumber(); const rLineM = Big(wallBaseLine.y2).minus(roofLine.y2).abs().toNumber()
newPEnd.x = Big(wallBaseLine.x2).plus(rLineM).abs().toNumber(); newPEnd.x = Big(wallBaseLine.x2).plus(rLineM).abs().toNumber()
const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x }) const inLine = findLineContainingPoint(innerLines, { y: newPEnd.y, x: newPEnd.x })
if (inLine) { if (inLine) {
if (inLine.y1 > inLine.y2) { if (inLine.y1 > inLine.y2) {
@ -1490,7 +1459,6 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
} }
} }
} }
} }
} }
} }
@ -1500,14 +1468,15 @@ const createInnerLinesFromSkeleton = (roofId, canvas, skeleton, textMode) => {
getAddLine(newPStart, newPEnd, 'red') getAddLine(newPStart, newPEnd, 'red')
//canvas.remove(roofLine) //canvas.remove(roofLine)
} else { } else {
getAddLine(roofLine.startPoint, roofLine.endPoint, ) getAddLine(roofLine.startPoint, roofLine.endPoint)
} }
canvas.renderAll() canvas.renderAll()
}); });
// } }
getMoveUpDownLine()
}
if (findPoints.length > 0) { if (findPoints.length > 0) {
// 모든 점에 대해 라인 업데이트를 누적 // 모든 점에 대해 라인 업데이트를 누적
@ -2369,6 +2338,14 @@ function isSamePoint(p1, p2, tolerance = 0.1) {
return Math.abs(p1.x - p2.x) < tolerance && Math.abs(p1.y - p2.y) < tolerance; return Math.abs(p1.x - p2.x) < tolerance && Math.abs(p1.y - p2.y) < tolerance;
} }
function isSameLine2(line1, line2, tolerance = 0.1) {
return (
Math.abs(line1.x1 - line2.x1) < tolerance &&
Math.abs(line1.y1 - line2.y1) < tolerance &&
Math.abs(line1.x2 - line2.x2) < tolerance &&
Math.abs(line1.y2 - line2.y2) < tolerance
);
}
// 두 점을 지나는 직선의 기울기 계산 // 두 점을 지나는 직선의 기울기 계산
function calculateSlope(p1, p2) { function calculateSlope(p1, p2) {
// 수직선인 경우 (기울기 무한대) // 수직선인 경우 (기울기 무한대)