import WithDraggable from '@/components/common/draggable/WithDraggable' import { useMessage } from '@/hooks/useMessage' import { usePopup } from '@/hooks/usePopup' import { useRecoilValue } from 'recoil' import { contextPopupPositionState } from '@/store/popupAtom' import { useState } from 'react' import { canvasState, currentObjectState } from '@/store/canvasAtom' import { gridColorState } from '@/store/gridAtom' import { gridDisplaySelector } from '@/store/settingAtom' const GRID_PADDING = 5 export default function GridCopy(props) { const contextPopupPosition = useRecoilValue(contextPopupPositionState) const { id, pos = contextPopupPosition } = props const { getMessage } = useMessage() const { closePopup } = usePopup() const [length, setLength] = useState('0') const [arrow, setArrow] = useState(null) const currentObject = useRecoilValue(currentObjectState) const canvas = useRecoilValue(canvasState) const gridColor = useRecoilValue(gridColorState) const isGridDisplay = useRecoilValue(gridDisplaySelector) const handleApply = () => { copy(currentObject, ['↑', '←'].includes(arrow) ? (+length * -1) / 10 : +length / 10) } const copy = (object, length) => { const lineStartX = object.direction === 'vertical' ? object.x1 + length : object.x1 const lineEndX = object.direction === 'vertical' ? object.x2 + length : object.x2 const lineStartY = object.direction === 'vertical' ? object.y1 : object.y1 + length const lineEndY = object.direction === 'vertical' ? object.y2 : object.y1 + length const line = new fabric.Line([lineStartX, lineStartY, lineEndX, lineEndY], { stroke: gridColor, strokeWidth: 1, selectable: true, lockMovementX: true, lockMovementY: true, lockRotation: true, lockScalingX: true, lockScalingY: true, strokeDashArray: [5, 2], opacity: 0.3, padding: GRID_PADDING, direction: object.direction, visible: isGridDisplay, name: object.name, }) canvas.add(line) canvas.setActiveObject(line) canvas.renderAll() } return ( closePopup(id)} />
{getMessage('modal.grid.copy.info')}
{getMessage('modal.grid.copy.length')}
setLength(e.target.value)} />
mm
) }