모듈 가대 설치 작업중
This commit is contained in:
parent
b872930043
commit
9554708dfa
@ -62,6 +62,8 @@ export function useModuleBasicSetting() {
|
|||||||
|
|
||||||
//설치 범위 지정 클릭 이벤트
|
//설치 범위 지정 클릭 이벤트
|
||||||
const toggleSelection = (setupSurface) => {
|
const toggleSelection = (setupSurface) => {
|
||||||
|
console.log('setupSurface', setupSurface)
|
||||||
|
|
||||||
const isExist = selectedModuleInstSurfaceArray.some((obj) => obj.parentId === setupSurface.parentId)
|
const isExist = selectedModuleInstSurfaceArray.some((obj) => obj.parentId === setupSurface.parentId)
|
||||||
//최초 선택일때
|
//최초 선택일때
|
||||||
if (!isExist) {
|
if (!isExist) {
|
||||||
@ -379,6 +381,7 @@ export function useModuleBasicSetting() {
|
|||||||
const autoModuleSetup = () => {
|
const autoModuleSetup = () => {
|
||||||
initEvent()
|
initEvent()
|
||||||
const moduleSetupSurfaces = moduleSetupSurface //선택 설치면
|
const moduleSetupSurfaces = moduleSetupSurface //선택 설치면
|
||||||
|
|
||||||
const notSelectedTrestlePolygons = canvas
|
const notSelectedTrestlePolygons = canvas
|
||||||
?.getObjects()
|
?.getObjects()
|
||||||
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && !moduleSetupSurfaces.includes(obj)) //설치면이 아닌것
|
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && !moduleSetupSurfaces.includes(obj)) //설치면이 아닌것
|
||||||
@ -464,6 +467,13 @@ export function useModuleBasicSetting() {
|
|||||||
|
|
||||||
const bbox = turf.bbox(difference)
|
const bbox = turf.bbox(difference)
|
||||||
|
|
||||||
|
let surfaceBbox = {
|
||||||
|
minX: bbox[0],
|
||||||
|
maxX: bbox[2],
|
||||||
|
minY: bbox[1],
|
||||||
|
maxY: bbox[3],
|
||||||
|
}
|
||||||
|
|
||||||
let width = maxLengthLine.flowDirection === 'right' || maxLengthLine.flowDirection === 'left' ? 172.2 : 113.4
|
let width = maxLengthLine.flowDirection === 'right' || maxLengthLine.flowDirection === 'left' ? 172.2 : 113.4
|
||||||
let height = maxLengthLine.flowDirection === 'right' || maxLengthLine.flowDirection === 'left' ? 113.4 : 172.2
|
let height = maxLengthLine.flowDirection === 'right' || maxLengthLine.flowDirection === 'left' ? 113.4 : 172.2
|
||||||
|
|
||||||
@ -475,16 +485,21 @@ export function useModuleBasicSetting() {
|
|||||||
const cols = Math.floor((bbox[2] - bbox[0]) / width)
|
const cols = Math.floor((bbox[2] - bbox[0]) / width)
|
||||||
const rows = Math.floor((bbox[3] - bbox[1]) / height)
|
const rows = Math.floor((bbox[3] - bbox[1]) / height)
|
||||||
|
|
||||||
|
let startCoords = { x: 0, y: 0 }
|
||||||
|
if (moduleSetupSurface.flowDirection === 'south') {
|
||||||
|
startCoords = {
|
||||||
|
x: surfaceBbox.minX,
|
||||||
|
y: surfaceBbox.maxY,
|
||||||
|
}
|
||||||
|
}
|
||||||
for (let col = 0; col <= cols; col++) {
|
for (let col = 0; col <= cols; col++) {
|
||||||
for (let row = 0; row <= rows; row++) {
|
for (let row = 0; row <= rows; row++) {
|
||||||
let x = 0,
|
let x = 0,
|
||||||
y = 0,
|
y = 0,
|
||||||
square = [],
|
square = [],
|
||||||
margin = 0
|
margin = 0
|
||||||
|
|
||||||
if (moduleSetupSurface.flowDirection !== undefined) {
|
if (moduleSetupSurface.flowDirection !== undefined) {
|
||||||
//배치면 처림 방향이 정해져있는 경우
|
//배치면 처림 방향이 정해져있는 경우
|
||||||
|
|
||||||
if (moduleSetupSurface.flowDirection === 'south' || moduleSetupSurface.flowDirection === 'north') {
|
if (moduleSetupSurface.flowDirection === 'south' || moduleSetupSurface.flowDirection === 'north') {
|
||||||
//남,북
|
//남,북
|
||||||
margin = (bbox[2] - bbox[0] - cols * width) / 2 //박스 끝에서 박스 시작값을 빼고 width와 계산된 cols를 곱한값을 뺀뒤 나누기 2 하면 가운데 배치됨
|
margin = (bbox[2] - bbox[0] - cols * width) / 2 //박스 끝에서 박스 시작값을 빼고 width와 계산된 cols를 곱한값을 뺀뒤 나누기 2 하면 가운데 배치됨
|
||||||
@ -513,7 +528,6 @@ export function useModuleBasicSetting() {
|
|||||||
x = bbox[0] + col * width
|
x = bbox[0] + col * width
|
||||||
y = bbox[1] + row * height
|
y = bbox[1] + row * height
|
||||||
}
|
}
|
||||||
|
|
||||||
square = [
|
square = [
|
||||||
[x, y],
|
[x, y],
|
||||||
[x + width, y],
|
[x + width, y],
|
||||||
@ -521,18 +535,14 @@ export function useModuleBasicSetting() {
|
|||||||
[x, y + height],
|
[x, y + height],
|
||||||
[x, y],
|
[x, y],
|
||||||
]
|
]
|
||||||
|
|
||||||
const squarePolygon = turf.polygon([square])
|
const squarePolygon = turf.polygon([square])
|
||||||
const disjointFromTrestle =
|
const disjointFromTrestle =
|
||||||
turf.booleanContains(turfModuleSetupSurface, squarePolygon) || turf.booleanWithin(squarePolygon, turfModuleSetupSurface)
|
turf.booleanContains(turfModuleSetupSurface, squarePolygon) || turf.booleanWithin(squarePolygon, turfModuleSetupSurface)
|
||||||
|
|
||||||
if (disjointFromTrestle) {
|
if (disjointFromTrestle) {
|
||||||
let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
|
let turfCoordnates = squarePolygon.geometry.coordinates[0].slice(0, -1)
|
||||||
const points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
|
const points = turfCoordnates.map((coord) => ({ x: coord[0], y: coord[1] }))
|
||||||
|
|
||||||
if (containsBatchObjects.length > 0) {
|
if (containsBatchObjects.length > 0) {
|
||||||
let convertBatchObject
|
let convertBatchObject
|
||||||
|
|
||||||
//도머가 있으면 적용되는 로직
|
//도머가 있으면 적용되는 로직
|
||||||
const isDisjoint = containsBatchObjects.every((batchObject) => {
|
const isDisjoint = containsBatchObjects.every((batchObject) => {
|
||||||
if (batchObject.type === 'group') {
|
if (batchObject.type === 'group') {
|
||||||
@ -540,10 +550,8 @@ export function useModuleBasicSetting() {
|
|||||||
} else {
|
} else {
|
||||||
convertBatchObject = polygonToTurfPolygon(batchObject)
|
convertBatchObject = polygonToTurfPolygon(batchObject)
|
||||||
}
|
}
|
||||||
|
|
||||||
return turf.booleanDisjoint(squarePolygon, convertBatchObject) //도머가 여러개일수있으므로 겹치는게 있다면...
|
return turf.booleanDisjoint(squarePolygon, convertBatchObject) //도머가 여러개일수있으므로 겹치는게 있다면...
|
||||||
})
|
})
|
||||||
|
|
||||||
if (isDisjoint) {
|
if (isDisjoint) {
|
||||||
const tempModule = new QPolygon(points, {
|
const tempModule = new QPolygon(points, {
|
||||||
fill: '#BFFD9F',
|
fill: '#BFFD9F',
|
||||||
@ -621,6 +629,34 @@ export function useModuleBasicSetting() {
|
|||||||
return hull
|
return hull
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//도형의 내각을 구하는 로직
|
||||||
|
function calculateInteriorAngles(polygon) {
|
||||||
|
const points = polygon.get('points')
|
||||||
|
const angles = []
|
||||||
|
|
||||||
|
for (let i = 0; i < points.length; i++) {
|
||||||
|
// 현재 점과 이전 및 다음 점 정의
|
||||||
|
const current = points[i]
|
||||||
|
const prev = points[(i - 1 + points.length) % points.length]
|
||||||
|
const next = points[(i + 1) % points.length]
|
||||||
|
|
||||||
|
// 벡터 계산
|
||||||
|
const vecA = { x: prev.x - current.x, y: prev.y - current.y }
|
||||||
|
const vecB = { x: next.x - current.x, y: next.y - current.y }
|
||||||
|
|
||||||
|
// 두 벡터 간 각도 계산
|
||||||
|
const dotProduct = vecA.x * vecB.x + vecA.y * vecB.y
|
||||||
|
const magA = Math.sqrt(vecA.x * vecA.x + vecA.y * vecA.y)
|
||||||
|
const magB = Math.sqrt(vecB.x * vecB.x + vecB.y * vecB.y)
|
||||||
|
const angleRad = Math.acos(dotProduct / (magA * magB))
|
||||||
|
const angleDeg = (angleRad * 180) / Math.PI
|
||||||
|
|
||||||
|
// 내부 각도 저장
|
||||||
|
angles.push(180 - angleDeg)
|
||||||
|
}
|
||||||
|
return angles
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
makeModuleInstArea,
|
makeModuleInstArea,
|
||||||
manualModuleSetup,
|
manualModuleSetup,
|
||||||
|
|||||||
@ -419,8 +419,8 @@ export function useSurfaceShapeBatch() {
|
|||||||
{
|
{
|
||||||
fill: 'transparent',
|
fill: 'transparent',
|
||||||
stroke: 'black', //black
|
stroke: 'black', //black
|
||||||
strokeWidth: 2,
|
strokeWidth: 1,
|
||||||
selectable: true,
|
selectable: false,
|
||||||
fontSize: 0,
|
fontSize: 0,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -429,6 +429,7 @@ export function useSurfaceShapeBatch() {
|
|||||||
const scale = (length1 - length2) / coord.x
|
const scale = (length1 - length2) / coord.x
|
||||||
|
|
||||||
tmpPolygon.set({ scaleX: scale })
|
tmpPolygon.set({ scaleX: scale })
|
||||||
|
tmpPolygon.setViewLengthText(false)
|
||||||
|
|
||||||
pointsArray[0].x = 0
|
pointsArray[0].x = 0
|
||||||
pointsArray[0].y = length3 //바닥면부터 시작하게
|
pointsArray[0].y = length3 //바닥면부터 시작하게
|
||||||
@ -584,18 +585,6 @@ export function useSurfaceShapeBatch() {
|
|||||||
text: '배치면 내용을 전부 삭제하시겠습니까?',
|
text: '배치면 내용을 전부 삭제하시겠습니까?',
|
||||||
type: 'confirm',
|
type: 'confirm',
|
||||||
confirmFn: () => {
|
confirmFn: () => {
|
||||||
// canvas?.getObjects().forEach((obj) => {
|
|
||||||
// if (
|
|
||||||
// obj.name === POLYGON_TYPE.ROOF ||
|
|
||||||
// obj.name === BATCH_TYPE.OPENING ||
|
|
||||||
// obj.name === BATCH_TYPE.SHADOW ||
|
|
||||||
// obj.name === BATCH_TYPE.TRIANGLE_DORMER ||
|
|
||||||
// obj.name === BATCH_TYPE.PENTAGON_DORMER ||
|
|
||||||
// obj.name === 'lengthText'
|
|
||||||
// ) {
|
|
||||||
// canvas?.remove(obj)
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
canvas.clear()
|
canvas.clear()
|
||||||
swalFire({ text: '삭제 완료 되었습니다.' })
|
swalFire({ text: '삭제 완료 되었습니다.' })
|
||||||
},
|
},
|
||||||
@ -661,34 +650,6 @@ export function useSurfaceShapeBatch() {
|
|||||||
return groupObjectsArray
|
return groupObjectsArray
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAllRelatedObjects(id) {
|
|
||||||
const ult = []
|
|
||||||
const map = new Map()
|
|
||||||
|
|
||||||
// Create a map of objects by their id
|
|
||||||
canvas.getObjects().forEach((obj) => {
|
|
||||||
map.set(obj.id, obj)
|
|
||||||
})
|
|
||||||
|
|
||||||
// Helper function to recursively find all related objects
|
|
||||||
function findRelatedObjects(id) {
|
|
||||||
const obj = map.get(id)
|
|
||||||
if (obj) {
|
|
||||||
result.push(obj)
|
|
||||||
canvas.getObjects().forEach((o) => {
|
|
||||||
if (o.parentId === id) {
|
|
||||||
findRelatedObjects(o.id)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start the search with the given parentId
|
|
||||||
findRelatedObjects(id)
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
const moveSurfaceShapeBatch = () => {
|
const moveSurfaceShapeBatch = () => {
|
||||||
const roof = canvas.getActiveObject()
|
const roof = canvas.getActiveObject()
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user