mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-08 13:01:52 +00:00
Merge pull request #301 from tdamsma/surface/owner-zone-tol
surface: cache the owning face's zone tolerance on Surface (2115 deferred cases now compared)
This commit is contained in:
@@ -341,6 +341,10 @@ impl UnitDiff for Runner {
|
||||
{
|
||||
let _ = surface.set_owner(Some(arena_identity(CacheObject::Face(id))));
|
||||
}
|
||||
// the face's tolerance, as the face upstream answers GetTolerance with
|
||||
scene
|
||||
.sync_face_surface_tolerance(id)
|
||||
.map_err(|e| harness(e.to_string()))?;
|
||||
}
|
||||
let [x0, y0, z0, x1, y1, z1] = s.scene_box;
|
||||
let (lo, hi) = (Vec3::new(x0, y0, z0), Vec3::new(x1, y1, z1));
|
||||
|
||||
@@ -426,6 +426,9 @@ impl Pool {
|
||||
)));
|
||||
}
|
||||
}
|
||||
// a new owner key drops the cached face tolerance: record it again
|
||||
brep.sync_face_surface_tolerance(face)
|
||||
.map_err(|error| harness(&error))?;
|
||||
}
|
||||
breps.push(brep);
|
||||
}
|
||||
|
||||
@@ -463,7 +463,11 @@ pub(crate) fn rust_brep(k: &Kernel, f: &FaceIn) -> Result<(Brep, FaceId), Harnes
|
||||
.map_err(e)?;
|
||||
b.shell_mut(shell).map_err(e)?.faces.push(face);
|
||||
let up = next_id!(b.faceuses(), FaceuseId);
|
||||
let down = next_id!(b.faceuses(), FaceuseId);
|
||||
// the down face use is the record after the up one (both ids are taken before either
|
||||
// record is added, so they cannot both come from the arena's length)
|
||||
let down = FaceuseId::from_index(
|
||||
u32::try_from(b.faceuses().len() + 1).map_err(|_| harness("too many records"))?,
|
||||
);
|
||||
for (mate, orientation) in [(down, OrientType::Same), (up, OrientType::Opposite)] {
|
||||
b.add_faceuse_record(Faceuse {
|
||||
shell: Some(shell),
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
//! optional `face` (a one-face B-rep built with `SmBrepConstructor` as in unit
|
||||
//! `heal.face_props`: a plane or `SmSurfOfRevolution::CreateCanonical` surface, cylinder or
|
||||
//! sphere among them, with a vertex loop or edge loops of line edges; rebuilt record by record
|
||||
//! on the Rust side by `heal_face_props::rust_brep`) whose face, loops, edges, vertices and edge
|
||||
//! on the Rust side by `heal_face_props::rust_brep` plus its down face use's side,
|
||||
//! `heal_face_props::add_down_side`) whose face, loops, edges, vertices and edge
|
||||
//! uses join the pool after the objects, and `ops` on two default classifications `cc[0]`,
|
||||
//! `cc[1]`: the setters of unit `intersect.curve_class_p1` build them (intervals, boundary
|
||||
//! classifications on the face's edges and vertices, the classification curve, face and
|
||||
@@ -775,7 +776,10 @@ fn build_pool(k: &Kernel, s: &Script) -> Result<Pool, HarnessError> {
|
||||
pool.handles.push(H::Obj(i, class_kind_of(obj_kind(o))));
|
||||
}
|
||||
if let Some(face) = &s.face {
|
||||
let (b, f) = face_brep(k, face)?;
|
||||
let (mut b, f) = face_brep(k, face)?;
|
||||
// the down face use's loops, so that edge mates (an edge's end vertex, the end edge
|
||||
// use of a vertex use's UV sector) exist as upstream
|
||||
hfp::add_down_side(&mut b, f)?;
|
||||
for (e, _) in topology_entities(&b, f)? {
|
||||
pool.handles.push(H::Topo(e));
|
||||
}
|
||||
|
||||
@@ -1116,6 +1116,7 @@ fn rust_surface(k: &Kernel, op: &OpIn, s: &mut BSplineSurface, o: &mut Vec<f64>)
|
||||
pseudo_guess: pg.as_ref(),
|
||||
polar_guess: plg.as_ref(),
|
||||
expand_by_zone_tol: *expand,
|
||||
expand_tolerance: None,
|
||||
};
|
||||
let b = s.calculate_bounding_box(k, &domain_of(*domain), &req)?;
|
||||
if let Some(nb) = b.normal {
|
||||
|
||||
@@ -403,6 +403,9 @@ fn imported(k: &Kernel, a: &[f64; 22], export_op: i32) -> std::result::Result<Br
|
||||
{
|
||||
let _ = surface.set_owner(Some(arena_identity(CacheObject::Face(id))));
|
||||
}
|
||||
// the face's tolerance, as the face upstream answers GetTolerance with
|
||||
b.sync_face_surface_tolerance(id)
|
||||
.map_err(|e| HarnessError::new(e.to_string()))?;
|
||||
}
|
||||
Ok(b)
|
||||
}
|
||||
|
||||
@@ -224,6 +224,9 @@ pub(crate) fn model(brep: &Value) -> Result<Model, HarnessError> {
|
||||
key: ObjectKey(i as u64),
|
||||
}));
|
||||
}
|
||||
// the face's tolerance, as the face upstream answers GetTolerance with
|
||||
b.sync_face_surface_tolerance(f)
|
||||
.map_err(|e| harness(e.to_string()))?;
|
||||
}
|
||||
Ok(Model {
|
||||
path,
|
||||
|
||||
@@ -861,6 +861,9 @@ pub(crate) fn import(ex: &[f64], graph_at: usize) -> Result<(Brep, ImportTypes),
|
||||
{
|
||||
let _ = surface.set_owner(Some(arena_identity(CacheObject::Face(id))));
|
||||
}
|
||||
// the face's tolerance, as the face upstream answers GetTolerance with
|
||||
b.sync_face_surface_tolerance(id)
|
||||
.map_err(|e| harness(e.to_string()))?;
|
||||
}
|
||||
// the shared import leaves `m_pFU` unset: the face's upward (SAME) face use
|
||||
let ups: Vec<(FaceId, FaceuseId)> = b
|
||||
@@ -1960,6 +1963,21 @@ fn run_rust_op(
|
||||
dir,
|
||||
} => {
|
||||
let id = |i: i64| (i >= 0).then(|| EdgeuseId::from_index(i as u32));
|
||||
// a blend (flag != 0) samples both edge uses' face surfaces (DropPoint,
|
||||
// normals, directional derivatives): an analytic surface the export hands
|
||||
// over as its B-spline part takes other paths in C++ (e.g.
|
||||
// SmSurfOfRevolution::DropPointFast), so those cases are not comparable
|
||||
if *f != 0 {
|
||||
if let (Some(e1), Some(e2)) = (id(*eu1), id(*eu2)) {
|
||||
let face = solidcore::topology::edgeuse::p1::face;
|
||||
let has_edges = b.edgeuse(e1)?.edge.is_some() && b.edgeuse(e2)?.edge.is_some();
|
||||
if let (true, Some(f1), Some(f2)) = (has_edges, face(b, e1)?, face(b, e2)?) {
|
||||
if let Some(d) = inexact(types, Some(&[f1, f2]), Some(&[])) {
|
||||
return Ok(Err(d));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
match bp1::create_edge_edge_blend(
|
||||
k,
|
||||
u64::from(*f),
|
||||
|
||||
@@ -25,11 +25,13 @@
|
||||
//! Rust side reports [`SolidError::InvalidInput`] or fails the same guard), `-3` a call
|
||||
//! the shim skips because the Rust side defers it to an unported unit.
|
||||
//!
|
||||
//! Deferred: `SmFace::ComputeLoopOrientation` (`CheckFace` after its first loop check,
|
||||
//! `FixTrimLoopOrientation`, `FixTrimLoopOrder`) at its `sm_AreConnected` /
|
||||
//! `GetOrCreateUVTrimCurve` / `NormalizedEvaluate` calls (`topology.edgeuse_p3`),
|
||||
//! `SplitAtSeams` (`topology.face_p1` / `topology.face_p4`), `CreateUVTrimCurves` at the
|
||||
//! face-owned surface's `SmFace::GetTolerance` stub of `GetSingularities`
|
||||
//! `CheckFace`, `FixTrimLoopOrientation` and `FixTrimLoopOrder` run in full on both sides
|
||||
//! (`SmFace::ComputeLoopOrientation` is ported; it was skipped with `-3` while the Rust
|
||||
//! side still deferred it), guarded (`-2`) where a loop lacks its loop use, the face its
|
||||
//! surface or UV trim curves, or `CheckLoop` a loop's UV extremes.
|
||||
//!
|
||||
//! Deferred: `SplitAtSeams` (`topology.face_p1` / `topology.face_p4`), `CreateUVTrimCurves`
|
||||
//! at the face-owned surface's `SmFace::GetTolerance` stub of `GetSingularities`
|
||||
//! (`topology.face_p2`; it and `ClearUVTrimCurves` are compared, with every edge use's
|
||||
//! UV trim curve after the call), `SmEdgeuse::GetOrCreateUVTrimCurve`
|
||||
//! (`topology.edgeuse_p3`), and the vertex-use UV points some B-reps need
|
||||
@@ -1573,6 +1575,20 @@ fn ok_loop_extremes(b: &Brep, l: LoopId) -> Result<bool, Fail> {
|
||||
Ok(true)
|
||||
}
|
||||
|
||||
/// The shim's `tt_ok_face_loops`: every loop has its loop use, and a face with loops
|
||||
/// has a surface and UV trim curves everywhere.
|
||||
fn ok_face_loops(b: &Brep, f: FaceId) -> Result<bool, Fail> {
|
||||
let loops = face_loops(b, f)?;
|
||||
for &l in &loops {
|
||||
if !ok_loop(b, l)? {
|
||||
return Ok(false);
|
||||
}
|
||||
}
|
||||
Ok(loops.is_empty()
|
||||
|| (b.face(f).map_err(|e| fail(&e))?.surface.is_some()
|
||||
&& tt::face_uv_curves_present(b, f).map_err(|e| fail(&e))?))
|
||||
}
|
||||
|
||||
/// The surface of a loop's face (a copy), `None` without face or surface.
|
||||
fn loop_surface(b: &Brep, l: LoopId) -> Result<Option<Surface>, Fail> {
|
||||
let f = lu1::loop_face(b, l).map_err(|e| fail(&e))?;
|
||||
@@ -1754,6 +1770,21 @@ fn run_rust_brep(k: &Kernel, b: &mut Brep, op: &OpIn) -> Result<Vec<f64>, Fail>
|
||||
return Ok(o);
|
||||
}
|
||||
}
|
||||
// the shim's guards of the CheckLoop / ComputeLoopOrientation walk
|
||||
let loops = face_loops(b, fc)?;
|
||||
if !loops.is_empty() && tt::face_uv_curves_present(b, fc).map_err(|e| fail(&e))? {
|
||||
let mut ok = b.face(fc).map_err(|e| fail(&e))?.surface.is_some();
|
||||
for &l in &loops {
|
||||
if !ok || *skip {
|
||||
break;
|
||||
}
|
||||
ok = ok_loop_extremes(b, l)?;
|
||||
}
|
||||
if !ok {
|
||||
o.push(NULL_DEREF);
|
||||
return Ok(o);
|
||||
}
|
||||
}
|
||||
let mut a = AssertArray::new();
|
||||
let r = tt::check_face(k, b, fc, *tol, list.then_some(&mut a), *skip);
|
||||
o.push(status(&r)?);
|
||||
@@ -1886,11 +1917,19 @@ fn run_rust_brep(k: &Kernel, b: &mut Brep, op: &OpIn) -> Result<Vec<f64>, Fail>
|
||||
put_uv_curves(&mut o, b);
|
||||
}
|
||||
OpIn::BOrient { f: face, .. } => {
|
||||
if !ok_face_loops(b, fid(*face))? {
|
||||
o.push(NULL_DEREF);
|
||||
return Ok(o);
|
||||
}
|
||||
let r = tt::fix_face_loop_orientations(k, b, fid(*face));
|
||||
o.push(status(&r)?);
|
||||
o.push(r.map_or(0.0, |n| n as f64));
|
||||
}
|
||||
OpIn::BOrder { f: face, .. } => {
|
||||
if !ok_face_loops(b, fid(*face))? {
|
||||
o.push(NULL_DEREF);
|
||||
return Ok(o);
|
||||
}
|
||||
let r = tt::fix_trim_loop_order(k, b, fid(*face));
|
||||
o.push(status(&r)?);
|
||||
}
|
||||
|
||||
@@ -106,7 +106,9 @@
|
||||
//! surface the tolerance of its edge or face (`GetEdge` / `GetFace`), and every other
|
||||
//! non-topology object the system zone tolerance. A curve's edge is found with
|
||||
//! [`Curve::edge`] (intermediate owners through [`ClassGeometry::owner_of`]); a
|
||||
//! surface's face is [`Surface::face`](crate::surface::surface::Surface::face);
|
||||
//! surface's face is [`Surface::face`](crate::surface::surface::Surface::face),
|
||||
//! whose tolerance is the one its B-rep cached on the surface
|
||||
//! ([`Surface::owner_zone_tol_3d`](crate::surface::surface::Surface::owner_zone_tol_3d));
|
||||
//! an edge's or face's tolerance is that of the edge or face. Topology
|
||||
//! kinds without a `GetTolerance` override (region, faceuse, loop, loopuse,
|
||||
//! vertexuse) get `SmTopology::GetTolerance`, `SM_ZONE_TOL_3D`, and a faceuse
|
||||
@@ -1591,14 +1593,9 @@ pub fn object_zone_tol_3d<O: ClassObject>(
|
||||
| ClassObjectKind::Region => Ok(ZONE_TOL_3D),
|
||||
ClassObjectKind::Surface => {
|
||||
let surface = geometry.surface(o).ok_or_else(|| unresolved(OP_GEOMETRY))?;
|
||||
if surface.face()?.is_some() {
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
return Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
));
|
||||
}
|
||||
Ok(system)
|
||||
// GetFace() ? its tolerance (cached on the surface by its B-rep;
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance for a bare face handle)
|
||||
Ok(surface.face_zone_tol_3d()?.unwrap_or(system))
|
||||
}
|
||||
ClassObjectKind::Curve => {
|
||||
let curve = geometry.curve(o).ok_or_else(|| unresolved(OP_GEOMETRY))?;
|
||||
|
||||
@@ -115,7 +115,8 @@
|
||||
//! `SmSurface::EvaluateNormal` (`surface::surface::p7`); its zone tolerance expansion
|
||||
//! reads `GetFace()`, and a bare B-spline has no owner (the owner is held by the
|
||||
//! [`Surface`](crate::surface::surface::Surface) wrapper), so it uses
|
||||
//! `SM_ZONE_TOL_3D`; `CreateOffsetSurface` uses the base `SmSurface` body and
|
||||
//! `SM_ZONE_TOL_3D` unless the wrapper passes its face's cached tolerance as
|
||||
//! [`BoundingBoxRequest::expand_tolerance`]; `CreateOffsetSurface` uses the base `SmSurface` body and
|
||||
//! constructs an `OffsetSurface`, asking the copy for its singularities.
|
||||
//! `STEPInversion` runs `GlobalPointSolve` and `IsClosed` on the owning surface
|
||||
//! (including plane overrides) and calls the base `LocalPointSolve` and
|
||||
@@ -379,6 +380,11 @@ pub struct BoundingBoxRequest<'a> {
|
||||
/// Expand the normal and pseudo boxes by the zone tolerance
|
||||
/// (`bExpandPosBoxesByZoneTol3d`, upstream default `TRUE`).
|
||||
pub expand_by_zone_tol: bool,
|
||||
/// The zone tolerance of the owning face to expand by (`GetFace()->GetTolerance()`):
|
||||
/// a bare B-spline has no owner, so the [`Surface`](crate::surface::surface::Surface)
|
||||
/// wrapper holding it passes its face's cached tolerance here; `None` expands by
|
||||
/// the ownerless `SM_ZONE_TOL_3D`.
|
||||
pub expand_tolerance: Option<f64>,
|
||||
}
|
||||
|
||||
/// The boxes of [`BSplineSurface::calculate_bounding_box`] (each present when asked).
|
||||
@@ -499,11 +505,13 @@ fn evaluate_normal(k: &Kernel, srf: &BSplineSurface, uv: Point2) -> Result<Vec3>
|
||||
/// bare B-spline has no owner (the owner is held by the
|
||||
/// [`Surface`](crate::surface::surface::Surface) wrapper, whose
|
||||
/// [`calculate_bounding_box`](crate::surface::surface::Surface::calculate_bounding_box)
|
||||
/// handles a face owner before calling here): `SM_ZONE_TOL_3D`. Callers that hold a
|
||||
/// `Surface` with a face must check it first (as `Surface::calculate_bounding_box` and
|
||||
/// `Surface::is_planar` do); the patch boxes of surface caches are ownerless.
|
||||
const fn owner_zone_tolerance(_srf: &BSplineSurface) -> f64 {
|
||||
crate::geom::tol::ZONE_TOL_3D
|
||||
/// passes a face owner's tolerance as [`BoundingBoxRequest::expand_tolerance`]):
|
||||
/// that tolerance when given, else `SM_ZONE_TOL_3D`. Callers that hold a `Surface` with
|
||||
/// a face must pass it (as `Surface::calculate_bounding_box` and `Surface::is_planar`
|
||||
/// do); the patch boxes of surface caches are ownerless.
|
||||
fn owner_zone_tolerance(req: &BoundingBoxRequest<'_>) -> f64 {
|
||||
req.expand_tolerance
|
||||
.unwrap_or(crate::geom::tol::ZONE_TOL_3D)
|
||||
}
|
||||
|
||||
/// `SmSurface::IsDegenerateCurve` (the base body, on a copy of the B-spline as an
|
||||
@@ -1415,11 +1423,11 @@ impl BSplineSurface {
|
||||
// When asked, expand the normal box by the zone tolerance
|
||||
if req.expand_by_zone_tol {
|
||||
if let Some(nb) = normal_box.as_mut() {
|
||||
nb.expand_absolute(owner_zone_tolerance(self));
|
||||
nb.expand_absolute(owner_zone_tolerance(req));
|
||||
}
|
||||
// When asked, expand the pPseudoBox box by the zone tolerance
|
||||
if let Some(pb) = pseudo_box.as_mut() {
|
||||
pb.expand_absolute(owner_zone_tolerance(self));
|
||||
pb.expand_absolute(owner_zone_tolerance(req));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,16 +26,18 @@
|
||||
//! face's own tolerance (what `SmBSplineSurface::CalculateBoundingBox` reads through
|
||||
//! `GetFace()`): arena surfaces hold no owning face, so the B-spline/plane/revolution
|
||||
//! box is computed unexpanded and expanded here, as the override's last step does.
|
||||
//! `Point3DClassify` builds no surface cache (the Rust point solvers take none, as in
|
||||
//! `topology::vertexuse` and `intersect::curve_class::p1`), so upstream's temporary
|
||||
//! switch-off of the cache's point test (SmFace.cpp:12801) has nothing to act on yet:
|
||||
//! the face-owned surface's solve stops at `surface::surface::p4`'s
|
||||
//! `UNPORTED(query.face_p2)` `SmFace::PointClassify` stub, a call the C++ never makes
|
||||
//! here, and that stub's NOTE lists this caller so the switch is added for it when it is
|
||||
//! wired. `PointClassify` gets
|
||||
//! no trimmed surface cache (a fresh one is never face-containment-complete, so its
|
||||
//! cache branch cannot run). `EdgeCurveOnClassify` lifts a 2D curve to a curve on the
|
||||
//! face's surface only when an upward edge use of the face is found (upstream lifts it
|
||||
//! `Point3DClassify` builds the surface's trimmed surface cache first
|
||||
//! (`smsurf_GetSurfaceCache`, SmFace.cpp:12792) and hands it to `PointClassify`, which
|
||||
//! upstream finds again through `SmCacheMgr::GetObjectCache`: built for a face with
|
||||
//! loops, its face containment is done, so `PointClassify` classifies through the
|
||||
//! leaf node containing the point before the vertex and loop tests (`query.face_p1`
|
||||
//! `gen0160`: C++ FACE from an inside leaf, the vertex test alone gives VERTEX). Its
|
||||
//! face walk is [`SolidError::Unported`] today (`SmFace handle of a surface's face`,
|
||||
//! `topology.face_p2`), so every face-owned surface defers there. The Rust point solvers
|
||||
//! take no cache (as in `topology::vertexuse` and `intersect::curve_class::p1`), so
|
||||
//! upstream's temporary switch-off of the cache's point test (SmFace.cpp:12801) and the
|
||||
//! cache check-out have nothing to act on. `EdgeCurveOnClassify` lifts a 2D curve to a
|
||||
//! curve on the face's surface only when an upward edge use of the face is found (upstream lifts it
|
||||
//! first and ignores `SetAll`'s status); an `SmCrvOnSurf` over a surface other than a
|
||||
//! B-spline is a dispatch gap (`curve.crv_on_surf`). No recursion.
|
||||
|
||||
@@ -53,6 +55,7 @@ use crate::kernel::Kernel;
|
||||
use crate::nurbs::b_spline_curve::BoundingBoxRequest;
|
||||
use crate::nurbs::b_spline_surface::SurfParamType;
|
||||
use crate::nurbs::b_spline_surface_n_lib::p2::OrientType;
|
||||
use crate::surface::surface::p1::{make_surface_cache, make_trim_srf_cache};
|
||||
use crate::surface::surface::p4::NoObject;
|
||||
use crate::surface::surface::{Surface, SurfaceKind};
|
||||
use crate::surface::volume::Volume;
|
||||
@@ -433,6 +436,23 @@ pub fn point_3d_classify(
|
||||
pc.set_face(Some(EntityRef::Face(f)));
|
||||
pc.set_src_zone_tol_3d(src_zone_tol_3d);
|
||||
|
||||
// SmSurfaceCache *pTSC = smsurf_GetSurfaceCache(pSurface): the surface's trimmed
|
||||
// surface cache (built with its face containment when the face has loops), else
|
||||
// its surface cache. PointClassify below finds the trimmed one again
|
||||
// (SmCacheMgr::GetObjectCache) and classifies through its leaf nodes first.
|
||||
let mut trim_cache = {
|
||||
let surface = fp2::surface(b, f)?
|
||||
.ok_or_else(|| SolidError::invalid_input(OP_POINT, "face without surface"))?;
|
||||
match make_trim_srf_cache(k, surface, None::<EntityRef>) {
|
||||
Ok(c) => Some(c),
|
||||
Err(e) if e.is_unported() => return Err(e),
|
||||
Err(_) => {
|
||||
ignored(make_surface_cache(k, surface, None::<EntityRef>))?;
|
||||
None
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let uv = {
|
||||
let surface = fp2::surface(b, f)?
|
||||
.ok_or_else(|| SolidError::invalid_input(OP_POINT, "face without surface"))?;
|
||||
@@ -496,7 +516,7 @@ pub fn point_3d_classify(
|
||||
tgt_loops_only: opts.tgt_loops_only,
|
||||
tgt_loops: opts.tgt_loops,
|
||||
uv_space_okay: opts.uv_space_okay,
|
||||
trim_cache: None,
|
||||
trim_cache: trim_cache.as_mut(),
|
||||
},
|
||||
)?;
|
||||
|
||||
|
||||
@@ -71,6 +71,14 @@
|
||||
//! - Boundary views use required handle mappings and the same [`ClassGeometry`]
|
||||
//! implementation as part 5. Lazy UV and gap calculations run on a private B-rep
|
||||
//! snapshot; numerical results are preserved while cache-only updates are discarded.
|
||||
//! - **Vertex/face gaps.** With `bHasBigGaps`, `IntersectVertices` reads each vertex's
|
||||
//! `GetVertexuseOfFace(pFace)->GetVertexFaceGap()` length. [`curve_on_classify`]
|
||||
//! computes them from the B-rep (on one private snapshot per call, which keeps the
|
||||
//! gap caches across both passes) for the face's vertices before the vertex
|
||||
//! intersections, and answers [`ClassGeometry::vertex_face_gap`] for them around the
|
||||
//! caller's [`ClassGeometry`]; a gap error therefore surfaces before the earlier
|
||||
//! vertices are intersected (upstream: a null dereference or the same unported
|
||||
//! callee). A vertex without a face use is unresolved (upstream dereferences null).
|
||||
//! - No recursion.
|
||||
|
||||
use crate::curve::curve::Curve;
|
||||
@@ -626,6 +634,70 @@ pub trait CurveOnClassifyObjects<O: ClassObject>: ClassGeometry<O> {
|
||||
}
|
||||
}
|
||||
|
||||
/// `pVertex->GetVertexuseOfFace(pFace)->GetVertexFaceGap()->GetLength()`, 0 when the
|
||||
/// vertex use has no vertex/face gap (`IntersectVertices`' `dMaxGap3d`), on the B-rep
|
||||
/// snapshot `b` (which keeps the gap cache `GetVertexFaceGap` fills). `None` for a
|
||||
/// vertex without a use on a face (upstream dereferences the null vertex use; part 5
|
||||
/// reports the unresolved gap as invalid input).
|
||||
fn vertex_face_gap_length(k: &Kernel, b: &mut Brep, v: VertexId, f: FaceId) -> Result<Option<f64>> {
|
||||
let Some(vu) = crate::topology::vertex::vertexuse_of_face(b, v, Some(f))? else {
|
||||
return Ok(None);
|
||||
};
|
||||
Ok(Some(
|
||||
crate::topology::vertexuse::vertex_face_gap(k, b, vu, false)?.map_or(0.0, |g| g.gap_3d),
|
||||
))
|
||||
}
|
||||
|
||||
/// The caller's [`ClassGeometry`] answering [`ClassGeometry::vertex_face_gap`] for the
|
||||
/// vertices `IntersectVertices` intersects (their gaps computed from the B-rep, as
|
||||
/// upstream's vertex pointers reach them); everything else is the caller's.
|
||||
///
|
||||
/// Every [`ClassGeometry`] method must be forwarded to `inner` here, including any added
|
||||
/// later: a trait default would otherwise silently replace the inner adapter's override.
|
||||
struct WithVertexFaceGaps<'g, G, O> {
|
||||
inner: &'g G,
|
||||
gaps: Vec<(O, Option<f64>)>,
|
||||
}
|
||||
|
||||
impl<G: ClassGeometry<O>, O: ClassObject> ClassGeometry<O> for WithVertexFaceGaps<'_, G, O> {
|
||||
fn curve(&self, o: O) -> Option<&Curve> {
|
||||
self.inner.curve(o)
|
||||
}
|
||||
fn surface(&self, o: O) -> Option<&Surface> {
|
||||
self.inner.surface(o)
|
||||
}
|
||||
fn volume(&self, o: O) -> Option<&crate::surface::volume::Volume> {
|
||||
self.inner.volume(o)
|
||||
}
|
||||
fn point(&self, o: O) -> Option<Point3> {
|
||||
self.inner.point(o)
|
||||
}
|
||||
fn classification_vertex_point(&self, vertex: O) -> Option<Point3> {
|
||||
self.inner.classification_vertex_point(vertex)
|
||||
}
|
||||
fn topology_zone_tol_3d(&self, object: O) -> Option<f64> {
|
||||
self.inner.topology_zone_tol_3d(object)
|
||||
}
|
||||
fn vertex_face_gap(&self, vertex: O, surface: &Surface, face: Option<O>) -> Option<f64> {
|
||||
match self.gaps.iter().find(|(h, _)| *h == vertex) {
|
||||
Some((_, gap)) => *gap,
|
||||
None => self.inner.vertex_face_gap(vertex, surface, face),
|
||||
}
|
||||
}
|
||||
fn topology_entity(&self, object: O) -> Option<(&Brep, EntityRef)> {
|
||||
self.inner.topology_entity(object)
|
||||
}
|
||||
fn topology_handle(&self, entity: EntityRef) -> Option<O> {
|
||||
self.inner.topology_handle(entity)
|
||||
}
|
||||
fn owner_of(
|
||||
&self,
|
||||
owner: crate::geom::object::ObjectRef,
|
||||
) -> Option<crate::geom::object::ObjectRef> {
|
||||
self.inner.owner_of(owner)
|
||||
}
|
||||
}
|
||||
|
||||
/// Resolve stored edge data and its optional gap on this face. The snapshot
|
||||
/// retains lazy gap-cache updates without mutating the caller's borrowed B-rep.
|
||||
fn boundary_edge<O: ClassObject>(
|
||||
@@ -754,6 +826,8 @@ pub fn curve_on_classify<O: ClassObject>(
|
||||
reset_classification(k, cc)?;
|
||||
cc.set_face(Some(objects.face(f)));
|
||||
let mut modified = false;
|
||||
// (the vertex/face gap caches GetVertexFaceGap fills: a private B-rep snapshot)
|
||||
let mut gap_snapshot: Option<Brep> = None;
|
||||
|
||||
// for two iterations to allow the surf/surf/surf intersection heuristic a chance to
|
||||
// update curve and edge shapes.
|
||||
@@ -794,11 +868,31 @@ pub fn curve_on_classify<O: ClassObject>(
|
||||
.surface
|
||||
.as_ref()
|
||||
.ok_or_else(|| null(OP_CURVE, "face without surface"))?;
|
||||
// bHasBigGaps: each vertex's GetVertexuseOfFace(pFace)->GetVertexFaceGap()
|
||||
// (pFace is this face, set on the classification above)
|
||||
let gaps = if has_big_gaps {
|
||||
let snapshot = gap_snapshot.get_or_insert_with(|| b.clone());
|
||||
vertices
|
||||
.iter()
|
||||
.map(|&v| {
|
||||
Ok((
|
||||
objects.vertex(v),
|
||||
vertex_face_gap_length(k, snapshot, v, f)?,
|
||||
))
|
||||
})
|
||||
.collect::<Result<Vec<_>>>()?
|
||||
} else {
|
||||
Vec::new()
|
||||
};
|
||||
let vertices = vertices
|
||||
.iter()
|
||||
.map(|&v| objects.vertex(v))
|
||||
.collect::<Vec<_>>();
|
||||
cc.intersect_vertices(k, objects, &vertices, surface, has_big_gaps, true)?;
|
||||
let geometry = WithVertexFaceGaps {
|
||||
inner: objects,
|
||||
gaps,
|
||||
};
|
||||
cc.intersect_vertices(k, &geometry, &vertices, surface, has_big_gaps, true)?;
|
||||
|
||||
// 2nd intersect face edges with the curve
|
||||
let edges = face_edges(b, f, cc.tgt_loops_only(), Some(&tgt_loops))?;
|
||||
|
||||
@@ -279,6 +279,7 @@ fn surface_is_planar(k: &Kernel, b: &Brep, f: FaceId, s: &Surface, tol_3d: f64)
|
||||
pseudo_guess: None,
|
||||
polar_guess: None,
|
||||
expand_by_zone_tol: false,
|
||||
expand_tolerance: None,
|
||||
};
|
||||
let pseudo = ignored(bs.calculate_bounding_box(k, &s.natural_uv_domain(), &req))?
|
||||
.and_then(|r| r.pseudo)
|
||||
|
||||
@@ -46,6 +46,7 @@ use crate::kernel::Kernel;
|
||||
use crate::math::{max2, min2, EFF_ZERO, EFF_ZERO_SQRT, PI, UNDEF_DOUBLE};
|
||||
use crate::nurbs::b_spline_curve::BSplineCurve;
|
||||
use crate::nurbs::b_spline_surface::{BoundingBoxRequest, LocationType};
|
||||
use crate::surface::plane::p2::PlaneOwner;
|
||||
use crate::surface::plane::Plane;
|
||||
use crate::surface::surf_of_extrusion::SurfOfExtrusion;
|
||||
use crate::surface::surf_of_revolution::p3::Revolved;
|
||||
@@ -287,23 +288,40 @@ impl Cone {
|
||||
plane: &Plane,
|
||||
other_domain: &Extent2d,
|
||||
approx_tol: Option<f64>,
|
||||
) -> Result<(bool, SurfaceIntersection)> {
|
||||
self.intersect_with_plane_owned(
|
||||
k,
|
||||
domain,
|
||||
plane,
|
||||
PlaneOwner::NoFace,
|
||||
other_domain,
|
||||
approx_tol,
|
||||
)
|
||||
}
|
||||
|
||||
/// [`Cone::intersect_with_plane`] with the plane's owner: its box is expanded by the
|
||||
/// tolerance of the plane's face (`GetFace()->GetTolerance()`), else by
|
||||
/// `SM_ZONE_TOL_3D`.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Those of [`Cone::intersect_with_plane`]; [`SolidError::Unported`]
|
||||
/// (`SmFace::GetTolerance`) for a plane with a face whose tolerance is not cached.
|
||||
pub(crate) fn intersect_with_plane_owned(
|
||||
&self,
|
||||
k: &Kernel,
|
||||
domain: &Extent2d,
|
||||
plane: &Plane,
|
||||
plane_owner: PlaneOwner,
|
||||
other_domain: &Extent2d,
|
||||
approx_tol: Option<f64>,
|
||||
) -> Result<(bool, SurfaceIntersection)> {
|
||||
let mut out = SurfaceIntersection::default();
|
||||
let tol = approx_tol.map_or(EFF_ZERO_SQRT, |t| approx_tol3d(k, t));
|
||||
let box1 = bbox(k, self, domain)?;
|
||||
let mut box2 = plane
|
||||
.base_with_nurb()?
|
||||
.calculate_bounding_box(
|
||||
k,
|
||||
other_domain,
|
||||
&BoundingBoxRequest {
|
||||
normal: true,
|
||||
expand_by_zone_tol: true,
|
||||
..BoundingBoxRequest::default()
|
||||
},
|
||||
)?
|
||||
.normal
|
||||
.ok_or_else(|| SolidError::sm_err(OP))?;
|
||||
// crPlane.CalculateBoundingBox: expanded by its face's tolerance (no face:
|
||||
// SM_ZONE_TOL_3D)
|
||||
let mut box2 = plane.bounding_boxes(k, other_domain, plane_owner)?.0;
|
||||
box2.expand_absolute(tol);
|
||||
if box1.are_disjoint(&box2, 0.0) {
|
||||
return Ok((false, out));
|
||||
|
||||
@@ -713,8 +713,9 @@ impl OffsetSurface {
|
||||
///
|
||||
/// Those of the base surface's [`Surface::calculate_bounding_box`] and of
|
||||
/// [`Surface::base_calculate_bounding_box`] (an owned base reaches this offset's face
|
||||
/// through its owner, so a face-owned B-spline-kind base's expanded box returns
|
||||
/// `SmFace::GetTolerance`'s [`SolidError::Unported`], as upstream asks that face).
|
||||
/// through its owner, so a face-owned B-spline-kind base's box is expanded by the
|
||||
/// face tolerance passed down to it, [`Surface::owner_zone_tol_3d`], as upstream asks
|
||||
/// that face; without it, `SmFace::GetTolerance`'s [`SolidError::Unported`]).
|
||||
pub fn calculate_bounding_box(
|
||||
&self,
|
||||
k: &Kernel,
|
||||
|
||||
@@ -29,8 +29,9 @@
|
||||
//! tolerance of the plane's face ([`Surface::face`], `SmSurface::GetFace`), else
|
||||
//! `SM_ZONE_TOL_3D`. A bare [`Plane`] has no owner (the owner lives on [`Surface`]), so
|
||||
//! it uses `SM_ZONE_TOL_3D`; through [`Surface::global_surface_intersect`] a plane with
|
||||
//! a face returns [`SolidError::Unported`] there (`SmFace::GetTolerance`, unit
|
||||
//! `topology.face_p2`).
|
||||
//! a face uses the face tolerance its B-rep cached on the surface
|
||||
//! ([`Surface::owner_zone_tol_3d`]), and returns [`SolidError::Unported`] there
|
||||
//! without it (`SmFace::GetTolerance`, unit `topology.face_p2`).
|
||||
//! - **NURB.** `IntersectWithPlane`'s parallel case tests whether both planes hold a
|
||||
//! NURB (`m_pNurb`), as upstream; the boxes are computed on a NURB made on a copy
|
||||
//! when the plane has none (upstream makes it in place, a `const_cast`). Because the
|
||||
@@ -112,18 +113,45 @@ impl SolutionObject for CurveHandle {
|
||||
}
|
||||
}
|
||||
|
||||
/// The tolerance of a plane's face (`GetFace()->GetTolerance()`, when `owned`: the
|
||||
/// plane has a face), else `SM_ZONE_TOL_3D` (the `bExpandPosBoxesByZoneTol3d`
|
||||
/// expansion of `CalculateBoundingBox`).
|
||||
fn zone_tolerance(owned: bool) -> Result<f64> {
|
||||
if owned {
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
return Err(SolidError::unported(
|
||||
/// Whether a plane has a face (`SmSurface::GetFace`), and that face's tolerance as its
|
||||
/// B-rep cached it on the [`Surface`] ([`Surface::owner_zone_tol_3d`]).
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
pub(crate) enum PlaneOwner {
|
||||
/// No face: the boxes expand by `SM_ZONE_TOL_3D`.
|
||||
NoFace,
|
||||
/// A face, with its cached tolerance (`None`: a bare face handle).
|
||||
Face(Option<f64>),
|
||||
}
|
||||
|
||||
impl PlaneOwner {
|
||||
/// The owner state of a plane held by `surface`.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Those of [`Surface::face`].
|
||||
pub(crate) fn of(surface: &Surface) -> Result<Self> {
|
||||
Ok(if surface.face()?.is_some() {
|
||||
Self::Face(surface.owner_zone_tol_3d())
|
||||
} else {
|
||||
Self::NoFace
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// The tolerance of a plane's face (`GetFace()->GetTolerance()`, when the plane has a
|
||||
/// face), else `SM_ZONE_TOL_3D` (the `bExpandPosBoxesByZoneTol3d` expansion of
|
||||
/// `CalculateBoundingBox`).
|
||||
fn zone_tolerance(owner: PlaneOwner) -> Result<f64> {
|
||||
match owner {
|
||||
PlaneOwner::NoFace => Ok(ZONE_TOL_3D),
|
||||
PlaneOwner::Face(Some(tol)) => Ok(tol),
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance (a bare face handle without
|
||||
// the tolerance its B-rep caches on the surface)
|
||||
PlaneOwner::Face(None) => Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
));
|
||||
)),
|
||||
}
|
||||
Ok(ZONE_TOL_3D)
|
||||
}
|
||||
|
||||
impl Plane {
|
||||
@@ -480,7 +508,7 @@ impl Plane {
|
||||
&self,
|
||||
k: &Kernel,
|
||||
uv_domain: &Extent2d,
|
||||
owned: bool,
|
||||
owner: PlaneOwner,
|
||||
) -> Result<(Extent3d, PseudoBox)> {
|
||||
let req = BoundingBoxRequest {
|
||||
normal: true,
|
||||
@@ -494,8 +522,8 @@ impl Plane {
|
||||
let mut bbox = b.normal.ok_or(SolidError::null_pointer(OP_PP))?;
|
||||
let mut pbox = b.pseudo.ok_or(SolidError::null_pointer(OP_PP))?;
|
||||
// When asked, expand the normal and pseudo boxes by the zone tolerance
|
||||
bbox.expand_absolute(zone_tolerance(owned)?);
|
||||
pbox.expand_absolute(zone_tolerance(owned)?);
|
||||
bbox.expand_absolute(zone_tolerance(owner)?);
|
||||
pbox.expand_absolute(zone_tolerance(owner)?);
|
||||
Ok((bbox, pbox))
|
||||
}
|
||||
|
||||
@@ -528,11 +556,11 @@ impl Plane {
|
||||
other,
|
||||
other_uv_domain,
|
||||
approx_tol_3d,
|
||||
[false, false],
|
||||
[PlaneOwner::NoFace, PlaneOwner::NoFace],
|
||||
)
|
||||
}
|
||||
|
||||
/// [`Plane::intersect_with_plane`] with the planes' ownership (for the zone
|
||||
/// [`Plane::intersect_with_plane`] with the planes' owners (for the zone
|
||||
/// tolerance).
|
||||
#[allow(clippy::too_many_lines)] // one upstream function
|
||||
pub(crate) fn intersect_with_plane_owned(
|
||||
@@ -542,7 +570,7 @@ impl Plane {
|
||||
other: &Self,
|
||||
other_uv_domain: &Extent2d,
|
||||
approx_tol_3d: Option<f64>,
|
||||
owned: [bool; 2],
|
||||
owners: [PlaneOwner; 2],
|
||||
) -> Result<(bool, SurfaceIntersection)> {
|
||||
// init output
|
||||
let mut out = SurfaceIntersection::default();
|
||||
@@ -582,8 +610,8 @@ impl Plane {
|
||||
}
|
||||
|
||||
// get plane1 and plane2 bounding and pseudo boxes
|
||||
let (bbox1, pbox1) = self.bounding_boxes(k, uv_domain, owned[0])?;
|
||||
let (bbox2, pbox2) = other.bounding_boxes(k, other_uv_domain, owned[1])?;
|
||||
let (bbox1, pbox1) = self.bounding_boxes(k, uv_domain, owners[0])?;
|
||||
let (bbox2, pbox2) = other.bounding_boxes(k, other_uv_domain, owners[1])?;
|
||||
|
||||
// no work - when bounding or pseudo boxes are disjoint
|
||||
if bbox1.are_disjoint(&bbox2, 0.0) || pbox1.are_disjoint(&pbox2, None) {
|
||||
@@ -667,7 +695,7 @@ impl Plane {
|
||||
|
||||
// get size of bounded ThisPlane
|
||||
if this_bounded {
|
||||
(bbox1, pbox1) = self.bounding_boxes(k, uv_domain, owned[0])?;
|
||||
(bbox1, pbox1) = self.bounding_boxes(k, uv_domain, owners[0])?;
|
||||
let radius1 = bbox1.sphere_bound().radius;
|
||||
bbox1.expand_absolute(tol / 2.0);
|
||||
pbox1.expand_absolute(tol / 2.0);
|
||||
@@ -676,7 +704,7 @@ impl Plane {
|
||||
|
||||
// get size of bounded OtherPlane
|
||||
if other_bounded {
|
||||
(bbox2, pbox2) = other.bounding_boxes(k, other_uv_domain, owned[1])?;
|
||||
(bbox2, pbox2) = other.bounding_boxes(k, other_uv_domain, owners[1])?;
|
||||
let radius2 = bbox2.sphere_bound().radius;
|
||||
bbox2.expand_absolute(tol / 2.0);
|
||||
pbox2.expand_absolute(tol / 2.0);
|
||||
@@ -1374,28 +1402,30 @@ pub(crate) fn global_surface_intersect(
|
||||
match other.kind() {
|
||||
// plane/plane special case intersection
|
||||
SurfaceKind::Plane(other_plane) => {
|
||||
// (whether each plane has a face: SmSurface::GetFace)
|
||||
let owned = [this.face()?.is_some(), other.face()?.is_some()];
|
||||
// (whether each plane has a face: SmSurface::GetFace, and its tolerance)
|
||||
let owners = [PlaneOwner::of(this)?, PlaneOwner::of(other)?];
|
||||
(need_nurb_intersection, out) = plane.intersect_with_plane_owned(
|
||||
k,
|
||||
uv_domain,
|
||||
other_plane,
|
||||
other_uv_domain,
|
||||
approx_tol_3d,
|
||||
owned,
|
||||
owners,
|
||||
)?;
|
||||
}
|
||||
// cone/plane special case intersection (SmCone_TYPE and SmCylinder_TYPE):
|
||||
// SmCone::IntersectWithPlane, which hides the surface of revolution's; the
|
||||
// orders and the UV curves are swapped
|
||||
SurfaceKind::Cone(cone) => {
|
||||
// the plane's boxes take its face's tolerance (taken as without owner
|
||||
// there; see the module header)
|
||||
if this.face()?.is_some() {
|
||||
zone_tolerance(true)?;
|
||||
}
|
||||
let (need, mut x) =
|
||||
cone.intersect_with_plane(k, other_uv_domain, plane, uv_domain, approx_tol_3d)?;
|
||||
// the plane's boxes take its face's tolerance
|
||||
let (need, mut x) = cone.intersect_with_plane_owned(
|
||||
k,
|
||||
other_uv_domain,
|
||||
plane,
|
||||
PlaneOwner::of(this)?,
|
||||
uv_domain,
|
||||
approx_tol_3d,
|
||||
)?;
|
||||
core::mem::swap(&mut x.surface1_uv_curves, &mut x.surface2_uv_curves);
|
||||
(need_nurb_intersection, out) = (need, x);
|
||||
}
|
||||
@@ -1403,12 +1433,14 @@ pub(crate) fn global_surface_intersect(
|
||||
// curves are swapped (the surface of revolution's edge flags and angle
|
||||
// tolerance are not used by it)
|
||||
SurfaceKind::SurfOfRevolution(rev) => {
|
||||
// the plane's boxes take its face's tolerance (taken as without owner
|
||||
// there; see the module header)
|
||||
if this.face()?.is_some() {
|
||||
zone_tolerance(true)?;
|
||||
}
|
||||
let (need, mut x) = rev.intersect_with_plane(k, plane, uv_domain, approx_tol_3d)?;
|
||||
// the plane's boxes take its face's tolerance
|
||||
let (need, mut x) = rev.intersect_with_plane_owned(
|
||||
k,
|
||||
plane,
|
||||
PlaneOwner::of(this)?,
|
||||
uv_domain,
|
||||
approx_tol_3d,
|
||||
)?;
|
||||
core::mem::swap(&mut x.surface1_uv_curves, &mut x.surface2_uv_curves);
|
||||
(need_nurb_intersection, out) = (need, x);
|
||||
}
|
||||
|
||||
@@ -952,7 +952,11 @@ impl Sphere {
|
||||
// Do a little bounding box computation to see if things really intersect.
|
||||
if plane.is_bounded() {
|
||||
// get min distance from sphereOrigin to planeBoundingBox
|
||||
let (bbox, _) = plane.bounding_boxes(k, other_uv_domain, false)?;
|
||||
let (bbox, _) = plane.bounding_boxes(
|
||||
k,
|
||||
other_uv_domain,
|
||||
crate::surface::plane::p2::PlaneOwner::NoFace,
|
||||
)?;
|
||||
let sph_point = Extent3d::from_points(sph_origin, sph_origin);
|
||||
let dist = bbox.min_distance(&sph_point);
|
||||
|
||||
|
||||
@@ -78,8 +78,12 @@
|
||||
//! - **`IntersectWithPlane`** (its body below the plane box ported by
|
||||
//! `surface.plane_p2`) takes a bare [`Plane`], which has no owner: its pseudo box is
|
||||
//! expanded by `SM_ZONE_TOL_3D` (upstream: the zone tolerance of the plane's face or
|
||||
//! B-rep, `SmSurface::GetFace`, `NULL` for a plane without one). It takes a
|
||||
//! [`Kernel`] for the curve operations.
|
||||
//! B-rep, `SmSurface::GetFace`, `NULL` for a plane without one). Through
|
||||
//! `Surface::global_surface_intersect` the plane's owner is passed
|
||||
//! (`intersect_with_plane_owned`): a face-owned plane expands by the face tolerance
|
||||
//! its B-rep cached on the surface, and returns [`SolidError::Unported`]
|
||||
//! (`SmFace::GetTolerance`) without it. It takes a [`Kernel`] for the curve
|
||||
//! operations.
|
||||
//! - **`sm_TestForIsoCircles`** returns its outputs in [`IsoCircles`]; the ones
|
||||
//! upstream leaves unwritten (no non-degenerate iso curve, no second plane) are
|
||||
//! `None`. With parallel iso planes `smgu_IntersectTwoPlanes` writes no line, so the
|
||||
@@ -108,6 +112,7 @@ use crate::nurbs::b_spline_curve::{BSplineCurve, BoundingBoxRequest as CurveBoxR
|
||||
use crate::nurbs::b_spline_surface::{
|
||||
BSplineSurface, BSplineSurfaceForm, IsoCurveOptions, SurfParamType,
|
||||
};
|
||||
use crate::surface::plane::p2::PlaneOwner;
|
||||
use crate::surface::plane::Plane;
|
||||
use crate::surface::surface::p2::{
|
||||
scale_step_angular_derivatives, SurfaceIntersection, TsectCurveType, SURF_OF_REVOLUTION_TYPE,
|
||||
@@ -1430,13 +1435,37 @@ impl SurfOfRevolution {
|
||||
/// Those of the angle measures, the generator transform, property analysis and
|
||||
/// evaluation and of the iso curves (upstream `SER`); `SM_ERR_NULL_POINTER` without
|
||||
/// generator.
|
||||
#[allow(clippy::too_many_lines)] // one upstream function
|
||||
pub fn intersect_with_plane(
|
||||
&self,
|
||||
k: &Kernel,
|
||||
plane: &Plane,
|
||||
other_uv_domain: &Extent2d,
|
||||
approx_tol_3d: Option<f64>,
|
||||
) -> Result<(bool, SurfaceIntersection)> {
|
||||
self.intersect_with_plane_owned(
|
||||
k,
|
||||
plane,
|
||||
PlaneOwner::NoFace,
|
||||
other_uv_domain,
|
||||
approx_tol_3d,
|
||||
)
|
||||
}
|
||||
|
||||
/// [`SurfOfRevolution::intersect_with_plane`] with the plane's owner: its box is
|
||||
/// expanded by the tolerance of the plane's face (`GetFace()->GetTolerance()`).
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Those of [`SurfOfRevolution::intersect_with_plane`]; [`SolidError::Unported`]
|
||||
/// (`SmFace::GetTolerance`) for a plane with a face whose tolerance is not cached.
|
||||
#[allow(clippy::too_many_lines)] // one upstream function
|
||||
pub(crate) fn intersect_with_plane_owned(
|
||||
&self,
|
||||
k: &Kernel,
|
||||
plane: &Plane,
|
||||
plane_owner: PlaneOwner,
|
||||
other_uv_domain: &Extent2d,
|
||||
approx_tol_3d: Option<f64>,
|
||||
) -> Result<(bool, SurfaceIntersection)> {
|
||||
let mut out = SurfaceIntersection::default();
|
||||
|
||||
@@ -1460,9 +1489,10 @@ impl SurfOfRevolution {
|
||||
}
|
||||
|
||||
// get plane bounding box increased by tolerance (status ignored)
|
||||
let mut plane_pbox = ignored(plane.bounding_boxes(k, &plane.natural_uv_domain(), false))?
|
||||
.map(|(_, p)| p)
|
||||
.unwrap_or_default();
|
||||
let mut plane_pbox =
|
||||
ignored(plane.bounding_boxes(k, &plane.natural_uv_domain(), plane_owner))?
|
||||
.map(|(_, p)| p)
|
||||
.unwrap_or_default();
|
||||
plane_pbox.expand_absolute(tol);
|
||||
|
||||
let mut types: Vec<TsectCurveType> = Vec::new();
|
||||
|
||||
@@ -91,8 +91,10 @@
|
||||
//! `Unitize` returns `TRUE`.
|
||||
//! - **Unported callees.** `ApproximateSize` of kinds other than B-splines needs
|
||||
//! `SmIsoCurve` over any surface (the ported iso curve holds a B-spline), the zone
|
||||
//! tolerance of a surface with a face needs `SmFace::GetTolerance`
|
||||
//! (`topology.face_p2`): those calls return [`SolidError::Unported`]. Every tree build
|
||||
//! tolerance of a surface with a face is the one its B-rep cached on it
|
||||
//! ([`Surface::owner_zone_tol_3d`]) and needs `SmFace::GetTolerance`
|
||||
//! (`topology.face_p2`) for a bare face handle without it: those calls return
|
||||
//! [`SolidError::Unported`]. Every tree build
|
||||
//! needs `SmSurface::CalculateContinuities` (`surface.surface_p6`), whose iso curves
|
||||
//! exist for the B-spline, plane and revolution kinds.
|
||||
//! [`map_to_2d_on_curve`] ports the UV-curve and the general 3D branch of
|
||||
@@ -608,19 +610,17 @@ impl StepSurface {
|
||||
// ---- tolerances of surfaces (SmTol co-ports) ----------------------------------------------
|
||||
|
||||
/// `SmTol::GetZoneTol3d(const SmObject*)` of a surface: its face's tolerance when it
|
||||
/// has a face, else the system zone tolerance.
|
||||
/// has a face (the tolerance the B-rep cached on the surface,
|
||||
/// [`Surface::owner_zone_tol_3d`]), else the system zone tolerance.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Those of [`Surface::face`]; [`SolidError::Unported`]: `SmFace::GetTolerance`
|
||||
/// (`topology.face_p2`) for a surface with a face.
|
||||
/// Those of [`Surface::face_zone_tol_3d`]: [`SolidError::Unported`]
|
||||
/// (`SmFace::GetTolerance`, `topology.face_p2`) for a surface with a face whose
|
||||
/// tolerance was not cached on it.
|
||||
pub fn zone_tol_3d(k: &Kernel, surface: &Surface) -> Result<f64> {
|
||||
match surface.face()? {
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
Some(_) => Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
)),
|
||||
match surface.face_zone_tol_3d()? {
|
||||
Some(tol) => Ok(tol),
|
||||
None => Ok(kernel_zone_tol_3d(k, SmallTopoType::NormalSize)),
|
||||
}
|
||||
}
|
||||
@@ -1048,12 +1048,19 @@ impl Surface {
|
||||
}
|
||||
}
|
||||
|
||||
/// Sets the owner and returns the previous one (`SetOwner`).
|
||||
/// Sets the owner and returns the previous one (`SetOwner`). A different owner
|
||||
/// drops the cached face tolerance ([`Surface::owner_zone_tol_3d`]): the B-rep
|
||||
/// records the new face's ([`Surface::set_owner_zone_tol_3d`]).
|
||||
pub fn set_owner(&mut self, new_owner: Option<ObjectRef>) -> Option<ObjectRef> {
|
||||
// (notify when pNewOwner is NULL or a Face: the object layer's notify)
|
||||
let old = core::mem::replace(self.owner_mut(), new_owner);
|
||||
// the bases this surface owns reach the face through it
|
||||
self.update_owned_bases();
|
||||
if old == new_owner {
|
||||
// the bases this surface owns reach the face through it
|
||||
self.update_owned_bases();
|
||||
} else {
|
||||
// (also passes the face down to the bases this surface owns)
|
||||
self.set_owner_zone_tol_3d(None);
|
||||
}
|
||||
old
|
||||
}
|
||||
|
||||
@@ -1541,7 +1548,8 @@ impl Surface {
|
||||
///
|
||||
/// Those of the surface cache and of the polar box; [`SolidError::Unported`]:
|
||||
/// `SmFace::GetTolerance` (`topology.face_p2`) when a B-spline or plane with a
|
||||
/// face expands its boxes.
|
||||
/// face expands its boxes and the face's tolerance is not cached on the surface
|
||||
/// ([`Surface::owner_zone_tol_3d`]).
|
||||
pub fn calculate_bounding_box(
|
||||
&self,
|
||||
k: &Kernel,
|
||||
@@ -1556,15 +1564,14 @@ impl Surface {
|
||||
| SurfaceKind::Plane(_)
|
||||
| SurfaceKind::SurfOfRevolution(_) => {
|
||||
// the B-spline override expands by its face's tolerance (GetFace()):
|
||||
// the owner is held here, not by the B-spline
|
||||
if expand_pos_boxes_by_zone_tol_3d && (want[0] || want[1]) && self.face()?.is_some()
|
||||
{
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
return Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
));
|
||||
}
|
||||
// the owner is held here, not by the B-spline, so the face's cached
|
||||
// tolerance is passed down (the GetBrep() arm is reached only without
|
||||
// a face, where a surface's GetBrep is null: SM_ZONE_TOL_3D)
|
||||
let expand_tolerance = if expand_pos_boxes_by_zone_tol_3d && (want[0] || want[1]) {
|
||||
self.face_zone_tol_3d()?
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let req = crate::nurbs::b_spline_surface::BoundingBoxRequest {
|
||||
normal: want[0],
|
||||
pseudo: want[1],
|
||||
@@ -1572,6 +1579,7 @@ impl Surface {
|
||||
pseudo_guess: None,
|
||||
polar_guess: None,
|
||||
expand_by_zone_tol: expand_pos_boxes_by_zone_tol_3d,
|
||||
expand_tolerance,
|
||||
};
|
||||
let r = match self.kind() {
|
||||
SurfaceKind::BSpline(s) => s.calculate_bounding_box(k, uv_domain, &req)?,
|
||||
|
||||
@@ -63,6 +63,12 @@
|
||||
//! | [`IsoCurveLengthIntegrand`] | `SmIsoCurveLengthIFEO` (constructor) |
|
||||
//!
|
||||
//! Deviations:
|
||||
//! - **Owner tolerance.** A surface holds only an owner handle, never its B-rep, so the
|
||||
//! face tolerance upstream reads through `GetFace()->GetTolerance()` is cached on the
|
||||
//! surface by the B-rep ([`Surface::owner_zone_tol_3d`], kept in step where a face
|
||||
//! record's surface or tolerance changes) together with the face it belongs to; an
|
||||
//! owner change drops it, the copy constructor resets it and a bare face handle
|
||||
//! without it returns [`SolidError::Unported`] (`SmFace::GetTolerance`).
|
||||
//! - Evaluation dispatch and copies check all owned surface, curve and volume branches against a
|
||||
//! 64-level depth bound before invoking recursive copies. The surface evaluator
|
||||
//! also bounds its wrapper traversal to 64 levels and retains B-spline output
|
||||
@@ -292,6 +298,12 @@ pub struct Surface {
|
||||
/// surface's own owner chain. The owning surface holds this surface by value, so it
|
||||
/// cannot walk up; the owner keeps this in step ([`Surface::set_owner`]).
|
||||
owner_chain_face: Option<ObjectRef>,
|
||||
/// The stored zone tolerance (`SmFace::m_sZoneTol3d`, [`crate::topology::Face`]'s
|
||||
/// `tolerance`) of the face this surface reaches ([`Surface::reached_face`]), with
|
||||
/// that face: the B-rep keeps it in step when it attaches a surface to a face or sets
|
||||
/// a face tolerance. Valid only while the recorded face is still the one reached, so
|
||||
/// an owner change can never leave another face's tolerance behind.
|
||||
owner_zone_tol_3d: Option<(ObjectRef, f64)>,
|
||||
}
|
||||
|
||||
/// The copy constructor: copies the geometry, resets the owner (an owning offset in it
|
||||
@@ -302,6 +314,7 @@ impl Clone for Surface {
|
||||
kind: self.kind.clone(),
|
||||
owner: None,
|
||||
owner_chain_face: None,
|
||||
owner_zone_tol_3d: None,
|
||||
};
|
||||
s.update_owned_bases();
|
||||
s
|
||||
@@ -433,6 +446,7 @@ impl Surface {
|
||||
kind,
|
||||
owner: self.owner,
|
||||
owner_chain_face: self.owner_chain_face,
|
||||
owner_zone_tol_3d: self.owner_zone_tol_3d,
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -545,6 +559,7 @@ impl Surface {
|
||||
kind,
|
||||
owner: None,
|
||||
owner_chain_face: None,
|
||||
owner_zone_tol_3d: None,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -588,6 +603,8 @@ impl Surface {
|
||||
pub(crate) fn set_surface_owner(&mut self, owner: ObjectRef, chain_face: Option<ObjectRef>) {
|
||||
self.owner = Some(owner);
|
||||
self.owner_chain_face = chain_face;
|
||||
// a new owner chain: the cached face tolerance belonged to the old one
|
||||
self.owner_zone_tol_3d = None;
|
||||
self.update_owned_bases();
|
||||
}
|
||||
|
||||
@@ -597,6 +614,7 @@ impl Surface {
|
||||
pub(crate) fn restore_owner_state(&mut self, from: &Self) {
|
||||
self.owner = from.owner;
|
||||
self.owner_chain_face = from.owner_chain_face;
|
||||
self.owner_zone_tol_3d = from.owner_zone_tol_3d;
|
||||
self.update_owned_bases();
|
||||
}
|
||||
|
||||
@@ -614,6 +632,8 @@ impl Surface {
|
||||
/// `MAX_SURFACE_NESTING` at construction but is walked without recursion.
|
||||
pub(crate) fn update_owned_bases(&mut self) {
|
||||
let face = self.reached_face();
|
||||
// the bases reach the same face, so they carry its cached tolerance too
|
||||
let tol = face.zip(self.owner_zone_tol_3d());
|
||||
let mut cur = self;
|
||||
while let SurfaceKind::OffsetSurface(off) = &mut cur.kind {
|
||||
let Some(base) = off.owned_base_mut() else {
|
||||
@@ -621,10 +641,56 @@ impl Surface {
|
||||
};
|
||||
base.owner = Some(crate::surface::offset_surface::BASE_OWNER);
|
||||
base.owner_chain_face = face;
|
||||
base.owner_zone_tol_3d = tol;
|
||||
cur = base;
|
||||
}
|
||||
}
|
||||
|
||||
/// The zone tolerance of the owning face (`GetFace()->GetTolerance()`,
|
||||
/// `SmFace::m_sZoneTol3d`), when the B-rep has recorded it on this surface
|
||||
/// ([`Surface::set_owner_zone_tol_3d`]); `None` for a surface without face, or for a
|
||||
/// bare owner handle whose B-rep never recorded the face's tolerance.
|
||||
#[must_use]
|
||||
pub fn owner_zone_tol_3d(&self) -> Option<f64> {
|
||||
match (self.reached_face(), self.owner_zone_tol_3d) {
|
||||
(Some(face), Some((cached, tol))) if face == cached => Some(tol),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Records the zone tolerance of the face this surface reaches (`None` clears it),
|
||||
/// and passes it down the bases this surface owns. Called by the B-rep wherever a
|
||||
/// face record's surface or tolerance changes; a surface reaching no face records
|
||||
/// nothing.
|
||||
pub fn set_owner_zone_tol_3d(&mut self, tol: Option<f64>) {
|
||||
self.owner_zone_tol_3d = tol.and_then(|t| self.reached_face().map(|f| (f, t)));
|
||||
self.update_owned_bases();
|
||||
}
|
||||
|
||||
/// `GetFace() ? GetFace()->GetTolerance() : none`: `Ok(None)` for a surface without
|
||||
/// face, the cached face tolerance ([`Surface::owner_zone_tol_3d`]) for one with a
|
||||
/// face.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Those of [`Surface::face`]; [`SolidError::Unported`] (`SmFace::GetTolerance`,
|
||||
/// `topology.face_p2`) for a surface with a face whose B-rep has not recorded the
|
||||
/// face's tolerance on it (a bare owner handle: the surface cannot reach the B-rep).
|
||||
pub fn face_zone_tol_3d(&self) -> Result<Option<f64>> {
|
||||
if self.face()?.is_none() {
|
||||
return Ok(None);
|
||||
}
|
||||
match self.owner_zone_tol_3d() {
|
||||
Some(tol) => Ok(Some(tol)),
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance (a bare face handle
|
||||
// without the tolerance its B-rep records here)
|
||||
None => Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
/// `GetFace()`'s result: the owner when it is a face, the face reached through a
|
||||
/// surface owner, else none.
|
||||
pub(crate) fn reached_face(&self) -> Option<ObjectRef> {
|
||||
@@ -1184,7 +1250,10 @@ impl Surface {
|
||||
plane,
|
||||
other_uv_domain,
|
||||
approx_tol_3d,
|
||||
[self.face()?.is_some(), false],
|
||||
[
|
||||
crate::surface::plane::p2::PlaneOwner::of(self)?,
|
||||
crate::surface::plane::p2::PlaneOwner::NoFace,
|
||||
],
|
||||
),
|
||||
SurfaceKind::Cone(s) => {
|
||||
s.intersect_with_plane(k, uv_domain, plane, other_uv_domain, approx_tol_3d)
|
||||
@@ -5258,6 +5327,187 @@ mod curve_on_classify_tests {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod owner_zone_tol_tests {
|
||||
use super::*;
|
||||
use crate::geom::assert_array::labels::FACE_TYPE;
|
||||
use crate::geom::attribute::ObjectKey;
|
||||
use crate::surface::offset_surface::OffsetSurface;
|
||||
use crate::topology::{Brep, Face, FaceId};
|
||||
|
||||
fn face_ref(key: u64) -> ObjectRef {
|
||||
ObjectRef {
|
||||
type_code: FACE_TYPE,
|
||||
key: ObjectKey(key),
|
||||
}
|
||||
}
|
||||
|
||||
fn plane() -> Surface {
|
||||
Surface::from(Plane::from_normal(Point3::ZERO, Vec3::Z))
|
||||
}
|
||||
|
||||
/// A B-rep with one face of tolerance `tol` holding `surface`.
|
||||
fn brep_with(surface: Surface, tol: f64) -> (Brep, FaceId) {
|
||||
let mut b = Brep::new();
|
||||
let shell = b.add_shell().unwrap();
|
||||
let f = b
|
||||
.add_face_record(Face {
|
||||
surface: Some(surface),
|
||||
tolerance: tol,
|
||||
..Face::new(shell)
|
||||
})
|
||||
.unwrap();
|
||||
(b, f)
|
||||
}
|
||||
|
||||
fn surface_of(b: &Brep, f: FaceId) -> &Surface {
|
||||
b.face(f).unwrap().surface.as_ref().unwrap()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_face_record_caches_the_face_tolerance() {
|
||||
let mut s = plane();
|
||||
s.set_owner(Some(face_ref(1)));
|
||||
assert!(s.owner_zone_tol_3d().is_none());
|
||||
assert!(s.face_zone_tol_3d().unwrap_err().is_unported());
|
||||
let (b, f) = brep_with(s, 0.25);
|
||||
let s = surface_of(&b, f);
|
||||
assert_eq!(s.owner_zone_tol_3d(), Some(0.25));
|
||||
assert_eq!(s.face_zone_tol_3d().unwrap(), Some(0.25));
|
||||
let k = Kernel::default();
|
||||
assert_eq!(
|
||||
crate::surface::surface::p1::zone_tol_3d(&k, s).unwrap(),
|
||||
0.25
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unowned_surface_records_nothing() {
|
||||
let (b, f) = brep_with(plane(), 0.25);
|
||||
let s = surface_of(&b, f);
|
||||
assert_eq!(s.owner_zone_tol_3d(), None);
|
||||
assert_eq!(s.face_zone_tol_3d().unwrap(), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn owner_changes_drop_the_cache() {
|
||||
let mut s = plane();
|
||||
s.set_owner(Some(face_ref(1)));
|
||||
let (mut b, f) = brep_with(s, 0.25);
|
||||
let s = b.face_mut(f).unwrap().surface.as_mut().unwrap();
|
||||
// the same owner keeps it
|
||||
s.set_owner(Some(face_ref(1)));
|
||||
assert_eq!(s.owner_zone_tol_3d(), Some(0.25));
|
||||
// another face drops it
|
||||
s.set_owner(Some(face_ref(2)));
|
||||
assert_eq!(s.owner_zone_tol_3d(), None);
|
||||
assert!(s.face_zone_tol_3d().unwrap_err().is_unported());
|
||||
// and so does no owner, also when the face comes back
|
||||
b.sync_face_surface_tolerance(f).unwrap();
|
||||
let s = b.face_mut(f).unwrap().surface.as_mut().unwrap();
|
||||
assert_eq!(s.owner_zone_tol_3d(), Some(0.25));
|
||||
s.set_owner(None);
|
||||
assert_eq!(s.owner_zone_tol_3d(), None);
|
||||
s.set_owner(Some(face_ref(2)));
|
||||
assert_eq!(s.owner_zone_tol_3d(), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn direct_owner_writes_cannot_leak_the_cache() {
|
||||
let mut s = plane();
|
||||
s.set_owner(Some(face_ref(1)));
|
||||
s.set_owner_zone_tol_3d(Some(0.5));
|
||||
*s.owner_mut() = Some(face_ref(2));
|
||||
assert_eq!(s.owner_zone_tol_3d(), None);
|
||||
*s.owner_mut() = None;
|
||||
assert_eq!(s.owner_zone_tol_3d(), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn evaluation_copy_keeps_and_clone_resets() {
|
||||
let mut s = plane();
|
||||
s.set_owner(Some(face_ref(1)));
|
||||
s.set_owner_zone_tol_3d(Some(0.5));
|
||||
let e = s.clone_for_evaluation().unwrap();
|
||||
assert_eq!(e.owner_zone_tol_3d(), Some(0.5));
|
||||
let c = s.clone();
|
||||
assert_eq!(c.owner(), None);
|
||||
assert_eq!(c.owner_zone_tol_3d(), None);
|
||||
let kept = s.clone_keeping_owner();
|
||||
assert_eq!(kept.owner_zone_tol_3d(), Some(0.5));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn owned_offset_base_reaches_the_cache() {
|
||||
let k = Kernel::default();
|
||||
let mut off = Surface::from(OffsetSurface::new(&k, 1.0, plane(), true, 0).unwrap());
|
||||
off.set_owner(Some(face_ref(1)));
|
||||
let base = |s: &Surface| match s.kind() {
|
||||
SurfaceKind::OffsetSurface(o) => o.base_surface().owner_zone_tol_3d(),
|
||||
_ => panic!("not an offset"),
|
||||
};
|
||||
assert_eq!(base(&off), None);
|
||||
off.set_owner_zone_tol_3d(Some(0.125));
|
||||
assert_eq!(off.owner_zone_tol_3d(), Some(0.125));
|
||||
assert_eq!(base(&off), Some(0.125));
|
||||
off.set_owner(None);
|
||||
assert_eq!(base(&off), None);
|
||||
}
|
||||
|
||||
/// The offset paths #307 rewires through the exact snapshot helpers: an owned base
|
||||
/// keeps the cached face tolerance in an evaluation copy, and a shared base (the same
|
||||
/// object upstream) keeps its own face's tolerance in `OffsetSurface::copy`.
|
||||
#[test]
|
||||
fn offset_snapshots_keep_the_cache() {
|
||||
let k = Kernel::default();
|
||||
let base = |s: &Surface| match s.kind() {
|
||||
SurfaceKind::OffsetSurface(o) => o.base_surface().owner_zone_tol_3d(),
|
||||
_ => panic!("not an offset"),
|
||||
};
|
||||
let mut owned = Surface::from(OffsetSurface::new(&k, 1.0, plane(), true, 0).unwrap());
|
||||
owned.set_owner(Some(face_ref(1)));
|
||||
owned.set_owner_zone_tol_3d(Some(0.125));
|
||||
let e = owned.clone_for_evaluation().unwrap();
|
||||
assert_eq!(e.owner_zone_tol_3d(), Some(0.125));
|
||||
assert_eq!(base(&e), Some(0.125));
|
||||
|
||||
let mut shared_base = plane();
|
||||
shared_base.set_owner(Some(face_ref(2)));
|
||||
shared_base.set_owner_zone_tol_3d(Some(0.75));
|
||||
let shared = OffsetSurface::new(&k, 1.0, shared_base, false, 0).unwrap();
|
||||
let c = shared.copy(&k).unwrap();
|
||||
assert_eq!(c.base_surface().owner_zone_tol_3d(), Some(0.75));
|
||||
let e = Surface::from(shared).clone_for_evaluation().unwrap();
|
||||
assert_eq!(base(&e), Some(0.75));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn face_set_tolerance_updates_the_cache() {
|
||||
let mut s = plane();
|
||||
s.set_owner(Some(face_ref(1)));
|
||||
let (mut b, f) = brep_with(s, 0.25);
|
||||
crate::topology::face::p3::set_tolerance(&mut b, f, 0.5, true, false).unwrap();
|
||||
assert_eq!(surface_of(&b, f).owner_zone_tol_3d(), Some(0.5));
|
||||
// only if larger: unchanged
|
||||
crate::topology::face::p3::set_tolerance(&mut b, f, 0.1, true, false).unwrap();
|
||||
assert_eq!(surface_of(&b, f).owner_zone_tol_3d(), Some(0.5));
|
||||
crate::topology::face::p3::set_tolerance(&mut b, f, 0.1, false, false).unwrap();
|
||||
assert_eq!(surface_of(&b, f).owner_zone_tol_3d(), Some(0.1));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn rescue_surface_owner_restores_the_cache() {
|
||||
let mut s = plane();
|
||||
s.set_owner(Some(face_ref(1)));
|
||||
s.set_owner_zone_tol_3d(Some(0.5));
|
||||
let rescue = crate::topology::face::p2::RescueSurfaceOwner::new(&s);
|
||||
s.set_owner(None);
|
||||
assert_eq!(s.owner_zone_tol_3d(), None);
|
||||
rescue.restore(&mut s);
|
||||
assert_eq!(s.owner_zone_tol_3d(), Some(0.5));
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod kernel_dispatch_tests {
|
||||
use super::*;
|
||||
|
||||
@@ -34,10 +34,11 @@
|
||||
//! outputs keep their previous values (initially undefined); the port does the same
|
||||
//! and still propagates [`SolidError::Unported`].
|
||||
//! - **Tolerance of a surface.** `SmTol::GetApproxTol3d(this)` is the system value for a
|
||||
//! surface without an owner; for an owned surface it needs the face tolerance
|
||||
//! (`topology.face_p2`) and returns [`SolidError::Unported`], unless the caller that
|
||||
//! has the face passes it ([`Surface::get_singularities_of_face`], used by the face
|
||||
//! props).
|
||||
//! surface without an owner; for an owned surface it is half the face tolerance the
|
||||
//! caller that has the face passes ([`Surface::get_singularities_of_face`], used by
|
||||
//! the face props), else the one the B-rep cached on the surface
|
||||
//! ([`Surface::owner_zone_tol_3d`]); a bare face handle without it returns
|
||||
//! [`SolidError::Unported`] (`topology.face_p2`).
|
||||
//! - **Unported callees** (return [`SolidError::Unported`]): `SmFace::RemoveUVTrimCurves`
|
||||
//! (`topology.face_p1`) when the surface is owned by a face.
|
||||
|
||||
@@ -99,7 +100,9 @@ const fn side(from_left: bool) -> Side {
|
||||
/// A [`Surface`] holds only an owner handle, not the B-rep, so the face's tolerance
|
||||
/// (`SmFace::GetTolerance`, `topology.face_p2`) is passed by a caller that has the face:
|
||||
/// `face_tolerance` is `Some` for a surface known to be that face's own surface, and the
|
||||
/// zone tolerance of the face is then used whether or not the handle is set.
|
||||
/// zone tolerance of the face is then used whether or not the handle is set. Otherwise
|
||||
/// a surface with a face uses the tolerance its B-rep cached on it
|
||||
/// ([`Surface::owner_zone_tol_3d`]).
|
||||
fn surface_approx_tol_3d(
|
||||
k: &Kernel,
|
||||
surface: &Surface,
|
||||
@@ -111,14 +114,12 @@ fn surface_approx_tol_3d(
|
||||
}
|
||||
// SmTol::GetApproxTol3d(this) = .5 * GetZoneTol3d(this): GetFace() ? its tolerance
|
||||
// : the system's (a surface owned by an offset with no face uses the latter)
|
||||
if surface.face()?.is_some() {
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance of the owner, for the callers
|
||||
// that cannot pass it (a surface does not reach its B-rep; justified: plan/findings.md,
|
||||
// heal.face_props, "Why UNPORTED(topology.face_p2) stays"); the face props pass it through `get_singularities_of_face`
|
||||
return Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
));
|
||||
// the face's tolerance cached on the surface by its B-rep; a bare face handle
|
||||
// without it stays UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
// (`Surface::face_zone_tol_3d`); the face props pass it through
|
||||
// `get_singularities_of_face`
|
||||
if let Some(zone) = surface.face_zone_tol_3d()? {
|
||||
return Ok(approx_tol3d(k, 0.5 * zone));
|
||||
}
|
||||
Ok(approx_tol_3d(k, SmallTopoType::NormalSize))
|
||||
}
|
||||
|
||||
@@ -61,7 +61,8 @@
|
||||
//! - **Kernel.** `is_on_seam` and `global_point_solve` (and `global_point_solve_starts`)
|
||||
//! take the [`Kernel`] that the tolerance, drop and cache callees now need.
|
||||
//! - **Unported callees** (return [`SolidError::Unported`]): the zone tolerance of a face's
|
||||
//! surface (`SmFace::GetTolerance`, `topology.face_p2`), `GlobalPointSolve_1`
|
||||
//! surface whose B-rep has not cached it on the surface ([`Surface::owner_zone_tol_3d`];
|
||||
//! `SmFace::GetTolerance`, `topology.face_p2`), `GlobalPointSolve_1`
|
||||
//! (`surface.surface_point_solve_p3`), the trim containment of a face's surface
|
||||
//! (`SmFace::PointClassify`, `query.face_p2`) and the edge and face tolerances of owned
|
||||
//! curves and surfaces (`topology.edge`, `topology.face_p2`).
|
||||
@@ -1741,12 +1742,12 @@ pub fn classify_curve_surface_xsect_point(
|
||||
curve_tol = curve_radius / 1000.0;
|
||||
}
|
||||
if surface.owner().is_some_and(|o| o.type_code == FACE_TYPE) {
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
let _ = surface_tol;
|
||||
return Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
));
|
||||
// pSurfaceOwner->GetTolerance(): the direct owner is the face, so the face the
|
||||
// surface reaches; its tolerance as cached by the B-rep
|
||||
surface_tol = surface.owner_zone_tol_3d().ok_or(
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance (a bare face handle)
|
||||
SolidError::unported("SmFace::GetTolerance", "topology.face_p2"),
|
||||
)?;
|
||||
} else if !surface_line {
|
||||
surface_tol = surface_radius / 1000.0;
|
||||
}
|
||||
|
||||
@@ -51,7 +51,8 @@
|
||||
//! `CoverCoincidentSurface` leaves `rdMaxDist` at `SM_BIG_DOUBLE` (its first
|
||||
//! statement).
|
||||
//! - **Unported callees** (return [`SolidError::Unported`]): `SmSurface::GetFace`,
|
||||
//! `SmFace::GetTolerance`, `LocalPointSolve_1`, `sm_GetSurfaceToEvaluate`, the STEP
|
||||
//! `SmFace::GetTolerance` (for a surface whose B-rep has not cached its face's
|
||||
//! tolerance on it, [`Surface::owner_zone_tol_3d`]), `LocalPointSolve_1`, `sm_GetSurfaceToEvaluate`, the STEP
|
||||
//! domain conversions and the surface cache.
|
||||
|
||||
use crate::curve::curve::p1::ApproximateCurveOptions;
|
||||
@@ -1000,7 +1001,8 @@ impl Surface {
|
||||
/// # Errors
|
||||
///
|
||||
/// Those of the global solve; [`SolidError::Unported`]: `GetFace` and
|
||||
/// `SmFace::GetTolerance` for an owned surface, `LocalPointSolve_1`.
|
||||
/// `SmFace::GetTolerance` for an owned surface without the face tolerance cached
|
||||
/// ([`Surface::owner_zone_tol_3d`]), `LocalPointSolve_1`.
|
||||
#[allow(clippy::too_many_lines)] // one upstream routine
|
||||
pub fn drop_point<O: SolutionObject>(
|
||||
&self,
|
||||
@@ -1024,15 +1026,9 @@ impl Surface {
|
||||
let mut answer_in_array = false;
|
||||
|
||||
// We need a tolerance value.
|
||||
let dist_tol = if self.face()?.is_some() {
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
return Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
));
|
||||
} else {
|
||||
XSECT_TOL_3D
|
||||
};
|
||||
// pFace ? pFace->GetTolerance() : SM_XSECT_TOL_3D (the face's tolerance cached
|
||||
// on the surface; UNPORTED(topology.face_p2) for a bare face handle)
|
||||
let dist_tol = self.face_zone_tol_3d()?.unwrap_or(XSECT_TOL_3D);
|
||||
|
||||
// first try DropPointFast(), to catch special cases.
|
||||
if let Some(fast) = ignored(self.drop_point_fast::<O>(
|
||||
@@ -1250,7 +1246,8 @@ impl Surface {
|
||||
/// # Errors
|
||||
///
|
||||
/// [`SolidError::Unported`]: `GetFace`/`SmFace::GetTolerance` for an owned surface
|
||||
/// and the surface caches (`smsurf_GetSurfaceCache`). The status of the UV-guess
|
||||
/// without the face tolerance cached ([`Surface::owner_zone_tol_3d`]) and the
|
||||
/// surface caches (`smsurf_GetSurfaceCache`). The status of the UV-guess
|
||||
/// `LocalSurfaceSurfaceIntersect` is ignored, as upstream (no answer).
|
||||
#[allow(clippy::too_many_arguments)] // upstream's argument list
|
||||
pub fn local_surface_surface_intersect_xyz<O: SolutionObject>(
|
||||
@@ -1265,17 +1262,9 @@ impl Surface {
|
||||
opt_xyz_guess2: Option<Point3>,
|
||||
) -> Result<(bool, Solution<O>)> {
|
||||
// GWC:TODO - upstream's magic numbers for the tolerance
|
||||
let face_tol = |s: &Self| -> Result<f64> {
|
||||
if s.face()?.is_some() {
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
))
|
||||
} else {
|
||||
Ok(1e-05)
|
||||
}
|
||||
};
|
||||
// GetFace() ? its tolerance (cached on the surface; UNPORTED(topology.face_p2)
|
||||
// for a bare face handle) : 1e-05
|
||||
let face_tol = |s: &Self| -> Result<f64> { Ok(s.face_zone_tol_3d()?.unwrap_or(1e-05)) };
|
||||
let tol1 = face_tol(self)?;
|
||||
let tol2 = face_tol(surface2)?;
|
||||
let tol3 = face_tol(surface3)?;
|
||||
|
||||
@@ -37,6 +37,10 @@
|
||||
//! | [`good_drop_result`] | `sm_GoodDropResult` (static) |
|
||||
//!
|
||||
//! Deviations:
|
||||
//! - **Face tolerance of `IsPlanar`.** The B-spline, revolution and cone boxes are
|
||||
//! expanded by the face tolerance the B-rep cached on the surface
|
||||
//! ([`Surface::owner_zone_tol_3d`]). A face-owned surface without it returns
|
||||
//! [`SolidError::Unported`] (`SmFace::GetTolerance`).
|
||||
//! - **Generic bodies.** The `SmSurface` bodies that only call the evaluation virtuals
|
||||
//! (`Evaluate`, `EvaluatePoint`, `GetNaturalUVDomain`) are generic over
|
||||
//! [`SurfaceEvaluate`], so a caller holding a bare [`BSplineSurface`] (which does not
|
||||
@@ -839,22 +843,25 @@ impl Surface {
|
||||
})
|
||||
}
|
||||
SurfaceKind::BSpline(s) => {
|
||||
// the box expansion uses the owning face's tolerance
|
||||
if self.face()?.is_some() {
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
return Err(SolidError::unported(
|
||||
"SmFace::GetTolerance",
|
||||
"topology.face_p2",
|
||||
));
|
||||
}
|
||||
Ok(planar_of(k, s, &self.natural_uv_domain())?.is_planar(tol_3d))
|
||||
// the box expansion uses the owning face's tolerance, as cached on the
|
||||
// surface by its B-rep (UNPORTED(topology.face_p2): SmFace::GetTolerance
|
||||
// for a bare face handle without it)
|
||||
let face_tol = self.face_zone_tol_3d()?;
|
||||
Ok(planar_of(k, s, &self.natural_uv_domain(), face_tol)?.is_planar(tol_3d))
|
||||
}
|
||||
// SmSurfOfRevolution inherits SmBSplineSurface::CalculateBoundingBox
|
||||
// SmSurfOfRevolution (and SmCone) inherit SmBSplineSurface::CalculateBoundingBox:
|
||||
// the face's cached tolerance, as for the B-spline (UNPORTED(topology.face_p2):
|
||||
// SmFace::GetTolerance for a bare face handle without it)
|
||||
SurfaceKind::Cone(s) => {
|
||||
Ok(planar_of(k, s.rev().base(), &self.natural_uv_domain())?.is_planar(tol_3d))
|
||||
let face_tol = self.face_zone_tol_3d()?;
|
||||
Ok(
|
||||
planar_of(k, s.rev().base(), &self.natural_uv_domain(), face_tol)?
|
||||
.is_planar(tol_3d),
|
||||
)
|
||||
}
|
||||
SurfaceKind::SurfOfRevolution(s) => {
|
||||
Ok(planar_of(k, s.base(), &self.natural_uv_domain())?.is_planar(tol_3d))
|
||||
let face_tol = self.face_zone_tol_3d()?;
|
||||
Ok(planar_of(k, s.base(), &self.natural_uv_domain(), face_tol)?.is_planar(tol_3d))
|
||||
}
|
||||
// SmSurface body: use the virtual box and ignore ordinary failures,
|
||||
// which leave the default pseudo box. The kernel is available here.
|
||||
@@ -1525,12 +1532,18 @@ impl Surface {
|
||||
///
|
||||
/// [`SolidError::Unported`] from the bounding box.
|
||||
pub fn b_spline_is_planar(k: &Kernel, s: &BSplineSurface, tol_3d: f64) -> Result<Planar> {
|
||||
Ok(planar_of(k, s, &s.natural_uv_domain())?.is_planar(tol_3d))
|
||||
Ok(planar_of(k, s, &s.natural_uv_domain(), None)?.is_planar(tol_3d))
|
||||
}
|
||||
|
||||
/// The pseudo box of a B-spline surface over `uv_domain`; a failed box is the default
|
||||
/// The pseudo box of a B-spline surface over `uv_domain`, expanded by `face_tol` (the
|
||||
/// owning face's tolerance; `None` for `SM_ZONE_TOL_3D`); a failed box is the default
|
||||
/// box, as upstream ignores the status.
|
||||
fn planar_of(k: &Kernel, s: &BSplineSurface, uv_domain: &Extent2d) -> Result<PseudoBox> {
|
||||
fn planar_of(
|
||||
k: &Kernel,
|
||||
s: &BSplineSurface,
|
||||
uv_domain: &Extent2d,
|
||||
face_tol: Option<f64>,
|
||||
) -> Result<PseudoBox> {
|
||||
let req = BoundingBoxRequest {
|
||||
normal: false,
|
||||
pseudo: true,
|
||||
@@ -1538,6 +1551,7 @@ fn planar_of(k: &Kernel, s: &BSplineSurface, uv_domain: &Extent2d) -> Result<Pse
|
||||
pseudo_guess: None,
|
||||
polar_guess: None,
|
||||
expand_by_zone_tol: true,
|
||||
expand_tolerance: face_tol,
|
||||
};
|
||||
Ok(ignored(s.calculate_bounding_box(k, uv_domain, &req))?
|
||||
.and_then(|b| b.pseudo)
|
||||
|
||||
@@ -2190,6 +2190,7 @@ impl<O: Copy + PartialEq> SurfaceCache<O> {
|
||||
pseudo_guess: None,
|
||||
polar_guess: guess,
|
||||
expand_by_zone_tol: true,
|
||||
expand_tolerance: None,
|
||||
};
|
||||
let boxes = ignored(calculate_bounding_box(k, surface, &domain, &req))?;
|
||||
Ok(boxes.and_then(|b| b.polar))
|
||||
|
||||
@@ -54,7 +54,6 @@ use crate::error::{Result, SolidError};
|
||||
use crate::geom::extent2d::Extent2d;
|
||||
use crate::geom::extent3d::Extent3d;
|
||||
use crate::geom::pseudo_box::PseudoBox;
|
||||
use crate::geom::tol::{zone_tol_3d, SmallTopoType};
|
||||
use crate::geom::tree::{
|
||||
AuxDataType, NodeClass, NodeData, NodeGeomType, NodeId, SplitDir, SurfaceAux, TreeNode,
|
||||
};
|
||||
@@ -433,7 +432,8 @@ impl<O: Copy + PartialEq> SurfaceCache<O> {
|
||||
/// those of `CalculateBoundingBox`, `sm_ComputeNetConstants`,
|
||||
/// `sm_ComputeSurfConstants`, `GetCorners` and `ComputeSizeTolerances`;
|
||||
/// `InvalidInput` where upstream reads through null or mistyped data;
|
||||
/// [`SolidError::Unported`] from `SmTol::GetZoneTol3d` of an owned surface and the
|
||||
/// [`SolidError::Unported`] from `SmTol::GetZoneTol3d` of a face-owned surface whose
|
||||
/// face tolerance is not cached on it ([`Surface::owner_zone_tol_3d`]) and from the
|
||||
/// surface calls.
|
||||
#[allow(clippy::too_many_lines)] // one upstream routine
|
||||
pub fn test_against_tolerances(&mut self, k: &Kernel, node: NodeId) -> Result<ToleranceTest> {
|
||||
@@ -469,18 +469,9 @@ impl<O: Copy + PartialEq> SurfaceCache<O> {
|
||||
let chord_height_squared = chord_tol * chord_tol;
|
||||
let ang_tol_deg = opts.ang_tol_rad * 180.0 / PI;
|
||||
// SmTol::GetZoneTol3d(m_cpSurface): GetFace() ? its tolerance : the system's
|
||||
let zone_tol = if self.surface().face()?.is_some() {
|
||||
// UNPORTED(geom.tol): SmTol::GetZoneTol3d(const SmObject*) on an opaque handle. Every
|
||||
// arm it dispatches to is ported (topology::{vertex, edge, face::p2, edgeuse::p1}::tolerance,
|
||||
// Brep::tolerance) but each takes `&Brep` and none is in scope here; wire once this code
|
||||
// receives the owning B-rep
|
||||
return Err(SolidError::unported(
|
||||
"SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"geom.tol",
|
||||
));
|
||||
} else {
|
||||
zone_tol_3d(k, SmallTopoType::NormalSize)
|
||||
};
|
||||
// (the face's tolerance as its B-rep cached it on the surface;
|
||||
// UNPORTED(topology.face_p2): SmFace::GetTolerance for a bare face handle)
|
||||
let zone_tol = crate::surface::surface::p1::zone_tol_3d(k, self.surface())?;
|
||||
|
||||
// local tolerance state - a zero ChordHeight or Angle Tol value means to ignore the test
|
||||
{
|
||||
@@ -524,6 +515,7 @@ impl<O: Copy + PartialEq> SurfaceCache<O> {
|
||||
pseudo_guess: None,
|
||||
polar_guess: None,
|
||||
expand_by_zone_tol: true,
|
||||
expand_tolerance: None,
|
||||
};
|
||||
let boxes = calculate_bounding_box(k, node_surface, &node_domain, &req)?;
|
||||
let bbox = boxes
|
||||
@@ -955,6 +947,7 @@ impl<O: Copy + PartialEq> SurfaceCache<O> {
|
||||
pseudo_guess: None,
|
||||
polar_guess: None,
|
||||
expand_by_zone_tol: true,
|
||||
expand_tolerance: None,
|
||||
};
|
||||
if let Some(boxes) = ignore(patch.calculate_bounding_box(k, &patch_domain, &req))? {
|
||||
if let Some(b) = boxes.normal {
|
||||
|
||||
@@ -169,6 +169,7 @@ fn patch_boxes(
|
||||
pseudo_guess,
|
||||
polar_guess: None,
|
||||
expand_by_zone_tol: false,
|
||||
expand_tolerance: None,
|
||||
};
|
||||
let boxes = bss.calculate_bounding_box(k, &bss.natural_uv_domain(), &req)?;
|
||||
let mut bbox = boxes.normal.ok_or_else(|| invalid(op, "no bounding box"))?;
|
||||
|
||||
@@ -937,13 +937,33 @@ impl Brep {
|
||||
}
|
||||
|
||||
/// Appends a face record as is (no validation; the shell's face list is not
|
||||
/// touched); the face joins the end of the B-rep's face list.
|
||||
/// touched); the face joins the end of the B-rep's face list, and its surface
|
||||
/// records the face's tolerance ([`Brep::sync_face_surface_tolerance`]).
|
||||
pub fn add_face_record(&mut self, face: Face) -> Result<FaceId> {
|
||||
let id = self.faces.insert(face)?;
|
||||
self.face_list.push(id);
|
||||
self.sync_face_surface_tolerance(id)?;
|
||||
Ok(id)
|
||||
}
|
||||
|
||||
/// Records the face's tolerance on its surface
|
||||
/// ([`Surface::set_owner_zone_tol_3d`](crate::surface::surface::Surface::set_owner_zone_tol_3d)),
|
||||
/// so the surface's `GetFace()->GetTolerance()` reads it: the B-rep invariant that a
|
||||
/// face record's surface carries that record's `tolerance`. A surface reaching no
|
||||
/// face records nothing. Called wherever a face's surface or tolerance changes.
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// [`SolidError::NotFound`] for a dangling id.
|
||||
pub fn sync_face_surface_tolerance(&mut self, f: FaceId) -> Result<()> {
|
||||
let face = self.face_mut(f)?;
|
||||
let tol = face.tolerance;
|
||||
if let Some(surface) = face.surface.as_mut() {
|
||||
surface.set_owner_zone_tol_3d(Some(tol));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Appends a loop record as is (no validation; the face's loop list is not
|
||||
/// touched).
|
||||
pub fn add_loop_record(&mut self, loop_: Loop) -> Result<LoopId> {
|
||||
|
||||
@@ -734,6 +734,9 @@ fn build_faces(
|
||||
|
||||
// Connect up face and faceuses and set FU fields
|
||||
rec.faceuse = Some(fu1); // FU1 is primary faceuse
|
||||
|
||||
// the surface reads the face's tolerance through GetFace()
|
||||
b.sync_face_surface_tolerance(f)?;
|
||||
*b.faceuse_mut(fu1)? = Faceuse {
|
||||
face: Some(f),
|
||||
mate: Some(fu2),
|
||||
|
||||
@@ -261,7 +261,8 @@ fn set_surface_owner(
|
||||
if let Some(surface) = brep.face_mut(face)?.surface.as_mut() {
|
||||
surface.set_owner(owner);
|
||||
}
|
||||
Ok(())
|
||||
// the surface reads the face's tolerance through GetFace() once it is owned again
|
||||
brep.sync_face_surface_tolerance(face)
|
||||
}
|
||||
|
||||
// `delete pShell` of an emptied shell: `~SmShell` notifies `SM_NO_DESTRUCTION`
|
||||
|
||||
@@ -695,6 +695,7 @@ fn make_face_with_state(
|
||||
// make the face->surface connections
|
||||
surface.set_owner(Some(this_face(new_face)));
|
||||
b.face_mut(new_face)?.surface = Some(surface);
|
||||
b.sync_face_surface_tolerance(new_face)?;
|
||||
|
||||
Ok(NewFace {
|
||||
region: new_region,
|
||||
|
||||
@@ -915,6 +915,8 @@ pub fn set_surface(
|
||||
face.uv_domain = surface.natural_uv_domain();
|
||||
surface.set_owner(Some(this));
|
||||
face.surface = Some(surface);
|
||||
// the surface reads the face's tolerance through GetFace()
|
||||
b.sync_face_surface_tolerance(f)?;
|
||||
Ok(old)
|
||||
}
|
||||
|
||||
@@ -1393,6 +1395,9 @@ pub fn move_seam<O: LoopObject>(
|
||||
let zone_tol = crate::surface::surface::p1::zone_tol_3d(k, surface0)?;
|
||||
let mut surface = surface0.clone();
|
||||
*surface.owner_mut() = surface0.owner();
|
||||
// the copy reaches the same face, so it carries the face tolerance cached on the
|
||||
// original (a B-spline kind: no owned bases)
|
||||
surface.set_owner_zone_tol_3d(surface0.owner_zone_tol_3d());
|
||||
|
||||
let crosses_u = match props {
|
||||
Some(p) => names(p.bad_crossed_seam_dir, Sp::U),
|
||||
|
||||
@@ -2491,17 +2491,22 @@ pub fn find_best_uv_curve(
|
||||
|
||||
/// Saves a surface's owner and puts it back (`SmRescueSurfaceOwner`: the constructor
|
||||
/// saves, the destructor restores).
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
pub struct RescueSurfaceOwner {
|
||||
owner: Option<ObjectRef>,
|
||||
/// The face tolerance cached on the surface ([`Surface::owner_zone_tol_3d`]), put
|
||||
/// back with the owner (a caller that may change the face's tolerance meanwhile
|
||||
/// re-syncs it from the B-rep).
|
||||
zone_tol_3d: Option<f64>,
|
||||
}
|
||||
|
||||
impl RescueSurfaceOwner {
|
||||
/// Saves `surface`'s owner.
|
||||
#[must_use]
|
||||
pub const fn new(surface: &Surface) -> Self {
|
||||
pub fn new(surface: &Surface) -> Self {
|
||||
Self {
|
||||
owner: surface.owner(),
|
||||
zone_tol_3d: surface.owner_zone_tol_3d(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2514,6 +2519,9 @@ impl RescueSurfaceOwner {
|
||||
/// Restores the saved owner on `surface` (the destructor).
|
||||
pub fn restore(self, surface: &mut Surface) {
|
||||
surface.set_owner(self.owner);
|
||||
if self.zone_tol_3d.is_some() {
|
||||
surface.set_owner_zone_tol_3d(self.zone_tol_3d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -339,6 +339,8 @@ pub fn set_tolerance(
|
||||
if !update_only_if_larger || new_zone_tol_3d > face.tolerance {
|
||||
face.tolerance = new_zone_tol_3d;
|
||||
}
|
||||
// the face's surface reads it through GetFace()
|
||||
b.sync_face_surface_tolerance(f)?;
|
||||
|
||||
// when asked - make sure Edge->VertexTols at least as big as thie EdgeTol
|
||||
if cascade_to_boundaries {
|
||||
@@ -791,6 +793,8 @@ pub fn create_uv_trim_curves(
|
||||
if let Some(s) = b.face_mut(f)?.surface.as_mut() {
|
||||
rescue.restore(s);
|
||||
}
|
||||
// the face's tolerance may have changed while the surface had no owner
|
||||
b.sync_face_surface_tolerance(f)?;
|
||||
result
|
||||
}
|
||||
|
||||
|
||||
@@ -845,6 +845,20 @@ bool tt_ok_loop_extremes(SmLoop* l)
|
||||
return true;
|
||||
}
|
||||
|
||||
// Whether the loop walks of FixTrimLoopOrientation / FixTrimLoopOrder dereference
|
||||
// nothing null: every loop has its loop use, and a face with loops has a surface and UV
|
||||
// trim curves on every edge use (SmFace::ComputeLoopOrientation and the UV boxes of
|
||||
// FixTrimLoopOrder read them).
|
||||
bool tt_ok_face_loops(SmFace* f)
|
||||
{
|
||||
SmTArray<SmLoop*> ls;
|
||||
f->GetLoops(ls);
|
||||
for (ULONG i = 0; i < ls.GetSize(); i++)
|
||||
if (!tt_ok_loop(ls[i]))
|
||||
return false;
|
||||
return ls.GetSize() == 0 || (f->GetSurface() != nullptr && SmTrimmingTools::AreUVCurvesPresent(f));
|
||||
}
|
||||
|
||||
// The pre-step of the repair and check ops: `k side` (k = -1: none) mirrors the UV trim
|
||||
// curve of the k-th edge use (modulo their count) of `l`'s first loop use across its face
|
||||
// surface's natural domain with SmTrimmingTools::MirrorCurve (only a plain B-spline curve;
|
||||
@@ -999,30 +1013,25 @@ void tt_brep_op(int32_t op, Rd& rd, const char* path, std::vector<double>& o)
|
||||
o.push_back(TT_NULL_DEREF);
|
||||
break;
|
||||
}
|
||||
// with UV curves on every loop, the Rust side reaches ComputeLoopOrientation
|
||||
// (unported) unless CheckLoop fails first: run only CheckLoop's part then
|
||||
// With UV curves on every loop CheckFace reaches CheckLoop of every loop (which
|
||||
// reads each loop's UV extremes) and SmFace::ComputeLoopOrientation: guarded
|
||||
// (TT_NULL_DEREF) where upstream would dereference a missing surface or extreme.
|
||||
bool all_uv = ls.GetSize() > 0 && SmTrimmingTools::AreUVCurvesPresent(f);
|
||||
SmAssertArray a;
|
||||
if (ls.GetSize() == 0 || !all_uv)
|
||||
if (all_uv)
|
||||
{
|
||||
o.push_back(st(SmTrimmingTools::CheckFace(f, tol, want_list ? &a : NULL, SM_LEVEL_0, NULL,
|
||||
skip ? TRUE : FALSE)));
|
||||
tt_put_reports(o, g, a);
|
||||
break;
|
||||
if (f->GetSurface() == nullptr)
|
||||
ok = false;
|
||||
for (ULONG i = 0; ok && !skip && i < ls.GetSize(); i++)
|
||||
ok = tt_ok_loop_extremes(ls[i]);
|
||||
if (!ok)
|
||||
{
|
||||
o.push_back(TT_NULL_DEREF);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (skip || f->GetSurface() == nullptr || !tt_ok_loop_extremes(ls[0]))
|
||||
{
|
||||
o.push_back(TT_NOT_RUN);
|
||||
break;
|
||||
}
|
||||
ULONG closure = 99;
|
||||
SmStatus r = SmTrimmingTools::CheckLoop(f->GetSurface(), ls[0], tol, closure, want_list ? &a : NULL);
|
||||
if (r == SM_SUCCESS)
|
||||
{
|
||||
o.push_back(TT_NOT_RUN);
|
||||
break;
|
||||
}
|
||||
o.push_back(st(r));
|
||||
o.push_back(st(SmTrimmingTools::CheckFace(f, tol, want_list ? &a : NULL, SM_LEVEL_0, NULL,
|
||||
skip ? TRUE : FALSE)));
|
||||
tt_put_reports(o, g, a);
|
||||
break;
|
||||
}
|
||||
@@ -1154,14 +1163,12 @@ void tt_brep_op(int32_t op, Rd& rd, const char* path, std::vector<double>& o)
|
||||
}
|
||||
case OP_B_ORIENT:
|
||||
{
|
||||
// FixTrimLoopOrientation of the face: SmFace::ComputeLoopOrientation is
|
||||
// unported, so only a face without loops is run
|
||||
// FixTrimLoopOrientation of the face (SmFace::ComputeLoopOrientation of every
|
||||
// loop): guarded like CheckFace's ComputeLoopOrientation
|
||||
SmFace* f = g.faces.at((size_t)rd.idx());
|
||||
SmTArray<SmLoop*> ls;
|
||||
f->GetLoops(ls);
|
||||
if (ls.GetSize() != 0)
|
||||
if (!tt_ok_face_loops(f))
|
||||
{
|
||||
o.push_back(TT_NOT_RUN);
|
||||
o.push_back(TT_NULL_DEREF);
|
||||
break;
|
||||
}
|
||||
ULONG n = 99;
|
||||
@@ -1172,14 +1179,12 @@ void tt_brep_op(int32_t op, Rd& rd, const char* path, std::vector<double>& o)
|
||||
}
|
||||
case OP_B_ORDER:
|
||||
{
|
||||
// FixTrimLoopOrder: only its error for a face without loops is reached before
|
||||
// the unported SmFace::ComputeLoopOrientation
|
||||
// FixTrimLoopOrder (UV boxes of every loop's trim curves, then
|
||||
// SmFace::ComputeLoopOrientation): guarded like FixTrimLoopOrientation
|
||||
SmFace* f = g.faces.at((size_t)rd.idx());
|
||||
SmTArray<SmLoop*> ls;
|
||||
f->GetLoops(ls);
|
||||
if (ls.GetSize() != 0)
|
||||
if (!tt_ok_face_loops(f))
|
||||
{
|
||||
o.push_back(TT_NOT_RUN);
|
||||
o.push_back(TT_NULL_DEREF);
|
||||
break;
|
||||
}
|
||||
SmBoolean made = UNSURE;
|
||||
|
||||
@@ -22,6 +22,8 @@ Latest port: `sweep.topology_sweep` ([PR #222](https://github.com/tangency-labs/
|
||||
|
||||
Review follow-up merges canonical main `bb137d7d`, preserving both findings sections and main's full part 7 notes plus the sweep API extension. The merge p3/p4 integration boundary remains coordinated with the unavailable `merge_p2` constructor; the two `SM_DEG2RAD` sites now match upstream grouping.
|
||||
|
||||
Latest cross-unit change: owner zone-tolerance cache on `Surface` (branch `surface/owner-zone-tol`, PR #301): `topology.face_p2` deferrals 3495 -> 766, `surface.surface_cache_p2` 223 -> 0, +1751 pass over 15 units, 0 FAIL; the 76 cases it exposed (`query.face_p3` 75: missing vertex/face gaps in `CurveOnClassify`; `query.face_p1` 1: `Point3DClassify` skipped the trimmed surface cache) are fixed and now defer on unported callees (see `plan/findings.md`).
|
||||
|
||||
Latest harness: PR #295 (B-rep records for the classification shims' bare topology stand-ins, on top of main's real one-face B-rep adapter #347): curve_class_p1 2054->2070, p2 1495->1627, p7 1327->1474, point_class 2411->2466 passes, 0 failed.
|
||||
|
||||
Latest unit: `topology.face_p4` partial (port: topology.face_p4, taking over the #134 claim): 5506 cases, 3957 bit-identical passes, 0 failed, 1549 deferred (mostly the tolerance of face-owned surfaces: `SmTol::GetZoneTol3d` in the surface cache, tagged `geom.tol`, and `SmFace::GetTolerance`, `topology.face_p2`); 26 of its 44 back-edge stubs wired, including those of `heal.stitch_p1`, `topology.brep_p5`/`p7`/`p9`/`p10` and `topology.face_p3` (169 more `face_p3` passes); the rest take generic handles without a B-rep, or (one in `brep_p5`) no kernel; its own calls into `query.face_p3` (`sm_FaceClassifyUVLine`, `SectorClassifyCurveOn`) are wired since #132; `HasSeamProblem` returns `SM_SUCCESS` as TRUE upstream (`plan/upstream-issues.md` WR-176); 238 units (main after #229), 116 green and 122 partial.
|
||||
|
||||
@@ -12671,6 +12671,100 @@ boundary. No Rust/C++ value mismatch was observed in the completed fuzz cases.
|
||||
The ordinary unit run remains 2686 cases, 2250 passed, 436 deferred, 0 failed,
|
||||
with maximum relative error 0.
|
||||
|
||||
## surface: owning face's zone tolerance cached on `Surface` (branch `surface/owner-zone-tol`, 2026-10-20)
|
||||
|
||||
Upstream reads `GetFace()->GetTolerance()` from a surface in ten places (`SmTol::GetZoneTol3d(SmObject*)`
|
||||
SmTol.cpp:775, `SmBSplineSurface::CalculateBoundingBox` SmBSplineSurface.cpp:797-806, `SmSurface::DropPoint`
|
||||
SmSurface.cpp:10432, `LocalSurfaceSurfaceIntersectXYZ` SmSurface.cpp:29051, `ClassifyCurveSurfaceXsectPoint`
|
||||
SmSurface.cpp:13373, `SmPlane` zone tolerance, `IsPlanar`, approx tol, point_class, surface_cache_p2). The port's
|
||||
surface owner is an opaque handle, so every site returned `Unported(topology.face_p2)`. `Surface` now caches the
|
||||
owning face record's `tolerance`, keyed by the reached face handle (a different or cleared owner never reads it);
|
||||
`Brep::sync_face_surface_tolerance` keeps it current at every place a face record's surface or tolerance changes.
|
||||
A face owner without cache still returns `Unported`. `surface.surface_cache_p1` `mark_face_containment` (an opaque
|
||||
node face handle) is not covered. On main 862746f4 (`--green`, all units): `topology.face_p2` deferral label 3495 ->
|
||||
766, `surface.surface_cache_p2` 223 -> 0, total deferred 24839 -> 22724, +2039 pass over 15 units, +76 FAIL in
|
||||
`query.face_p3` (75) and `query.face_p1` (1), both below (exposed, not caused: each case read the face tolerance
|
||||
correctly; the next divergent step is elsewhere). After both fixes below: 0 FAIL, +1751 pass over 15 units, total
|
||||
deferred 24839 -> 23088 (`query.face_p3` 75 and `query.face_p1` 289 now defer on unported callees).
|
||||
|
||||
### topology.trimming_tools: stale `TT_NOT_RUN` shim gate
|
||||
|
||||
`harness/cpp/shim/topology_trimming_tools.cpp` returned `-3` (`TT_NOT_RUN`) for `b_check_face`, `b_orient` and
|
||||
`b_order` on every face with loops, written while `SmFace::ComputeLoopOrientation` was unported. `topology.face_p3`
|
||||
ported it; the Rust side kept deferring only through `SmFace::GetTolerance`. With the cache the Rust side
|
||||
completes, so 305 cases (104 check_face, 102 orient, 99 order) compared a real result against `-3`. The shim now
|
||||
runs `CheckFace` / `FixTrimLoopOrientation` / `FixTrimLoopOrder` in full, guarded with `-2` (mirrored in the
|
||||
runner) where a loop lacks its loop use, a face with loops lacks surface or UV trim curves, or `CheckLoop` would
|
||||
dereference a null UV extreme (17 cases). The fixtures never reorient a loop (orient always 0, order always
|
||||
`false`): those two ops are compared on the no-change path only. Follow-up: misordered / misoriented loop fixtures.
|
||||
|
||||
### topology.brep_p1 `edge_edge_blend` on analytic face surfaces: harness input mismatch, not a port bug
|
||||
|
||||
Inputs: `surf_rev.smb` (`crates/difftest/fixtures/topology.brep_p1/upstream_files.json#1518` flag=1 eu1=0 eu2=1
|
||||
dir=0, `#1520` flag=3 eu1=1 eu2=2 dir=1). C++ `out[979]` = 3.4935082719274374e-1 vs Rust 3.4935082670870377e-1
|
||||
(1.4e-9), growing to 7.3e-4 (`3_1_2_1`: 5.3e-4). Previously deferred on `SmFace::GetTolerance`. Cause: the
|
||||
shared `topology.edgeuse_p1` export hands Rust the faces' `SmSurfOfRevolution` as its B-spline part. In
|
||||
`GetSampleValues` -> `DropPoint`, C++ succeeds in `SmSurfOfRevolution::DropPointFast` (SmSurfOfRevolution.cpp:2356),
|
||||
while Rust's B-spline `drop_point_fast` is the base `SM_ERR` and it uses `LocalPointSolve` (bit-identical to C++
|
||||
`LocalPointSolve`). First drop difference: u = 0x3fcdfd6b2cbee1af vs 0x3fcdfd6b2cbee37e (5.5e-14), amplified by
|
||||
the G2 blend fit. With the C++ faces flattened to the same B-spline part (temporary shim switch), all 159 compared
|
||||
blend cases match at 0. surf_extrude (`SmSurfOfExtrusion::DropPointFast`, up to 9.4e-10) and surf_rev 2_0_2_0
|
||||
(8.9e-11) show the same drift below 1e-9. Resolution: the runner defers blends (flag != 0) whose faces are
|
||||
non-exact surfaces (`harness:analytic-geometry-export`, +27 cases: 2 FAIL, 25 pass). Exporting revolution /
|
||||
extrusion surfaces exactly in `sc_edgeuse_graph.h` would let them be compared.
|
||||
|
||||
### query.face_p3 `bisector`: `LoopObjectCurves` has no `vertex_face_gap` (75 FAIL, previously deferred on `SmFace::GetTolerance`)
|
||||
|
||||
`sms_FindAndClassifyLoopBisector` calls `SmFace::CurveOnClassify(TRUE, cc, TRUE /* bHasBigGaps */, TRUE, ..)`
|
||||
(SmFace.cpp:2884-2892). With big gaps and a face, `IntersectVertices` reads
|
||||
`pVertex->GetVertexuseOfFace(pFace)->GetVertexFaceGap()` (SmCurveClass.cpp:14716-14744). The port's
|
||||
`vertex_big_gap_tolerance` (`crates/solidcore/src/intersect/curve_class/p5.rs:163`) asks
|
||||
`ClassGeometry::vertex_face_gap`, which `query::face::p3::LoopObjectCurves` (`crates/solidcore/src/query/face/p3.rs:549`)
|
||||
does not implement (trait default `None`), so every call returns `InvalidInput("unresolved classification
|
||||
vertex/face gap")`. The bisector ignores that status as upstream does (`ignored(curve_on_classify(..))`), so the Rust
|
||||
side records no intervals: e.g. `bisector_Mouse_f2_t0` `values.interval_bounds.len` C++ 6 vs Rust 2,
|
||||
`bisector_holed_box_top_flat` `ints.interval_classes[0]` C++ 103 vs Rust 100. A temporary probe showed this error on
|
||||
all 75 classification calls of the failing cases and on no other path. Fix: implement `vertex_face_gap` on
|
||||
`LoopObjectCurves` (vertex use of the face, `has_vertex_face_gap`, cached or computed `SmVertexuse::GetVertexFaceGap`
|
||||
length, 0 when absent); it needs a kernel and a non-caching gap computation, since the adapter holds `&Brep`.
|
||||
More generally, an adapter gap reported as `InvalidInput` is indistinguishable from an upstream status under
|
||||
`ignored`: no `ClassGeometry` implementation provides `vertex_face_gap` today.
|
||||
|
||||
Resolved: the gap is a B-rep property, so `query::face::p2::curve_on_classify` (which has the B-rep and kernel)
|
||||
now computes it for every caller, not only `LoopObjectCurves`: with `has_big_gaps` it reads
|
||||
`vertex::vertexuse_of_face` -> `vertexuse::vertex_face_gap(.., false)` length (0 without a gap) of each face
|
||||
vertex on one private B-rep snapshot per call (it keeps the gap caches across both passes, as upstream's
|
||||
`GetVertexFaceGap` caches into the B-rep), and answers `ClassGeometry::vertex_face_gap` for those vertex handles
|
||||
through a wrapper around the caller's geometry. With the gap tolerance in place, all 75 cases reach
|
||||
`SmCrvGeometry::GlobalPointSolve` on the bisector's `SmCrvOnSurf`, whose `Curve::knots` stops at the known
|
||||
`UNPORTED(intersect.curve_class_p2): SmCurveClassification::ReSet` (`crates/solidcore/src/curve/crv_on_surf.rs:218`,
|
||||
no `Kernel` under `Curve::knots`): 75 FAIL -> 75 deferred. `query.face_p3`: 543 pass / 0 fail / 656 deferred.
|
||||
|
||||
### query.face_p1 `gen0160` (1 FAIL, previously deferred on `SmFace::GetTolerance`)
|
||||
|
||||
Generated `Point3DClassify` on a 1e-3 x 3e-3 bilinear-in-u B-spline sliver whose u=0 edge collapses onto the z axis
|
||||
(`generated:seed=4634842130399439208`), point offset ~5e-4, `src_tol` 0.01, `pc_tol` 1e-8, face tolerance 1e-5.
|
||||
`values.pc[0]` C++ 102 (FACE, uv 0.720517876766358, 0.823164791473039) vs Rust 104 (VERTEX, no uv). The global point
|
||||
solve's UV is bit-identical on both sides (probe), and the three face-tolerance reads (`is_on_boundary`,
|
||||
`local_point_solve_1`) all return 1e-5 as in C++; the divergence is inside `query::face::p2::point_classify`, which
|
||||
reads no surface face tolerance. Not localised further.
|
||||
|
||||
Resolved (C++ probe, hunks in the worktree's `GEN0160-PROBES.diff`, reverted): after `Point3DClassify` the face
|
||||
surface has an `SmTrimSrfCache` with `m_bHaveTSurfaceCache` 1, `m_bFaceContainmentDone` 1, `m_bFaceWasModified` 0,
|
||||
`GetSurface()->GetFace() == this`; the one leaf node at the UV is `SM_NC_INSIDE`. The face's 4 vertices (tolerance
|
||||
1e-5) are 1.083e-3 from the surface point, inside the vertex test's `max(1e-5, 1e-5, GetTolerance()=src 0.01)`.
|
||||
C++ `PointClassify` at the same UV with the cache dropped returns VERTEX (104), as Rust. Cause: upstream
|
||||
`Point3DClassify` calls `smsurf_GetSurfaceCache(pSurface)` first (SmFace.cpp:12792), which builds the trimmed
|
||||
surface cache with its face containment; `PointClassify` then classifies through the inside leaf and returns FACE
|
||||
before the vertex test. The port skipped that call (its header claimed a fresh cache is never
|
||||
face-containment-complete, which is wrong for a face with loops: SmTrimSrfCache.cpp:330-347). Fix:
|
||||
`point_3d_classify` now builds it (`make_trim_srf_cache`, else `make_surface_cache`) and passes it to
|
||||
`point_classify`. The trimmed cache's face walk is unported (`Unported("SmFace handle of a surface's face",
|
||||
topology.face_p2)`), so every `Point3DClassify` case on a face-owned surface now defers there: the 288 point cases
|
||||
that passed with the skipped call (the cache path and the vertex/loop path agree outside such tolerance edges)
|
||||
plus `gen0160`. `query.face_p1`: 1580 pass / 0 fail / 644 deferred (main 862746f4: 1570 / 0 / 654). They become
|
||||
comparable with `surface.surface_cache_p1` `mark_face_containment` and the `TrimSrfCache` face walk.
|
||||
|
||||
|
||||
## Kernel-aware Surface integration: PR #133 review follow-up (2026-10-16)
|
||||
|
||||
|
||||
+20
-20
File diff suppressed because one or more lines are too long
@@ -1932,8 +1932,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmFilletExecutive::LoadFilletSolver",
|
||||
"unit": "blend.fillet_executive_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "set_params_per_edge_r1",
|
||||
@@ -2311,9 +2311,8 @@
|
||||
"cases_passed": 250,
|
||||
"cases_total": 275,
|
||||
"deferred_by_unit": {
|
||||
"blend.fillet_executive_p1": 22,
|
||||
"blend.fillet_standard_solver_p2": 2,
|
||||
"topology.face_p2": 1
|
||||
"blend.fillet_executive_p1": 23,
|
||||
"blend.fillet_standard_solver_p2": 2
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
@@ -26900,9 +26900,9 @@
|
||||
},
|
||||
"rail2": {
|
||||
"cpts": [
|
||||
[0.0, 2.0237695437919667, 0.8932986153732345, -1.7976931348623157e+308],
|
||||
[2.0771661391365335, 1.453866731728155, 2.0815918299099407, -1.7976931348623157e+308],
|
||||
[4.154332278273067, 0.9958365506887121, 1.5635688821818794, -1.7976931348623157e+308],
|
||||
[0.0, 2.0237695437919667, 0.8932986153732343, -1.7976931348623157e+308],
|
||||
[2.0771661391365335, 1.453866731728155, 2.0815918299099403, -1.7976931348623157e+308],
|
||||
[4.154332278273067, 0.9958365506887121, 1.5635688821818792, -1.7976931348623157e+308],
|
||||
[6.231498417409601, 1.6552784197992152, 2.239427966301154, -1.7976931348623157e+308]
|
||||
],
|
||||
"p": 3,
|
||||
|
||||
@@ -522,16 +522,12 @@
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_plane_0_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#65 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -550,28 +546,20 @@
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_plane_1_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#68 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_plane_1_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#69 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1538,16 +1526,12 @@
|
||||
"values_compared": 58
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0027",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314536",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1630,16 +1614,12 @@
|
||||
"values_compared": 23
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0038",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314547",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2010,16 +1990,12 @@
|
||||
"values_compared": 20
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0084",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314593",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2111,16 +2087,15 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 31,
|
||||
"cases_deferred": 25,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 217,
|
||||
"cases_passed": 223,
|
||||
"cases_total": 248,
|
||||
"deferred_by_unit": {
|
||||
"boolean.topology_intersector_p3": 4,
|
||||
"harness:analytic-geometry-export": 1,
|
||||
"intersect.surface_drop_lib_p3": 18,
|
||||
"topology.brep_p5": 2,
|
||||
"topology.face_p2": 6
|
||||
"topology.brep_p5": 2
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2799,7 +2799,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13034075822364237156",
|
||||
"values_compared": 1044
|
||||
"values_compared": 1135
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
@@ -11791,7 +11791,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=7577092825472747628",
|
||||
"values_compared": 2333
|
||||
"values_compared": 2515
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
@@ -2599,7 +2599,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230430257",
|
||||
"values_compared": 363
|
||||
"values_compared": 364
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2695,7 +2695,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230430269",
|
||||
"values_compared": 61
|
||||
"values_compared": 56
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2767,7 +2767,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230430278",
|
||||
"values_compared": 53
|
||||
"values_compared": 54
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3887,7 +3887,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230430418",
|
||||
"values_compared": 67
|
||||
"values_compared": 64
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -4919,7 +4919,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230430547",
|
||||
"values_compared": 56
|
||||
"values_compared": 55
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -9791,7 +9791,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230431156",
|
||||
"values_compared": 58
|
||||
"values_compared": 57
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -12655,7 +12655,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230431514",
|
||||
"values_compared": 55
|
||||
"values_compared": 56
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -14215,7 +14215,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230431709",
|
||||
"values_compared": 50
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -14975,7 +14975,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230431804",
|
||||
"values_compared": 122
|
||||
"values_compared": 120
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -16359,7 +16359,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230431977",
|
||||
"values_compared": 27
|
||||
"values_compared": 23
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -17871,7 +17871,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230432166",
|
||||
"values_compared": 50
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -19135,7 +19135,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230432324",
|
||||
"values_compared": 49
|
||||
"values_compared": 50
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -19271,7 +19271,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230432341",
|
||||
"values_compared": 49
|
||||
"values_compared": 48
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -19999,7 +19999,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230432432",
|
||||
"values_compared": 50
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -23015,7 +23015,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230432809",
|
||||
"values_compared": 47
|
||||
"values_compared": 46
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -24319,7 +24319,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=1894831246230432972",
|
||||
"values_compared": 55
|
||||
"values_compared": 54
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
@@ -8554,7 +8554,7 @@
|
||||
"values_compared": 109
|
||||
},
|
||||
{
|
||||
"max_rel_err": 2.198216228664531e-16,
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1036",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
@@ -10202,7 +10202,7 @@
|
||||
"values_compared": 100
|
||||
},
|
||||
{
|
||||
"max_rel_err": 1.3354105449223296e-15,
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1242",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
@@ -10954,7 +10954,7 @@
|
||||
"values_compared": 26
|
||||
},
|
||||
{
|
||||
"max_rel_err": 2.979074458350211e-16,
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1336",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
@@ -16914,7 +16914,7 @@
|
||||
"values_compared": 55
|
||||
},
|
||||
{
|
||||
"max_rel_err": 1.7025919370142879e-15,
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen2081",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
@@ -17930,7 +17930,7 @@
|
||||
"values_compared": 85
|
||||
},
|
||||
{
|
||||
"max_rel_err": 3.18989893668177e-15,
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen2208",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
@@ -20714,7 +20714,7 @@
|
||||
"values_compared": 93
|
||||
},
|
||||
{
|
||||
"max_rel_err": 1.6658808949288423e-16,
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen2556",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
@@ -24272,7 +24272,7 @@
|
||||
"cases_passed": 3033,
|
||||
"cases_total": 3033,
|
||||
"deferred_by_unit": {},
|
||||
"max_rel_err": 3.18989893668177e-15,
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
"rel_tol": 1e-9,
|
||||
"seeds": 16,
|
||||
|
||||
@@ -15319,7 +15319,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12755644330057303547",
|
||||
"values_compared": 2
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -40479,7 +40479,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12755644330057306692",
|
||||
"values_compared": 2
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
@@ -1495,8 +1495,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_box_with_large_fillet_p0",
|
||||
@@ -1519,8 +1519,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_box_with_large_fillet_p1",
|
||||
@@ -1543,8 +1543,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_box_with_large_fillet_p2",
|
||||
@@ -1567,8 +1567,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_box_with_large_fillet_p3",
|
||||
@@ -1679,8 +1679,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_plane_circ_p1",
|
||||
@@ -1703,8 +1703,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_plane_circ_p2",
|
||||
@@ -1727,8 +1727,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_plane_circ_p3",
|
||||
@@ -2143,8 +2143,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_cone_p1",
|
||||
@@ -2167,8 +2167,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_cone_p2",
|
||||
@@ -2303,8 +2303,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_sphere_p1",
|
||||
@@ -2327,8 +2327,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_sphere_p2",
|
||||
@@ -2351,8 +2351,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_sphere_p3",
|
||||
@@ -2487,8 +2487,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_disk_p0",
|
||||
@@ -2511,8 +2511,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_disk_p1",
|
||||
@@ -2535,8 +2535,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_disk_p2",
|
||||
@@ -2559,8 +2559,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_disk_p3",
|
||||
@@ -2743,8 +2743,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_plane_square_p0",
|
||||
@@ -2767,8 +2767,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_plane_square_p1",
|
||||
@@ -2791,8 +2791,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_plane_square_p2",
|
||||
@@ -2815,8 +2815,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_plane_square_p3",
|
||||
@@ -2975,8 +2975,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_torus_p1",
|
||||
@@ -2999,8 +2999,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "face_torus_p2",
|
||||
@@ -7858,9 +7858,9 @@
|
||||
"deferred_by_unit": {
|
||||
"curve.curve_p2": 72,
|
||||
"curve.curve_p6": 32,
|
||||
"geom.tol": 13,
|
||||
"geom.tol": 9,
|
||||
"topology.edge": 6,
|
||||
"topology.face_p2": 9
|
||||
"topology.face_p2": 13
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
@@ -5896,8 +5896,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface (non-B-spline) in SmCrvOnSurf",
|
||||
"unit": "curve.crv_on_surf"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0662",
|
||||
@@ -13085,7 +13085,7 @@
|
||||
"cases_passed": 1317,
|
||||
"cases_total": 1528,
|
||||
"deferred_by_unit": {
|
||||
"topology.face_p2": 1,
|
||||
"curve.crv_on_surf": 1,
|
||||
"topology.face_p4": 210
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+752
-1733
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -150,16 +150,12 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_select_edges",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#17",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -378,196 +374,132 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e0_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#44",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e0_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#45",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e0_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#46",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e0_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#47",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e1_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#48",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e1_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#49",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e1_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#50",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e1_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#51",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e2_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#52",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e2_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#53",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e2_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#54",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e2_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#55",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e3_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#56",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e3_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#57",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e3_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#58",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap0_select_e3_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#59",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -742,196 +674,132 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e0_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#80",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e0_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#81",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e0_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#82",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e0_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#83",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e1_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#84",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e1_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#85",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e1_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#86",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e1_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#87",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e2_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#88",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e2_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#89",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e2_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#90",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e2_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#91",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e3_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#92",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e3_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#93",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e3_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#94",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap1e-4_select_e3_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#95",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -1102,196 +970,132 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e0_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#116",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e0_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#117",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e0_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#118",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e0_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#119",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e1_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#120",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e1_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#121",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e1_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#122",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e1_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#123",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e2_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#124",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e2_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#125",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e2_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#126",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e2_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#127",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e3_e4",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#128",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e3_e5",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#129",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e3_e6",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#130",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "two_squares_gap5e-3_select_e3_e7",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.stitch_p1/constructed.json#131",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -2656,17 +2460,16 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 1,
|
||||
"cases_deferred": 63,
|
||||
"cases_deferred": 14,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 237,
|
||||
"cases_passed": 286,
|
||||
"cases_total": 300,
|
||||
"deferred_by_unit": {
|
||||
"harness:analytic-geometry-export": 1,
|
||||
"intersect.surface_drop_lib_p3": 5,
|
||||
"topology.brep_p1": 5,
|
||||
"topology.brep_p4": 1,
|
||||
"topology.brep_p9": 2,
|
||||
"topology.face_p2": 49
|
||||
"topology.brep_p9": 2
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
@@ -1422,16 +1422,12 @@
|
||||
"values_compared": 880
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0013",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178184",
|
||||
"values_compared": 0
|
||||
"values_compared": 874
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1690,16 +1686,12 @@
|
||||
"values_compared": 154
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0045",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178216",
|
||||
"values_compared": 0
|
||||
"values_compared": 553
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2166,16 +2158,12 @@
|
||||
"values_compared": 302
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0104",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178275",
|
||||
"values_compared": 0
|
||||
"values_compared": 1142
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2810,16 +2798,12 @@
|
||||
"values_compared": 585
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0184",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178355",
|
||||
"values_compared": 0
|
||||
"values_compared": 382
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3070,16 +3054,12 @@
|
||||
"values_compared": 476
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0215",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178386",
|
||||
"values_compared": 0
|
||||
"values_compared": 578
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3546,16 +3526,12 @@
|
||||
"values_compared": 286
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0274",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178445",
|
||||
"values_compared": 0
|
||||
"values_compared": 424
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3870,16 +3846,12 @@
|
||||
"values_compared": 817
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0314",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178485",
|
||||
"values_compared": 0
|
||||
"values_compared": 766
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -4954,16 +4926,12 @@
|
||||
"values_compared": 787
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0449",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178620",
|
||||
"values_compared": 0
|
||||
"values_compared": 698
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -5586,16 +5554,12 @@
|
||||
"values_compared": 130
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0527",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178698",
|
||||
"values_compared": 0
|
||||
"values_compared": 661
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -5798,16 +5762,12 @@
|
||||
"values_compared": 211
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0553",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178724",
|
||||
"values_compared": 0
|
||||
"values_compared": 552
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -6538,16 +6498,12 @@
|
||||
"values_compared": 1302
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0645",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178816",
|
||||
"values_compared": 0
|
||||
"values_compared": 159
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7014,16 +6970,12 @@
|
||||
"values_compared": 520
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0703",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178874",
|
||||
"values_compared": 0
|
||||
"values_compared": 266
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7318,16 +7270,12 @@
|
||||
"values_compared": 91
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0740",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178911",
|
||||
"values_compared": 0
|
||||
"values_compared": 973
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7870,16 +7818,12 @@
|
||||
"values_compared": 237
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0808",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178979",
|
||||
"values_compared": 0
|
||||
"values_compared": 244
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7906,16 +7850,12 @@
|
||||
"values_compared": 366
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0812",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632178983",
|
||||
"values_compared": 0
|
||||
"values_compared": 405
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -9674,16 +9614,12 @@
|
||||
"values_compared": 534
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1030",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179201",
|
||||
"values_compared": 0
|
||||
"values_compared": 717
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -10382,16 +10318,12 @@
|
||||
"values_compared": 548
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1118",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179289",
|
||||
"values_compared": 0
|
||||
"values_compared": 820
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -10426,16 +10358,12 @@
|
||||
"values_compared": 817
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1123",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179294",
|
||||
"values_compared": 0
|
||||
"values_compared": 768
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -10470,16 +10398,12 @@
|
||||
"values_compared": 210
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1128",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179299",
|
||||
"values_compared": 0
|
||||
"values_compared": 674
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -10530,16 +10454,12 @@
|
||||
"values_compared": 715
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1135",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179306",
|
||||
"values_compared": 0
|
||||
"values_compared": 643
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -10846,16 +10766,12 @@
|
||||
"values_compared": 739
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1174",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179345",
|
||||
"values_compared": 0
|
||||
"values_compared": 536
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -11098,16 +11014,12 @@
|
||||
"values_compared": 184
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1205",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179376",
|
||||
"values_compared": 0
|
||||
"values_compared": 450
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -11134,16 +11046,12 @@
|
||||
"values_compared": 154
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1209",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179380",
|
||||
"values_compared": 0
|
||||
"values_compared": 797
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -11570,16 +11478,12 @@
|
||||
"values_compared": 956
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1263",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179434",
|
||||
"values_compared": 0
|
||||
"values_compared": 418
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -12046,16 +11950,12 @@
|
||||
"values_compared": 289
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1322",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179493",
|
||||
"values_compared": 0
|
||||
"values_compared": 79
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -12662,16 +12562,12 @@
|
||||
"values_compared": 532
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1398",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179569",
|
||||
"values_compared": 0
|
||||
"values_compared": 1130
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -12990,16 +12886,12 @@
|
||||
"values_compared": 185
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen1438",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=12816350387632179609",
|
||||
"values_compared": 0
|
||||
"values_compared": 238
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -13547,12 +13439,12 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 44,
|
||||
"cases_deferred": 17,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 1627,
|
||||
"cases_passed": 1654,
|
||||
"cases_total": 1671,
|
||||
"deferred_by_unit": {
|
||||
"topology.face_p2": 44
|
||||
"topology.face_p2": 17
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -783,7 +783,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977489261",
|
||||
"values_compared": 425
|
||||
"values_compared": 435
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1031,7 +1031,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977489292",
|
||||
"values_compared": 78
|
||||
"values_compared": 73
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1279,7 +1279,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977489323",
|
||||
"values_compared": 791
|
||||
"values_compared": 806
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2335,7 +2335,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977489455",
|
||||
"values_compared": 876
|
||||
"values_compared": 846
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3519,7 +3519,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977489603",
|
||||
"values_compared": 303
|
||||
"values_compared": 298
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -4919,7 +4919,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977489778",
|
||||
"values_compared": 255
|
||||
"values_compared": 250
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -5431,7 +5431,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977489842",
|
||||
"values_compared": 753
|
||||
"values_compared": 758
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -5951,7 +5951,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977489907",
|
||||
"values_compared": 601
|
||||
"values_compared": 611
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -6951,7 +6951,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977490032",
|
||||
"values_compared": 285
|
||||
"values_compared": 280
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7839,7 +7839,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977490143",
|
||||
"values_compared": 655
|
||||
"values_compared": 650
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -8455,7 +8455,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977490220",
|
||||
"values_compared": 650
|
||||
"values_compared": 655
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -8639,7 +8639,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977490243",
|
||||
"values_compared": 108
|
||||
"values_compared": 113
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -9319,7 +9319,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977490328",
|
||||
"values_compared": 935
|
||||
"values_compared": 945
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -9759,7 +9759,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977490383",
|
||||
"values_compared": 147
|
||||
"values_compared": 152
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -9839,7 +9839,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977490393",
|
||||
"values_compared": 456
|
||||
"values_compared": 441
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -10935,7 +10935,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=13982542374977490530",
|
||||
"values_compared": 760
|
||||
"values_compared": 750
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
@@ -31,7 +31,7 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
@@ -227,8 +227,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0019",
|
||||
@@ -275,8 +275,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0024",
|
||||
@@ -307,8 +307,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0027",
|
||||
@@ -399,8 +399,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0037",
|
||||
@@ -423,8 +423,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0039",
|
||||
@@ -435,8 +435,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0040",
|
||||
@@ -514,16 +514,12 @@
|
||||
"values_compared": 37
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0049",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=9515163603058762805",
|
||||
"values_compared": 0
|
||||
"values_compared": 364
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -739,8 +735,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0074",
|
||||
@@ -947,8 +943,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0095",
|
||||
@@ -959,8 +955,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0096",
|
||||
@@ -1007,8 +1003,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0101",
|
||||
@@ -1047,8 +1043,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0105",
|
||||
@@ -1123,8 +1119,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0114",
|
||||
@@ -1183,8 +1179,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0120",
|
||||
@@ -1267,8 +1263,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0128",
|
||||
@@ -1291,8 +1287,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0130",
|
||||
@@ -1483,8 +1479,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0152",
|
||||
@@ -1495,8 +1491,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0153",
|
||||
@@ -1519,8 +1515,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0155",
|
||||
@@ -1555,8 +1551,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0159",
|
||||
@@ -1591,8 +1587,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0163",
|
||||
@@ -1687,8 +1683,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0173",
|
||||
@@ -1771,8 +1767,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0182",
|
||||
@@ -2043,8 +2039,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0213",
|
||||
@@ -2087,7 +2083,7 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2195,8 +2191,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0230",
|
||||
@@ -2467,8 +2463,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0258",
|
||||
@@ -2535,8 +2531,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0266",
|
||||
@@ -2623,8 +2619,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0275",
|
||||
@@ -2779,8 +2775,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0293",
|
||||
@@ -2859,8 +2855,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0302",
|
||||
@@ -2879,8 +2875,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0304",
|
||||
@@ -2947,8 +2943,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0311",
|
||||
@@ -2967,8 +2963,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0313",
|
||||
@@ -3051,8 +3047,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0323",
|
||||
@@ -3199,8 +3195,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0339",
|
||||
@@ -3255,8 +3251,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0345",
|
||||
@@ -3287,8 +3283,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0348",
|
||||
@@ -3375,8 +3371,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0357",
|
||||
@@ -3479,8 +3475,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0368",
|
||||
@@ -3615,8 +3611,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0383",
|
||||
@@ -3643,8 +3639,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0386",
|
||||
@@ -3751,8 +3747,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0397",
|
||||
@@ -3783,8 +3779,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0400",
|
||||
@@ -3875,8 +3871,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0410",
|
||||
@@ -3903,8 +3899,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0413",
|
||||
@@ -3931,8 +3927,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0416",
|
||||
@@ -4123,8 +4119,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0438",
|
||||
@@ -4243,8 +4239,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0451",
|
||||
@@ -4271,8 +4267,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0454",
|
||||
@@ -4295,8 +4291,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0456",
|
||||
@@ -4307,8 +4303,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0457",
|
||||
@@ -4335,8 +4331,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0460",
|
||||
@@ -4355,8 +4351,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0462",
|
||||
@@ -4471,8 +4467,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0475",
|
||||
@@ -4590,16 +4586,12 @@
|
||||
"values_compared": 579
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0488",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=9515163603058763244",
|
||||
"values_compared": 0
|
||||
"values_compared": 484
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -4651,8 +4643,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0494",
|
||||
@@ -4735,8 +4727,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0503",
|
||||
@@ -4755,8 +4747,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0505",
|
||||
@@ -5123,8 +5115,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0545",
|
||||
@@ -5167,8 +5159,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0550",
|
||||
@@ -5259,8 +5251,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0560",
|
||||
@@ -5419,8 +5411,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0577",
|
||||
@@ -5475,8 +5467,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0583",
|
||||
@@ -5883,8 +5875,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0628",
|
||||
@@ -5895,8 +5887,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0629",
|
||||
@@ -6027,8 +6019,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0642",
|
||||
@@ -6162,16 +6154,12 @@
|
||||
"values_compared": 289
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0658",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=9515163603058763414",
|
||||
"values_compared": 0
|
||||
"values_compared": 571
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -6259,8 +6247,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0668",
|
||||
@@ -6387,8 +6375,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0681",
|
||||
@@ -6399,8 +6387,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0682",
|
||||
@@ -6511,8 +6499,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0694",
|
||||
@@ -6611,8 +6599,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0705",
|
||||
@@ -6643,8 +6631,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0708",
|
||||
@@ -6803,8 +6791,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0726",
|
||||
@@ -6875,8 +6863,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0733",
|
||||
@@ -6938,16 +6926,12 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0739",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=9515163603058763495",
|
||||
"values_compared": 0
|
||||
"values_compared": 330
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -6971,8 +6955,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0742",
|
||||
@@ -7015,8 +6999,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0747",
|
||||
@@ -7091,8 +7075,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0755",
|
||||
@@ -7131,8 +7115,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0759",
|
||||
@@ -7143,8 +7127,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0760",
|
||||
@@ -7307,8 +7291,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0779",
|
||||
@@ -7359,8 +7343,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0785",
|
||||
@@ -7479,8 +7463,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0799",
|
||||
@@ -7791,8 +7775,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "mouse_edgeuse_offset_extend",
|
||||
@@ -7959,8 +7943,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cone_mate_extend_local",
|
||||
@@ -8111,18 +8095,17 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 279,
|
||||
"cases_deferred": 275,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 595,
|
||||
"cases_passed": 599,
|
||||
"cases_total": 874,
|
||||
"deferred_by_unit": {
|
||||
"curve.crv_on_surf": 29,
|
||||
"geom.tol": 82,
|
||||
"harness:analytic-geometry-export": 123,
|
||||
"intersect.surface_drop_curve": 18,
|
||||
"intersect.surface_drop_lib_p3": 13,
|
||||
"surface.surface_p2": 1,
|
||||
"topology.face_p2": 13
|
||||
"topology.face_p2": 91
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+154
-237
@@ -339,8 +339,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_tight_edges_faces",
|
||||
@@ -351,8 +351,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_tight_box",
|
||||
@@ -363,8 +363,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_lock_then_query",
|
||||
@@ -375,8 +375,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_lock_tight_relock",
|
||||
@@ -411,8 +411,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_rebuilt_tight_edges_faces",
|
||||
@@ -423,8 +423,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_rebuilt_tight_box",
|
||||
@@ -435,8 +435,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_rebuilt_lock_then_query",
|
||||
@@ -447,8 +447,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_rebuilt_lock_tight_relock",
|
||||
@@ -930,52 +930,36 @@
|
||||
"values_compared": 14
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_tight_edges_faces",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/box.json#59 (upstream source/SMLib/src/SmBrep.cpp:1009)",
|
||||
"values_compared": 0
|
||||
"values_compared": 14
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_tight_box",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/box.json#60 (upstream source/SMLib/src/SmBrep.cpp:1009)",
|
||||
"values_compared": 0
|
||||
"values_compared": 7
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_lock_then_query",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/box.json#61 (upstream source/SMLib/inc/SmBrep.h:1640)",
|
||||
"values_compared": 0
|
||||
"values_compared": 30
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_lock_tight_relock",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/box.json#62 (upstream source/SMLib/src/SmBrep.cpp:1009)",
|
||||
"values_compared": 0
|
||||
"values_compared": 25
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1002,52 +986,36 @@
|
||||
"values_compared": 14
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_rebuilt_tight_edges_faces",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/box.json#66 (upstream source/SMLib/src/SmBrep.cpp:1009)",
|
||||
"values_compared": 0
|
||||
"values_compared": 14
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_rebuilt_tight_box",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/box.json#67 (upstream source/SMLib/src/SmBrep.cpp:1009)",
|
||||
"values_compared": 0
|
||||
"values_compared": 7
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_rebuilt_lock_then_query",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/box.json#68 (upstream source/SMLib/inc/SmBrep.h:1640)",
|
||||
"values_compared": 0
|
||||
"values_compared": 30
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_rebuilt_lock_tight_relock",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/box.json#69 (upstream source/SMLib/src/SmBrep.cpp:1009)",
|
||||
"values_compared": 0
|
||||
"values_compared": 25
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1835,8 +1803,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_face_mid_bnd",
|
||||
@@ -1854,16 +1822,12 @@
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_face_mid_off_bnd",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/classify.json#6 (upstream source/SMLib/src/SmBrep.cpp:24687)",
|
||||
"values_compared": 0
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1875,8 +1839,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_face_corner_bnd",
|
||||
@@ -1910,16 +1874,12 @@
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "endcap_origin_bnd",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/classify.json#12 (upstream source/SMLib/src/SmBrep.cpp:24687)",
|
||||
"values_compared": 0
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2299,8 +2259,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "disk_face_mid_bnd",
|
||||
@@ -2415,8 +2375,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_face_mid_bnd",
|
||||
@@ -2434,16 +2394,12 @@
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_face_mid_off_bnd",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/classify.json#62 (upstream source/SMLib/src/SmBrep.cpp:24687)",
|
||||
"values_compared": 0
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2455,8 +2411,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_face_corner_bnd",
|
||||
@@ -2490,16 +2446,12 @@
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ellips_ts2_origin_bnd",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/classify.json#68 (upstream source/SMLib/src/SmBrep.cpp:24687)",
|
||||
"values_compared": 0
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2543,8 +2495,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "plane_circ_face_mid_bnd",
|
||||
@@ -2579,8 +2531,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "plane_circ_face_corner_bnd",
|
||||
@@ -2615,8 +2567,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "plane_circ_origin_bnd",
|
||||
@@ -2667,8 +2619,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "plane_square_face_mid_bnd",
|
||||
@@ -2735,8 +2687,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "plane_square_origin_bnd",
|
||||
@@ -3594,28 +3546,20 @@
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "plane_square_vertex_off_tol0.0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/classify.json#182 (upstream source/SMLib/src/SmBrep.cpp:24687)",
|
||||
"values_compared": 0
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "plane_square_vertex_off_tol1e-10",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/query.brep/classify.json#183 (upstream source/SMLib/src/SmBrep.cpp:24687)",
|
||||
"values_compared": 0
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3723,8 +3667,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_unit_on_face_bnd",
|
||||
@@ -3811,8 +3755,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_unit_face_point_bnd",
|
||||
@@ -3923,8 +3867,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_moved_on_face_bnd",
|
||||
@@ -4011,8 +3955,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_moved_face_point_bnd",
|
||||
@@ -4123,8 +4067,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_tiny_on_face_bnd",
|
||||
@@ -4147,8 +4091,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_tiny_near_face_in_bnd",
|
||||
@@ -4211,8 +4155,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_tiny_face_point_bnd",
|
||||
@@ -4323,8 +4267,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_large_on_face_bnd",
|
||||
@@ -4411,8 +4355,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_large_face_point_bnd",
|
||||
@@ -4595,8 +4539,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "plane_square_point_tiny_bnd",
|
||||
@@ -5434,16 +5378,12 @@
|
||||
"values_compared": 10
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0011",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=7989681234904880589",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -5495,8 +5435,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0018",
|
||||
@@ -6163,8 +6103,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0098",
|
||||
@@ -6419,8 +6359,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0128",
|
||||
@@ -6631,8 +6571,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0154",
|
||||
@@ -6906,16 +6846,12 @@
|
||||
"values_compared": 10
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0186",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=7989681234904880764",
|
||||
"values_compared": 0
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -7327,8 +7263,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0237",
|
||||
@@ -7543,8 +7479,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0263",
|
||||
@@ -7595,8 +7531,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0269",
|
||||
@@ -7819,8 +7755,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0295",
|
||||
@@ -8083,8 +8019,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0327",
|
||||
@@ -8183,8 +8119,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0339",
|
||||
@@ -8210,16 +8146,12 @@
|
||||
"values_compared": 38
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0342",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=7989681234904880920",
|
||||
"values_compared": 0
|
||||
"values_compared": 13
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -8567,8 +8499,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0385",
|
||||
@@ -8670,16 +8602,12 @@
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0397",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=7989681234904880975",
|
||||
"values_compared": 0
|
||||
"values_compared": 37
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -8755,8 +8683,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0407",
|
||||
@@ -9586,16 +9514,12 @@
|
||||
"values_compared": 10
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0508",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=7989681234904881086",
|
||||
"values_compared": 0
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -9738,16 +9662,12 @@
|
||||
"values_compared": 10
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0526",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=7989681234904881104",
|
||||
"values_compared": 0
|
||||
"values_compared": 42
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -9935,8 +9855,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0549",
|
||||
@@ -10115,8 +10035,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface::DropCurve",
|
||||
"unit": "intersect.surface_drop_lib_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0571",
|
||||
@@ -10291,8 +10211,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace handle of a surface's face",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0592",
|
||||
@@ -10342,16 +10262,12 @@
|
||||
"values_compared": 34
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0598",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=7989681234904881176",
|
||||
"values_compared": 0
|
||||
"values_compared": 44
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -10367,17 +10283,18 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 247,
|
||||
"cases_deferred": 226,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 925,
|
||||
"cases_passed": 946,
|
||||
"cases_total": 1172,
|
||||
"deferred_by_unit": {
|
||||
"geom.tol": 74,
|
||||
"geom.tol": 61,
|
||||
"harness:analytic-geometry-export": 20,
|
||||
"intersect.surface_drop_lib_p3": 18,
|
||||
"surface.cone_p1": 49,
|
||||
"surface.sphere": 18,
|
||||
"surface.surf_of_extrusion_p2": 41,
|
||||
"topology.face_p2": 45
|
||||
"topology.face_p2": 19
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
+549
-590
File diff suppressed because it is too large
Load Diff
@@ -4251,8 +4251,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmEdge::GetCurve",
|
||||
"unit": "topology.edge"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_ellips_ts2_2d",
|
||||
@@ -9858,8 +9858,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmEdge::GetCurve",
|
||||
"unit": "topology.edge"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0174",
|
||||
@@ -10922,8 +10922,7 @@
|
||||
"curve.crv_on_surf": 5,
|
||||
"intersect.surface_drop_lib_p3": 17,
|
||||
"query.face_p1": 4,
|
||||
"topology.edge": 5,
|
||||
"topology.face_p2": 2
|
||||
"topology.edge": 7
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
+636
-715
File diff suppressed because it is too large
Load Diff
+212
-211
File diff suppressed because it is too large
Load Diff
@@ -2615,7 +2615,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.cone_p1/review.json#66 (upstream review adversarial)",
|
||||
"values_compared": 2
|
||||
"values_compared": 58
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3055,7 +3055,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.cone_p1/review.json#121 (upstream review adversarial)",
|
||||
"values_compared": 2
|
||||
"values_compared": 58
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3495,7 +3495,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.cone_p1/review.json#176 (upstream review adversarial)",
|
||||
"values_compared": 2
|
||||
"values_compared": 58
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2127,8 +2127,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_Mouse",
|
||||
@@ -2219,8 +2219,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_Endcap",
|
||||
@@ -2231,8 +2231,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_Endcap_lim",
|
||||
@@ -2327,8 +2327,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_box_with_large_fillet_lim",
|
||||
@@ -2411,8 +2411,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_cone",
|
||||
@@ -2423,8 +2423,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_cone_lim",
|
||||
@@ -2599,8 +2599,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_ellips_ts2",
|
||||
@@ -2875,8 +2875,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_sphere",
|
||||
@@ -2887,8 +2887,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_sphere_lim",
|
||||
@@ -2971,8 +2971,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_surf_extrude",
|
||||
@@ -2983,8 +2983,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_surf_extrude_lim",
|
||||
@@ -3067,8 +3067,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_surf_rev",
|
||||
@@ -3079,8 +3079,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_surf_rev_lim",
|
||||
@@ -3163,8 +3163,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_surf_sphere150",
|
||||
@@ -3175,8 +3175,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_surf_sphere150_lim",
|
||||
@@ -3259,8 +3259,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_torus",
|
||||
@@ -3271,8 +3271,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_torus_lim",
|
||||
@@ -3355,8 +3355,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_toruswvy",
|
||||
@@ -3367,8 +3367,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_toruswvy_lim",
|
||||
@@ -3451,8 +3451,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_vase_rev",
|
||||
@@ -3463,8 +3463,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rayfire_vase_rev_lim",
|
||||
@@ -5282,28 +5282,20 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_Mouse_102_1_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#44 (upstream upstream/TestFiles/pt_TestFiles/Mouse.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_Mouse_102_1_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#45 (upstream upstream/TestFiles/pt_TestFiles/Mouse.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -5642,28 +5634,20 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_box_with_large_fillet_102_2_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#82 (upstream upstream/TestFiles/pt_TestFiles/box_with_large_fillet.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_box_with_large_fillet_102_2_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#83 (upstream upstream/TestFiles/pt_TestFiles/box_with_large_fillet.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -6626,76 +6610,52 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_extrude_102_0_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#204 (upstream upstream/TestFiles/pt_TestFiles/surf_extrude.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_extrude_102_0_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#205 (upstream upstream/TestFiles/pt_TestFiles/surf_extrude.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_extrude_102_1_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#206 (upstream upstream/TestFiles/pt_TestFiles/surf_extrude.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_extrude_102_1_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#207 (upstream upstream/TestFiles/pt_TestFiles/surf_extrude.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_extrude_102_2_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#208 (upstream upstream/TestFiles/pt_TestFiles/surf_extrude.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_extrude_102_2_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#209 (upstream upstream/TestFiles/pt_TestFiles/surf_extrude.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7034,16 +6994,12 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_sphere150_104_0_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#252 (upstream upstream/TestFiles/pt_TestFiles/surf_sphere150.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7054,16 +7010,12 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_sphere150_104_1_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#254 (upstream upstream/TestFiles/pt_TestFiles/surf_sphere150.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7074,16 +7026,12 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_sphere150_104_2_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#256 (upstream upstream/TestFiles/pt_TestFiles/surf_sphere150.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -7494,28 +7442,20 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_vase_rev_104_1_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#308 (upstream upstream/TestFiles/pt_TestFiles/vase_rev.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_vase_rev_104_1_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#309 (upstream upstream/TestFiles/pt_TestFiles/vase_rev.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -8526,28 +8466,20 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_extrude_102_unknown_orient",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#432 (upstream upstream/TestFiles/pt_TestFiles/surf_extrude.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_extrude_102_extrapolated",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#433 (upstream upstream/TestFiles/pt_TestFiles/surf_extrude.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -8726,28 +8658,20 @@
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_sphere150_104_unknown_orient",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#456 (upstream upstream/TestFiles/pt_TestFiles/surf_sphere150.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "sector_surf_sphere150_104_extrapolated",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.brep_p2/sector.json#457 (upstream upstream/TestFiles/pt_TestFiles/surf_sphere150.smb)",
|
||||
"values_compared": 0
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -11471,8 +11395,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0054",
|
||||
@@ -11863,8 +11787,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0100",
|
||||
@@ -11883,8 +11807,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0102",
|
||||
@@ -11991,8 +11915,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0114",
|
||||
@@ -12231,8 +12155,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0142",
|
||||
@@ -12963,8 +12887,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0232",
|
||||
@@ -13151,8 +13075,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0254",
|
||||
@@ -13695,8 +13619,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0320",
|
||||
@@ -13767,8 +13691,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0328",
|
||||
@@ -13871,8 +13795,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0339",
|
||||
@@ -13891,8 +13815,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0341",
|
||||
@@ -14091,8 +14015,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0365",
|
||||
@@ -14355,8 +14279,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmTol::GetZoneTol3d(const SmObject*)",
|
||||
"unit": "geom.tol"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0396",
|
||||
@@ -14391,16 +14315,16 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 179,
|
||||
"cases_deferred": 160,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 1530,
|
||||
"cases_passed": 1549,
|
||||
"cases_total": 1709,
|
||||
"deferred_by_unit": {
|
||||
"geom.tol": 38,
|
||||
"geom.tol": 4,
|
||||
"intersect.surface_drop_lib_p3": 85,
|
||||
"surface.surface_cache_p1": 20,
|
||||
"topology.brep_p2": 1,
|
||||
"topology.face_p2": 19,
|
||||
"topology.face_p2": 34,
|
||||
"topology.face_p3": 16
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
@@ -295,8 +295,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmCurveClassification::ReSet",
|
||||
"unit": "intersect.curve_class_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_Endcap.smb_0",
|
||||
@@ -307,8 +307,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmCurveClassification::ReSet",
|
||||
"unit": "intersect.curve_class_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_Endcap.smb_1",
|
||||
@@ -431,8 +431,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SurfaceKind::Cone::DropPointFast callbacks",
|
||||
"unit": "surface.surface_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_box_with_large_fillet.smb_0",
|
||||
@@ -443,8 +443,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SurfaceKind::Cone::DropPointFast callbacks",
|
||||
"unit": "surface.surface_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_box_with_large_fillet.smb_1",
|
||||
@@ -567,8 +567,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SurfaceKind::Cone::DropPointFast callbacks",
|
||||
"unit": "surface.surface_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_cone.smb_0",
|
||||
@@ -579,8 +579,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SurfaceKind::Cone::DropPointFast callbacks",
|
||||
"unit": "surface.surface_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_cone.smb_1",
|
||||
@@ -703,8 +703,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmEdge::GetTolerance",
|
||||
"unit": "topology.edge"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_disk.smb_0",
|
||||
@@ -715,8 +715,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmEdge::GetTolerance",
|
||||
"unit": "topology.edge"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_disk.smb_1",
|
||||
@@ -843,8 +843,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmCurveClassification::ReSet",
|
||||
"unit": "intersect.curve_class_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_ellips_ts2.smb_0",
|
||||
@@ -855,8 +855,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmCurveClassification::ReSet",
|
||||
"unit": "intersect.curve_class_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_ellips_ts2.smb_1",
|
||||
@@ -979,8 +979,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface (non-B-spline) in SmCrvOnSurf",
|
||||
"unit": "curve.crv_on_surf"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_plane_circ.smb_0",
|
||||
@@ -991,8 +991,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface (non-B-spline) in SmCrvOnSurf",
|
||||
"unit": "curve.crv_on_surf"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_plane_circ.smb_1",
|
||||
@@ -1115,8 +1115,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface (non-B-spline) in SmCrvOnSurf",
|
||||
"unit": "curve.crv_on_surf"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_plane_square.smb_0",
|
||||
@@ -1127,8 +1127,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface (non-B-spline) in SmCrvOnSurf",
|
||||
"unit": "curve.crv_on_surf"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_plane_square.smb_1",
|
||||
@@ -1523,8 +1523,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface (non-B-spline) in SmCrvOnSurf",
|
||||
"unit": "curve.crv_on_surf"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_surf_rev.smb_0",
|
||||
@@ -1535,8 +1535,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmSurface (non-B-spline) in SmCrvOnSurf",
|
||||
"unit": "curve.crv_on_surf"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_surf_rev.smb_1",
|
||||
@@ -1799,8 +1799,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmFace::HasSeamProblem",
|
||||
"unit": "topology.face_p4"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_torus.smb_0",
|
||||
@@ -1811,8 +1811,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmFace::HasSeamProblem",
|
||||
"unit": "topology.face_p4"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_torus.smb_1",
|
||||
@@ -1939,8 +1939,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmFace::HasSeamProblem",
|
||||
"unit": "topology.face_p4"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_toruswvy.smb_0",
|
||||
@@ -1951,8 +1951,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmFace::HasSeamProblem",
|
||||
"unit": "topology.face_p4"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_toruswvy.smb_1",
|
||||
@@ -2079,8 +2079,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmFace::HasSeamProblem",
|
||||
"unit": "topology.face_p4"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_vase_rev.smb_0",
|
||||
@@ -2091,8 +2091,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
"symbol": "SmFace::HasSeamProblem",
|
||||
"unit": "topology.face_p4"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "read_vase_rev.smb_1",
|
||||
@@ -2849,14 +2849,16 @@
|
||||
"cases_total": 316,
|
||||
"deferred_by_unit": {
|
||||
"cpp-guard:ub-165": 3,
|
||||
"curve.crv_on_surf": 2,
|
||||
"curve.crv_on_surf": 8,
|
||||
"curve.curve_p6": 2,
|
||||
"surface.surface_p2": 8,
|
||||
"intersect.curve_class_p2": 4,
|
||||
"surface.surface_p2": 12,
|
||||
"topology.brep_p3": 36,
|
||||
"topology.brep_p4": 1,
|
||||
"topology.brep_p6": 2,
|
||||
"topology.brep_p9": 2,
|
||||
"topology.face_p2": 22
|
||||
"topology.edge": 2,
|
||||
"topology.face_p4": 6
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+539
-1132
File diff suppressed because it is too large
Load Diff
+3041
-4101
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1002
-2379
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user