모듈 contextmenu 기능 버그 수정 및 다국어 추가

This commit is contained in:
김민식 2025-01-03 14:39:03 +09:00
parent e0f830b33b
commit 63a8ba8505
3 changed files with 177 additions and 163 deletions

View File

@ -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) => {

View File

@ -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)"
} }

View File

@ -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": "모듈을 삽입할 수 없습니다."
} }