From ed21555e5d838927835022ecac1076a2a060c332 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Wed, 30 Oct 2024 14:38:37 +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=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dimensionLine/DimensionLineSetting.jsx | 52 ++++++++++++++++--- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/components/floor-plan/modal/dimensionLine/DimensionLineSetting.jsx b/src/components/floor-plan/modal/dimensionLine/DimensionLineSetting.jsx index d436e4ab..6c83ecd9 100644 --- a/src/components/floor-plan/modal/dimensionLine/DimensionLineSetting.jsx +++ b/src/components/floor-plan/modal/dimensionLine/DimensionLineSetting.jsx @@ -19,7 +19,9 @@ export default function DimensionLineSetting(props) { const SelectOption01 = defaultSlope const [basicLength, setBasicLength] = useState(0) const [slopeAble, setSlopeAble] = useState(false) - const changeLengthRef = useRef(0) + const changeSlopeRef = useRef() + + let slopeInput1, slopeInput2 useEffect(() => { if (canvas) { @@ -28,19 +30,53 @@ export default function DimensionLineSetting(props) { const textObj = dimensionObject._objects.filter((obj) => obj.name === 'dimensionLineText' && obj.id === id)[0] setBasicLength(parseInt(textObj.text)) } + + return () => { + setBasicLength(0) + } }, []) const handleChangeLength = () => { - const changeLength = changeLengthRef.current.value + const changeLength = changeSlopeRef.current + 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 + const id = dimensionObject.groupId + const textObj = dimensionObject._objects.filter((obj) => obj.name === 'dimensionLineText' && obj.id === id)[0] + let resultText = changeLength.value > 0 ? changeLength.value : '0' + + if (slopeAble) { + if (slopeInput1) { + resultText = calculateLength(basicLength, slopeInput1.angleValue).toFixed(0) + + if (slopeInput2) { + const angle = slopeInput1 + slopeInput2 + const length = calculateLength(basicLength, angle) + resultText = length.toFixed(2) + } + } + } + + textObj.set({ + text: String(resultText), + }) + canvas.renderAll() } } + const handleSelectbox = (option, params) => { + const index = params.index + if (index === 1) slopeInput1 = option + if (index === 2) slopeInput2 = option + } + + function calculateLength(originalLength, angle) { + const angleInRadians = angle * (Math.PI / 180) // 각도를 라디안으로 변환 + const result = Math.sqrt(Math.pow(originalLength * Math.tan(angleInRadians), 2) + Math.pow(originalLength, 2)) + return result + } + return (
@@ -64,7 +100,7 @@ export default function DimensionLineSetting(props) {
変更の長さ
- +
@@ -80,14 +116,14 @@ export default function DimensionLineSetting(props) {
傾斜
- +
{pitchText}
傾斜
- +
{pitchText}