#1522 모듈 단삽입 오류 수정
This commit is contained in:
parent
942470dc76
commit
b735a6f54a
@ -1,4 +1,5 @@
|
||||
import { BATCH_TYPE, POLYGON_TYPE } from '@/common/common'
|
||||
import { QPolygon } from '@/components/fabric/QPolygon'
|
||||
import { canvasState } from '@/store/canvasAtom'
|
||||
import { polygonToTurfPolygon } from '@/util/canvas-util'
|
||||
import { useRecoilValue } from 'recoil'
|
||||
@ -44,6 +45,42 @@ export function useModule() {
|
||||
const { clear: removeTrestleMaterials } = useTrestle()
|
||||
const { checkModuleDisjointSurface } = useTurf()
|
||||
|
||||
// clone() 대신 직접 새 QPolygon을 생성하여 Maximum call stack 방지
|
||||
const createModuleCopy = (module, newLeft, newTop, overrides = {}) => {
|
||||
const deltaX = newLeft - module.left
|
||||
const deltaY = newTop - module.top
|
||||
const newPoints = module.points.map((p) => ({
|
||||
x: p.x + deltaX,
|
||||
y: p.y + deltaY,
|
||||
}))
|
||||
return new QPolygon(newPoints, {
|
||||
fill: module.fill,
|
||||
stroke: module.stroke,
|
||||
strokeWidth: module.strokeWidth,
|
||||
opacity: module.opacity,
|
||||
selectable: module.selectable,
|
||||
lockMovementX: module.lockMovementX,
|
||||
lockMovementY: module.lockMovementY,
|
||||
lockRotation: module.lockRotation,
|
||||
lockScalingX: module.lockScalingX,
|
||||
lockScalingY: module.lockScalingY,
|
||||
parentId: module.parentId,
|
||||
initOptions: module.initOptions,
|
||||
direction: module.direction,
|
||||
arrow: module.arrow,
|
||||
name: module.name,
|
||||
surfaceId: module.surfaceId,
|
||||
moduleInfo: module.moduleInfo,
|
||||
left: newLeft,
|
||||
top: newTop,
|
||||
width: module.width,
|
||||
height: module.height,
|
||||
toFixed: 2,
|
||||
sort: false,
|
||||
...overrides,
|
||||
})
|
||||
}
|
||||
|
||||
const moduleMove = (length, direction) => {
|
||||
const selectedObj = canvas.getActiveObjects() //선택된 객체들을 가져옴
|
||||
const selectedIds = selectedObj.map((obj) => obj.id) // selectedObj의 ID 추출
|
||||
@ -256,27 +293,10 @@ export function useModule() {
|
||||
|
||||
modules.forEach((module) => {
|
||||
const { top, left } = getPosotion(module, direction, Number(length) + Number(moduleLength) * 10, false)
|
||||
module.clone((obj) => {
|
||||
obj.set({
|
||||
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,
|
||||
moduleInfo: module.moduleInfo,
|
||||
left,
|
||||
top,
|
||||
id: uuidv4(),
|
||||
})
|
||||
copyModule = obj
|
||||
canvas.add(obj)
|
||||
copyModules.push(obj)
|
||||
obj.setCoords()
|
||||
})
|
||||
copyModule = createModuleCopy(module, left, top)
|
||||
canvas.add(copyModule)
|
||||
copyModules.push(copyModule)
|
||||
copyModule.setCoords()
|
||||
if (isOverlapObjects(copyModule, objects) || isOutsideSurface(copyModule, surface)) {
|
||||
isWarning = true
|
||||
copyModule.set({ fill: 'red' })
|
||||
@ -318,27 +338,10 @@ export function useModule() {
|
||||
canvas.discardActiveObject() //선택해제
|
||||
modules.forEach((module) => {
|
||||
const { top, left } = getPosotion(module, direction, length, true)
|
||||
module.clone((obj) => {
|
||||
obj.set({
|
||||
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,
|
||||
moduleInfo: module.moduleInfo,
|
||||
left,
|
||||
top,
|
||||
id: uuidv4(),
|
||||
})
|
||||
copyModules.push(obj)
|
||||
copyModule = obj
|
||||
canvas.add(obj)
|
||||
canvas.renderAll()
|
||||
})
|
||||
copyModule = createModuleCopy(module, left, top)
|
||||
copyModules.push(copyModule)
|
||||
canvas.add(copyModule)
|
||||
canvas.renderAll()
|
||||
|
||||
if (
|
||||
isOverlapOtherModules(copyModule, otherModules) ||
|
||||
@ -412,29 +415,10 @@ export function useModule() {
|
||||
|
||||
modules.forEach((module) => {
|
||||
const { top, left } = getPosotion(module, direction, Number(length), true)
|
||||
module.clone((obj) => {
|
||||
obj.set({
|
||||
parentId: module.parentId,
|
||||
initOptions: module.initOptions,
|
||||
stroke: 'black',
|
||||
direction: module.direction,
|
||||
arrow: module.arrow,
|
||||
name: module.name,
|
||||
type: module.type,
|
||||
length: module.length,
|
||||
points: module.points,
|
||||
moduleInfo: module.moduleInfo,
|
||||
surfaceId: module.surfaceId,
|
||||
left,
|
||||
top,
|
||||
id: uuidv4(),
|
||||
})
|
||||
copyModule = obj
|
||||
canvas.add(obj)
|
||||
copyModules.push(obj)
|
||||
obj.setCoords()
|
||||
console.log(obj)
|
||||
})
|
||||
copyModule = createModuleCopy(module, left, top, { stroke: 'black' })
|
||||
canvas.add(copyModule)
|
||||
copyModules.push(copyModule)
|
||||
copyModule.setCoords()
|
||||
if (
|
||||
isOverlapOtherModules(copyModule, otherModules) ||
|
||||
isOverlapObjects(copyModule, objects) ||
|
||||
@ -770,28 +754,10 @@ export function useModule() {
|
||||
otherModules = getOtherModules(columnModules)
|
||||
columnModules.forEach((module) => {
|
||||
const { top, left } = getPosotion(module, type, moduleIntvlHor, true)
|
||||
let copyModule = null
|
||||
module.clone((obj) => {
|
||||
obj.set({
|
||||
parentId: module.parentId,
|
||||
initOptions: module.initOptions,
|
||||
direction: module.direction,
|
||||
arrow: module.arrow,
|
||||
name: module.name,
|
||||
type: module.type,
|
||||
length: module.length,
|
||||
points: module.points,
|
||||
moduleInfo: module.moduleInfo,
|
||||
surfaceId: module.surfaceId,
|
||||
left,
|
||||
top,
|
||||
id: uuidv4(),
|
||||
})
|
||||
copyModule = obj
|
||||
canvas.add(obj)
|
||||
copyModules.push(obj)
|
||||
obj.setCoords()
|
||||
})
|
||||
const copyModule = createModuleCopy(module, left, top)
|
||||
canvas.add(copyModule)
|
||||
copyModules.push(copyModule)
|
||||
copyModule.setCoords()
|
||||
canvas.renderAll()
|
||||
|
||||
if (
|
||||
@ -879,29 +845,10 @@ export function useModule() {
|
||||
otherModules = getOtherModules(rowModules)
|
||||
rowModules.forEach((module) => {
|
||||
const { top, left } = getPosotion(module, type, moduleIntvlVer, true)
|
||||
let copyModule = null
|
||||
module.clone((obj) => {
|
||||
obj.set({
|
||||
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,
|
||||
moduleInfo: module.moduleInfo,
|
||||
fill: module.fill,
|
||||
left,
|
||||
top,
|
||||
id: uuidv4(),
|
||||
})
|
||||
copyModule = obj
|
||||
canvas.add(obj)
|
||||
copyModules.push(obj)
|
||||
obj.setCoords()
|
||||
})
|
||||
const copyModule = createModuleCopy(module, left, top)
|
||||
canvas.add(copyModule)
|
||||
copyModules.push(copyModule)
|
||||
copyModule.setCoords()
|
||||
canvas.renderAll()
|
||||
|
||||
if (
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user