mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-27 20:44:13 +02:00
2772b690e8
duplicateElements(fromFolio, [uuids], toFolio, x, y) selectedElements(folio) What Ctrl+C and Ctrl+V do: the named elements are selected, serialised with Diagram::toXml(false, true), the previous selection is put back, and the copy is pasted with Diagram::fromXml() and a single PasteDiagramCommand. A conductor is copied only if both its ends are among the copied elements. As on a paste in the application, the copies come without labels or their conductors' wire numbers (measured: empty on both). One undo removes the elements and the conductor together. Three properties found by measuring rather than assuming: - Position is the top left of the pasted group's bounding rectangle, so an element's own origin ends up offset by its hotspot: +20, +30 for a coil, identical across two trials. (0, 0) is not a position; Diagram::fromXml treats the origin as "keep the source coordinates". - The application's pasted list is in scene order, not the order the elements were named. Asking for the elements at x = 700, 100, 900 returned the copies of 100, 700, 900, so a caller pairing copies with sources by index was wired to the wrong ones with no error. A paste is a pure translation, so sorting sources and copies by position pairs them, and the result is returned in the order asked. Checked with a scrambled request over a zig-zag layout: every copy is the identical translation (-30, -20) from the source at its index. Two elements at one point cannot be told apart; if the counts disagree it says so and returns the unpaired list rather than guess. - Copying works by selecting, so the previous selection is given back; selectedElements() exists to make that checkable. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>