mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-08-06 13:24:14 +02:00
Add "Export to SVG" to the element editor
Implements discussion #605. The diagram editor can already export a folio to SVG; the element editor, where a single .elmt symbol is drawn, had no export capability at all -- confirmed by grepping its header for "export" before starting: nothing. ## Renders the live scene, not ElementPictureFactory's cache The discussion proposed sourcing this from ElementPictureFactory's cached per-element QPicture (m_pictures_H), the one used for the elements-panel preview icons. Checked that cache's actual invalidation before building on it: nothing in the editor ever tells it to drop an entry on edit, and it is keyed by the element's on-disk uuid. So for any element already previewed once in the panel, exporting from the cache would silently produce stale content after any edit; for a brand-new, never-saved element, no entry would exist at all. Neither is acceptable for a File > Export action a user expects to reflect what's on screen right now. Renders ElementScene directly instead, the same way ExportDialog::generateSvg() already renders the live Diagram for the diagram editor's own SVG export: no new drawing logic, only a new playback target (QSvgGenerator instead of the screen), sized to the element's own content bounds via the existing elementSceneGeometricRect() helper. ## Hotspot cross excluded from the export ElementScene::drawForeground() draws the red origin/hotspot cross on every render() call, unconditionally -- it's an editing aid, not part of the element being drawn, and diagram editor's SVG export has no equivalent problem since Diagram doesn't draw one. Added a settable hotspotVisible flag, defaulting to true (the existing editing view is completely unaffected) and turned off only for the duration of the export render() call. ## Verified end-to-end via a real Xvfb session, not just a build Opened a real shipped element (en_60617_05_06_04.elmt, "Phototransistor"), exported it, and rendered the resulting SVG back to a bitmap with a small QSvgRenderer-based harness -- pixel-identical in shape to the element as shown in the editor. Confirmed the file is valid XML and contains no red/#ff0000 stroke (the hotspot cross did not leak in). Then the case the whole "render live, not cached" decision was about: opened the same element, drew a new line with the line tool, and exported again *without saving*. The new line is present in the exported SVG. git status on the source .elmt file after both exports shows it completely untouched -- the export is read-only and reflects live, unsaved editor state, exactly the property a cache-based implementation would have gotten wrong. Built clean, no new warnings.
This commit is contained in:
@@ -317,6 +317,10 @@ void ElementScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
|
||||
*/
|
||||
void ElementScene::drawForeground(QPainter *p, const QRectF &)
|
||||
{
|
||||
if (!m_hotspot_visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
p -> save();
|
||||
|
||||
// desactive tout antialiasing, sauf pour le texte
|
||||
|
||||
Reference in New Issue
Block a user