STEP assemblies: mesh a repeated part once and place it for its instances (#1152)
The reader converts each item once, but every instance made its own display mesh (tessellation, seam and tangent flags), the most expensive step of opening a large assembly. A later instance of an item now shows its first instance's mesh, placed by the difference of the two placements. Only rigid placements share; split lines and any operation drop the link. Measurements and export read each instance's own geometry, so eval output is unchanged. Generated assemblies: mesh phase 2,215 -> 139 ms (901 bodies) and 1,028 -> 85 ms (5,401 bodies), with the same triangle counts. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
764fcaa5a8
commit
9b0f028f13
8 files changed
+135
No files matched your search
@@ -558,6 +558,7 @@ pub(crate) fn split_edges_at(body: &Body, points: &[Vec3]) -> Result<Body> {
|
||||
splits: body.splits.clone(),
|
||||
face_sources: None,
|
||||
history: None,
|
||||
display_of: None,
|
||||
regularization_protected: true,
|
||||
};
|
||||
Ok(crate::record::rebuilt_body(split, &[&body.solid], &rec))
|
||||
@@ -1053,6 +1054,7 @@ pub(crate) fn split_any(body: &Body, faces: &[usize], tool: &SplitTool) -> Resul
|
||||
splits: body.splits.clone(),
|
||||
face_sources: None,
|
||||
history: None,
|
||||
display_of: None,
|
||||
regularization_protected: true,
|
||||
};
|
||||
Ok((crate::record::rebuilt_body(split, &[&body.solid], &imp.rec), imp))
|
||||
|
||||
Reference in new issue
Block a user