To / From Object finds a target in another, moved component (#993)

Fixes #928. Extrude To / From Object and Revolve To Object now resolve their target in the feature's own component frame, so a face in another component whose occurrence is moved is found where it is shown instead of the extrude stopping at a flat plane through the picked point. The point is named after the nearest face, a named point keeps its named face when another component touches it there, and such features re-evaluate when a placement changes, so they follow the target when it moves later.

Co-authored-by: SychPL <SychPL@users.noreply.github.com>
This commit is contained in:
Mateusz SychandSychPL authored and GitHub committed 2026-10-14 04:41:59 -04:00
1 parent 6e84c03946
commit cf9d7772f1
5 files changed
+289 -28

No files matched your search

+1 -1
View File
@@ -667,7 +667,7 @@ fn edit_feature(s: &mut Session, p: &Value) -> Result<Value> {
}
// New face points: their faces' names now.
if nf.kind.face_points() != f.kind.face_points() {
nf.face_names = solidcraft_doc::naming::face_names_at(&s.model.state_before(id), &nf.kind.face_points());
nf.face_names = solidcraft_doc::face_point_names(&s.doc, &s.model.state_before(id), &nf.kind, nf.component);
}
if let Some(slot) = s.doc_mut().feature_mut(id) {
*slot = nf;
+1 -1
View File
@@ -418,7 +418,7 @@ fn add_feature_in(s: &mut Session, p: &Value, kind: FeatureKind, world: bool) ->
} else if pts.is_empty() {
Vec::new()
} else {
solidcraft_doc::naming::face_names_at(&s.model.state(), &pts)
solidcraft_doc::face_point_names(&s.doc, &s.model.state(), &kind, s.active_component)
}
};
// Primitives have no `targets` of their own: their `targets` are the bodies taking part (#259).