mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-08 13:01:52 +00:00
topology.brep_p1: wire topology.edgeuse_p3 and offset_executive's GetEdges; run the blends' C++
- The 3 UNPORTED(topology.edgeuse_p3) sites call topology::edgeuse::p3 with
upstream's arguments (NormalizedEvaluate with the derivative upstream
requests, GetOrCreateUVTrimCurve with the header defaults, EvaluateBinormal
with bUse3DOnly TRUE). CreateEdgeEdgeBlend takes the B-rep mutably.
- offset_executive_p1's SmBrep::GetEdges stub calls topology::brep::p1::edges
(list order). Its CreateEdgeEdgeBlend stub keeps the brep_p1 label, because
upstream pairs edge uses of two B-reps.
- The shim now runs CreateCornerBlend (2+ edge uses) and the
CreateEdgeEdgeBlend blends instead of writing -3. Guards:
- corner blend: a replay on a copy catches the NULL UV trim curve copy;
- edge-edge blend: the UB-157 probe of surface.surface_p8, applied to the
blend's own rails.
The corner blend also emits its surfaces now.
- brep_p1 2589/2110/0/464 (15 rejected); perturb 2110/2110; fuzz 2000 pass;
sweep 3573/2849/0/709; green 206 units, 0 failed.
- Reports regenerated for brep_p1, merge_p1, heal_data_p1/p2/p3, topology.edge
and query.api_queries.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BfiWnWawYvdkvRXZtfC7zK
This commit is contained in:
@@ -1865,7 +1865,12 @@ fn run_rust_op(
|
||||
.map(|&i| EdgeuseId::from_index(i as u32))
|
||||
.collect();
|
||||
match bp1::create_corner_blend(k, b, &ids, tangent.as_deref(), *tol, *ang) {
|
||||
Ok(s) => o.extend([0.0, s.len() as f64]),
|
||||
Ok(s) => {
|
||||
o.extend([0.0, s.len() as f64]);
|
||||
for blend in s {
|
||||
put_surface(&mut o, &Surface::from(blend))?;
|
||||
}
|
||||
}
|
||||
Err(e) if e.is_unported() => return Err(e.into()),
|
||||
// upstream resets the output array before failing
|
||||
Err(e) => o.extend([status_of(&e), 0.0]),
|
||||
|
||||
@@ -410,7 +410,7 @@ impl OffsetExecutive {
|
||||
/// owner chains return [`SolidError::Unsupported`] rather than omitting geometry.
|
||||
/// Cache and solver errors propagate before any result-face removal. Ordinary
|
||||
/// evaluation statuses are ignored, but an unported evaluator still defers.
|
||||
/// Result edges currently use arena order, not upstream linked-list order.
|
||||
/// Result edges are visited in upstream edge list order (`SmBrep::GetEdges`).
|
||||
pub fn remove_excess_faces(
|
||||
&self,
|
||||
kernel: &Kernel,
|
||||
@@ -423,11 +423,8 @@ impl OffsetExecutive {
|
||||
let min_distance = self.offset_distance * 0.95;
|
||||
let mut delete_faces = Vec::new();
|
||||
let mut original_cache = None;
|
||||
// UNPORTED(topology.brep_p1): SmBrep::GetEdges
|
||||
// This arena-order adapter does not reproduce m_pEdgeListHead->GetAll order.
|
||||
// Nonempty queries still defer at NormalizedEvaluate; wire the ordered
|
||||
// traversal before completing that path or claiming deletion-order parity.
|
||||
for (id, _) in result.edges().iter() {
|
||||
// SmBrep::GetEdges (unit topology.brep_p1): the m_pEdgeListHead list order
|
||||
for id in crate::topology::brep::p1::edges(result, None)? {
|
||||
let primary = required(eu::primary_edgeuse(result, id)?)?;
|
||||
// Upstream ignores the evaluation status and keeps the initialized point.
|
||||
// An unported evaluator must still propagate instead of supplying a fake point.
|
||||
@@ -470,6 +467,10 @@ impl OffsetExecutive {
|
||||
};
|
||||
// Continuation cpp:2819–2823: CreateFaceFromSurface, then append closing face.
|
||||
// Actual call arguments: ruled blend (0), same direction (1), no options.
|
||||
// The static upstream call pairs an edge use of the original B-rep with one of
|
||||
// the offset B-rep; topology.brep_p1's port (topology::brep::p1::
|
||||
// create_edge_edge_blend) takes both edge uses in one B-rep, and this method has
|
||||
// no original B-rep: the cross-B-rep form is topology.brep_p1's own unported part.
|
||||
// UNPORTED(topology.brep_p1): SmBrep::CreateEdgeEdgeBlend
|
||||
Err(SolidError::unported(
|
||||
"SmBrep::CreateEdgeEdgeBlend",
|
||||
|
||||
@@ -92,12 +92,13 @@
|
||||
//! (upstream hands back the shell's region pointer unchecked).
|
||||
//! - Calls into units not ported yet return [`SolidError::Unported`] (every site is
|
||||
//! tagged `UNPORTED(<unit>)`, one stub per call site with the code after it ported):
|
||||
//! `SmEdgeuse::GetOrCreateUVTrimCurve`,
|
||||
//! `NormalizedEvaluate`, `EvaluateBinormal` (`topology.edgeuse_p3`),
|
||||
//! `SmFace::FaceIntersect` (`topology.face_p3`), `SmBrep::CalculateBoundingBox`, `LockBoundingBox`,
|
||||
//! `UnLockBoundingBox` (`query.brep`), `SmBSplineSurface::CreateCornerBlend` with a
|
||||
//! non-B-spline neighbour surface (`nurbs.b_spline_surface_n_lib_p2`, whose port takes
|
||||
//! B-spline neighbours only).
|
||||
//! - `CreateEdgeEdgeBlend` propagates a failing `EvaluateBinormal` (upstream ignores
|
||||
//! both statuses and goes on with partly initialised outputs) and so takes the B-rep
|
||||
//! mutably (edge use evaluations may attach UV trim curves).
|
||||
//! - `GetShells` dedups with a shell mark record local to the call (upstream marks the
|
||||
//! `SmShell` objects); `SetRegionIsVoidFlagsForNestedSolids` bounds its shell queue at
|
||||
//! `4 * shells + 16` passes.
|
||||
@@ -135,6 +136,8 @@ use crate::surface::surface::Surface;
|
||||
use crate::topology::brep_cache::{arena_identity, CacheObject};
|
||||
use crate::topology::edge::{self, AttributeFilter};
|
||||
use crate::topology::edgeuse::p1 as eu1;
|
||||
use crate::topology::edgeuse::p2::BinormalEval;
|
||||
use crate::topology::edgeuse::p3::{self as eu3, BinormalOptions};
|
||||
use crate::topology::face::p1 as face1;
|
||||
use crate::topology::face::p2 as face2;
|
||||
use crate::topology::loopuse;
|
||||
@@ -1343,17 +1346,21 @@ impl Drop for LockBrepBox<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
// ---- stubs into unit topology.edgeuse_p3 ------------------------------------------------
|
||||
// ---- calls into unit topology.edgeuse_p3 ------------------------------------------------
|
||||
|
||||
/// `SmEdgeuse::NormalizedEvaluate(t, bUV, point)` (unit `topology.edgeuse_p3`).
|
||||
fn normalized_evaluate(b: &Brep, eu: EdgeuseId, t: f64, uv: bool) -> Result<Point3> {
|
||||
b.edgeuse(eu)?;
|
||||
let _ = (t, uv);
|
||||
// UNPORTED(topology.edgeuse_p3): SmEdgeuse::NormalizedEvaluate
|
||||
Err(SolidError::unported(
|
||||
"SmEdgeuse::NormalizedEvaluate",
|
||||
"topology.edgeuse_p3",
|
||||
))
|
||||
/// `SmEdgeuse::NormalizedEvaluate(t, bParameterSpaceEval, rPoint, pOptFirstDeriv)`
|
||||
/// (`topology::edgeuse::p3::normalized_evaluate`; header default
|
||||
/// `bOKToMakeUVTrimCurve = TRUE`): `rPoint`. `want_first_deriv` is
|
||||
/// `pOptFirstDeriv != NULL` (the derivative itself is unused by every caller here).
|
||||
fn normalized_evaluate(
|
||||
k: &Kernel,
|
||||
b: &mut Brep,
|
||||
eu: EdgeuseId,
|
||||
t: f64,
|
||||
parameter_space_eval: bool,
|
||||
want_first_deriv: bool,
|
||||
) -> Result<Point3> {
|
||||
Ok(eu3::normalized_evaluate(k, b, eu, t, parameter_space_eval, want_first_deriv, true)?.point)
|
||||
}
|
||||
|
||||
/// `SmRegion::GetShells(rShells, pOptAttributeId)` (`Region::get_shells`, unit
|
||||
@@ -1419,51 +1426,39 @@ fn brep_bounding_box(
|
||||
))
|
||||
}
|
||||
|
||||
/// The outcome of `SmEdgeuse::GetOrCreateUVTrimCurve`: its status and, apart from it, the
|
||||
/// curve it hands back (upstream returns an existing UV trim curve together with the
|
||||
/// failure status of an earlier drop).
|
||||
struct UvTrimCurveResult {
|
||||
/// `None` for `SM_SUCCESS`.
|
||||
status: Option<SolidError>,
|
||||
/// `rpUVTrimCurve`.
|
||||
curve: Option<Curve>,
|
||||
}
|
||||
|
||||
/// `SmEdgeuse::GetOrCreateUVTrimCurve(rpUVTrimCurve, pdOptDistToSurf, pdOptDeviation,
|
||||
/// bUVSpaceOkay)` (unit `topology.edgeuse_p3`; header defaults `NULL`, `NULL`, `TRUE`).
|
||||
/// `Err` only for [`SolidError::Unported`].
|
||||
/// bUVSpaceOkay)` (`topology::edgeuse::p3::get_or_create_uv_trim_curve`; header defaults
|
||||
/// `NULL`, `NULL`, `TRUE`): the returned status, `None` for `SM_SUCCESS`. The curve
|
||||
/// upstream hands back in `rpUVTrimCurve` (also alongside a failure status) is the edge
|
||||
/// use's or its mate's attached one afterwards, [`eu1::uv_trim_curve`]. `want_dist` /
|
||||
/// `want_deviation` are `pdOpt... != NULL`. `Err` only where upstream has no status
|
||||
/// (`Unported`, dangling ids, null dereferences).
|
||||
fn get_or_create_uv_trim_curve(
|
||||
k: &Kernel,
|
||||
b: &mut Brep,
|
||||
eu: EdgeuseId,
|
||||
opt_dist_to_surf: Option<&mut f64>,
|
||||
opt_deviation: Option<&mut f64>,
|
||||
want_dist: bool,
|
||||
want_deviation: bool,
|
||||
uv_space_okay: bool,
|
||||
) -> Result<UvTrimCurveResult> {
|
||||
let _ = (k, opt_dist_to_surf, opt_deviation, uv_space_okay);
|
||||
b.edgeuse(eu)?;
|
||||
// UNPORTED(topology.edgeuse_p3): SmEdgeuse::GetOrCreateUVTrimCurve
|
||||
Err(SolidError::unported(
|
||||
"SmEdgeuse::GetOrCreateUVTrimCurve",
|
||||
"topology.edgeuse_p3",
|
||||
))
|
||||
) -> Result<Option<SolidError>> {
|
||||
Ok(
|
||||
eu3::get_or_create_uv_trim_curve(k, b, eu, want_dist, want_deviation, uv_space_okay)?
|
||||
.status
|
||||
.err(),
|
||||
)
|
||||
}
|
||||
|
||||
/// `SmEdgeuse::EvaluateBinormal(t, bEdgeParam, point, binormal, &tangent, &normal)`
|
||||
/// (unit `topology.edgeuse_p3`): `(point, binormal, tangent, normal)`.
|
||||
/// `SmEdgeuse::EvaluateBinormal(dParameter, bUse3DOnly, rBinormalPoint, rBinormal,
|
||||
/// pOptEdgeuseTangent, pOptFaceuseNormal)` (`topology::edgeuse::p3::evaluate_binormal`;
|
||||
/// header defaults `pOptUVParameter = pOptUVDir = NULL`).
|
||||
fn evaluate_binormal(
|
||||
k: &Kernel,
|
||||
b: &Brep,
|
||||
b: &mut Brep,
|
||||
eu: EdgeuseId,
|
||||
t: f64,
|
||||
) -> Result<(Point3, Vec3, Vec3, Vec3)> {
|
||||
let _ = (k, t);
|
||||
b.edgeuse(eu)?;
|
||||
// UNPORTED(topology.edgeuse_p3): SmEdgeuse::EvaluateBinormal
|
||||
Err(SolidError::unported(
|
||||
"SmEdgeuse::EvaluateBinormal",
|
||||
"topology.edgeuse_p3",
|
||||
))
|
||||
parameter: f64,
|
||||
use_3d_only: bool,
|
||||
) -> Result<BinormalEval> {
|
||||
eu3::evaluate_binormal(k, b, eu, parameter, use_3d_only, &BinormalOptions::default())
|
||||
}
|
||||
|
||||
// ---- curve side (sm_FindSideOfCurve) ----------------------------------------------------
|
||||
@@ -1670,9 +1665,7 @@ pub fn find_sector_of_face(
|
||||
/// # Errors
|
||||
///
|
||||
/// [`SolidError::InvalidInput`] for an edge without curve (upstream dereferences it);
|
||||
/// those of the evaluations, drops and notifications; [`SolidError::Unported`] from
|
||||
/// `SmEdgeuse::GetOrCreateUVTrimCurve` (unit `topology.edgeuse_p3`) when an edited
|
||||
/// edge has a UV trim curve.
|
||||
/// those of the evaluations, drops and notifications.
|
||||
pub fn update_vertex_edge_intervals(
|
||||
k: &Kernel,
|
||||
b: &mut Brep,
|
||||
@@ -1783,7 +1776,7 @@ pub fn update_vertex_edge_intervals(
|
||||
None,
|
||||
))?;
|
||||
let _ignored_status =
|
||||
get_or_create_uv_trim_curve(k, b, eu, None, None, true)?.status;
|
||||
get_or_create_uv_trim_curve(k, b, eu, false, false, true)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1805,10 +1798,8 @@ pub fn update_vertex_edge_intervals(
|
||||
/// # Errors
|
||||
///
|
||||
/// [`SolidError::InvalidInput`] where upstream reads past the edge use list (fewer
|
||||
/// than four edge uses) or dereferences null; [`SolidError::Unported`] from
|
||||
/// `SmEdgeuse::GetOrCreateUVTrimCurve` / `NormalizedEvaluate` / `EvaluateBinormal`
|
||||
/// (unit `topology.edgeuse_p3`), reached for every seam edge with a trim curve; those
|
||||
/// of the singularity test and the trim curve swap.
|
||||
/// than four edge uses) or dereferences null; those of the UV trim curve creation,
|
||||
/// the singularity test and the trim curve swap.
|
||||
pub fn redistribute_seam_uv_trim_curves(
|
||||
k: &Kernel,
|
||||
b: &mut Brep,
|
||||
@@ -1837,21 +1828,22 @@ pub fn redistribute_seam_uv_trim_curves(
|
||||
|
||||
// GWC: Check if we need to make sure the PrevEdgeuses have UVTrimCurves for this to work?
|
||||
// (the statuses and curves are only SM_ASSERTed upstream)
|
||||
let _this_status = get_or_create_uv_trim_curve(k, b, prev_this, None, None, true)?.status;
|
||||
let _other_status = get_or_create_uv_trim_curve(k, b, prev_other, None, None, true)?.status;
|
||||
let _this_status = get_or_create_uv_trim_curve(k, b, prev_this, false, false, true)?;
|
||||
let _other_status = get_or_create_uv_trim_curve(k, b, prev_other, false, false, true)?;
|
||||
|
||||
// Find the UV point for the two new starting Vertexuses (statuses not checked
|
||||
// upstream: a failed evaluation leaves the point unset; undefined here)
|
||||
// upstream: a failed evaluation leaves the point unset; undefined here; the first
|
||||
// derivatives are requested but unused upstream)
|
||||
// NewE Start UV values from UVTrimCurves
|
||||
let this_point_uv =
|
||||
ignored(normalized_evaluate(b, this_eu, 0.0, true))?.unwrap_or(Point3::UNDEF);
|
||||
ignored(normalized_evaluate(k, b, this_eu, 0.0, true, true))?.unwrap_or(Point3::UNDEF);
|
||||
let other_point_uv =
|
||||
ignored(normalized_evaluate(b, other_eu, 0.0, true))?.unwrap_or(Point3::UNDEF);
|
||||
ignored(normalized_evaluate(k, b, other_eu, 0.0, true, true))?.unwrap_or(Point3::UNDEF);
|
||||
// Prev Start UV values from PrevUVtrimCurves
|
||||
let prev_this_point_uv =
|
||||
ignored(normalized_evaluate(b, prev_this, 1.0, true))?.unwrap_or(Point3::UNDEF);
|
||||
ignored(normalized_evaluate(k, b, prev_this, 1.0, true, true))?.unwrap_or(Point3::UNDEF);
|
||||
let prev_other_point_uv =
|
||||
ignored(normalized_evaluate(b, prev_other, 1.0, true))?.unwrap_or(Point3::UNDEF);
|
||||
ignored(normalized_evaluate(k, b, prev_other, 1.0, true, true))?.unwrap_or(Point3::UNDEF);
|
||||
|
||||
// make sure sThisPointUV == sPrevThisPointUV, sOtherPointUV == sPrevOtherPointUV are
|
||||
// the same to tol by switching the UVTrimCurves if needed. Expect all 4 PointUVs to
|
||||
@@ -1904,10 +1896,13 @@ pub fn redistribute_seam_uv_trim_curves(
|
||||
// (the three statuses are tested, not propagated)
|
||||
let uv = ignored(this_uv_trim_curve.evaluate_point(parameter))?;
|
||||
let binormal = match uv {
|
||||
Some(_) => ignored(evaluate_binormal(k, b, this_eu, parameter))?,
|
||||
Some(_) => ignored(evaluate_binormal(k, b, this_eu, parameter, true))?,
|
||||
None => None,
|
||||
};
|
||||
if let (Some(uv), Some((_edge_point, binormal, _, _))) = (uv, binormal) {
|
||||
if let (Some(uv), Some(BinormalEval { binormal, .. })) = (uv, binormal) {
|
||||
// (the face surface fetched above; re-borrowed past the binormal evaluation)
|
||||
let surface = face2::surface(b, face)?
|
||||
.ok_or_else(|| null("sm_RedistributeSeamUVTrimCurves: face without surface"))?;
|
||||
if let Some((_surface_point, du, dv)) =
|
||||
ignored(surface.evaluate_1st_derivatives(Point2::new(uv.x, uv.y), true, true))?
|
||||
{
|
||||
@@ -2255,9 +2250,8 @@ fn face_intersect(
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// `SM_ERR` for fewer than two edge uses or a gap in the chain; [`SolidError::Unported`]
|
||||
/// from `SmEdgeuse::NormalizedEvaluate` / `GetOrCreateUVTrimCurve` (unit
|
||||
/// `topology.edgeuse_p3`), reached for every valid input; [`SolidError::InvalidInput`]
|
||||
/// `SM_ERR` for fewer than two edge uses or a gap in the chain; those of the edge use
|
||||
/// evaluations; [`SolidError::InvalidInput`]
|
||||
/// where upstream dereferences null (an opposite edge use without mate, an edge
|
||||
/// without curve, a tangent edge use without face) or reads past
|
||||
/// `tangent_to_face`; those of the copies, trims and the blend.
|
||||
@@ -2335,10 +2329,10 @@ pub fn create_corner_blend(
|
||||
};
|
||||
|
||||
// lastEdgeuse endpoint (3d Eval)
|
||||
let end_point = normalized_evaluate(b, last_eu, param, false)?;
|
||||
let end_point = normalized_evaluate(k, b, last_eu, param, false, false)?;
|
||||
|
||||
// TestEdgeuse StartPoint
|
||||
let test_pt = normalized_evaluate(b, eu, 0.0, false)?;
|
||||
let test_pt = normalized_evaluate(k, b, eu, 0.0, false, false)?;
|
||||
|
||||
// when LastEdge EndPoint coincides with TestEdge Start
|
||||
if test_pt.distance(end_point) < approx_tol_3d * tol_scale {
|
||||
@@ -2354,7 +2348,7 @@ pub fn create_corner_blend(
|
||||
}
|
||||
|
||||
// TestEdgeuse EndPoint
|
||||
let test_pt = normalized_evaluate(b, eu, 1.0, false)?;
|
||||
let test_pt = normalized_evaluate(k, b, eu, 1.0, false, false)?;
|
||||
|
||||
// When LastEdge EndPoint coincides with TestEdge End
|
||||
if test_pt.distance(end_point) < approx_tol_3d * tol_scale {
|
||||
@@ -2416,11 +2410,10 @@ pub fn create_corner_blend(
|
||||
// get Edgeuse->UVTrimCurve (status ignored upstream; SM_ASSERT(pUVCurve != NULL)
|
||||
// is a release no-op and the copy dereferences it), copy UVTrimCurve
|
||||
// (the status is ignored: upstream copies whatever curve it returns)
|
||||
let uv_curve = get_or_create_uv_trim_curve(k, b, eu, None, None, true)?
|
||||
.curve
|
||||
.ok_or_else(|| {
|
||||
null("CreateCornerBlend: GetOrCreateUVTrimCurve left no UV trim curve")
|
||||
})?;
|
||||
let _ignored_status = get_or_create_uv_trim_curve(k, b, eu, false, false, true)?;
|
||||
let uv_curve = eu1::uv_trim_curve(b, eu)?.0.ok_or_else(|| {
|
||||
null("CreateCornerBlend: GetOrCreateUVTrimCurve left no UV trim curve")
|
||||
})?;
|
||||
let uv_copy = uv_curve.copy(k)?;
|
||||
let Some(uv_bspline) = bspline_part(&uv_copy) else {
|
||||
return Err(sm_err());
|
||||
@@ -2504,13 +2497,12 @@ pub fn create_corner_blend(
|
||||
/// `SM_ERR_NULL_POINTER` for a null edge use (`NER`); `SM_ERR_INVALID_INPUT` for an
|
||||
/// edge use without edge, an edge without B-spline curve or a face without surface;
|
||||
/// [`SolidError::InvalidInput`] for a blend edge use without face (upstream
|
||||
/// dereferences it); those of the knot dampening and the ruled surface;
|
||||
/// [`SolidError::Unported`] from `SmEdgeuse::EvaluateBinormal` (unit
|
||||
/// `topology.edgeuse_p3`), reached for every blend.
|
||||
/// dereferences it); those of the binormal evaluations (statuses upstream ignores),
|
||||
/// the knot dampening and the ruled surface.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn create_edge_edge_blend(
|
||||
k: &Kernel,
|
||||
b: &Brep,
|
||||
b: &mut Brep,
|
||||
blend_flag: u64,
|
||||
eu_1: Option<EdgeuseId>,
|
||||
eu_2: Option<EdgeuseId>,
|
||||
@@ -2603,16 +2595,29 @@ pub fn create_edge_edge_blend(
|
||||
eu1::face(b, eu_1)?.ok_or_else(|| null("CreateEdgeEdgeBlend: edge use without face"))?;
|
||||
let face2_ =
|
||||
eu1::face(b, eu_2)?.ok_or_else(|| null("CreateEdgeEdgeBlend: edge use without face"))?;
|
||||
let (Some(surface1), Some(surface2)) = (face2::surface(b, face1)?, face2::surface(b, face2_)?)
|
||||
else {
|
||||
let surfaces_present = (
|
||||
face2::surface(b, face1)?.is_some(),
|
||||
face2::surface(b, face2_)?.is_some(),
|
||||
);
|
||||
if !(surfaces_present.0 && surfaces_present.1) {
|
||||
return Err(status(SM_ERR_INVALID_INPUT)); // Could not fetch Surface from Edgeuse
|
||||
};
|
||||
}
|
||||
|
||||
// set the bIntoFace values for curve/Surface pairs
|
||||
let (_edge1_pos, edge1_binormal, mut edge1_tangent, mut face1_normal) =
|
||||
evaluate_binormal(k, b, eu_1, ivl1.evaluate(0.5))?;
|
||||
let (_edge2_pos, edge2_binormal, mut edge2_tangent, mut face2_normal) =
|
||||
evaluate_binormal(k, b, eu_2, ivl2.evaluate(0.5))?;
|
||||
// (upstream ignores both statuses and goes on with the partly initialised outputs;
|
||||
// a failure is propagated here)
|
||||
let BinormalEval {
|
||||
binormal: edge1_binormal,
|
||||
tangent: mut edge1_tangent,
|
||||
face_normal: mut face1_normal,
|
||||
..
|
||||
} = evaluate_binormal(k, b, eu_1, ivl1.evaluate(0.5), true)?;
|
||||
let BinormalEval {
|
||||
binormal: edge2_binormal,
|
||||
tangent: mut edge2_tangent,
|
||||
face_normal: mut face2_normal,
|
||||
..
|
||||
} = evaluate_binormal(k, b, eu_2, ivl2.evaluate(0.5), true)?;
|
||||
if eu1::orientation(b, eu_1)? == OrientType::Opposite {
|
||||
edge1_tangent = -edge1_tangent;
|
||||
}
|
||||
@@ -2685,6 +2690,9 @@ pub fn create_edge_edge_blend(
|
||||
// build blend surface
|
||||
let curve1 = Curve::from(rail1);
|
||||
let curve2 = Curve::from(rail2);
|
||||
// (the face surfaces fetched above; re-borrowed past the edge use evaluations)
|
||||
let surface1 = face2::surface(b, face1)?.ok_or_else(|| SolidError::null_pointer(OP))?;
|
||||
let surface2 = face2::surface(b, face2_)?.ok_or_else(|| SolidError::null_pointer(OP))?;
|
||||
surface1.create_blend_surface(
|
||||
k,
|
||||
&curve1,
|
||||
|
||||
@@ -800,6 +800,264 @@ void attach(Rd& rd, Graph& g, int64_t id)
|
||||
}
|
||||
|
||||
|
||||
// SmBrep::CreateCornerBlend (SmBrep.cpp:2488-2665) up to the end of its UV phase, replayed
|
||||
// read-only on a copy of the B-rep (surface types preserved): TRUE when the real call would
|
||||
// copy a NULL UV trim curve (`SM_ASSERT(pUVCurve != NULL)` is a release no-op and
|
||||
// `pUVCurve->Copy` dereferences it). The replay keeps upstream's ordering, statuses and
|
||||
// early returns, so it is TRUE exactly when the real call reaches that dereference.
|
||||
static bool corner_blend_uv_null(SmBrep* brep, const SmContext& ctx, const SmTArray<SmEdgeuse*>& eus,
|
||||
const SmTArray<SmBoolean>* tans, double tol)
|
||||
{
|
||||
SmCopyBrepMap rev;
|
||||
SmBrep* copy = new (ctx) SmBrep(*brep, NULL, &rev, TRUE, FALSE);
|
||||
SmObjDelete copy_clean(copy);
|
||||
SmTArray<SmEdgeuse*> work;
|
||||
for (ULONG i = 0; i < eus.GetSize(); i++)
|
||||
{
|
||||
SmEdgeuse* c = (SmEdgeuse*)rev.GetAt(eus[i]);
|
||||
if (c == NULL)
|
||||
return true; // (not expected: refuse rather than run unguarded)
|
||||
work.Add(c);
|
||||
}
|
||||
SmTArray<SmEdgeuse*> ordered;
|
||||
SmTArray<SmOrientType> orients;
|
||||
SmTArray<SmBoolean> work_tan;
|
||||
if (tans)
|
||||
work_tan.Append(*tans);
|
||||
else
|
||||
work_tan.InsertAt(0, TRUE, eus.GetSize());
|
||||
for (ULONG ii = 0; ii < work.GetSize(); ii++)
|
||||
{
|
||||
if (work[ii]->GetOrientation() == SM_OT_OPPOSITE)
|
||||
work[ii] = work[ii]->GetMate();
|
||||
if (work[ii]->GetEdge()->IsWire())
|
||||
work_tan[ii] = FALSE;
|
||||
}
|
||||
SmTArray<SmBoolean> tangencies;
|
||||
tangencies.Add(work_tan[0]);
|
||||
ordered.Add(work[0]);
|
||||
orients.Add(work[0]->GetOrientation());
|
||||
work.RemoveAt(0);
|
||||
work_tan.RemoveAt(0);
|
||||
double tol_scale = 1.0;
|
||||
while (work.GetSize() > 0)
|
||||
{
|
||||
SmBoolean found = FALSE;
|
||||
for (ULONG ii = 0; ii < work.GetSize(); ii++)
|
||||
{
|
||||
SmEdgeuse* eu = work[ii];
|
||||
SmEdgeuse* last = ordered.GetLast();
|
||||
double param = (orients.GetLast() == SM_OT_SAME) ? 1.0 : 0.0;
|
||||
SmPoint3d end_point;
|
||||
if (last->NormalizedEvaluate(param, FALSE, end_point) != SM_SUCCESS)
|
||||
return false;
|
||||
SmPoint3d test_pt;
|
||||
if (eu->NormalizedEvaluate(0.0, FALSE, test_pt) != SM_SUCCESS)
|
||||
return false;
|
||||
if (test_pt.DistanceBetween(end_point) < tol * tol_scale)
|
||||
{
|
||||
tangencies.Add(work_tan[ii]);
|
||||
ordered.Add(work[ii]);
|
||||
orients.Add(SM_OT_SAME);
|
||||
work.RemoveAt(ii);
|
||||
work_tan.RemoveAt(ii);
|
||||
found = TRUE;
|
||||
tol_scale = 1.0;
|
||||
break;
|
||||
}
|
||||
if (eu->NormalizedEvaluate(1.0, FALSE, test_pt) != SM_SUCCESS)
|
||||
return false;
|
||||
if (test_pt.DistanceBetween(end_point) < tol * tol_scale)
|
||||
{
|
||||
tangencies.Add(work_tan[ii]);
|
||||
ordered.Add(work[ii]);
|
||||
orients.Add(SM_OT_OPPOSITE);
|
||||
work.RemoveAt(ii);
|
||||
work_tan.RemoveAt(ii);
|
||||
found = TRUE;
|
||||
tol_scale = 1.0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found && tol_scale > 100.0)
|
||||
return false;
|
||||
if (!found)
|
||||
tol_scale *= 2.5;
|
||||
}
|
||||
for (ULONG ii = 0; ii < ordered.GetSize(); ii++)
|
||||
{
|
||||
SmEdgeuse* eu = ordered[ii];
|
||||
SmEdge* e = eu->GetEdge();
|
||||
SmCurve* crv = NULL;
|
||||
if (e->GetCurve()->Copy(ctx, crv) != SM_SUCCESS)
|
||||
return false;
|
||||
SmObjDelete crv_clean(crv);
|
||||
SmExtent1d ivl = e->GetInterval();
|
||||
if (crv->Trim(ivl) != SM_SUCCESS)
|
||||
return false;
|
||||
if (tangencies[ii])
|
||||
{
|
||||
SmBSplineCurve* uv = NULL;
|
||||
eu->GetOrCreateUVTrimCurve(uv);
|
||||
if (uv == NULL)
|
||||
return true;
|
||||
SmCurve* uv_copy = NULL;
|
||||
if (uv->Copy(ctx, uv_copy) != SM_SUCCESS)
|
||||
return false;
|
||||
SmObjDelete uv_clean(uv_copy);
|
||||
if (!SM_CAST_PTR(SmBSplineCurve, uv_copy))
|
||||
return false;
|
||||
if (eu->GetFace() == NULL)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// UB-157 (plan/upstream-issues.md): SmSurface::CreateBlendSurface ignores the statuses of its
|
||||
// two GetSampleValues calls, and CreateSkinnedSurface reads and writes sIntParams[numSections + ii]
|
||||
// past the array when SyncronizeKnotsOfCurves moves rail 2's natural interval. The probe of the
|
||||
// surface.surface_p8 shim (OP_BLEND), for CreateBlendSurface's default definition: SM_ERR for a
|
||||
// failing sample (the port fails at the first failing sample), 1007 for a moving rail 2 (the port's
|
||||
// InvalidInput "too few intersection parameters"), 0 when the blend is defined.
|
||||
static double blend_surface_ub157(const SmContext& ctx, const SmSurface& s1, const SmCurve& c1, SmExtent1d ivl1,
|
||||
bool right, const SmSurface& s2, const SmCurve& c2, SmExtent1d ivl2, bool left)
|
||||
{
|
||||
SmDerivSurfDefinition def;
|
||||
def.m_lNumSamples = 100;
|
||||
def.m_eTangencyType = SM_TT_DIR_TO_REFERENCE_CURVE;
|
||||
def.m_dStartDerivDirAngleDeg = 0.0;
|
||||
def.m_dEndDerivDirAngleDeg = 0.0;
|
||||
def.m_dStartTanLength = 1.0;
|
||||
def.m_dEndTanScale = 1.0;
|
||||
def.m_dStartAngleDeg = 0.0;
|
||||
def.m_dEndAngleDeg = 0.0;
|
||||
def.m_vVector.Set(0, 0, 0);
|
||||
def.m_eCurvatureType = SM_CT_G2_FROM_SURFACE;
|
||||
def.m_eBlendEndType = SM_BE_NO_CUSP;
|
||||
def.m_dStartRadius = 0.0;
|
||||
def.m_dEndRadScale = 0.0;
|
||||
def.m_pCurvatureReference = NULL;
|
||||
def.m_bFlipCurvature = FALSE;
|
||||
ULONG nd = def.GetNumDerivs();
|
||||
SmTArray<double> params;
|
||||
SmTArray<SmVector3d> p0, d0, p1, d1, s20, s30, s21, s31;
|
||||
def.m_pTangentReference = &c2;
|
||||
SmStatus r1 = def.GetSampleValues(s1, c1, ivl1, right ? TRUE : FALSE, TRUE, params, p0, d0,
|
||||
nd >= 2 ? &s20 : NULL, nd >= 3 ? &s30 : NULL);
|
||||
def.m_pTangentReference = &c1;
|
||||
SmStatus r2 = def.GetSampleValues(s2, c2, ivl2, left ? TRUE : FALSE, FALSE, params, p1, d1,
|
||||
nd >= 2 ? &s21 : NULL, nd >= 3 ? &s31 : NULL);
|
||||
if (r1 != SM_SUCCESS || r2 != SM_SUCCESS)
|
||||
return st(SM_ERR);
|
||||
SmCurve* k1 = NULL;
|
||||
SmCurve* k2 = NULL;
|
||||
bool moves = false;
|
||||
if (c1.Copy(ctx, k1) == SM_SUCCESS && c2.Copy(ctx, k2) == SM_SUCCESS && k1 != NULL && k2 != NULL)
|
||||
{
|
||||
SmBSplineCurve* b1 = (SmBSplineCurve*)k1;
|
||||
SmBSplineCurve* b2 = (SmBSplineCurve*)k2;
|
||||
SmExtent1d before = b2->GetNaturalInterval();
|
||||
SmTArray<SmBSplineCurve*> rails;
|
||||
rails.Add(b1);
|
||||
rails.Add(b2);
|
||||
if (SmBSplineCurve::SyncronizeKnotsOfCurves(rails, SM_EFF_ZERO * 100) == SM_SUCCESS)
|
||||
{
|
||||
SmExtent1d after = b2->GetNaturalInterval();
|
||||
moves = fabs(after.GetMin() - before.GetMin()) > SM_EFF_ZERO ||
|
||||
fabs(after.GetMax() - before.GetMax()) > SM_EFF_ZERO;
|
||||
}
|
||||
}
|
||||
delete k1;
|
||||
delete k2;
|
||||
return moves ? 1007.0 : 0.0;
|
||||
}
|
||||
|
||||
// SmBrep::CreateEdgeEdgeBlend (SmBrep.cpp:2850-3020) for a blend flag != 0 and no definition,
|
||||
// replayed up to its CreateBlendSurface call on its own fresh rails (the edge uses are only read):
|
||||
// the UB-157 probe of that call, 0 when upstream returns before it or the blend is defined.
|
||||
static double edge_edge_blend_ub157(const SmContext& ctx, SmEdgeuse* e1, SmEdgeuse* e2, ULONG dir)
|
||||
{
|
||||
SmEdge* edge1 = e1->GetEdge();
|
||||
SmEdge* edge2 = e2->GetEdge();
|
||||
if (edge1 == NULL || edge2 == NULL)
|
||||
return 0.0;
|
||||
SmExtent1d ivl1 = edge1->GetInterval();
|
||||
SmExtent1d ivl2 = edge2->GetInterval();
|
||||
SmBSplineCurve* rail1 = edge1->CreateTrimmedNURBSCurve(ctx);
|
||||
SmBSplineCurve* rail2 = edge2->CreateTrimmedNURBSCurve(ctx);
|
||||
SmObjDelete clean1(rail1), clean2(rail2);
|
||||
if (rail1 == NULL || rail2 == NULL)
|
||||
return 0.0;
|
||||
SmBoolean same;
|
||||
if (dir == 1)
|
||||
same = TRUE;
|
||||
else if (dir == 2)
|
||||
same = FALSE;
|
||||
else
|
||||
{
|
||||
ULONG ii, num(11);
|
||||
SmTArray<SmPoint3d> pos1, pos2;
|
||||
double d_same(0), d_opp(0);
|
||||
pos1.SetSize(num);
|
||||
pos2.SetSize(num);
|
||||
for (ii = 0; ii < num; ii++)
|
||||
{
|
||||
rail1->EvaluatePoint(ivl1.Evaluate((double)ii / (double)(num - 1)), pos1[ii]);
|
||||
rail2->EvaluatePoint(ivl2.Evaluate((double)ii / (double)(num - 1)), pos2[ii]);
|
||||
}
|
||||
for (ii = 0; ii < num; ii++)
|
||||
{
|
||||
d_same += pos1[ii].DistanceBetween(pos2[ii]);
|
||||
d_opp += pos1[ii].DistanceBetween(pos2[num - 1 - ii]);
|
||||
}
|
||||
same = (d_same <= d_opp) ? TRUE : FALSE;
|
||||
}
|
||||
if (e1->GetFace() == NULL || e2->GetFace() == NULL)
|
||||
return 0.0; // (the caller's null-dereference guard)
|
||||
SmSurface* surf1 = e1->GetFace()->GetSurface();
|
||||
SmSurface* surf2 = e2->GetFace()->GetSurface();
|
||||
if (surf1 == NULL || surf2 == NULL)
|
||||
return 0.0;
|
||||
SmVector3d pos_1, pos_2, tan1, tan2, bin1, bin2, nrm1, nrm2;
|
||||
e1->EvaluateBinormal(ivl1.Evaluate(.5), TRUE, pos_1, bin1, &tan1, &nrm1);
|
||||
e2->EvaluateBinormal(ivl2.Evaluate(.5), TRUE, pos_2, bin2, &tan2, &nrm2);
|
||||
if (e1->GetOrientation() == SM_OT_OPPOSITE)
|
||||
tan1 = -tan1;
|
||||
if (e2->GetOrientation() == SM_OT_OPPOSITE)
|
||||
tan2 = -tan2;
|
||||
if (e1->GetFaceuse()->GetOrientation() == SM_OT_OPPOSITE)
|
||||
nrm1 = -nrm1;
|
||||
if (e2->GetFaceuse()->GetOrientation() == SM_OT_OPPOSITE)
|
||||
nrm2 = -nrm2;
|
||||
SmVector3d left1 = nrm1 * tan1;
|
||||
SmVector3d left2 = nrm2 * tan2;
|
||||
SmBoolean right = bin1.Dot(left1) >= 0.0 ? TRUE : FALSE;
|
||||
SmBoolean left = bin2.Dot(left2) >= 0.0 ? FALSE : TRUE;
|
||||
auto rescale = [&]() {
|
||||
if (!ivl1.AreEqual(ivl2))
|
||||
{
|
||||
double scale = (ivl1.GetMin() - ivl1.GetMax()) / (ivl2.GetMin() - ivl2.GetMax());
|
||||
double offset = (ivl2.GetMin() * ivl1.GetMax()) -
|
||||
(ivl1.GetMin() * ivl2.GetMax()) / (ivl2.GetMin() - ivl2.GetMax());
|
||||
SmExtent1d nat = rail2->GetNaturalInterval();
|
||||
nat.SetMinMax(nat.GetMin() * scale + offset, nat.GetMax() * scale + offset);
|
||||
rail2->EditParameterization(nat, FALSE);
|
||||
ivl2 = ivl1;
|
||||
}
|
||||
};
|
||||
if (same == FALSE)
|
||||
{
|
||||
rail2->ReverseParameterization(ivl2, ivl2);
|
||||
left = (left == TRUE) ? FALSE : TRUE;
|
||||
}
|
||||
rescale();
|
||||
if (same == FALSE)
|
||||
rail2->ReverseParameterization(ivl2, ivl2);
|
||||
rescale();
|
||||
return blend_surface_ub157(ctx, *surf1, *rail1, ivl1, right == TRUE, *surf2, *rail2, ivl2, left == TRUE);
|
||||
}
|
||||
|
||||
// The healed B-rep (OP_HEAL): a fresh walk, the extras of OP_EXPORT, then the fields the
|
||||
// Rust B-rep holds, in graph order (the order of the import, which the Rust side emits as
|
||||
// its arena order; a heal that leaves the topology lists as they are keeps the two equal).
|
||||
@@ -1487,9 +1745,10 @@ void run_op(int32_t op, Rd& rd, const char* path, std::vector<double>& o)
|
||||
double ang = rd.num();
|
||||
if (eus.GetSize() >= 2)
|
||||
{
|
||||
// upstream dereferences the mate of an opposite edge use and each edge before
|
||||
// the (unported) NormalizedEvaluate: -2 there, else the Rust side defers
|
||||
bool null_deref = false;
|
||||
// upstream dereferences the mate of an opposite edge use and each edge, indexes
|
||||
// the tangent flags per edge use, and copies the UV trim curve of each tangent
|
||||
// edge use unchecked: -2 there (the port's InvalidInput)
|
||||
bool null_deref = has_tan && tans.GetSize() < eus.GetSize();
|
||||
for (ULONG i = 0; i < eus.GetSize(); i++)
|
||||
{
|
||||
SmEdgeuse* p = eus[i];
|
||||
@@ -1498,13 +1757,21 @@ void run_op(int32_t op, Rd& rd, const char* path, std::vector<double>& o)
|
||||
if (p == NULL || p->GetEdge() == NULL)
|
||||
null_deref = true;
|
||||
}
|
||||
o.push_back(null_deref ? ST_NULL_DEREF : -3.0);
|
||||
break;
|
||||
if (!null_deref && corner_blend_uv_null(brep, ctx, eus, has_tan ? &tans : NULL, tol))
|
||||
null_deref = true;
|
||||
if (null_deref)
|
||||
{
|
||||
o.push_back(ST_NULL_DEREF);
|
||||
o.push_back(0.0); // upstream resets the output array first
|
||||
break;
|
||||
}
|
||||
}
|
||||
SmTArray<SmSurface*> blends;
|
||||
SmStatus s = brep->CreateCornerBlend(ctx, eus, has_tan ? &tans : NULL, tol, ang, blends);
|
||||
o.push_back(st(s));
|
||||
o.push_back((double)blends.GetSize());
|
||||
for (ULONG i = 0; i < blends.GetSize(); i++)
|
||||
put_surface(o, blends[i]);
|
||||
for (ULONG i = 0; i < blends.GetSize(); i++)
|
||||
delete blends[i];
|
||||
break;
|
||||
@@ -1519,22 +1786,23 @@ void run_op(int32_t op, Rd& rd, const char* path, std::vector<double>& o)
|
||||
if (flag != 0 && e1 != nullptr && e2 != nullptr && e1->GetEdge() != NULL && e2->GetEdge() != NULL)
|
||||
{
|
||||
// the blend path: after the rails (CreateTrimmedNURBSCurve, failing -> SM_ERR_INVALID_INPUT
|
||||
// upstream and in the port) it dereferences both faces, then reaches the
|
||||
// unported SmEdgeuse::EvaluateBinormal
|
||||
// upstream and in the port) it dereferences both faces: -2 there
|
||||
SmBSplineCurve* r1 = e1->GetEdge()->CreateTrimmedNURBSCurve(ctx);
|
||||
SmBSplineCurve* r2 = e2->GetEdge()->CreateTrimmedNURBSCurve(ctx);
|
||||
bool rails_ok = r1 != NULL && r2 != NULL;
|
||||
delete r1;
|
||||
delete r2;
|
||||
if (!rails_ok)
|
||||
o.push_back((double)SM_ERR_INVALID_INPUT);
|
||||
else if (e1->GetFace() == NULL || e2->GetFace() == NULL)
|
||||
if (rails_ok && (e1->GetFace() == NULL || e2->GetFace() == NULL))
|
||||
{
|
||||
o.push_back(ST_NULL_DEREF);
|
||||
else if (e1->GetFace()->GetSurface() == NULL || e2->GetFace()->GetSurface() == NULL)
|
||||
o.push_back((double)SM_ERR_INVALID_INPUT);
|
||||
else
|
||||
o.push_back(-3.0); // the Rust side defers
|
||||
break;
|
||||
break;
|
||||
}
|
||||
double ub157 = edge_edge_blend_ub157(ctx, e1, e2, (ULONG)dir);
|
||||
if (ub157 != 0.0)
|
||||
{
|
||||
o.push_back(ub157);
|
||||
break;
|
||||
}
|
||||
}
|
||||
SmSurface* out = nullptr;
|
||||
SmStatus s = SmBrep::CreateEdgeEdgeBlend(ctx, (ULONG)flag, e1, e2, (ULONG)dir, NULL, out);
|
||||
|
||||
+49
-14
@@ -7083,19 +7083,20 @@ with owner-tagged `Unported` errors and documented continuations.
|
||||
|
||||
## topology.brep_p1 (`SmBrep` members, collections, `sm_*` helpers of `SmBrep.cpp`, PR #145, 2026-10-16; partial, no disagreements)
|
||||
|
||||
Difftest (`fixtures/topology.brep_p1/`: 2095 cases on the 15 upstream `.smb` files read by
|
||||
Difftest (`fixtures/topology.brep_p1/`: 2335 cases on the 15 upstream `.smb` files read by
|
||||
`SmBrep::ReadFromFile`, 238 on constructed B-reps (wire edges, plane and B-spline faces, the
|
||||
`prog_test` wire network, 10 `sm_FindSideOfCurve` cases among them), 16 generated): 2349 cases,
|
||||
1859 pass, of which 1814 compare values and 45 are guard agreements, not coverage (the C++ is not run: the shim stops before an upstream null dereference; 30 are the port's matching refusal, 15 a runner-side mirror with no port call), 15 rejected (no entity of the op's kind; nothing runs), 0 failed, 475 deferred (`harness:analytic-geometry-export` 217,
|
||||
`topology.edgeuse_p3` 93, `query.brep` 71, `topology.face_p2` 44, `topology.face_p3` 18,
|
||||
`topology.face_p4` 16, `query.face_p2` 9, `curve.crv_on_surf` 4, `surface.surface_cache_p1` 3);
|
||||
`--perturb` detects 1859/1859; `--fuzz 2000` FUZZ-PASS; a 1000-seed generated sweep (3333 cases)
|
||||
passes 2584 with 0 failed, 734 deferred and 15 rejected (2508 compare values; the other 76 are guard
|
||||
`prog_test` wire network, 10 `sm_FindSideOfCurve` cases among them), 16 generated): 2589 cases,
|
||||
2110 pass, of which 2065 compare values and 45 are guard agreements, not coverage (the C++ is not run: the shim stops before an upstream null dereference; 30 are the port's matching refusal, 15 a runner-side mirror with no port call), 15 rejected (no entity of the op's kind; nothing runs), 0 failed, 464 deferred (`harness:analytic-geometry-export` 217,
|
||||
`topology.face_p2` 113, `query.brep` 71, `topology.face_p3` 21, `topology.face_p4` 16,
|
||||
`intersect.surface_drop_lib_p3` 10, `query.face_p2` 9, `curve.crv_on_surf` 4,
|
||||
`surface.surface_cache_p1` 3);
|
||||
`--perturb` detects 2110/2110; `--fuzz 2000` FUZZ-PASS; a 1000-seed generated sweep (3573 cases)
|
||||
passes 2849 with 0 failed, 709 deferred and 15 rejected (2773 compare values; the other 76 are guard
|
||||
agreements of the same kinds: 53 port refusals, i.e. 43 UB-162 redistribute, 7 `CreateEdgeEdgeBlend` with a blend
|
||||
edge use without face, 3 swaps without an old infinite region, and 23 runner-side `AddAttributes` mirrors); green runs 201 units (main's 200 + this unit) with
|
||||
0 failed (main merged through a28e0f06).
|
||||
edge use without face, 3 swaps without an old infinite region, and 23 runner-side `AddAttributes` mirrors); green runs 206 units with 0 failed (main merged
|
||||
through 89dc103a).
|
||||
`sm_SwapFaceUV` calls `topology.face_p1`'s `SmFace::SwapUV` (#148, wired after the merge; status ignored as upstream's release `SE`, `Unported` still propagates): on an unmarked face the shim now runs the C++ swap and both sides compare the swapped B-rep digest (the heal digest: surfaces, trim-curve fingerprints, loop-use links), but every such case defers at `SmFace::GetBrep` (`topology.face_p4`), the first call of face_p1's `swap_uv`, so none compares yet (the 16 former `topology.face_p1` deferrals are now `topology.face_p4` 16; no deferral flipped to pass).
|
||||
Every compared value is bit-identical; no absolute floors. Of the 1859 passes, 1814 compare
|
||||
Every compared value is bit-identical; no absolute floors. Of the 2110 passes, 2065 compare
|
||||
values. The other 45 are guard agreements, not coverage: both sides report the null-dereference
|
||||
guard (`both_errored` in the report) and no C++ runs, because the shim stops before an upstream null
|
||||
dereference. 15 are `AddAttributes` on a null indexed target, where the runner itself writes the
|
||||
@@ -7123,10 +7124,10 @@ rejected: nothing runs on either side.
|
||||
the 51 `sm_MakeVertexSplitUVTrimCurve` passes have no trim curve; `sm_MarkLoopsToDelete`
|
||||
never descends successfully on the fixtures (level 0 returns the loop, level 1 nothing).
|
||||
`GetSurfaces` / `GetCurves` compare the owners of the listed geometry, not the geometry. The
|
||||
shim decides the deferral itself (`-3`, the C++ is not run) for `CreateCornerBlend` with
|
||||
two or more edge uses, `CreateEdgeEdgeBlend` blends (flags 1-3) and `BrepIntersect` with
|
||||
faces: those deferrals are asserted from the stubbed Rust
|
||||
path, not observed from a C++ run. A `-2` guard sentinel (the shim stopping before a known
|
||||
shim decides the deferral itself (`-3`, the C++ is not run) for `BrepIntersect` with
|
||||
faces: that deferral is asserted from the stubbed Rust path, not observed from a C++ run
|
||||
(`CreateCornerBlend` with two or more edge uses and `CreateEdgeEdgeBlend` blends run the C++
|
||||
since the edge-use wiring below). A `-2` guard sentinel (the shim stopping before a known
|
||||
null dereference) is reported as the error `null_dereference_guard` on both sides, so those
|
||||
cases count as `both_errored`, not as value comparisons. `GetFaces` / `GetEdges` /
|
||||
`GetVertices` compare the native list order the runner *imports* (the extras of this unit's
|
||||
@@ -7263,6 +7264,40 @@ rejected: nothing runs on either side.
|
||||
without edges or NURBS rails). `SmSurface::CreateBlendSurface` (`surface.surface_p8`,
|
||||
partial) is called; every blend still defers earlier at `EvaluateBinormal`.
|
||||
|
||||
- **Edge-use wiring (main merged through 89dc103a: #117 `topology.edgeuse_p3`, #175, #186, #230).**
|
||||
The 3 `UNPORTED(topology.edgeuse_p3)` sites call `topology::edgeuse::p3` with upstream's
|
||||
arguments: `NormalizedEvaluate` (header default `bOKToMakeUVTrimCurve = TRUE`;
|
||||
`sm_RedistributeSeamUVTrimCurves` requests the first derivative it never reads, as upstream),
|
||||
`GetOrCreateUVTrimCurve` (header defaults `NULL`, `NULL`, `TRUE`; the curve upstream returns
|
||||
beside the status is read back with `SmEdgeuse::GetUVTrimCurve`) and `EvaluateBinormal`
|
||||
(`bUse3DOnly = TRUE` at both sites). `CreateEdgeEdgeBlend` propagates a failing
|
||||
`EvaluateBinormal`, whose two statuses upstream ignores (it goes on with partly initialised
|
||||
outputs), and takes the B-rep mutably. `offset_executive_p1`'s `SmBrep::GetEdges` stub now calls
|
||||
`topology::brep::p1::edges` (list order); its `CreateEdgeEdgeBlend` stub keeps the
|
||||
`topology.brep_p1` label, since upstream pairs an original-B-rep and an offset-B-rep edge use and
|
||||
this port takes both from one B-rep.
|
||||
- **Harness.** Until now the shim ran no C++ for `CreateCornerBlend` with two or more edge uses
|
||||
or for `CreateEdgeEdgeBlend` blends: it wrote `-3` ("the Rust side defers"). With the stubs
|
||||
gone it runs both. Running the edge-edge blend corrupted the heap in
|
||||
`CreateSkinnedSurface` (UB-157, also reachable from here; valgrind: 8-byte read/write just
|
||||
past a 128-double `sIntParams` copy). The shim now replays `CreateEdgeEdgeBlend` up to its
|
||||
`CreateBlendSurface` call on its own rails and applies `surface.surface_p8`'s probe (`SM_ERR`
|
||||
for a failing sample, `1007` when knot synchronisation moves rail 2), the port's statuses
|
||||
for the same inputs. The corner blend replays upstream's ordering and UV phase on a copy of
|
||||
the B-rep (surface types kept) and reports the null-dereference guard only where upstream
|
||||
would copy a NULL UV trim curve; no fixture or sweep case reaches it (`cases_both_errored`
|
||||
stays 45). The corner blend now also emits the blend surfaces after the count.
|
||||
- **Flips against the previous report.** 240 new UNSURE cases pass. 11 deferrals pass: 5
|
||||
`CreateCornerBlend` on three edge uses, which compare the C++ failure status and an empty
|
||||
surface list, and 6 `sm_RedistributeSeamUVTrimCurves`, which compare the status and the swap
|
||||
flag. 82 deferrals moved to later units (69 `topology.face_p2`, 10
|
||||
`intersect.surface_drop_lib_p3`, 3 `topology.face_p3`). No pass changed. All 45 blend-flag
|
||||
`CreateEdgeEdgeBlend` fixtures still defer on the Rust side, so the blend path has no compared
|
||||
case.
|
||||
- **valgrind** (`--error-exitcode=99`) on the corner-blend, redistribute, UNSURE and
|
||||
infinite-region samples: clean. On the edge-edge blends: one report, UB-11 (`N_BasisInsertKnots`
|
||||
reads one slot past `X`) under `CreateBlendSurface`, in a case that defers on the Rust side.
|
||||
|
||||
## topology.face_p1 (`SmFace.cpp` part 1: `MoveSeam`, `SplitAtSeam`, `CreateOrientedTrimBoundary`, `CalculateUVDomainFromUVTrimCurves`, ...; PR #148, 2026-10-16; partial, no disagreements)
|
||||
|
||||
- **Mostly deferred by design.** Every mutating member starts with `SmFace::Notify`
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -179,7 +179,7 @@ meantime, whoever merges renumbers the new entry and every reference to it (here
|
||||
- **What happens:** After the last new knot is inserted, the merge step compares `X[mx+1]`. An empty `X` reads `X[-1]`.
|
||||
- **Trigger:** Any call: one slot past the end is always read. Or an empty insert vector.
|
||||
- **How found:** read during porting.
|
||||
- **Confirmed:** no. The read never changes the output in practice.
|
||||
- **Confirmed:** no. The read never changes the output in practice. valgrind reports the read as a conditional jump on an uninitialised value (`N_BasisInsertKnots` under `N_CreateSkinSrfBoundaryContinuity`, `topology.brep_p1` edge-edge blends through `CreateBlendSurface`, cases that defer on the Rust side).
|
||||
- **Severity:** crash/UB.
|
||||
- **Rust port:** Skips the comparison. Empty `X` is `InvalidInput`.
|
||||
|
||||
@@ -1154,6 +1154,7 @@ meantime, whoever merges renumbers the new entry and every reference to it (here
|
||||
- **Confirmed:** yes (heap corruption without the shim's probe; with it, 2000 cases run clean).
|
||||
- **Severity:** crash/UB.
|
||||
- **Rust port:** The sample statuses fail the call at the first failing sample (`SM_ERR`). Skinning with too few intersection parameters returns `InvalidInput` ("too few intersection parameters"). The shim probes both conditions (the `GetSampleValues` pair and the rail synchronisation on copies) and reports `SM_ERR` / `1007` instead of running the undefined part.
|
||||
- **Also reached from:** `SmBrep::CreateEdgeEdgeBlend` (`SmBrep.cpp`, blend flags 1-3), which hands its trimmed, reparameterised edge rails to `CreateBlendSurface`: heap corruption in the `topology.brep_p1` difftest (valgrind: invalid read/write of 8 bytes just past a 128-double `sIntParams` copy, edge-edge blends on the upstream `.smb` files) once that shim ran the blend. The `topology.brep_p1` shim replays `CreateEdgeEdgeBlend` up to the blend call on its own rails and applies the same probe.
|
||||
|
||||
#### UB-111. `SmApiCreateDraftSweep` with no curves crashes
|
||||
- **Location:** `source/SM_API/src/SmApiBrep.cpp:1310` `SmApiCreateDraftSweep` -> `source/SMLib/src/SmPrimitiveCreation.cpp:3604` `SmPrimitiveCreation::CreateTaperExtrude`.
|
||||
|
||||
@@ -514,16 +514,12 @@
|
||||
"values_compared": 23
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_plane_0_0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#64 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -538,33 +534,25 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_plane_0_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#66 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_plane_1_0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#67 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_plane_1_1",
|
||||
@@ -575,8 +563,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_plane_1_2",
|
||||
@@ -586,153 +574,105 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_wire_0_0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#70 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_wire_0_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#71 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_wire_0_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#72 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_wire_1_0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#73 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_wire_1_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#74 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_wire_1_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#75 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_network_0_0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#76 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 51
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_network_0_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#77 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 51
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_network_0_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#78 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 51
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_network_1_0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#79 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 51
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_network_1_1",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#80 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 51
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_network_1_2",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#81 (upstream tests/prog_test/src/smTopoTest.cpp:4665)",
|
||||
"values_compared": 0
|
||||
"values_compared": 51
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmTopologyIntersector::MergeCoincidentSurfaces",
|
||||
"unit": "boolean.topology_intersector_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "coincident_rectangle_mates_0",
|
||||
@@ -751,8 +691,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmTopologyIntersector::MergeCoincidentSurfaces",
|
||||
"unit": "boolean.topology_intersector_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "coincident_rectangle_mates_2",
|
||||
@@ -926,16 +866,12 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_file_plane_square.smb",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#104 (upstream source/SMLib/src/SmMerge.cpp)",
|
||||
"values_compared": 0
|
||||
"values_compared": 49
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -954,16 +890,12 @@
|
||||
"values_compared": 50
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_file_plane_circ.smb",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#107 (upstream source/SMLib/src/SmMerge.cpp)",
|
||||
"values_compared": 0
|
||||
"values_compared": 16
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -982,16 +914,12 @@
|
||||
"values_compared": 17
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cleanup_file_sphere.smb",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/boolean.merge_p1/helpers.json#110 (upstream source/SMLib/src/SmMerge.cpp)",
|
||||
"values_compared": 0
|
||||
"values_compared": 24
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1506,16 +1434,12 @@
|
||||
"values_compared": 23
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0012",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314521",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1559,8 +1483,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmTopologyIntersector::MergeCoincidentSurfaces",
|
||||
"unit": "boolean.topology_intersector_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0018",
|
||||
@@ -1686,16 +1610,12 @@
|
||||
"values_compared": 53
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0032",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314541",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1706,16 +1626,12 @@
|
||||
"values_compared": 16
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0034",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314543",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1726,16 +1642,12 @@
|
||||
"values_compared": 23
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0036",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314545",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1778,16 +1690,12 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0041",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314550",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1814,16 +1722,12 @@
|
||||
"values_compared": 23
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0045",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314554",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -1895,8 +1799,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmTopologyIntersector::MergeCoincidentSurfaces",
|
||||
"unit": "boolean.topology_intersector_p3"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0054",
|
||||
@@ -2002,16 +1906,12 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0066",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314575",
|
||||
"values_compared": 0
|
||||
"values_compared": 11
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -2122,16 +2022,12 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetShells",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0080",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=5645105664643314589",
|
||||
"values_compared": 0
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -2167,8 +2063,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetEdges",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0084",
|
||||
@@ -2271,16 +2167,16 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 71,
|
||||
"cases_deferred": 45,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 177,
|
||||
"cases_passed": 203,
|
||||
"cases_total": 248,
|
||||
"deferred_by_unit": {
|
||||
"boolean.topology_intersector_p3": 4,
|
||||
"intersect.surface_drop_lib_p3": 18,
|
||||
"query.brep": 14,
|
||||
"topology.brep_p1": 33,
|
||||
"topology.brep_p9": 3,
|
||||
"topology.face_p2": 3
|
||||
"topology.face_p2": 6
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
@@ -498,28 +498,20 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetVertices",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "heal_brep_op_none",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.heal_data_p1/edge_cases.json#48",
|
||||
"values_compared": 0
|
||||
"values_compared": 4
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetInfiniteRegion",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "fix_infinite_region_fresh",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/heal.heal_data_p1/edge_cases.json#49",
|
||||
"values_compared": 0
|
||||
"values_compared": 3410
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
@@ -1195,8 +1187,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::HealBrep",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "api_heal_box_10",
|
||||
@@ -1251,8 +1243,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetVertices",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmFace::GetTolerance",
|
||||
"unit": "topology.face_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "heal_box_10_healbrep_all_faces_only",
|
||||
@@ -2131,8 +2123,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::HealBrep",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0026",
|
||||
@@ -2650,16 +2642,12 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetInfiniteRegion",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0083",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=8971097847862315939",
|
||||
"values_compared": 0
|
||||
"values_compared": 3240
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -3243,8 +3231,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::HealBrep",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0147",
|
||||
@@ -3671,8 +3659,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::HealBrep",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0194",
|
||||
@@ -3811,8 +3799,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::HealBrep",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0209",
|
||||
@@ -3822,16 +3810,12 @@
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetInfiniteRegion",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0210",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "generated:seed=8971097847862316066",
|
||||
"values_compared": 0
|
||||
"values_compared": 4448
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -4175,8 +4159,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::HealBrep",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0247",
|
||||
@@ -4675,8 +4659,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::HealBrep",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0301",
|
||||
@@ -4851,14 +4835,14 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 226,
|
||||
"cases_deferred": 222,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 267,
|
||||
"cases_passed": 271,
|
||||
"cases_total": 493,
|
||||
"deferred_by_unit": {
|
||||
"query.face_p4": 64,
|
||||
"topology.brep_p1": 12,
|
||||
"topology.face_p2": 83,
|
||||
"topology.brep_p2": 7,
|
||||
"topology.face_p2": 84,
|
||||
"topology.face_p3": 18,
|
||||
"topology.face_p4": 49
|
||||
},
|
||||
|
||||
@@ -635,8 +635,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "closed_sphere_swap0_through_fix_tol",
|
||||
@@ -655,8 +655,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "closed_sphere_swap1_through_fix_tol",
|
||||
@@ -1507,8 +1507,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0020",
|
||||
@@ -1555,8 +1555,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0025",
|
||||
@@ -1807,8 +1807,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0050",
|
||||
@@ -1843,8 +1843,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0053",
|
||||
@@ -1887,8 +1887,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0057",
|
||||
@@ -1971,8 +1971,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0066",
|
||||
@@ -2107,8 +2107,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0079",
|
||||
@@ -2375,8 +2375,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0107",
|
||||
@@ -2511,8 +2511,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0121",
|
||||
@@ -2559,8 +2559,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0126",
|
||||
@@ -2767,8 +2767,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0147",
|
||||
@@ -2815,8 +2815,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0152",
|
||||
@@ -3243,8 +3243,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0197",
|
||||
@@ -4287,8 +4287,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0307",
|
||||
@@ -4819,8 +4819,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0363",
|
||||
@@ -4843,8 +4843,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0365",
|
||||
@@ -5075,8 +5075,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0389",
|
||||
@@ -5087,8 +5087,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0390",
|
||||
@@ -5155,8 +5155,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0397",
|
||||
@@ -5167,8 +5167,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0398",
|
||||
@@ -5223,8 +5223,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0404",
|
||||
@@ -5315,8 +5315,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0414",
|
||||
@@ -5363,8 +5363,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0419",
|
||||
@@ -5579,8 +5579,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0443",
|
||||
@@ -5659,8 +5659,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0451",
|
||||
@@ -5803,8 +5803,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0466",
|
||||
@@ -6183,8 +6183,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0505",
|
||||
@@ -6299,8 +6299,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0517",
|
||||
@@ -6743,8 +6743,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0564",
|
||||
@@ -6843,8 +6843,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0573",
|
||||
@@ -7100,7 +7100,7 @@
|
||||
"cases_passed": 441,
|
||||
"cases_total": 738,
|
||||
"deferred_by_unit": {
|
||||
"topology.brep_p1": 32,
|
||||
"topology.brep_p2": 32,
|
||||
"topology.face_p2": 252,
|
||||
"topology.face_p3": 13
|
||||
},
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_5",
|
||||
@@ -55,8 +55,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_6",
|
||||
@@ -67,8 +67,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_7",
|
||||
@@ -79,8 +79,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_8",
|
||||
@@ -91,8 +91,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_9",
|
||||
@@ -103,8 +103,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_10",
|
||||
@@ -115,8 +115,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_11",
|
||||
@@ -127,8 +127,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_12",
|
||||
@@ -139,8 +139,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_13",
|
||||
@@ -151,8 +151,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_14",
|
||||
@@ -163,8 +163,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_15",
|
||||
@@ -175,8 +175,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_16",
|
||||
@@ -187,8 +187,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_17",
|
||||
@@ -199,8 +199,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_18",
|
||||
@@ -211,8 +211,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_19",
|
||||
@@ -223,8 +223,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_20",
|
||||
@@ -235,8 +235,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_21",
|
||||
@@ -247,8 +247,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_22",
|
||||
@@ -259,8 +259,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_23",
|
||||
@@ -271,8 +271,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_24",
|
||||
@@ -283,8 +283,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_25",
|
||||
@@ -295,8 +295,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "empty_targets_through_26",
|
||||
@@ -1135,8 +1135,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0002",
|
||||
@@ -1159,8 +1159,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0004",
|
||||
@@ -1243,8 +1243,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0013",
|
||||
@@ -1255,8 +1255,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0014",
|
||||
@@ -1287,8 +1287,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0017",
|
||||
@@ -1403,8 +1403,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0028",
|
||||
@@ -1575,8 +1575,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0045",
|
||||
@@ -1655,8 +1655,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0053",
|
||||
@@ -1703,8 +1703,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0058",
|
||||
@@ -2011,8 +2011,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0093",
|
||||
@@ -2051,8 +2051,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0097",
|
||||
@@ -2283,8 +2283,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0123",
|
||||
@@ -2479,8 +2479,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0144",
|
||||
@@ -2539,8 +2539,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0150",
|
||||
@@ -2755,8 +2755,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0174",
|
||||
@@ -3095,8 +3095,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0207",
|
||||
@@ -3107,8 +3107,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0208",
|
||||
@@ -3195,8 +3195,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0217",
|
||||
@@ -3235,8 +3235,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0221",
|
||||
@@ -3311,8 +3311,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0228",
|
||||
@@ -3367,8 +3367,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0234",
|
||||
@@ -3379,8 +3379,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0235",
|
||||
@@ -3439,8 +3439,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0241",
|
||||
@@ -3563,8 +3563,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0255",
|
||||
@@ -4043,8 +4043,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0302",
|
||||
@@ -4283,8 +4283,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0328",
|
||||
@@ -4303,8 +4303,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0330",
|
||||
@@ -4523,8 +4523,8 @@
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetThisModelSizeEstimate",
|
||||
"unit": "topology.brep_p1"
|
||||
"symbol": "SmBrep::SetTolerance",
|
||||
"unit": "topology.brep_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0354",
|
||||
@@ -4580,7 +4580,7 @@
|
||||
"cases_passed": 279,
|
||||
"cases_total": 474,
|
||||
"deferred_by_unit": {
|
||||
"topology.brep_p1": 50,
|
||||
"topology.brep_p2": 50,
|
||||
"topology.face_p2": 123,
|
||||
"topology.face_p3": 20,
|
||||
"topology.face_p4": 2
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+2123
-247
File diff suppressed because it is too large
Load Diff
@@ -4362,16 +4362,12 @@
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetInfiniteRegion",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_with_large_fillet_e0_blend",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.edge/upstream_files.json#162",
|
||||
"values_compared": 0
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -4638,16 +4634,12 @@
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetInfiniteRegion",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_with_large_fillet_e2_blend",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.edge/upstream_files.json#196",
|
||||
"values_compared": 0
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -4834,16 +4826,12 @@
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetInfiniteRegion",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_with_large_fillet_e5_blend",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.edge/upstream_files.json#220",
|
||||
"values_compared": 0
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -5030,16 +5018,12 @@
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetInfiniteRegion",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_with_large_fillet_e9_blend",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.edge/upstream_files.json#244",
|
||||
"values_compared": 0
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -5424,16 +5408,12 @@
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmBrep::GetInfiniteRegion",
|
||||
"unit": "topology.brep_p1"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "box_with_large_fillet_rb_e0_blend",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/topology.edge/upstream_files.json#292",
|
||||
"values_compared": 0
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -14549,13 +14529,12 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 186,
|
||||
"cases_deferred": 16,
|
||||
"cases_deferred": 11,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 1771,
|
||||
"cases_passed": 1776,
|
||||
"cases_total": 1787,
|
||||
"deferred_by_unit": {
|
||||
"intersect.surface_drop_lib_p3": 6,
|
||||
"topology.brep_p1": 5,
|
||||
"topology.brep_p2": 5
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
Reference in New Issue
Block a user