모듈 contextmenu 기능 버그 수정 및 다국어 추가
This commit is contained in:
parent
e0f830b33b
commit
63a8ba8505
@ -5,8 +5,8 @@ import { useRecoilValue } from 'recoil'
|
|||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
import * as turf from '@turf/turf'
|
import * as turf from '@turf/turf'
|
||||||
import { useSwal } from '../useSwal'
|
import { useSwal } from '../useSwal'
|
||||||
import { QPolygon } from '@/components/fabric/QPolygon'
|
|
||||||
import { useModuleBasicSetting } from './useModuleBasicSetting'
|
import { useModuleBasicSetting } from './useModuleBasicSetting'
|
||||||
|
import { useMessage } from '../useMessage'
|
||||||
|
|
||||||
export const MODULE_REMOVE_TYPE = {
|
export const MODULE_REMOVE_TYPE = {
|
||||||
LEFT: 'left',
|
LEFT: 'left',
|
||||||
@ -32,6 +32,7 @@ export const MODULE_ALIGN_TYPE = {
|
|||||||
export function useModule() {
|
export function useModule() {
|
||||||
const canvas = useRecoilValue(canvasState)
|
const canvas = useRecoilValue(canvasState)
|
||||||
const { swalFire } = useSwal()
|
const { swalFire } = useSwal()
|
||||||
|
const { getMessage } = useMessage()
|
||||||
const { checkModuleDisjointObjects } = useModuleBasicSetting()
|
const { checkModuleDisjointObjects } = useModuleBasicSetting()
|
||||||
|
|
||||||
const moduleMove = (length, direction) => {
|
const moduleMove = (length, direction) => {
|
||||||
@ -103,7 +104,7 @@ export function useModule() {
|
|||||||
? '모듈이 오브젝트와 겹칩니다.'
|
? '모듈이 오브젝트와 겹칩니다.'
|
||||||
: '영역 밖',
|
: '영역 밖',
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
type: 'confirm',
|
type: 'alert',
|
||||||
confirmFn: () => {
|
confirmFn: () => {
|
||||||
selectedModules.forEach((module) => {
|
selectedModules.forEach((module) => {
|
||||||
module.set({ ...module, left: module.originCoords.left, top: module.originCoords.top })
|
module.set({ ...module, left: module.originCoords.left, top: module.originCoords.top })
|
||||||
@ -127,47 +128,55 @@ export function useModule() {
|
|||||||
const moduleSetupSurface = canvas
|
const moduleSetupSurface = canvas
|
||||||
.getObjects()
|
.getObjects()
|
||||||
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === modules[0].surfaceId)[0]
|
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === modules[0].surfaceId)[0]
|
||||||
let [isOverlapOtherModules, isOverlapObjects, isOutsideSurface] = [[], [], []]
|
let isWarning = false
|
||||||
|
let copyModules = []
|
||||||
|
let copyModule = null
|
||||||
canvas.discardActiveObject() //선택해제
|
canvas.discardActiveObject() //선택해제
|
||||||
modules.forEach((module) => {
|
modules.forEach((module) => {
|
||||||
const { top, left } = getPosotion(module, direction, length, true)
|
const { top, left } = getPosotion(module, direction, length, true)
|
||||||
const moduleOptions = { ...module, left, top, id: uuidv4() }
|
module.clone((obj) => {
|
||||||
const rect = new QPolygon(module.points, moduleOptions)
|
obj.set({
|
||||||
canvas.add(rect)
|
parentId: module.parentId,
|
||||||
rect.setCoords()
|
initOptions: module.initOptions,
|
||||||
canvas.renderAll()
|
direction: module.direction,
|
||||||
|
arrow: module.arrow,
|
||||||
isOverlapOtherModules.push(
|
name: module.name,
|
||||||
otherModules.some(
|
type: module.type,
|
||||||
(otherModule) =>
|
length: module.length,
|
||||||
turf.booleanOverlap(polygonToTurfPolygon(rect, true), polygonToTurfPolygon(otherModule, true)) ||
|
points: module.points,
|
||||||
turf.booleanWithin(polygonToTurfPolygon(rect, true), polygonToTurfPolygon(otherModule, true)),
|
surfaceId: module.surfaceId,
|
||||||
),
|
left,
|
||||||
)
|
top,
|
||||||
|
id: uuidv4(),
|
||||||
isOverlapObjects.push(!checkModuleDisjointObjects(polygonToTurfPolygon(rect, true), objects))
|
})
|
||||||
|
copyModules.push(obj)
|
||||||
isOutsideSurface.push(
|
copyModule = obj
|
||||||
!turf.booleanContains(polygonToTurfPolygon(moduleSetupSurface, true), polygonToTurfPolygon(rect, true)) ||
|
canvas.add(obj)
|
||||||
!turf.booleanWithin(polygonToTurfPolygon(rect, true), polygonToTurfPolygon(moduleSetupSurface, true)),
|
canvas.renderAll()
|
||||||
)
|
})
|
||||||
|
|
||||||
if (
|
if (
|
||||||
isOverlapOtherModules.some((isOverlap) => isOverlap) ||
|
isOverlapOtherModules(copyModule, otherModules) ||
|
||||||
isOutsideSurface.some((isOutside) => isOutside) ||
|
isOverlapObjects(copyModule, objects) ||
|
||||||
isOverlapObjects.some((isOverlap) => isOverlap)
|
isOutsideSurface(copyModule, moduleSetupSurface)
|
||||||
) {
|
) {
|
||||||
swalFire({
|
isWarning = true
|
||||||
title: isOverlapOtherModules ? '겹치는 모듈이 있습니다.' : isOutsideSurface ? '모듈이 오브젝트와 겹칩니다.' : '영역 밖',
|
copyModule.set({ fill: 'red' })
|
||||||
icon: 'error',
|
canvas.renderAll()
|
||||||
type: 'confirm',
|
|
||||||
confirmFn: () => {
|
|
||||||
canvas.remove(rect)
|
|
||||||
canvas.renderAll()
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (isWarning) {
|
||||||
|
swalFire({
|
||||||
|
title: getMessage('can.not.copy.module'),
|
||||||
|
icon: 'error',
|
||||||
|
type: 'alert',
|
||||||
|
confirmFn: () => {
|
||||||
|
canvas.remove(...copyModules)
|
||||||
|
canvas.renderAll()
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const moduleMultiMove = (type, length, direction) => {
|
const moduleMultiMove = (type, length, direction) => {
|
||||||
@ -213,9 +222,9 @@ export function useModule() {
|
|||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
if (isWarning) {
|
if (isWarning) {
|
||||||
swalFire({
|
swalFire({
|
||||||
title: '삭제할 수 없습니다.',
|
title: getMessage('can.not.move.module'),
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
type: 'confirm',
|
type: 'alert',
|
||||||
confirmFn: () => {
|
confirmFn: () => {
|
||||||
modules.forEach((module) => {
|
modules.forEach((module) => {
|
||||||
module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill })
|
module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill })
|
||||||
@ -242,7 +251,8 @@ export function useModule() {
|
|||||||
const modules = type === 'row' ? getRowModules(activeModule) : getColumnModules(activeModule)
|
const modules = type === 'row' ? getRowModules(activeModule) : getColumnModules(activeModule)
|
||||||
const otherModules = canvas.getObjects().filter((obj) => obj.surfaceId === modules[0].surfaceId && obj.name === POLYGON_TYPE.MODULE)
|
const otherModules = canvas.getObjects().filter((obj) => obj.surfaceId === modules[0].surfaceId && obj.name === POLYGON_TYPE.MODULE)
|
||||||
const objects = getObjects()
|
const objects = getObjects()
|
||||||
const copyRects = []
|
const copyModules = []
|
||||||
|
let copyModule = null
|
||||||
const moduleSetupSurface = canvas
|
const moduleSetupSurface = canvas
|
||||||
.getObjects()
|
.getObjects()
|
||||||
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === modules[0].surfaceId)[0]
|
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === modules[0].surfaceId)[0]
|
||||||
@ -256,32 +266,47 @@ export function useModule() {
|
|||||||
|
|
||||||
modules.forEach((module) => {
|
modules.forEach((module) => {
|
||||||
const { top, left } = getPosotion(module, direction, Number(length) + Number(moduleLength), false)
|
const { top, left } = getPosotion(module, direction, Number(length) + Number(moduleLength), false)
|
||||||
const moduleOptions = { ...module, left, top, id: uuidv4() }
|
module.clone((obj) => {
|
||||||
const rect = new QPolygon(module.points, moduleOptions)
|
obj.set({
|
||||||
canvas.add(rect)
|
parentId: module.parentId,
|
||||||
copyRects.push(rect)
|
initOptions: module.initOptions,
|
||||||
module.setCoords()
|
direction: module.direction,
|
||||||
|
arrow: module.arrow,
|
||||||
if (otherModules.length > 0) {
|
name: module.name,
|
||||||
if (isOverlapOtherModules(rect, otherModules) || isOverlapObjects(rect, objects) || isOutsideSurface(rect, moduleSetupSurface)) {
|
type: module.type,
|
||||||
isWarning = true
|
length: module.length,
|
||||||
rect.set({ fill: 'red' })
|
points: module.points,
|
||||||
}
|
surfaceId: module.surfaceId,
|
||||||
|
left,
|
||||||
|
top,
|
||||||
|
id: uuidv4(),
|
||||||
|
})
|
||||||
|
copyModule = obj
|
||||||
|
canvas.add(obj)
|
||||||
|
copyModules.push(obj)
|
||||||
|
obj.setCoords()
|
||||||
|
})
|
||||||
|
if (
|
||||||
|
isOverlapOtherModules(copyModule, otherModules) ||
|
||||||
|
isOverlapObjects(copyModule, objects) ||
|
||||||
|
isOutsideSurface(copyModule, moduleSetupSurface)
|
||||||
|
) {
|
||||||
|
isWarning = true
|
||||||
|
copyModule.set({ fill: 'red' })
|
||||||
}
|
}
|
||||||
|
canvas.renderAll()
|
||||||
})
|
})
|
||||||
canvas.renderAll()
|
|
||||||
if (isWarning) {
|
if (isWarning) {
|
||||||
swalFire({
|
swalFire({
|
||||||
title: '복사할 수 없습니다.',
|
title: getMessage('can.not.copy.module'),
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
type: 'confirm',
|
type: 'alert',
|
||||||
confirmFn: () => {
|
confirmFn: () => {
|
||||||
canvas.remove(...copyRects)
|
canvas.remove(...copyModules)
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
} else {
|
|
||||||
canvas.renderAll()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -313,11 +338,7 @@ export function useModule() {
|
|||||||
module.set({ left: module.left - width })
|
module.set({ left: module.left - width })
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
if (
|
if (isOverlapOtherModules(module, leftModules) || isOverlapObjects(module, objects) || isOutsideSurface(module, moduleSetupSurface)) {
|
||||||
isOverlapOtherModules(module, leftModules) ||
|
|
||||||
!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) ||
|
|
||||||
isOutsideSurface(module, moduleSetupSurface)
|
|
||||||
) {
|
|
||||||
module.set({ fill: 'red' })
|
module.set({ fill: 'red' })
|
||||||
isWarning = true
|
isWarning = true
|
||||||
}
|
}
|
||||||
@ -335,11 +356,7 @@ export function useModule() {
|
|||||||
module.set({ left: module.left + width })
|
module.set({ left: module.left + width })
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
if (
|
if (isOverlapOtherModules(module, rightModules) || isOverlapObjects(module, objects) || isOutsideSurface(module, moduleSetupSurface)) {
|
||||||
isOverlapOtherModules(module, rightModules) ||
|
|
||||||
!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) ||
|
|
||||||
isOutsideSurface(module, moduleSetupSurface)
|
|
||||||
) {
|
|
||||||
module.set({ fill: 'red' })
|
module.set({ fill: 'red' })
|
||||||
isWarning = true
|
isWarning = true
|
||||||
}
|
}
|
||||||
@ -378,7 +395,7 @@ export function useModule() {
|
|||||||
module,
|
module,
|
||||||
sideModules.filter((m) => m.id !== module.id),
|
sideModules.filter((m) => m.id !== module.id),
|
||||||
) ||
|
) ||
|
||||||
!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) ||
|
isOverlapObjects(module, objects) ||
|
||||||
isOutsideSurface(module, moduleSetupSurface)
|
isOutsideSurface(module, moduleSetupSurface)
|
||||||
) {
|
) {
|
||||||
isWarning = true
|
isWarning = true
|
||||||
@ -391,17 +408,18 @@ export function useModule() {
|
|||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
if (isWarning) {
|
if (isWarning) {
|
||||||
swalFire({
|
swalFire({
|
||||||
title: '삭제할 수 없습니다.',
|
title: getMessage('can.not.remove.module'),
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
type: 'alert',
|
type: 'alert',
|
||||||
confirmFn: () => {},
|
confirmFn: () => {
|
||||||
|
canvas.add(...columnModules)
|
||||||
|
targetModules.forEach((module) => {
|
||||||
|
module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill })
|
||||||
|
module.setCoords()
|
||||||
|
})
|
||||||
|
canvas.renderAll()
|
||||||
|
},
|
||||||
})
|
})
|
||||||
canvas.add(...columnModules)
|
|
||||||
targetModules.forEach((module) => {
|
|
||||||
module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill })
|
|
||||||
module.setCoords()
|
|
||||||
})
|
|
||||||
canvas.renderAll()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,11 +452,7 @@ export function useModule() {
|
|||||||
module.set({ top: module.top - height })
|
module.set({ top: module.top - height })
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
if (
|
if (isOverlapOtherModules(module, topModules) || isOverlapObjects(module, objects) || isOutsideSurface(module, moduleSetupSurface)) {
|
||||||
getIsOverlapOtherModules(module, topModules) ||
|
|
||||||
!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) ||
|
|
||||||
getIsOutsideSurface(module, moduleSetupSurface)
|
|
||||||
) {
|
|
||||||
isWarning = true
|
isWarning = true
|
||||||
module.set({ fill: 'red' })
|
module.set({ fill: 'red' })
|
||||||
}
|
}
|
||||||
@ -453,14 +467,10 @@ export function useModule() {
|
|||||||
fill: module.fill,
|
fill: module.fill,
|
||||||
}
|
}
|
||||||
if (height === -1) height = activeModule.top - module.top
|
if (height === -1) height = activeModule.top - module.top
|
||||||
module.set({ top: module.top + height })
|
module.set({ top: module.top + activeModule.height })
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
if (
|
if (isOverlapOtherModules(module, bottomModules) || isOverlapObjects(module, objects) || isOutsideSurface(module, moduleSetupSurface)) {
|
||||||
getIsOverlapOtherModules(module, bottomModules) ||
|
|
||||||
!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) ||
|
|
||||||
getIsOutsideSurface(module, moduleSetupSurface)
|
|
||||||
) {
|
|
||||||
isWarning = true
|
isWarning = true
|
||||||
module.set({ fill: 'red' })
|
module.set({ fill: 'red' })
|
||||||
}
|
}
|
||||||
@ -473,10 +483,10 @@ export function useModule() {
|
|||||||
top: module.top,
|
top: module.top,
|
||||||
fill: module.fill,
|
fill: module.fill,
|
||||||
}
|
}
|
||||||
if (height === -1) height = activeModule.top - module.top
|
// if (height === -1) height = activeModule.top - module.top
|
||||||
|
if (height === -1) height = activeModule.height
|
||||||
module.set({ top: module.top + height / 2 })
|
module.set({ top: module.top + height / 2 })
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
canvas.renderAll()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
bottomModules.forEach((module) => {
|
bottomModules.forEach((module) => {
|
||||||
@ -485,22 +495,22 @@ export function useModule() {
|
|||||||
top: module.top,
|
top: module.top,
|
||||||
fill: module.fill,
|
fill: module.fill,
|
||||||
}
|
}
|
||||||
if (height === -1) height = module.top - activeModule.top
|
// if (height === -1) height = module.top - activeModule.top
|
||||||
|
if (height === -1) height = activeModule.height
|
||||||
module.set({ top: module.top - height / 2 })
|
module.set({ top: module.top - height / 2 })
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
canvas.renderAll()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const sideModules = [...topModules, ...bottomModules]
|
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
|
const sideModules = [...topModules, ...bottomModules]
|
||||||
sideModules.forEach((module) => {
|
sideModules.forEach((module) => {
|
||||||
if (
|
if (
|
||||||
getIsOverlapOtherModules(
|
isOverlapOtherModules(
|
||||||
module,
|
module,
|
||||||
sideModules.filter((m) => m.id !== module.id),
|
sideModules.filter((m) => m.id !== module.id),
|
||||||
) ||
|
) ||
|
||||||
!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) ||
|
isOverlapObjects(module, objects) ||
|
||||||
getIsOutsideSurface(module, moduleSetupSurface)
|
isOutsideSurface(module, moduleSetupSurface)
|
||||||
) {
|
) {
|
||||||
isWarning = true
|
isWarning = true
|
||||||
module.set({ fill: 'red' })
|
module.set({ fill: 'red' })
|
||||||
@ -512,9 +522,9 @@ export function useModule() {
|
|||||||
if (isWarning && type !== MODULE_REMOVE_TYPE.NONE) {
|
if (isWarning && type !== MODULE_REMOVE_TYPE.NONE) {
|
||||||
targetModules.forEach((rect) => rect.set({ fill: 'red' }))
|
targetModules.forEach((rect) => rect.set({ fill: 'red' }))
|
||||||
swalFire({
|
swalFire({
|
||||||
title: '삭제할 수 없습니다.',
|
title: getMessage('can.not.remove.module'),
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
type: 'confirm',
|
type: 'alert',
|
||||||
confirmFn: () => {
|
confirmFn: () => {
|
||||||
canvas.add(...rowModules)
|
canvas.add(...rowModules)
|
||||||
targetModules.forEach((module) => {
|
targetModules.forEach((module) => {
|
||||||
@ -534,7 +544,7 @@ export function useModule() {
|
|||||||
const targetModules =
|
const targetModules =
|
||||||
type === MODULE_INSERT_TYPE.LEFT
|
type === MODULE_INSERT_TYPE.LEFT
|
||||||
? otherModules.filter((module) => module.left < activeModule.left).sort((a, b) => a.left - b.left)
|
? otherModules.filter((module) => module.left < activeModule.left).sort((a, b) => a.left - b.left)
|
||||||
: otherModules.filter((module) => module.left > activeModule.left).sort((a, b) => b.left - a.left)
|
: otherModules.filter((module) => module.left > activeModule.left).sort((a, b) => a.left - b.left)
|
||||||
const objects = getObjects()
|
const objects = getObjects()
|
||||||
const copyModules = []
|
const copyModules = []
|
||||||
const moduleSetupSurface = canvas
|
const moduleSetupSurface = canvas
|
||||||
@ -554,7 +564,7 @@ export function useModule() {
|
|||||||
targetModules.forEach((module) => {
|
targetModules.forEach((module) => {
|
||||||
if (width === -1)
|
if (width === -1)
|
||||||
width = type === MODULE_INSERT_TYPE.LEFT ? Number(activeModule.left) - Number(module.left) : Number(module.left) - Number(activeModule.left)
|
width = type === MODULE_INSERT_TYPE.LEFT ? Number(activeModule.left) - Number(module.left) : Number(module.left) - Number(activeModule.left)
|
||||||
const { top, left } = getPosotion(module, type, width, false)
|
const { top, left } = getPosotion(module, type, module.width, false)
|
||||||
module.originPos = {
|
module.originPos = {
|
||||||
left: module.left,
|
left: module.left,
|
||||||
top: module.top,
|
top: module.top,
|
||||||
@ -562,19 +572,37 @@ export function useModule() {
|
|||||||
}
|
}
|
||||||
module.set({ left, top })
|
module.set({ left, top })
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
if (!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) || isOutsideSurface(module, moduleSetupSurface)) {
|
if (isOverlapObjects(module, objects) || isOutsideSurface(module, moduleSetupSurface)) {
|
||||||
isWarning = true
|
isWarning = true
|
||||||
module.set({ fill: 'red' })
|
module.set({ fill: 'red' })
|
||||||
}
|
}
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
})
|
})
|
||||||
|
canvas.renderAll()
|
||||||
otherModules = getOtherModules(columnModules)
|
otherModules = getOtherModules(columnModules)
|
||||||
columnModules.forEach((module) => {
|
columnModules.forEach((module) => {
|
||||||
const { top, left } = getPosotion(module, type, width, false)
|
const { top, left } = getPosotion(module, type, module.width, false)
|
||||||
const moduleOptions = { ...module, left, top, id: uuidv4() }
|
let copyModule = null
|
||||||
const copyModule = new QPolygon(module.points, moduleOptions)
|
module.clone((obj) => {
|
||||||
canvas.add(copyModule)
|
obj.set({
|
||||||
copyModules.push(copyModule)
|
parentId: module.parentId,
|
||||||
|
initOptions: module.initOptions,
|
||||||
|
direction: module.direction,
|
||||||
|
arrow: module.arrow,
|
||||||
|
name: module.name,
|
||||||
|
type: module.type,
|
||||||
|
length: module.length,
|
||||||
|
points: module.points,
|
||||||
|
surfaceId: module.surfaceId,
|
||||||
|
left,
|
||||||
|
top,
|
||||||
|
id: uuidv4(),
|
||||||
|
})
|
||||||
|
copyModule = obj
|
||||||
|
canvas.add(obj)
|
||||||
|
copyModules.push(obj)
|
||||||
|
obj.setCoords()
|
||||||
|
})
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@ -583,44 +611,21 @@ export function useModule() {
|
|||||||
isOutsideSurface(copyModule, moduleSetupSurface)
|
isOutsideSurface(copyModule, moduleSetupSurface)
|
||||||
) {
|
) {
|
||||||
isWarning = true
|
isWarning = true
|
||||||
copyModule.set({ fill: 'red' })
|
|
||||||
}
|
}
|
||||||
// if (otherModules.length > 0) {
|
|
||||||
// isOverlapOtherModules.push(
|
|
||||||
// otherModules.some(
|
|
||||||
// (otherModule) =>
|
|
||||||
// turf.booleanOverlap(polygonToTurfPolygon(copyModule, true), polygonToTurfPolygon(otherModule, true)) ||
|
|
||||||
// turf.booleanWithin(polygonToTurfPolygon(copyModule, true), polygonToTurfPolygon(otherModule, true)),
|
|
||||||
// ),
|
|
||||||
// )
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (objects.length > 0) {
|
|
||||||
// isOverlapObjects.push(!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects))
|
|
||||||
// }
|
|
||||||
|
|
||||||
// isOutsideSurface.push(
|
|
||||||
// !turf.booleanContains(polygonToTurfPolygon(moduleSetupSurface, true), polygonToTurfPolygon(copyModule, true)) ||
|
|
||||||
// !turf.booleanWithin(polygonToTurfPolygon(copyModule, true), polygonToTurfPolygon(moduleSetupSurface, true)),
|
|
||||||
// )
|
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
})
|
})
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
if (isWarning) {
|
if (isWarning) {
|
||||||
targetModules.forEach((rect) => rect.set({ fill: 'red' }))
|
|
||||||
swalFire({
|
swalFire({
|
||||||
title: '삽입할 수 없습니다.',
|
title: getMessage('can.not.insert.module'),
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
type: 'confirm',
|
type: 'alert',
|
||||||
confirmFn: () => {
|
confirmFn: () => {
|
||||||
targetModules.forEach((module) => {
|
targetModules.forEach((module) => {
|
||||||
module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill })
|
module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill })
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
})
|
})
|
||||||
canvas.renderAll()
|
canvas.remove(...copyModules)
|
||||||
copyModules.forEach((module) => {
|
|
||||||
canvas.remove(module)
|
|
||||||
})
|
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -633,7 +638,7 @@ export function useModule() {
|
|||||||
let otherModules = getOtherModules(rowModules)
|
let otherModules = getOtherModules(rowModules)
|
||||||
const targetModules =
|
const targetModules =
|
||||||
type === MODULE_INSERT_TYPE.TOP
|
type === MODULE_INSERT_TYPE.TOP
|
||||||
? otherModules.filter((module) => module.top < activeModule.top).sort((a, b) => b.top - a.top)
|
? otherModules.filter((module) => module.top < activeModule.top).sort((a, b) => a.top - b.top)
|
||||||
: otherModules.filter((module) => module.top > activeModule.top).sort((a, b) => a.top - b.top)
|
: otherModules.filter((module) => module.top > activeModule.top).sort((a, b) => a.top - b.top)
|
||||||
if (targetModules.length === 0) {
|
if (targetModules.length === 0) {
|
||||||
swalFire({
|
swalFire({
|
||||||
@ -654,39 +659,50 @@ export function useModule() {
|
|||||||
targetModules.forEach((module) => {
|
targetModules.forEach((module) => {
|
||||||
if (height === -1)
|
if (height === -1)
|
||||||
height = type === MODULE_INSERT_TYPE.TOP ? Number(activeModule.top) - Number(module.top) : Number(module.top) - Number(activeModule.top)
|
height = type === MODULE_INSERT_TYPE.TOP ? Number(activeModule.top) - Number(module.top) : Number(module.top) - Number(activeModule.top)
|
||||||
const { top, left } = getPosotion(module, type, height, false)
|
const { top, left } = getPosotion(module, type, activeModule.height, false)
|
||||||
module.originPos = {
|
module.originPos = {
|
||||||
left: module.left,
|
left: module.left,
|
||||||
top: module.top,
|
top: module.top,
|
||||||
fill: module.fill,
|
fill: module.fill,
|
||||||
}
|
}
|
||||||
module.set({ left, top })
|
module.set({ left, top })
|
||||||
canvas.renderAll()
|
if (isOverlapObjects(module, objects) || isOutsideSurface(module, moduleSetupSurface)) {
|
||||||
if (objects.length > 0) {
|
isWarning = true
|
||||||
if (!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) || isOutsideSurface(module, moduleSetupSurface)) {
|
module.set({ fill: 'red' })
|
||||||
isWarning = true
|
|
||||||
module.set({ fill: red })
|
|
||||||
}
|
|
||||||
// isOverlapObjects.push(!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects))
|
|
||||||
}
|
}
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
})
|
})
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
otherModules = getOtherModules(rowModules)
|
otherModules = getOtherModules(rowModules)
|
||||||
rowModules.forEach((module) => {
|
rowModules.forEach((module) => {
|
||||||
const { top, left } = getPosotion(module, type, height, false)
|
const { top, left } = getPosotion(module, type, activeModule.height, false)
|
||||||
const moduleOptions = { ...module, left, top, id: uuidv4(), fill: module.fill }
|
let copyModule = null
|
||||||
const copyModule = new QPolygon(module.points, moduleOptions)
|
module.clone((obj) => {
|
||||||
copyModule.originPos = {
|
obj.set({
|
||||||
fill: copyModule.fill,
|
parentId: module.parentId,
|
||||||
}
|
initOptions: module.initOptions,
|
||||||
canvas.add(copyModule)
|
direction: module.direction,
|
||||||
copyModules.push(copyModule)
|
arrow: module.arrow,
|
||||||
|
name: module.name,
|
||||||
|
type: module.type,
|
||||||
|
length: module.length,
|
||||||
|
points: module.points,
|
||||||
|
surfaceId: module.surfaceId,
|
||||||
|
fill: module.fill,
|
||||||
|
left,
|
||||||
|
top,
|
||||||
|
id: uuidv4(),
|
||||||
|
})
|
||||||
|
copyModule = obj
|
||||||
|
canvas.add(obj)
|
||||||
|
copyModules.push(obj)
|
||||||
|
obj.setCoords()
|
||||||
|
})
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
|
|
||||||
if (
|
if (
|
||||||
isOverlapOtherModules(copyModule, otherModules) ||
|
isOverlapOtherModules(copyModule, otherModules) ||
|
||||||
!checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects) ||
|
isOverlapObjects(copyModule, objects) ||
|
||||||
isOutsideSurface(copyModule, moduleSetupSurface)
|
isOutsideSurface(copyModule, moduleSetupSurface)
|
||||||
) {
|
) {
|
||||||
isWarning = true
|
isWarning = true
|
||||||
@ -698,21 +714,15 @@ export function useModule() {
|
|||||||
|
|
||||||
if (isWarning) {
|
if (isWarning) {
|
||||||
swalFire({
|
swalFire({
|
||||||
title: '삽입할 수 없습니다.',
|
title: getMessage('can.not.insert.module'),
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
type: 'confirm',
|
type: 'alert',
|
||||||
confirmFn: () => {
|
confirmFn: () => {
|
||||||
targetModules.forEach((module) => {
|
targetModules.forEach((module) => {
|
||||||
module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill })
|
module.set({ top: module.originPos.top, left: module.originPos.left, fill: module.originPos.fill })
|
||||||
module.setCoords()
|
module.setCoords()
|
||||||
})
|
})
|
||||||
copyModules.forEach((module) => {
|
canvas.remove(...copyModules)
|
||||||
module.set({ fill: module.originPos.fill })
|
|
||||||
})
|
|
||||||
canvas.renderAll()
|
|
||||||
copyModules.forEach((module) => {
|
|
||||||
canvas.remove(module)
|
|
||||||
})
|
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -730,11 +740,7 @@ export function useModule() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const isOverlapObjects = (module, objects) => {
|
const isOverlapObjects = (module, objects) => {
|
||||||
return !objects.some(
|
return !checkModuleDisjointObjects(polygonToTurfPolygon(module, true), objects)
|
||||||
(object) =>
|
|
||||||
turf.booleanOverlap(polygonToTurfPolygon(module, true), polygonToTurfPolygon(object, true)) ||
|
|
||||||
turf.booleanWithin(polygonToTurfPolygon(module, true), polygonToTurfPolygon(object, true)),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const isOutsideSurface = (module, moduleSetupSurface) => {
|
const isOutsideSurface = (module, moduleSetupSurface) => {
|
||||||
|
|||||||
@ -933,5 +933,9 @@
|
|||||||
"simulator.table.sub9": "予測発電量 (kWh)",
|
"simulator.table.sub9": "予測発電量 (kWh)",
|
||||||
"simulator.notice.sub1": "Hanwha Japan 年間発電量",
|
"simulator.notice.sub1": "Hanwha Japan 年間発電量",
|
||||||
"simulator.notice.sub2": "シミュレーション案内事項",
|
"simulator.notice.sub2": "シミュレーション案内事項",
|
||||||
"master.moduletypeitem.message.error": "지붕재 코드를 입력하세요."
|
"master.moduletypeitem.message.error": "지붕재 코드를 입력하세요.",
|
||||||
|
"can.not.move.module": "모듈을 이동할 수 없습니다.(JA)",
|
||||||
|
"can.not.copy.module": "모듈을 복사할 수 없습니다.(JA)",
|
||||||
|
"can.not.remove.module": "모듈을 삭제할 수 없습니다.(JA)",
|
||||||
|
"can.not.insert.module": "모듈을 삽입할 수 없습니다.(JA)"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -943,5 +943,9 @@
|
|||||||
"simulator.table.sub9": "예측발전량 (kWh)",
|
"simulator.table.sub9": "예측발전량 (kWh)",
|
||||||
"simulator.notice.sub1": "Hanwha Japan 연간 발전량",
|
"simulator.notice.sub1": "Hanwha Japan 연간 발전량",
|
||||||
"simulator.notice.sub2": "시뮬레이션 안내사항",
|
"simulator.notice.sub2": "시뮬레이션 안내사항",
|
||||||
"master.moduletypeitem.message.error": "지붕재 코드를 입력하세요."
|
"master.moduletypeitem.message.error": "지붕재 코드를 입력하세요.",
|
||||||
|
"can.not.move.module": "모듈을 이동할 수 없습니다.",
|
||||||
|
"can.not.copy.module": "모듈을 복사할 수 없습니다.",
|
||||||
|
"can.not.remove.module": "모듈을 삭제할 수 없습니다.",
|
||||||
|
"can.not.insert.module": "모듈을 삽입할 수 없습니다."
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user