feat: enhance CADCanvas to support block creation from selected elements
This commit is contained in:
@@ -43,6 +43,37 @@ const CADCanvas = forwardRef(({ activeTool, setActiveTool, onCanvasReady }, ref)
|
|||||||
if (shape) fabricRef.current.add(shape);
|
if (shape) fabricRef.current.add(shape);
|
||||||
});
|
});
|
||||||
fabricRef.current.renderAll();
|
fabricRef.current.renderAll();
|
||||||
|
},
|
||||||
|
// Get selected elements for block creation
|
||||||
|
getSelectedElements: () => {
|
||||||
|
if (!fabricRef.current) return [];
|
||||||
|
const activeObject = fabricRef.current.getActiveObject();
|
||||||
|
if (!activeObject) return [];
|
||||||
|
|
||||||
|
// If it's a group, return all objects in the group
|
||||||
|
if (activeObject.type === 'group') {
|
||||||
|
return activeObject.getObjects().map(obj => ({
|
||||||
|
id: obj.id || Date.now() + Math.random(),
|
||||||
|
type: obj.type,
|
||||||
|
...obj.toObject(['id', 'type', 'left', 'top', 'width', 'height', 'radius', 'x1', 'y1', 'x2', 'y2', 'points', 'fill', 'stroke', 'strokeWidth'])
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's a single object, return it
|
||||||
|
return [{
|
||||||
|
id: activeObject.id || Date.now() + Math.random(),
|
||||||
|
type: activeObject.type,
|
||||||
|
...activeObject.toObject(['id', 'type', 'left', 'top', 'width', 'height', 'radius', 'x1', 'y1', 'x2', 'y2', 'points', 'fill', 'stroke', 'strokeWidth'])
|
||||||
|
}];
|
||||||
|
},
|
||||||
|
// Generate SVG data for selected elements
|
||||||
|
generateSvgData: () => {
|
||||||
|
if (!fabricRef.current) return '';
|
||||||
|
const activeObject = fabricRef.current.getActiveObject();
|
||||||
|
if (!activeObject) return '';
|
||||||
|
|
||||||
|
// Clone the object to avoid modifying the original
|
||||||
|
return activeObject.toSVG();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user