From 85896212edbf39f1a7d33d6c76248c463d9a33d4 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Thu, 5 Mar 2026 12:38:21 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=90=EA=B7=B8=EB=A6=AC=EB=93=9C=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../floor-plan/modal/setting01/GridOption.jsx | 16 ++-- src/hooks/common/useGrid.js | 86 +++++++++---------- src/hooks/useEvent.js | 5 ++ 3 files changed, 51 insertions(+), 56 deletions(-) diff --git a/src/components/floor-plan/modal/setting01/GridOption.jsx b/src/components/floor-plan/modal/setting01/GridOption.jsx index 76b8fc1c..5931b561 100644 --- a/src/components/floor-plan/modal/setting01/GridOption.jsx +++ b/src/components/floor-plan/modal/setting01/GridOption.jsx @@ -152,16 +152,12 @@ export default function GridOption(props) {

{getMessage('modal.canvas.setting.grid')}

- {gridOptions?.map((option) => - option.id === 2 ? ( - <> - ) : ( - - ), - )} + {gridOptions?.map((option) => ( + + ))}
{/**/} diff --git a/src/hooks/common/useGrid.js b/src/hooks/common/useGrid.js index 4d427b21..9f8c72dd 100644 --- a/src/hooks/common/useGrid.js +++ b/src/hooks/common/useGrid.js @@ -39,56 +39,50 @@ export function useGrid() { //const verticalInterval = interval.verticalInterval if (patternData.dotGridDisplay) { - const circle = new fabric.Circle({ - radius: 2, - fill: 'red', - strokeWidth: 0.7, - originX: 'center', - originY: 'center', - selectable: false, - lockMovementX: true, - lockMovementY: true, - lockRotation: true, - lockScalingX: true, - lockScalingY: true, - }) + const canvasWidth = canvas.getWidth() + const canvasHeight = canvas.getHeight() + const currentZoom = canvas.getZoom() + const viewportTransform = canvas.viewportTransform - const patternSourceCanvas = new fabric.StaticCanvas(null, { - width: patternData.gridHorizon, - height: patternData.gridVertical, - }) + const visibleLeft = -viewportTransform[4] / currentZoom + const visibleTop = -viewportTransform[5] / currentZoom + const visibleRight = visibleLeft + canvasWidth / currentZoom + const visibleBottom = visibleTop + canvasHeight / currentZoom - patternSourceCanvas.add(circle) + const padding = 200 + const gridLeft = visibleLeft - padding + const gridTop = visibleTop - padding + const gridRight = visibleRight + padding + const gridBottom = visibleBottom + padding - circle.set({ - left: patternSourceCanvas.width / 2, - top: patternSourceCanvas.height / 2, - }) + const horizontalCount = Math.ceil((gridRight - gridLeft) / patternData.gridHorizon) + 1 + const verticalCount = Math.ceil((gridBottom - gridTop) / patternData.gridVertical) + 1 - patternSourceCanvas.renderAll() - - const pattern = new fabric.Pattern({ - source: patternSourceCanvas.getElement(), - repeat: 'repeat', - }) - - const backgroundPolygon = new fabric.Polygon( - [ - { x: -1500, y: -1500 }, - { x: 2500, y: -1500 }, - { x: 2500, y: 2500 }, - { x: -1500, y: 2500 }, - ], - { - fill: pattern, - selectable: false, - name: 'dotGrid', - visible: isGridDisplay, - }, - ) - - canvas.add(backgroundPolygon) - backgroundPolygon.sendToBack() + for (let i = 0; i < horizontalCount; i++) { + for (let j = 0; j < verticalCount; j++) { + const dot = new fabric.Circle({ + left: gridLeft + i * patternData.gridHorizon, + top: gridTop + j * patternData.gridVertical, + radius: 2, + fill: 'red', + stroke: null, + strokeWidth: 0, + originX: 'center', + originY: 'center', + selectable: true, + lockMovementX: true, + lockMovementY: true, + lockRotation: true, + lockScalingX: true, + lockScalingY: true, + name: 'dotGrid', + padding: GRID_PADDING, + visible: isGridDisplay, + }) + canvas.add(dot) + dot.sendToBack() + } + } canvas.renderAll() } diff --git a/src/hooks/useEvent.js b/src/hooks/useEvent.js index 8caa90ea..939f69f5 100644 --- a/src/hooks/useEvent.js +++ b/src/hooks/useEvent.js @@ -218,7 +218,12 @@ export function useEvent() { }) }) + const dotGridPoints = canvas.getObjects() + .filter((obj) => obj.name === 'dotGrid') + .map((obj) => ({ x: obj.left, y: obj.top })) + let adsorptionPoints = [ + ...dotGridPoints, ...getAdsorptionPoints(), ...roofAdsorptionPoints.current, ...otherAdsorptionPoints,