forked from 1b-agent/opencadstudio-upstream
ocs_doc_api: fix review findings (scale/rotation/all-or-nothing/DoS/bounds/codegen)
CRITICAL: - transform_entity_geometry: fix s^2 double-scale (axes already carry scale; drop the *s pre-multiply so 2D entities scale by s like solids), and handle rotation for direction/angle fields (apply_dir for Ray/XLine direction + Ellipse major_axis; offset Arc angles; compose Insert rotation). - ensure_transformable: check layer-lock + resolve solid bodies (not just type), restoring TransformMany all-or-nothing; regression test with a locked layer. WARNING: - volume/centroid: memoize per (handle, geometry_epoch) + cap cold-cache tessellation budget (query-batch DoS). - entity_to_profile_curves: fail Unsupported on polyline bulge (no silent chord-substituted sweep profile). - Ellipse: validate minor_axis_ratio in (0,1] so bounds never under-bound. - RasterImage bounds: bracket all four corners (rotated/flipped images). SUGGESTION: - binding_schema.json handles derived from spec families (includes ArcCurve/ Ellipse/Spline/Ray/XLine). - build.rs header: enums are hand-maintained (not 'GENERATED'); ops_gen/query_gen headers corrected to match. - Dedupe divergence mesh_volume_centroid into the crate's geom module; host + both mocks delegate. Tests: +3 regression tests (scale-once, rotation, locked-layer all-or-nothing) -> 604 host lib green; 8 crate unit tests green.
This commit is contained in:
1 parent
fabdeae8bf
commit
c74504f30c
10 files changed
+271
-150
No files matched your search
@@ -18,6 +18,10 @@ pub(crate) struct HostSession<'a> {
|
||||
doc_store: Option<DocumentSnapshotStore<DocumentViewData>>,
|
||||
/// In-flight DocApi v2 undo delta (between `push_undo` and `finalize_op`).
|
||||
doc_api_pending: Option<super::history::PendingDelta>,
|
||||
/// Memoized volume/centroid per (handle, geometry_epoch) for DocApi mass queries.
|
||||
pub(crate) mass_cache: std::collections::HashMap<Handle, (u64, f64, [f64; 3])>,
|
||||
/// Per-session count of cold-cache mass tessellations (budget for query DoS).
|
||||
pub(crate) cold_tess_used: usize,
|
||||
}
|
||||
|
||||
impl<'a> HostSession<'a> {
|
||||
@@ -27,6 +31,8 @@ impl<'a> HostSession<'a> {
|
||||
tab,
|
||||
doc_store: None,
|
||||
doc_api_pending: None,
|
||||
mass_cache: std::collections::HashMap::new(),
|
||||
cold_tess_used: 0,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user