feat: STRETCH with proper crossing-window vertex selection

Replaced the simplified MOVE-based STRETCH with a real crossing-window
implementation. Workflow: pick two crossing-window corners, then base+target
points. Only vertices/endpoints inside the window are translated:
- Line: moves start/end independently
- LwPolyline/Polyline: moves individual vertices inside window
- Arc/Circle/Ellipse: moves whole entity if center is inside
- Insert/Text/MText: moves if insertion point is inside

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
Hakan SevenandClaude Sonnet 4.6 committed 2026-04-07 11:25:39 +03:00
1 parent 1ef7bb5131
commit d3d4ec4a08
4 files changed
+202 -56

No files matched your search

+10
View File
@@ -128,6 +128,16 @@ pub enum CmdResult {
DdeditEntity { handle: Handle, new_text: String },
/// Apply new pattern/scale/angle to an existing hatch entity.
HatcheditApply { handle: Handle, name: String, scale: f32, angle: f32 },
/// Stretch entities: move only vertices/endpoints inside the crossing window.
StretchEntities {
handles: Vec<Handle>,
/// Min corner of the crossing window in world XZ (= DXF XY).
win_min: Vec3,
/// Max corner of the crossing window in world XZ (= DXF XY).
win_max: Vec3,
/// Translation vector to apply to vertices inside the window.
delta: Vec3,
},
}
// ── Trait ─────────────────────────────────────────────────────────────────