forked from 1b-agent/opencadstudio-upstream
fix(grip): stop double-offsetting the UCS grip snap marker
The extension anchors needed the same pane-to-canvas lift the snap marker already got, but the block that added it was placed next to the one that was already there rather than merged into it, so `screen` took the tile origin twice. A single full-canvas tile has no origin to add, so it only shows once the viewport is split. Fold the anchors into the existing block. Also require the ray to pass through the snapped point before offering it as a distance reference. Only four acquisitions are kept and the oldest is dropped as new ones arrive, so the ray that produced a snap can be gone by the time a distance is typed; picking the nearest survivor unconditionally sent the point off along an unrelated ray instead of falling back to plain point input. `extension_snap` projects onto the ray in exact f64, so the tolerance only has to clear rounding, scaled with the coordinate to hold at UTM magnitudes. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
1 parent
687bc2079d
commit
b8f9727a27
2 files changed
+19
-7
No files matched your search
@@ -2043,24 +2043,19 @@ impl OpenCADStudio {
|
||||
let world = snap_hit.map(|s| s.world).unwrap_or(raw);
|
||||
self.tabs[i].snap_result = snap_hit;
|
||||
if let Some(s) = self.tabs[i].snap_result.as_mut() {
|
||||
// Snap marker and its extension anchors are pane-local; lift them to
|
||||
// absolute canvas px.
|
||||
s.screen.x += tile_b.x;
|
||||
s.screen.y += tile_b.y;
|
||||
|
||||
if let Some(base) = s.extension_base.as_mut() {
|
||||
base.x += tile_b.x;
|
||||
base.y += tile_b.y;
|
||||
}
|
||||
|
||||
if let Some(base) = s.extension_base2.as_mut() {
|
||||
base.x += tile_b.x;
|
||||
base.y += tile_b.y;
|
||||
}
|
||||
}
|
||||
if let Some(s) = self.tabs[i].snap_result.as_mut() {
|
||||
// Snap marker is pane-local; lift it to absolute canvas px.
|
||||
s.screen.x += tile_b.x;
|
||||
s.screen.y += tile_b.y;
|
||||
}
|
||||
|
||||
use acadrust::types::Vector3;
|
||||
let v3 = |d: glam::DVec3| Vector3::new(d.x, d.y, d.z);
|
||||
|
||||
Reference in new issue
Block a user