모듈 최대배치, 중앙배치 작업중
This commit is contained in:
parent
5e51952aab
commit
4aae0bccb3
@ -52,6 +52,7 @@ export function useModuleBasicSetting() {
|
|||||||
parentId: roof.id, //가대 폴리곤의 임시 인덱스를 넣어줌
|
parentId: roof.id, //가대 폴리곤의 임시 인덱스를 넣어줌
|
||||||
name: POLYGON_TYPE.MODULE_SETUP_SURFACE,
|
name: POLYGON_TYPE.MODULE_SETUP_SURFACE,
|
||||||
flowDirection: roof.direction,
|
flowDirection: roof.direction,
|
||||||
|
direction: roof.direction,
|
||||||
flipX: roof.flipX,
|
flipX: roof.flipX,
|
||||||
flipY: roof.flipY,
|
flipY: roof.flipY,
|
||||||
surfaceId: surfaceId,
|
surfaceId: surfaceId,
|
||||||
@ -60,16 +61,15 @@ export function useModuleBasicSetting() {
|
|||||||
setupSurface.setViewLengthText(false)
|
setupSurface.setViewLengthText(false)
|
||||||
canvas.add(setupSurface) //모듈설치면 만들기
|
canvas.add(setupSurface) //모듈설치면 만들기
|
||||||
|
|
||||||
if (setupSurface.flowDirection === 'south' || setupSurface.flowDirection === 'north') {
|
const flowLines = {
|
||||||
setupSurface.set({
|
bottom: bottomTopFlowLine(setupSurface).find((obj) => obj.target === 'bottom'),
|
||||||
flowLines: bottomTopFlowLine(setupSurface),
|
top: bottomTopFlowLine(setupSurface).find((obj) => obj.target === 'top'),
|
||||||
})
|
left: leftRightFlowLine(setupSurface).find((obj) => obj.target === 'left'),
|
||||||
} else {
|
right: leftRightFlowLine(setupSurface).find((obj) => obj.target === 'right'),
|
||||||
setupSurface.set({
|
|
||||||
flowLines: leftRightFlowLine(setupSurface),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setupSurface.set({ flowLines: flowLines })
|
||||||
|
|
||||||
//지붕면 선택 금지
|
//지붕면 선택 금지
|
||||||
roof.set({
|
roof.set({
|
||||||
selectable: false,
|
selectable: false,
|
||||||
@ -527,13 +527,40 @@ export function useModuleBasicSetting() {
|
|||||||
return turf.booleanContains(turfModuleSetupSurface, squarePolygon) || turf.booleanWithin(squarePolygon, turfModuleSetupSurface)
|
return turf.booleanContains(turfModuleSetupSurface, squarePolygon) || turf.booleanWithin(squarePolygon, turfModuleSetupSurface)
|
||||||
}
|
}
|
||||||
|
|
||||||
const downFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine) => {
|
const downFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine, isCenter = false) => {
|
||||||
|
let startPoint = flowModuleLine.bottom
|
||||||
|
|
||||||
|
if (isCenter) {
|
||||||
|
//중앙배치일 경우에는 계산한다
|
||||||
|
|
||||||
|
if (flowModuleLine.bottom.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') {
|
||||||
|
//하단 기준으로 양면이 직선이면 하단 방면으로 가운데로 배치
|
||||||
|
const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //밑에 길이에서 반을 가른다
|
||||||
|
const halfModuleWidthLength = width / 2
|
||||||
|
startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength }
|
||||||
|
|
||||||
|
if (flowModuleLine.top.type === 'flat') {
|
||||||
|
//상단까지 평면이면 직사각,정사각이라 가정하고 상자의 중심으로 계산
|
||||||
|
const heightLength = Math.abs(flowModuleLine.left.y1 - flowModuleLine.left.y2) //옆에에 길이에서 반을 가른다
|
||||||
|
const heightMargin = Math.abs(heightLength - height * Math.floor(heightLength / height)) / 2
|
||||||
|
startPoint = { ...startPoint, y1: startPoint.y1 - heightMargin }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else {
|
||||||
|
// //중앙배치가 아닐때도 흐름 방향 기준면으로 양면이 직선이면 가운데 배치
|
||||||
|
// if (flowModuleLine.bottom.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') {
|
||||||
|
// //하단 기준으로 양면이 직선이면 하단 방면으로 가운데로 배치
|
||||||
|
// const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //밑에 길이에서 반을 가른다
|
||||||
|
// const halfModuleWidthLength = width / 2
|
||||||
|
// startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
const maxLeftEndPoint = surfaceMaxLines.left.x1 //최 좌측
|
const maxLeftEndPoint = surfaceMaxLines.left.x1 //최 좌측
|
||||||
const maxRightEndPoint = surfaceMaxLines.right.x1 //최 우측
|
const maxRightEndPoint = surfaceMaxLines.right.x1 //최 우측
|
||||||
const maxTopEndPoint = surfaceMaxLines.top.y1 //최 상단
|
const maxTopEndPoint = surfaceMaxLines.top.y1 //최 상단
|
||||||
|
|
||||||
let startPoint = flowModuleLine.find((obj) => obj.target === 'bottom')
|
|
||||||
|
|
||||||
let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1
|
let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1
|
||||||
let totalTopEndPoint = maxTopEndPoint - startPoint.y1
|
let totalTopEndPoint = maxTopEndPoint - startPoint.y1
|
||||||
let totalWidth = Math.ceil(Math.abs(maxRightEndPoint - maxLeftEndPoint) / width)
|
let totalWidth = Math.ceil(Math.abs(maxRightEndPoint - maxLeftEndPoint) / width)
|
||||||
@ -552,10 +579,6 @@ export function useModuleBasicSetting() {
|
|||||||
chidoriLength = j % 2 === 0 ? 0 : width / 2
|
chidoriLength = j % 2 === 0 ? 0 : width / 2
|
||||||
}
|
}
|
||||||
|
|
||||||
let squarePolygon
|
|
||||||
let turfCoordnates
|
|
||||||
let points
|
|
||||||
|
|
||||||
square = [
|
square = [
|
||||||
[startColPoint + tempMaxWidth * i - chidoriLength, startPoint.y1 - height * j - bottomMargin],
|
[startColPoint + tempMaxWidth * i - chidoriLength, startPoint.y1 - height * j - bottomMargin],
|
||||||
[startColPoint + tempMaxWidth * i + width - chidoriLength, startPoint.y1 - height * j - bottomMargin],
|
[startColPoint + tempMaxWidth * i + width - chidoriLength, startPoint.y1 - height * j - bottomMargin],
|
||||||
@ -564,9 +587,9 @@ export function useModuleBasicSetting() {
|
|||||||
[startColPoint + tempMaxWidth * i - chidoriLength, startPoint.y1 - height * j - bottomMargin],
|
[startColPoint + tempMaxWidth * i - chidoriLength, startPoint.y1 - height * j - bottomMargin],
|
||||||
]
|
]
|
||||||
|
|
||||||
squarePolygon = turf.polygon([square])
|
let squarePolygon = turf.polygon([square])
|
||||||
turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
|
let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
|
||||||
points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
|
let points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
|
||||||
|
|
||||||
let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon })
|
let tempModule = new QPolygon(points, { ...moduleOptions, turfPoints: squarePolygon })
|
||||||
canvas?.add(tempModule)
|
canvas?.add(tempModule)
|
||||||
@ -575,12 +598,29 @@ export function useModuleBasicSetting() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const leftFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine) => {
|
const leftFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine, isCenter = false) => {
|
||||||
let startPoint = flowModuleLine.find((obj) => obj.target === 'left')
|
let startPoint = flowModuleLine.left
|
||||||
|
|
||||||
|
//중앙배치일 경우에는 계산한다
|
||||||
|
if (isCenter) {
|
||||||
|
if (flowModuleLine.left.type === 'flat' && flowModuleLine.bottom.type === 'flat' && flowModuleLine.top.type === 'flat') {
|
||||||
|
//좌측 기준으로 양면이 직선이면 하단 방면으로 가운데로 배치
|
||||||
|
const halfWidthLength = Math.abs(startPoint.y1 + startPoint.y2) / 2 //밑에 길이에서 반을 가른다
|
||||||
|
const halfModuleWidthLength = height / 2
|
||||||
|
startPoint = { ...startPoint, y1: halfWidthLength - halfModuleWidthLength }
|
||||||
|
if (flowModuleLine.right.type === 'flat') {
|
||||||
|
//우측까지 평면이면 직사각,정사각이라 가정하고 상자의 중심으로 계산
|
||||||
|
const widthLength = Math.abs(flowModuleLine.top.x1 - flowModuleLine.top.x2) //옆에에 길이에서 반을 가른다
|
||||||
|
const widthMargin = Math.abs(widthLength - width * Math.floor(widthLength / width)) / 2
|
||||||
|
startPoint = { ...startPoint, x1: startPoint.x1 + widthMargin }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const maxRightEndPoint = surfaceMaxLines.right.x1 //최 우측
|
const maxRightEndPoint = surfaceMaxLines.right.x1 //최 우측
|
||||||
const maxTopEndPoint = surfaceMaxLines.top.y1 //최 상단
|
const maxTopEndPoint = surfaceMaxLines.top.y1 //최 상단
|
||||||
const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //최하단
|
const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //최하단
|
||||||
|
|
||||||
let totalTopEndPoint = Math.abs(maxTopEndPoint - startPoint.y1) //전체 높이에서 현재 높이를 뺌
|
let totalTopEndPoint = Math.abs(maxTopEndPoint - startPoint.y1) //전체 높이에서 현재 높이를 뺌
|
||||||
let diffTopEndPoint = Math.abs(totalTopEndPoint / height)
|
let diffTopEndPoint = Math.abs(totalTopEndPoint / height)
|
||||||
let totalHeight = Math.ceil(Math.abs(maxBottomEndPoint - maxTopEndPoint) / height)
|
let totalHeight = Math.ceil(Math.abs(maxBottomEndPoint - maxTopEndPoint) / height)
|
||||||
@ -596,7 +636,7 @@ export function useModuleBasicSetting() {
|
|||||||
leftMargin = i === 0 ? 0 : 0.5 * i
|
leftMargin = i === 0 ? 0 : 0.5 * i
|
||||||
chidoriLength = 0
|
chidoriLength = 0
|
||||||
if (isChidori) {
|
if (isChidori) {
|
||||||
chidoriLength = j % 2 === 0 ? 0 : height / 2
|
chidoriLength = i % 2 === 0 ? 0 : height / 2
|
||||||
}
|
}
|
||||||
|
|
||||||
square = [
|
square = [
|
||||||
@ -619,12 +659,39 @@ export function useModuleBasicSetting() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const topFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine) => {
|
const topFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine, isCenter = false) => {
|
||||||
let startPoint = flowModuleLine.find((obj) => obj.target === 'top')
|
let startPoint = flowModuleLine.top
|
||||||
|
|
||||||
|
if (isCenter) {
|
||||||
|
//중앙배치일 경우에는 계산한다
|
||||||
|
if (flowModuleLine.top.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') {
|
||||||
|
//하단 기준으로 양면이 직선이면 하단 방면으로 가운데로 배치
|
||||||
|
const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //밑에 길이에서 반을 가른다
|
||||||
|
const halfModuleWidthLength = width / 2
|
||||||
|
startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength }
|
||||||
|
|
||||||
|
if (flowModuleLine.bottom.type === 'flat') {
|
||||||
|
//상단까지 평면이면 직사각,정사각이라 가정하고 상자의 중심으로 계산
|
||||||
|
const heightLength = Math.abs(flowModuleLine.left.y1 - flowModuleLine.left.y2) //옆에에 길이에서 반을 가른다
|
||||||
|
const heightMargin = Math.abs(heightLength - height * Math.floor(heightLength / height)) / 2
|
||||||
|
startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength, y1: startPoint.y1 - heightMargin }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else {
|
||||||
|
// //중앙배치가 아닐때도 흐름 방향 기준면으로 양면이 직선이면 가운데 배치
|
||||||
|
// if (flowModuleLine.bottom.type === 'flat' && flowModuleLine.left.type === 'flat' && flowModuleLine.right.type === 'flat') {
|
||||||
|
// //하단 기준으로 양면이 직선이면 하단 방면으로 가운데로 배치
|
||||||
|
// const halfWidthLength = Math.abs(startPoint.x1 + startPoint.x2) / 2 //밑에 길이에서 반을 가른다
|
||||||
|
// const halfModuleWidthLength = width / 2
|
||||||
|
// startPoint = { ...startPoint, x1: halfWidthLength - halfModuleWidthLength }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
const maxLeftEndPoint = surfaceMaxLines.left.x1 //최 좌측
|
const maxLeftEndPoint = surfaceMaxLines.left.x1 //최 좌측
|
||||||
const maxRightEndPoint = surfaceMaxLines.right.x1 //최 우측
|
const maxRightEndPoint = surfaceMaxLines.right.x1 //최 우측
|
||||||
|
|
||||||
const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //최하단
|
const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //최하단
|
||||||
|
|
||||||
let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1
|
let totalLeftEndPoint = maxLeftEndPoint - startPoint.x1
|
||||||
let totalRightEndPoint = maxLeftEndPoint - maxRightEndPoint
|
let totalRightEndPoint = maxLeftEndPoint - maxRightEndPoint
|
||||||
let totalBottomEndPoint = maxBottomEndPoint - startPoint.y1
|
let totalBottomEndPoint = maxBottomEndPoint - startPoint.y1
|
||||||
@ -661,12 +728,29 @@ export function useModuleBasicSetting() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const rightFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine) => {
|
const rightFlowSetupModule = (surfaceMaxLines, width, height, moduleSetupArray, flowModuleLine, isCenter = false) => {
|
||||||
let startPoint = flowModuleLine.find((obj) => obj.target === 'right')
|
let startPoint = flowModuleLine.right
|
||||||
const maxLeftEndPoint = surfaceMaxLines.left.x1 //최 좌측
|
|
||||||
|
|
||||||
|
if (isCenter) {
|
||||||
|
if (flowModuleLine.left.type === 'flat' && flowModuleLine.bottom.type === 'flat' && flowModuleLine.top.type === 'flat') {
|
||||||
|
//좌측 기준으로 양면이 직선이면 하단 방면으로 가운데로 배치
|
||||||
|
const halfWidthLength = Math.abs(startPoint.y1 + startPoint.y2) / 2 //밑에 길이에서 반을 가른다
|
||||||
|
const halfModuleWidthLength = height / 2
|
||||||
|
startPoint = { ...startPoint, y1: halfWidthLength + halfModuleWidthLength }
|
||||||
|
|
||||||
|
if (flowModuleLine.right.type === 'flat') {
|
||||||
|
//우측까지 평면이면 직사각,정사각이라 가정하고 상자의 중심으로 계산
|
||||||
|
const widthLength = Math.abs(flowModuleLine.top.x1 - flowModuleLine.top.x2) //옆에에 길이에서 반을 가른다
|
||||||
|
const widthMargin = Math.abs(widthLength - width * Math.floor(widthLength / width)) / 2
|
||||||
|
startPoint = { ...startPoint, x1: startPoint.x1 - widthMargin }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const maxLeftEndPoint = surfaceMaxLines.left.x1 //최 좌측
|
||||||
const maxTopEndPoint = surfaceMaxLines.top.y1 //최 상단
|
const maxTopEndPoint = surfaceMaxLines.top.y1 //최 상단
|
||||||
const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //최하단
|
const maxBottomEndPoint = surfaceMaxLines.bottom.y1 //최하단
|
||||||
|
|
||||||
let totalTopEndPoint = Math.abs(maxTopEndPoint - startPoint.y1) //전체 높이에서 현재 높이를 뺌
|
let totalTopEndPoint = Math.abs(maxTopEndPoint - startPoint.y1) //전체 높이에서 현재 높이를 뺌
|
||||||
let diffTopEndPoint = Math.abs(totalTopEndPoint / height)
|
let diffTopEndPoint = Math.abs(totalTopEndPoint / height)
|
||||||
let totalHeight = Math.ceil(Math.abs(maxBottomEndPoint - maxTopEndPoint) / height)
|
let totalHeight = Math.ceil(Math.abs(maxBottomEndPoint - maxTopEndPoint) / height)
|
||||||
@ -743,6 +827,7 @@ export function useModuleBasicSetting() {
|
|||||||
topFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
|
topFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
|
||||||
}
|
}
|
||||||
} else if (setupLocation === 'ridge') {
|
} else if (setupLocation === 'ridge') {
|
||||||
|
//용마루
|
||||||
if (moduleSetupSurface.flowDirection === 'south') {
|
if (moduleSetupSurface.flowDirection === 'south') {
|
||||||
topFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
|
topFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
|
||||||
}
|
}
|
||||||
@ -755,6 +840,20 @@ export function useModuleBasicSetting() {
|
|||||||
if (moduleSetupSurface.flowDirection === 'north') {
|
if (moduleSetupSurface.flowDirection === 'north') {
|
||||||
downFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
|
downFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines)
|
||||||
}
|
}
|
||||||
|
} else if (setupLocation === 'center') {
|
||||||
|
//중가면
|
||||||
|
if (moduleSetupSurface.flowDirection === 'south') {
|
||||||
|
downFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines, true)
|
||||||
|
}
|
||||||
|
if (moduleSetupSurface.flowDirection === 'west') {
|
||||||
|
leftFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines, true)
|
||||||
|
}
|
||||||
|
if (moduleSetupSurface.flowDirection === 'east') {
|
||||||
|
rightFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines, true)
|
||||||
|
}
|
||||||
|
if (moduleSetupSurface.flowDirection === 'north') {
|
||||||
|
topFlowSetupModule(surfaceMaxLines, width, height, moduleSetupArray, moduleSetupSurface.flowLines, true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const setupedModules = moduleSetupArray.filter((module, index) => {
|
const setupedModules = moduleSetupArray.filter((module, index) => {
|
||||||
@ -762,28 +861,26 @@ export function useModuleBasicSetting() {
|
|||||||
let isDisjoint = checkModuleDisjointObjects(module.turfPoints, containsBatchObjects)
|
let isDisjoint = checkModuleDisjointObjects(module.turfPoints, containsBatchObjects)
|
||||||
|
|
||||||
if (!(disjointFromTrestle && isDisjoint)) {
|
if (!(disjointFromTrestle && isDisjoint)) {
|
||||||
// canvas?.remove(module)
|
canvas?.remove(module)
|
||||||
module.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 })
|
// module.set({ fill: 'rgba(255,190,41, 0.4)', stroke: 'black', strokeWidth: 1 })
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
return module
|
return module
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log('setupedModules.length', setupedModules.length)
|
|
||||||
//나간애들 제외하고 설치된 애들로 겹친애들 삭제 하기
|
//나간애들 제외하고 설치된 애들로 겹친애들 삭제 하기
|
||||||
setupedModules.forEach((module, index) => {
|
setupedModules.forEach((module, index) => {
|
||||||
if (isMaxSetup && index > 0) {
|
if (isMaxSetup && index > 0) {
|
||||||
const isOverlap = turf.booleanOverlap(polygonToTurfPolygon(setupedModules[index - 1]), polygonToTurfPolygon(module))
|
const isOverlap = turf.booleanOverlap(polygonToTurfPolygon(setupedModules[index - 1]), polygonToTurfPolygon(module))
|
||||||
console.log(isOverlap)
|
|
||||||
//겹치는지 확인
|
//겹치는지 확인
|
||||||
if (isOverlap) {
|
if (isOverlap) {
|
||||||
//겹쳐있으면 삭제
|
//겹쳐있으면 삭제
|
||||||
// canvas?.remove(module)
|
canvas?.remove(module)
|
||||||
// module.set({ fill: 'rgba(72, 161, 250, 0.4)', stroke: 'black', strokeWidth: 0.1 })
|
// module.set({ fill: 'rgba(72, 161, 250, 0.4)', stroke: 'black', strokeWidth: 0.1 })
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
setupedModules.splice(index, 1)
|
setupedModules.splice(index, 1)
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1054,13 +1151,13 @@ export function useModuleBasicSetting() {
|
|||||||
const pointX2 = coords[2].x + ((coords[2].y - top) / (coords[2].y - coords[1].y)) * (coords[1].x - coords[2].x)
|
const pointX2 = coords[2].x + ((coords[2].y - top) / (coords[2].y - coords[1].y)) * (coords[1].x - coords[2].x)
|
||||||
const pointY2 = top
|
const pointY2 = top
|
||||||
|
|
||||||
const finalLine = new QLine([pointX1, pointY1, pointX2, pointY2], {
|
// const finalLine = new QLine([pointX1, pointY1, pointX2, pointY2], {
|
||||||
stroke: 'red',
|
// stroke: 'red',
|
||||||
strokeWidth: 1,
|
// strokeWidth: 1,
|
||||||
selectable: true,
|
// selectable: true,
|
||||||
})
|
// })
|
||||||
canvas?.add(finalLine)
|
// canvas?.add(finalLine)
|
||||||
canvas?.renderAll()
|
// canvas?.renderAll()
|
||||||
|
|
||||||
let rtnObj
|
let rtnObj
|
||||||
//평평하면
|
//평평하면
|
||||||
@ -1071,14 +1168,14 @@ export function useModuleBasicSetting() {
|
|||||||
//bottom
|
//bottom
|
||||||
standardLine = surface.lines.reduce((acc, line, index) => {
|
standardLine = surface.lines.reduce((acc, line, index) => {
|
||||||
if (line.y1 > acc.y1 || (line.y1 === acc.y1 && line.y2 > acc.y2)) {
|
if (line.y1 > acc.y1 || (line.y1 === acc.y1 && line.y2 > acc.y2)) {
|
||||||
return { x1: line.x1, y1: line.y1, index: index }
|
return { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, index: index }
|
||||||
}
|
}
|
||||||
return acc
|
return acc
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
standardLine = surface.lines.reduce((acc, line, index) => {
|
standardLine = surface.lines.reduce((acc, line, index) => {
|
||||||
if (line.y1 < acc.y1 || (line.y1 === acc.y1 && line.y2 < acc.y2)) {
|
if (line.y1 < acc.y1 || (line.y1 === acc.y1 && line.y2 < acc.y2)) {
|
||||||
return { x1: line.x1, y1: line.y1, index: index }
|
return { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, index: index }
|
||||||
}
|
}
|
||||||
return acc
|
return acc
|
||||||
})
|
})
|
||||||
@ -1087,11 +1184,12 @@ export function useModuleBasicSetting() {
|
|||||||
target: index === 0 ? 'bottom' : 'top',
|
target: index === 0 ? 'bottom' : 'top',
|
||||||
x1: standardLine.x1,
|
x1: standardLine.x1,
|
||||||
y1: standardLine.y1,
|
y1: standardLine.y1,
|
||||||
x2: standardLine.x1 + charlie,
|
x2: standardLine.x2,
|
||||||
y2: standardLine.y1,
|
y2: standardLine.y2,
|
||||||
|
type: 'flat',
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
rtnObj = { target: index === 0 ? 'bottom' : 'top', x1: pointX1, y1: pointY1, x2: pointX2, y2: pointY2 }
|
rtnObj = { target: index === 0 ? 'bottom' : 'top', x1: pointX1, y1: pointY1, x2: pointX2, y2: pointY2, type: 'curve' }
|
||||||
}
|
}
|
||||||
|
|
||||||
rtnObjArray.push(rtnObj)
|
rtnObjArray.push(rtnObj)
|
||||||
@ -1124,7 +1222,6 @@ export function useModuleBasicSetting() {
|
|||||||
)
|
)
|
||||||
flowArray.push(rightFlow)
|
flowArray.push(rightFlow)
|
||||||
|
|
||||||
let idx = 0
|
|
||||||
let rtnObjArray = []
|
let rtnObjArray = []
|
||||||
flowArray.forEach((center, index) => {
|
flowArray.forEach((center, index) => {
|
||||||
const linesArray = surface.lines.filter((line) => {
|
const linesArray = surface.lines.filter((line) => {
|
||||||
@ -1177,13 +1274,13 @@ export function useModuleBasicSetting() {
|
|||||||
const pointX2 = top
|
const pointX2 = top
|
||||||
const pointY2 = coords[2].y + ((coords[2].x - top) / (coords[2].x - coords[1].x)) * (coords[1].y - coords[2].y)
|
const pointY2 = coords[2].y + ((coords[2].x - top) / (coords[2].x - coords[1].x)) * (coords[1].y - coords[2].y)
|
||||||
|
|
||||||
const finalLine = new QLine([pointX1, pointY1, pointX2, pointY2], {
|
// const finalLine = new QLine([pointX1, pointY1, pointX2, pointY2], {
|
||||||
stroke: 'red',
|
// stroke: 'red',
|
||||||
strokeWidth: 1,
|
// strokeWidth: 1,
|
||||||
selectable: true,
|
// selectable: true,
|
||||||
})
|
// })
|
||||||
canvas?.add(finalLine)
|
// canvas?.add(finalLine)
|
||||||
canvas?.renderAll()
|
// canvas?.renderAll()
|
||||||
|
|
||||||
let rtnObj
|
let rtnObj
|
||||||
//평평하면
|
//평평하면
|
||||||
@ -1194,14 +1291,14 @@ export function useModuleBasicSetting() {
|
|||||||
//bottom
|
//bottom
|
||||||
standardLine = surface.lines.reduce((acc, line, index) => {
|
standardLine = surface.lines.reduce((acc, line, index) => {
|
||||||
if (line.x1 < acc.x1 || (line.x1 === acc.x1 && line.y1 < acc.y1)) {
|
if (line.x1 < acc.x1 || (line.x1 === acc.x1 && line.y1 < acc.y1)) {
|
||||||
return { x1: line.x1, y1: line.y1, index: index }
|
return { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, index: index }
|
||||||
}
|
}
|
||||||
return acc
|
return acc
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
standardLine = surface.lines.reduce((acc, line, index) => {
|
standardLine = surface.lines.reduce((acc, line, index) => {
|
||||||
if (line.x1 > acc.x1 || (line.x1 === acc.x1 && line.y1 > acc.y1)) {
|
if (line.x1 > acc.x1 || (line.x1 === acc.x1 && line.y1 > acc.y1)) {
|
||||||
return { x1: line.x1, y1: line.y1, index: index }
|
return { x1: line.x1, y1: line.y1, x2: line.x2, y2: line.y2, index: index }
|
||||||
}
|
}
|
||||||
return acc
|
return acc
|
||||||
})
|
})
|
||||||
@ -1210,11 +1307,12 @@ export function useModuleBasicSetting() {
|
|||||||
target: index === 0 ? 'left' : 'right',
|
target: index === 0 ? 'left' : 'right',
|
||||||
x1: standardLine.x1,
|
x1: standardLine.x1,
|
||||||
y1: standardLine.y1,
|
y1: standardLine.y1,
|
||||||
x2: standardLine.x1,
|
x2: standardLine.x2,
|
||||||
y2: standardLine.y1 + charlie,
|
y2: standardLine.y2,
|
||||||
|
type: 'flat',
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
rtnObj = { target: index === 0 ? 'left' : 'right', x1: pointX1, y1: pointY1, x2: pointX2, y2: pointY2 }
|
rtnObj = { target: index === 0 ? 'left' : 'right', x1: pointX1, y1: pointY1, x2: pointX2, y2: pointY2, type: 'curve' }
|
||||||
}
|
}
|
||||||
rtnObjArray.push(rtnObj)
|
rtnObjArray.push(rtnObj)
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user