forked from 1b-agent/opencadstudio-upstream
perf: viewport wire cache, Arc hit_test_wires, snap world-space pre-rejection (I+J+K)
Option I: add per-viewport Arc wire cache so paper-space viewport rendering no longer re-tessellates model content every frame. Option J: hit_test_wires() returns Arc<Vec<WireModel>> — O(1) pointer copy in model space instead of a full Vec clone on every mouse move during commands. paper_canvas_hatches/wipeouts() now route through the epoch caches added in F. Option K: add world_snap_r + wire_in_range() pre-check to Snapper::snap(). All Endpoint/Midpoint/Nearest/Perpendicular/Intersection loops skip wires whose chord sphere is outside the snap circle using O(1) scalar comparisons, eliminating O(entities × vertices) matrix multiply cost when zoomed in. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
1 parent
81db3c37d0
commit
2da9301a2b
6 files changed
+149
-32
No files matched your search
+3
-3
@@ -291,11 +291,11 @@ impl Scene {
|
||||
None => return self.build_primitive(hover_region, bounds, false),
|
||||
};
|
||||
|
||||
let base_wires = self.model_wires_for_viewport(vp_handle);
|
||||
let base_arc = self.model_wires_for_viewport_arc(vp_handle);
|
||||
let all_wires = if self.interim_wire.is_none() && self.preview_wires.is_empty() {
|
||||
Arc::new(base_wires)
|
||||
base_arc
|
||||
} else {
|
||||
let mut v = base_wires;
|
||||
let mut v = (*base_arc).clone();
|
||||
if let Some(iw) = &self.interim_wire {
|
||||
v.push(iw.clone());
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user