fix: a projected edge stays the edge that was picked when its body changes (#730)

A sketch's link to a projected edge now keeps the edge's persistent name and finds it by that name when the body changes, instead of taking whichever edge ends up nearest its point.
This commit is contained in:
NOWN-DEV authored and GitHub committed 2026-10-13 12:06:13 -04:00
1 parent 4a989f6e2d
commit 58af8accfa
12 files changed
+365 -30

No files matched your search

+5 -1
View File
@@ -130,6 +130,10 @@ pub struct Link {
/// Persistent model face identity, resolved by the document before geometry refresh.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub face_name: Option<String>,
/// Persistent model edge identity of an `Edge` source, resolved by the document before
/// geometry refresh. None: the edge is the one nearest the source's point.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub edge_name: Option<String>,
/// Automatically projected borders owned by a durable sketch face attachment.
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub auto_face: bool,
@@ -476,7 +480,7 @@ impl Sketch {
return Err(SketchError::TooLarge);
}
let id = self.fresh("j")?;
self.links.push(Link { id: id.clone(), kind, source, face_name: None, auto_face: false, lost: false });
self.links.push(Link { id: id.clone(), kind, source, face_name: None, edge_name: None, auto_face: false, lost: false });
self.build_link(&id, &lay)?;
Ok(id)
}
+1 -1
View File
@@ -196,7 +196,7 @@ impl Sketch {
}
let id = if geom.is_empty() {
let id = self.fresh("j")?;
self.links.push(Link { id: id.clone(), kind, source, face_name: None, auto_face: false, lost: false });
self.links.push(Link { id: id.clone(), kind, source, face_name: None, edge_name: None, auto_face: false, lost: false });
id
} else {
self.add_link(kind, source, geom)?