forked from 1b-agent/opencadstudio-upstream
fix(xclip): precise clip + carry clip across cross-drawing paste
Clipped blocks were broken at UTM and lost their clip when pasted into another drawing. - Clip geometry: world_clip_polygon_f64 keeps the boundary in absolute f64; clip_wires now clips in a frame relative to the boundary's first vertex (small coords → exact f32 Sutherland–Hodgman) and re-splits the result into the double-single high/low pair the relative-to-eye renderer needs, so the clipped block draws correctly and no longer poisons ZOOM Extents. - ZOOM Extents (fit_all): the outlier reject compared absolute UTM coordinates against a centre-RELATIVE span (local_extent_max), rejecting the whole drawing → no-op. Made the reject distance-from-median-centre. - Cross-drawing paste: clipboard now snapshots each copied entity's whole xdictionary object graph (ClipboardDeps.ext_objects) and recreates it on paste with fresh handles + remapped references, re-pointing the pasted entity's xdictionary at the new root. Wired into PASTECLIP and PASTEORIG. Fixed handle allocation (allocate_handle, not the non-advancing next_handle) so the dictionary chain doesn't collapse onto one handle. - Updated hit_test / plugin_host tests for the eye-relative + DVec3 signatures. Known gaps: PASTEBLOCK does not yet carry the clip (clip would need to live inside the new wrapper block definition); hatch-clip path still f32. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
bca8958025
commit
6667042372
7 files changed
+330
-26
No files matched your search
@@ -356,7 +356,7 @@ mod tests {
|
||||
host.start_interactive(Box::new(PlacePoint { got_first: false }));
|
||||
}
|
||||
assert!(app.tabs[0].active_cmd.is_some());
|
||||
for pt in [glam::Vec3::new(0.0, 0.0, 0.0), glam::Vec3::new(5.0, 5.0, 0.0)] {
|
||||
for pt in [glam::DVec3::new(0.0, 0.0, 0.0), glam::DVec3::new(5.0, 5.0, 0.0)] {
|
||||
let r = app.tabs[0].active_cmd.as_mut().unwrap().on_point(pt);
|
||||
let _ = app.apply_cmd_result(r);
|
||||
}
|
||||
@@ -410,7 +410,7 @@ mod tests {
|
||||
.active_cmd
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.on_entity_pick(target, glam::Vec3::new(3.0, 4.0, 0.0));
|
||||
.on_entity_pick(target, glam::DVec3::new(3.0, 4.0, 0.0));
|
||||
let _ = app.apply_cmd_result(r);
|
||||
// Original point + the mark the command committed.
|
||||
assert_eq!(app.tabs[0].scene.document.entities().count(), 2);
|
||||
|
||||
Reference in new issue
Block a user