feat: enhance CADCanvas to support block creation from selected elements

This commit is contained in:
2026-06-22 21:00:20 +00:00
parent 33fc9f7e04
commit 5b245a001c
+31
View File
@@ -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();
} }
})); }));