From 860ddec138a0e1a623f0fb45f7efd1098919a38b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=8B=9D?=
<43837214+Minsiki@users.noreply.github.com>
Date: Mon, 30 Dec 2024 10:55:13 +0900
Subject: [PATCH] module copy, move
---
.../modal/module/column/ColumnInsert.jsx | 32 ++++++---
src/hooks/module/useModule.js | 65 ++++++++++++++++++-
2 files changed, 86 insertions(+), 11 deletions(-)
diff --git a/src/components/floor-plan/modal/module/column/ColumnInsert.jsx b/src/components/floor-plan/modal/module/column/ColumnInsert.jsx
index 8239dc33..56f9a66c 100644
--- a/src/components/floor-plan/modal/module/column/ColumnInsert.jsx
+++ b/src/components/floor-plan/modal/module/column/ColumnInsert.jsx
@@ -5,20 +5,22 @@ import { usePopup } from '@/hooks/usePopup'
import { useMessage } from '@/hooks/useMessage'
import { useState } from 'react'
import Image from 'next/image'
+import { MODULE_INSERT_TYPE, useModule } from '@/hooks/module/useModule'
export default function ColumnInsert(props) {
const contextPopupPosition = useRecoilValue(contextPopupPositionState)
const { id, pos = contextPopupPosition, apply } = props
const { closePopup } = usePopup()
- const [selectedType, setSelectedType] = useState(1)
+ const [selectedType, setSelectedType] = useState(MODULE_INSERT_TYPE.LEFT)
const { getMessage } = useMessage()
+ const { moduleColumnInsert } = useModule()
const handleApply = () => {
- if (apply) apply()
+ moduleColumnInsert(selectedType)
closePopup(id)
}
- const HandleRadioChange = (e) => {
- setSelectedType(Number(e.target.value))
+ const handleRadioChange = (e) => {
+ setSelectedType(e.target.value)
}
return (
@@ -36,16 +38,30 @@ export default function ColumnInsert(props) {
- {selectedType === 1 && (
+ {selectedType === MODULE_INSERT_TYPE.LEFT && (
)}
- {selectedType === 2 && (
+ {selectedType === MODULE_INSERT_TYPE.RIGHT && (
obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === modules[0].surfaceId)[0]
let [isOverlapOtherModules, isOverlapObjects, isOutsideSurface] = [[], [], []]
+ let moduleLength = 0
+ if (type === 'column') {
+ moduleLength = Number(modules[modules.length - 1].top) + Number(modules[modules.length - 1].height) - Number(modules[0].top)
+ } else if (type === 'row') {
+ moduleLength = Number(modules[modules.length - 1].left) + Number(modules[modules.length - 1].width) - Number(modules[0].left)
+ }
+ console.log('🚀 ~ moduleMultiCopy ~ modules:', modules)
+ console.log('🚀 ~ moduleMultiCopy ~ moduleLength:', moduleLength)
modules.forEach((module) => {
- const { top, left } = getPosotion(module, direction, length, false)
+ const { top, left } = getPosotion(module, direction, Number(length) + Number(moduleLength), false)
+ console.log('🚀 ~ modules.forEach ~ top:', top)
const moduleOptions = { ...module, left, top, id: uuidv4() }
const rect = new QPolygon(module.getCurrentPoints(), moduleOptions)
canvas.add(rect)
@@ -529,13 +545,55 @@ export function useModule() {
}
canvas.renderAll()
}
+ // 좌우 ì—´ ì˜®ê¸°ê³ current Column 복사하기.
+ const moduleColumnInsert = (type) => {
+ const activeModule = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0]
+ const columnModules = getColumnModules(activeModule)
+ const otherModules = getOtherModules(columnModules)
+ const targetModules =
+ 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) => b.left - a.left)
+ const objects = getObjects()
+ const copyRects = []
+ const moduleSetupSurface = canvas
+ .getObjects()
+ .filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE && obj.id === activeModule.surfaceId)[0]
+ let width = -1
+ let [isOverlapOtherModules, isOverlapObjects, isOutsideSurface] = [[], [], []]
+
+ targetModules.forEach((module) => {
+ if (width === -1) width = type === MODULE_INSERT_TYPE.LEFT ? module.left - activeModule.left : activeModule.left - module.left
+ const { left } = getPosotion(module, type, width, false)
+ const moduleOptions = { ...module, left, top, id: uuidv4() }
+ module.set({ left })
+ // const rect = new QPolygon(module.getCurrentPoints(), moduleOptions)
+ // canvas.add(rect)
+ // copyRects.push(rect)
+ module.setCoords()
+ })
+ // columnModules.forEach((module) => {
+ // const { top, left } = getPosotion(module, MODULE_INSERT_TYPE.LEFT, module.width, false)
+ // const moduleOptions = { ...module, left, top, id: uuidv4() }
+ // const rect = new QPolygon(module.getCurrentPoints(), moduleOptions)
+ // canvas.add(rect)
+ // copyRects.push(rect)
+ // module.setCoords()
+ // })
+ }
const getRowModules = (target) => {
- return canvas.getObjects().filter((obj) => target.surfaceId === obj.surfaceId && obj.name === POLYGON_TYPE.MODULE && obj.top === target.top)
+ return canvas
+ .getObjects()
+ .filter((obj) => target.surfaceId === obj.surfaceId && obj.name === POLYGON_TYPE.MODULE && obj.top === target.top)
+ .sort((a, b) => a.left - b.left)
}
const getColumnModules = (target) => {
- return canvas.getObjects().filter((obj) => target.surfaceId === obj.surfaceId && obj.name === POLYGON_TYPE.MODULE && obj.left === target.left)
+ return canvas
+ .getObjects()
+ .filter((obj) => target.surfaceId === obj.surfaceId && obj.name === POLYGON_TYPE.MODULE && obj.left === target.left)
+ .sort((a, b) => a.top - b.top)
}
const getPosotion = (target, direction, length, hasMargin = false) => {
@@ -601,5 +659,6 @@ export function useModule() {
moduleMultiCopy,
moduleColumnRemove,
moduleRowRemove,
+ moduleColumnInsert,
}
}