CAD: an armed face/edge pick must not lose its click to the body escalation

A card that asks for a face ("Click a solid FACE in the viewport") could not be
satisfied. Clicking the same sub-element twice deliberately escalates to the
whole body — right for free picking, wrong here: the user clicks the very face
the card is pointing at, the escalation turns it into a whole-body pick, and the
armed capture rejects it and leaves "(none)". Both orders failed, so a
face-based Coord Sys was reachable only by accident of ordering. That mattered
beyond the card: a mate needs a connector with an owning body, and a face or
edge pick is the only thing that sets one.

Adds DesignSketchTool::set_escalate_on_repick, off while the Plane, Axis or
CoordSys card has a pick armed and back on as soon as it is captured or
abandoned. While armed, clicking a face means "this face", which is what the
prompt already says.

Verified on the rig: arm Pick Face, click the face, and it reads "#5" on the
first click. With nothing armed the escalation still alternates whole <-> face
as before.
This commit is contained in:
Tommaso Bianchi
2026-08-14 08:26:24 +02:00
parent d8103f794b
commit 76d7dd6946
5 changed files with 31 additions and 1 deletions
+5
View File
@@ -604,6 +604,11 @@ void DesignCanvas::set_loop_pick(int feature, int region)
request_repaint();
}
void DesignCanvas::set_escalate_on_repick(bool on)
{
m_sketch_tool.set_escalate_on_repick(on);
}
void DesignCanvas::set_solid_pick(const std::vector<CadBody>* bodies, const TriangleMesh* mesh,
const std::vector<int>* tri_face, const std::vector<int>* tri_body,
const std::vector<bool>* visible,