From 557f43669b6e9ff731bf64d93a3228dc3f8d0430 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Wed, 30 Oct 2024 13:19:47 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B9=98=EC=88=98=EC=84=A0=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=EB=B3=80=EA=B2=BD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dimensionLine/DimensionLineSetting.jsx | 44 ++++++++++++++++--- src/hooks/usePlan.js | 2 - src/store/commonAtom.js | 25 ++++++++++- 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/src/components/floor-plan/modal/dimensionLine/DimensionLineSetting.jsx b/src/components/floor-plan/modal/dimensionLine/DimensionLineSetting.jsx index d24d8d43..d436e4ab 100644 --- a/src/components/floor-plan/modal/dimensionLine/DimensionLineSetting.jsx +++ b/src/components/floor-plan/modal/dimensionLine/DimensionLineSetting.jsx @@ -1,3 +1,4 @@ +import { useState, useEffect, useRef } from 'react' import WithDraggable from '@/components/common/draggable/WithDraggable' import { usePopup } from '@/hooks/usePopup' import { useMessage } from '@/hooks/useMessage' @@ -5,14 +6,41 @@ import { useRecoilState, useRecoilValue } from 'recoil' import { contextPopupPositionState } from '@/store/popupAtom' import QSelectBox from '@/components/common/select/QSelectBox' import { pitchTextSelector } from '@/store/canvasAtom' +import { defaultSlope } from '@/store/commonAtom' +import { canvasState } from '@/store/canvasAtom' export default function DimensionLineSetting(props) { const contextPopupPosition = useRecoilValue(contextPopupPositionState) const { id, setIsShow, pos = contextPopupPosition } = props const { getMessage } = useMessage() const { closePopup } = usePopup() + const canvas = useRecoilValue(canvasState) const pitchText = useRecoilState(pitchTextSelector) - const SelectOption01 = [{ name: '0' }, { name: '0' }, { name: '0' }, { name: '0' }] + const SelectOption01 = defaultSlope + const [basicLength, setBasicLength] = useState(0) + const [slopeAble, setSlopeAble] = useState(false) + const changeLengthRef = useRef(0) + + useEffect(() => { + if (canvas) { + const dimensionObject = canvas.getActiveObject() + const id = dimensionObject.groupId + const textObj = dimensionObject._objects.filter((obj) => obj.name === 'dimensionLineText' && obj.id === id)[0] + setBasicLength(parseInt(textObj.text)) + } + }, []) + + const handleChangeLength = () => { + const changeLength = changeLengthRef.current.value + if (canvas) { + const dimensionObject = canvas.getActiveObject() + const id = dimensionObject.id + const textObj = canvas.getObjects().filter((obj) => obj.name === 'dimensionLineText' && obj.id === id)[0] + textObj.text = changeLength + canvas.renderAll() + } + } + return (
@@ -29,19 +57,19 @@ export default function DimensionLineSetting(props) {
既存の長さ
- +
変更の長さ
- +
- + setSlopeAble(!slopeAble)} />
@@ -52,14 +80,14 @@ export default function DimensionLineSetting(props) {
傾斜
- +
{pitchText}
傾斜
- +
{pitchText}
@@ -67,7 +95,9 @@ export default function DimensionLineSetting(props) {
傾き設定されている場合、入力した数値に傾き計算をした数値が表示されます。
- +
diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index 11d8e4f9..015d1046 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -38,8 +38,6 @@ export function usePlan() { const str = JSON.stringify(objs) - console.log(str) - // canvas?.clear() return str diff --git a/src/store/commonAtom.js b/src/store/commonAtom.js index 3e1fb640..1abcd1dc 100644 --- a/src/store/commonAtom.js +++ b/src/store/commonAtom.js @@ -1,4 +1,18 @@ -import { atom } from 'recoil' +import { atom, selectorFamily } from 'recoil' + +export const defaultSlope = [ + { name: '0', value: 0, angleValue: 0 }, + { name: '1', value: 1, angleValue: 5.71 }, + { name: '2', value: 2, angleValue: 11.31 }, + { name: '3', value: 3, angleValue: 16.7 }, + { name: '4', value: 4, angleValue: 21.8 }, + { name: '5', value: 5, angleValue: 26.57 }, + { name: '6', value: 6, angleValue: 30.96 }, + { name: '7', value: 7, angleValue: 34.99 }, + { name: '8', value: 8, angleValue: 38.66 }, + { name: '9', value: 9, angleValue: 41.99 }, + { name: '10', value: 10, angleValue: 45.0 }, +] export const dimmedStore = atom({ key: 'dimmedState', @@ -9,3 +23,12 @@ export const sessionStore = atom({ key: 'sessionState', default: {}, }) + +export const slopeSelector = selectorFamily({ + key: 'slopeSelector', + get: + (degree) => + ({ get }) => { + return defaultSlope[degree] + }, +})