feat(snap): dashed extension guide line for the Extension osnap (#238)
The Extension object snap worked but drew no tracking path, so it was easy to miss — users had to keep the cursor exactly on the invisible extension line without any visual cue. When an Extension snap is active, draw a dashed guide line from the endpoint it extends from, through the snap point and a little beyond, and orient the three-dot marker along that direction. SnapResult carries the endpoint screen position (filled once the winning snap is known); the overlay renders the guide. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
53a4882c7f
commit
1614fd9ab2
4 changed files with 97 additions and 2 deletions
|
|
@ -1068,6 +1068,7 @@ pub(super) fn on_tick(&mut self, t: Instant) -> Task<Message> {
|
|||
screen,
|
||||
snap_type: SnapType::ObjectPick,
|
||||
tangent_obj: None,
|
||||
extension_base: None,
|
||||
});
|
||||
if let Some(cmd) = self.tabs[i].active_cmd.as_mut() {
|
||||
cmd.set_acquisition_hint(Some(pick.label));
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@ impl OpenCADStudio {
|
|||
let selection_overlay = {
|
||||
let sel = tab.scene.selection.borrow().clone();
|
||||
let snap_info = tab.snap_result.map(|s| (s.screen, s.snap_type));
|
||||
let snap_ext_base = tab.snap_result.and_then(|s| s.extension_base);
|
||||
|
||||
let grips: Vec<crate::ui::overlay::GripMarker> =
|
||||
if tab.active_cmd.is_none() && !tab.selected_grips.is_empty() {
|
||||
|
|
@ -397,6 +398,7 @@ impl OpenCADStudio {
|
|||
crate::ui::overlay::selection_overlay(
|
||||
sel,
|
||||
snap_info,
|
||||
snap_ext_base,
|
||||
grips,
|
||||
ucs_icons,
|
||||
ost_points,
|
||||
|
|
|
|||
Loading…
Reference in a new issue