mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-08 13:01:52 +00:00
Merge pull request #438 from brett19/tests/prog-test-parity
difftest: replicate upstream prog_test calls (SSI regression, curve/surface solves, LiftCurve, DropAndTrimCurve)
This commit is contained in:
@@ -15,6 +15,10 @@
|
||||
//! `SM_SUCCESS`, else the `SmStatus`; `1007` for a Rust `InvalidInput`, `-1` for a Rust
|
||||
//! error upstream cannot produce) and the rest as the `out` values.
|
||||
//!
|
||||
//! `{"o", "x", "y", "scale"?, "repeat"?}` transforms (`gps` `xf`) are applied on both sides
|
||||
//! (`SmAxis2Placement::SetCanonical` + `SmCurve::Transform` / `Curve::transform`) before
|
||||
//! the op; `gps` `pts` are more points, each its own solve (`status_i` / `out_i`).
|
||||
//!
|
||||
//! Deferred cases (unit `curve.curve_p5`): `GlobalPointSolve` of the directed and
|
||||
//! projected operations (`SmCurve::LocalPropertyAnalysis`) and of minimise / intersect
|
||||
//! on curved B-splines (the cache's analytic conversion reaches `SmCurve::IsArc`), and
|
||||
@@ -106,6 +110,23 @@ fn one() -> f64 {
|
||||
1.0
|
||||
}
|
||||
|
||||
/// A transform applied to the curve before the op, `repeat` times
|
||||
/// (`SmAxis2Placement::SetCanonical(o, x, y)`, then `SmCurve::Transform` with `scale`).
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct XformIn {
|
||||
o: [f64; 3],
|
||||
x: [f64; 3],
|
||||
y: [f64; 3],
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
scale: Option<[f64; 3]>,
|
||||
#[serde(default = "one_u64")]
|
||||
repeat: u64,
|
||||
}
|
||||
|
||||
fn one_u64() -> u64 {
|
||||
1
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
enum CurveIn {
|
||||
@@ -186,6 +207,20 @@ fn push_vecs(v: &mut Vec<f64>, vecs: &[[f64; 3]]) {
|
||||
}
|
||||
}
|
||||
|
||||
/// The transforms block `nt (O X Y has_s S)*nt` (see the ffi module docs).
|
||||
fn push_xf(v: &mut Vec<f64>, xf: &[XformIn]) {
|
||||
v.push(xf.iter().map(|t| t.repeat).sum::<u64>() as f64);
|
||||
for t in xf {
|
||||
for _ in 0..t.repeat {
|
||||
v.extend_from_slice(&t.o);
|
||||
v.extend_from_slice(&t.x);
|
||||
v.extend_from_slice(&t.y);
|
||||
v.push(b(t.scale.is_some()));
|
||||
v.extend_from_slice(&t.scale.unwrap_or([1.0; 3]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn push_opt(v: &mut Vec<f64>, x: Option<f64>) {
|
||||
v.extend([b(x.is_some()), x.unwrap_or(0.0)]);
|
||||
}
|
||||
@@ -252,6 +287,18 @@ fn build(c: &CurveIn) -> Result<Curve, HarnessError> {
|
||||
}
|
||||
}
|
||||
|
||||
/// `c` transformed by `xf` in order (`Curve::transform`).
|
||||
fn apply_xf(k: &Kernel, c: &mut Curve, xf: &[XformIn]) -> Result<(), HarnessError> {
|
||||
for t in xf {
|
||||
let a2p = Axis2Placement::new(v3(t.o), v3(t.x), v3(t.y));
|
||||
for _ in 0..t.repeat {
|
||||
c.transform(k, &a2p, t.scale.map(v3))
|
||||
.map_err(|e| harness(format!("transform: {e}")))?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn pv(o: &mut Vec<f64>, v: Vec3) {
|
||||
o.extend([v.x, v.y, v.z]);
|
||||
}
|
||||
@@ -365,9 +412,15 @@ fn objs() -> [u64; 2] {
|
||||
enum OpIn {
|
||||
Gps {
|
||||
curve: CurveIn,
|
||||
/// Transforms applied to `curve` first.
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
xf: Vec<XformIn>,
|
||||
ivl: [f64; 2],
|
||||
sop: i32,
|
||||
p: [f64; 3],
|
||||
/// More points, each solved like `p` (as its own solve; outputs `*_i`).
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pts: Vec<[f64; 3]>,
|
||||
tol: f64,
|
||||
target: Option<f64>,
|
||||
vecs: Vec<[f64; 3]>,
|
||||
@@ -449,6 +502,7 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
match op {
|
||||
OpIn::Gps {
|
||||
curve,
|
||||
xf,
|
||||
ivl,
|
||||
sop,
|
||||
p,
|
||||
@@ -456,8 +510,10 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
target,
|
||||
vecs,
|
||||
req,
|
||||
..
|
||||
} => {
|
||||
curve_block(&mut v, curve)?;
|
||||
push_xf(&mut v, xf);
|
||||
v.extend([ivl[0], ivl[1], f64::from(*sop)]);
|
||||
v.extend_from_slice(p);
|
||||
v.push(*tol);
|
||||
@@ -537,7 +593,44 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
Ok((op_of(op), v))
|
||||
}
|
||||
|
||||
/// A `Gps` with extra points `pts`: one solve per point (`p` first) by `f`, point `i > 0`
|
||||
/// reported as `status_i` / `out_i`; deferred when any solve is. `None` for other cases.
|
||||
fn per_point(
|
||||
op: &OpIn,
|
||||
f: impl Fn(&OpIn) -> Result<Output, HarnessError>,
|
||||
) -> Result<Option<Output>, HarnessError> {
|
||||
let OpIn::Gps { p, pts, .. } = op else {
|
||||
return Ok(None);
|
||||
};
|
||||
if pts.is_empty() {
|
||||
return Ok(None);
|
||||
}
|
||||
let mut all = Output::new();
|
||||
for (i, q) in std::iter::once(p).chain(pts).enumerate() {
|
||||
let mut one = op.clone();
|
||||
if let OpIn::Gps { p, pts, .. } = &mut one {
|
||||
*p = *q;
|
||||
pts.clear();
|
||||
}
|
||||
let o = f(&one)?;
|
||||
if o.deferred.is_some() {
|
||||
return Ok(Some(o));
|
||||
}
|
||||
let sfx = if i == 0 { String::new() } else { format!("_{i}") };
|
||||
for (key, v) in o.ints {
|
||||
all.ints.insert(format!("{key}{sfx}"), v);
|
||||
}
|
||||
for (key, v) in o.values {
|
||||
all.values.insert(format!("{key}{sfx}"), v);
|
||||
}
|
||||
}
|
||||
Ok(Some(all))
|
||||
}
|
||||
|
||||
fn cpp(op: &OpIn) -> Result<Output, HarnessError> {
|
||||
if let Some(o) = per_point(op, cpp)? {
|
||||
return Ok(o);
|
||||
}
|
||||
let (code, input) = cpp_input(op)?;
|
||||
match ffi::eval(code, &input) {
|
||||
Ok(flat) => Ok(to_output(&flat)),
|
||||
@@ -636,11 +729,15 @@ fn solution_of(s: &SolIn) -> Solution<Obj> {
|
||||
}
|
||||
|
||||
fn rust(op: &OpIn) -> Result<Output, HarnessError> {
|
||||
if let Some(o) = per_point(op, rust)? {
|
||||
return Ok(o);
|
||||
}
|
||||
let k = Kernel::default();
|
||||
let mut o: Vec<f64> = Vec::new();
|
||||
match op {
|
||||
OpIn::Gps {
|
||||
curve,
|
||||
xf,
|
||||
ivl,
|
||||
sop,
|
||||
p,
|
||||
@@ -648,8 +745,10 @@ fn rust(op: &OpIn) -> Result<Output, HarnessError> {
|
||||
target,
|
||||
vecs,
|
||||
req,
|
||||
..
|
||||
} => {
|
||||
let c = build(curve)?;
|
||||
let mut c = build(curve)?;
|
||||
apply_xf(&k, &mut c, xf)?;
|
||||
let vs: Vec<Vec3> = vecs.iter().map(|x| v3(*x)).collect();
|
||||
let opts = GlobalPointSolveOptions {
|
||||
target_distance: *target,
|
||||
@@ -1140,9 +1239,11 @@ fn gen_gps(k: &Kernel, rng: &mut Rng) -> OpIn {
|
||||
.collect();
|
||||
OpIn::Gps {
|
||||
curve,
|
||||
xf: Vec::new(),
|
||||
ivl,
|
||||
sop,
|
||||
p,
|
||||
pts: Vec::new(),
|
||||
tol: *rng.choose(&[1e-5, 1e-6, 1e-3, 0.05]).unwrap_or(&1e-5),
|
||||
target,
|
||||
vecs,
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
//! Rust error upstream cannot produce) and the rest as the `out` values. Solution nodes
|
||||
//! are compared as pre-order indices in their trees.
|
||||
//!
|
||||
//! `{"o", "x", "y", "scale"?, "repeat"?}` transforms (`property` `xf`) are applied on both sides
|
||||
//! (`SmAxis2Placement::SetCanonical` + `SmCurve::Transform` / `Curve::transform`) before
|
||||
//! the op; a circle with `quintic` is `SM_CO_QUINTIC`.
|
||||
//!
|
||||
//! Deferred cases (unit `curve.curve_p5`): the leaf pairs that reach a Newton
|
||||
//! intersection (`LocalCurveIntersect`, through `SmCCIntersectENFO::Evaluate`) and the
|
||||
//! property solves that reach `SmCurve::LocalPropertyAnalysis` (every span the property
|
||||
@@ -91,6 +95,26 @@ struct CircleIn {
|
||||
radius: f64,
|
||||
a0: f64,
|
||||
a1: f64,
|
||||
/// `SM_CO_QUINTIC` (degree 5) instead of `SM_CO_QUADRATIC`.
|
||||
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
|
||||
quintic: bool,
|
||||
}
|
||||
|
||||
/// A transform applied to a curve before the op, `repeat` times
|
||||
/// (`SmAxis2Placement::SetCanonical(o, x, y)`, then `SmCurve::Transform` with `scale`).
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct XformIn {
|
||||
o: [f64; 3],
|
||||
x: [f64; 3],
|
||||
y: [f64; 3],
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
scale: Option<[f64; 3]>,
|
||||
#[serde(default = "one_u64")]
|
||||
repeat: u64,
|
||||
}
|
||||
|
||||
fn one_u64() -> u64 {
|
||||
1
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
@@ -162,6 +186,9 @@ enum OpIn {
|
||||
},
|
||||
Property {
|
||||
curve: CurveIn,
|
||||
/// Transforms applied to `curve` first.
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
xf: Vec<XformIn>,
|
||||
ivl: [f64; 2],
|
||||
prop: i32,
|
||||
val: f64,
|
||||
@@ -185,7 +212,11 @@ fn resolve(c: &CurveIn) -> Result<CurveIn, HarnessError> {
|
||||
ci.radius,
|
||||
ci.a0,
|
||||
ci.a1,
|
||||
solidcore::nurbs::b_spline_curve::NurbCircleParam::Quadratic,
|
||||
if ci.quintic {
|
||||
solidcore::nurbs::b_spline_curve::NurbCircleParam::Quintic
|
||||
} else {
|
||||
solidcore::nurbs::b_spline_curve::NurbCircleParam::Quadratic
|
||||
},
|
||||
)
|
||||
.map_err(|e| harness(format!("circle: {e}")))?;
|
||||
let cur = arc.gw_nurb().ok_or_else(|| harness("circle without NURB"))?;
|
||||
@@ -270,6 +301,7 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
}
|
||||
OpIn::Property {
|
||||
curve,
|
||||
xf,
|
||||
ivl,
|
||||
prop,
|
||||
val,
|
||||
@@ -278,6 +310,7 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
comb,
|
||||
} => {
|
||||
curve_block(&mut v, curve)?;
|
||||
push_xf(&mut v, xf);
|
||||
v.extend_from_slice(ivl);
|
||||
v.extend([f64::from(*prop), 1.0, *val]);
|
||||
push_vecs(&mut v, vecs);
|
||||
@@ -288,6 +321,20 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
Ok((code, v))
|
||||
}
|
||||
|
||||
/// The transforms block `nt (O X Y has_s S)*nt` (see the ffi module docs).
|
||||
fn push_xf(v: &mut Vec<f64>, xf: &[XformIn]) {
|
||||
v.push(xf.iter().map(|t| t.repeat).sum::<u64>() as f64);
|
||||
for t in xf {
|
||||
for _ in 0..t.repeat {
|
||||
v.extend_from_slice(&t.o);
|
||||
v.extend_from_slice(&t.x);
|
||||
v.extend_from_slice(&t.y);
|
||||
v.push(b(t.scale.is_some()));
|
||||
v.extend_from_slice(&t.scale.unwrap_or([1.0; 3]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn to_output(flat: &[f64]) -> Output {
|
||||
let status = flat.first().copied().unwrap_or(f64::NAN);
|
||||
let rest = flat.get(1..).unwrap_or(&[]).to_vec();
|
||||
@@ -310,6 +357,18 @@ fn v3(p: [f64; 3]) -> Vec3 {
|
||||
Vec3::from_array(p)
|
||||
}
|
||||
|
||||
/// `c` transformed by `xf` in order (`Curve::transform`).
|
||||
fn apply_xf(k: &Kernel, c: &mut Curve, xf: &[XformIn]) -> Result<(), HarnessError> {
|
||||
for t in xf {
|
||||
let a2p = Axis2Placement::new(v3(t.o), v3(t.x), v3(t.y));
|
||||
for _ in 0..t.repeat {
|
||||
c.transform(k, &a2p, t.scale.map(v3))
|
||||
.map_err(|e| harness(format!("transform: {e}")))?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn build(c: &CurveIn) -> Result<Curve, HarnessError> {
|
||||
match &resolve(c)? {
|
||||
CurveIn::Bspline(bs) => {
|
||||
@@ -615,6 +674,7 @@ fn rust(op: &OpIn) -> Result<Output, HarnessError> {
|
||||
OpIn::CciLocal { cci, leaf1, leaf2 } => rust_cci(cci, Some((*leaf1, *leaf2))),
|
||||
OpIn::Property {
|
||||
curve,
|
||||
xf,
|
||||
ivl,
|
||||
prop,
|
||||
val,
|
||||
@@ -623,7 +683,8 @@ fn rust(op: &OpIn) -> Result<Output, HarnessError> {
|
||||
comb,
|
||||
} => {
|
||||
let k = Kernel::default();
|
||||
let c = build(curve)?;
|
||||
let mut c = build(curve)?;
|
||||
apply_xf(&k, &mut c, xf)?;
|
||||
let prop = CurvePropertyType::from_code(*prop).ok_or_else(|| harness("property"))?;
|
||||
let vs: Vec<Vec3> = vecs.iter().map(|&x| v3(x)).collect();
|
||||
let opts = PropertyAnalysisOptions {
|
||||
@@ -779,6 +840,7 @@ fn gen_circle(rng: &mut Rng, closed: bool) -> CurveIn {
|
||||
} else {
|
||||
a0 + rng.uniform(30.0, 330.0)
|
||||
},
|
||||
quintic: false,
|
||||
});
|
||||
resolve(&c).unwrap_or(c)
|
||||
}
|
||||
@@ -1068,6 +1130,7 @@ fn gen_property(k: &Kernel, rng: &mut Rng) -> OpIn {
|
||||
OpIn::Property {
|
||||
ivl: gen_ivl(rng, &curve),
|
||||
curve,
|
||||
xf: Vec::new(),
|
||||
prop,
|
||||
val,
|
||||
vecs,
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
//! as the `out` values. Solution objects are `0` (this curve), `1` (the other curve), `2`
|
||||
//! (an analytic replacement made by a curve cache).
|
||||
//!
|
||||
//! `{"o", "x", "y", "scale"?, "repeat"?}` transforms (`gci` `xf1`, `xf2`) are applied on both sides
|
||||
//! (`SmAxis2Placement::SetCanonical` + `SmCurve::Transform` / `Curve::transform`) before
|
||||
//! the op; a circle with `quintic` is `SM_CO_QUINTIC`.
|
||||
//!
|
||||
//! Deferred cases (unit `curve.curve_p5`): the Newton curve/curve intersections of the
|
||||
//! leaf pair solves and of `sm_RefineCCSolutions` (`SmCCIntersectENFO::Evaluate`), the
|
||||
//! gap refinement and closed-curve recombination of the coincidence check, and the
|
||||
@@ -83,6 +87,26 @@ struct CircleIn {
|
||||
radius: f64,
|
||||
a0: f64,
|
||||
a1: f64,
|
||||
/// `SM_CO_QUINTIC` (degree 5) instead of `SM_CO_QUADRATIC`.
|
||||
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
|
||||
quintic: bool,
|
||||
}
|
||||
|
||||
/// A transform applied to a curve before the op, `repeat` times
|
||||
/// (`SmAxis2Placement::SetCanonical(o, x, y)`, then `SmCurve::Transform` with `scale`).
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct XformIn {
|
||||
o: [f64; 3],
|
||||
x: [f64; 3],
|
||||
y: [f64; 3],
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
scale: Option<[f64; 3]>,
|
||||
#[serde(default = "one_u64")]
|
||||
repeat: u64,
|
||||
}
|
||||
|
||||
fn one_u64() -> u64 {
|
||||
1
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
@@ -123,7 +147,11 @@ fn resolve(c: &CurveIn) -> Result<CurveIn, HarnessError> {
|
||||
ci.radius,
|
||||
ci.a0,
|
||||
ci.a1,
|
||||
solidcore::nurbs::b_spline_curve::NurbCircleParam::Quadratic,
|
||||
if ci.quintic {
|
||||
solidcore::nurbs::b_spline_curve::NurbCircleParam::Quintic
|
||||
} else {
|
||||
solidcore::nurbs::b_spline_curve::NurbCircleParam::Quadratic
|
||||
},
|
||||
)
|
||||
.map_err(|e| harness(format!("circle: {e}")))?;
|
||||
let cur = arc.gw_nurb().ok_or_else(|| harness("circle without NURB"))?;
|
||||
@@ -173,6 +201,21 @@ fn curve_block(v: &mut Vec<f64>, c: &CurveIn) -> Result<(), HarnessError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
/// The transforms block `nt (O X Y has_s S)*nt` (see the ffi module docs).
|
||||
fn push_xf(v: &mut Vec<f64>, xf: &[XformIn]) {
|
||||
v.push(xf.iter().map(|t| t.repeat).sum::<u64>() as f64);
|
||||
for t in xf {
|
||||
for _ in 0..t.repeat {
|
||||
v.extend_from_slice(&t.o);
|
||||
v.extend_from_slice(&t.x);
|
||||
v.extend_from_slice(&t.y);
|
||||
v.push(b(t.scale.is_some()));
|
||||
v.extend_from_slice(&t.scale.unwrap_or([1.0; 3]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn to_output(flat: &[f64]) -> Output {
|
||||
let status = flat.first().copied().unwrap_or(f64::NAN);
|
||||
let rest = flat.get(1..).unwrap_or(&[]).to_vec();
|
||||
@@ -201,6 +244,18 @@ fn build_line(l: &LineIn) -> Line {
|
||||
)
|
||||
}
|
||||
|
||||
/// `c` transformed by `xf` in order (`Curve::transform`).
|
||||
fn apply_xf(k: &Kernel, c: &mut Curve, xf: &[XformIn]) -> Result<(), HarnessError> {
|
||||
for t in xf {
|
||||
let a2p = Axis2Placement::new(v3(t.o), v3(t.x), v3(t.y));
|
||||
for _ in 0..t.repeat {
|
||||
c.transform(k, &a2p, t.scale.map(v3))
|
||||
.map_err(|e| harness(format!("transform: {e}")))?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn build(c: &CurveIn) -> Result<Curve, HarnessError> {
|
||||
match &resolve(c)? {
|
||||
CurveIn::Bspline(bs) => {
|
||||
@@ -437,6 +492,7 @@ fn gen_circle(rng: &mut Rng) -> CurveIn {
|
||||
radius: rng.uniform(0.5, 10.0),
|
||||
a0,
|
||||
a1: a0 + rng.uniform(20.0, 360.0),
|
||||
quintic: false,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -462,6 +518,7 @@ fn gen_closed_curve(rng: &mut Rng) -> CurveIn {
|
||||
radius: rng.uniform(0.5, 10.0),
|
||||
a0,
|
||||
a1: a0 + 360.0,
|
||||
quintic: false,
|
||||
});
|
||||
resolve(&c).unwrap_or(c)
|
||||
}
|
||||
@@ -637,9 +694,15 @@ fn gen_tol(rng: &mut Rng) -> f64 {
|
||||
enum OpIn {
|
||||
Gci {
|
||||
c1: CurveIn,
|
||||
/// Transforms applied to `c1` first.
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
xf1: Vec<XformIn>,
|
||||
ivl1: [f64; 2],
|
||||
/// `None`: the other curve is `c1` itself (a self intersection).
|
||||
c2: Option<CurveIn>,
|
||||
/// Transforms applied to `c2` first (none for a self intersection).
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
xf2: Vec<XformIn>,
|
||||
ivl2: [f64; 2],
|
||||
tol: f64,
|
||||
#[serde(default)]
|
||||
@@ -652,17 +715,21 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
match op {
|
||||
OpIn::Gci {
|
||||
c1,
|
||||
xf1,
|
||||
ivl1,
|
||||
c2,
|
||||
xf2,
|
||||
ivl2,
|
||||
tol,
|
||||
skip,
|
||||
} => {
|
||||
curve_block(&mut v, c1)?;
|
||||
push_xf(&mut v, xf1);
|
||||
v.extend_from_slice(ivl1);
|
||||
v.push(b(c2.is_none()));
|
||||
if let Some(c2) = c2 {
|
||||
curve_block(&mut v, c2)?;
|
||||
push_xf(&mut v, xf2);
|
||||
}
|
||||
v.extend_from_slice(ivl2);
|
||||
v.extend([*tol, b(*skip)]);
|
||||
@@ -690,15 +757,22 @@ fn rust(op: &OpIn) -> Result<Output, HarnessError> {
|
||||
match op {
|
||||
OpIn::Gci {
|
||||
c1,
|
||||
xf1,
|
||||
ivl1,
|
||||
c2,
|
||||
xf2,
|
||||
ivl2,
|
||||
tol,
|
||||
skip,
|
||||
} => {
|
||||
let a = build(c1)?;
|
||||
let mut a = build(c1)?;
|
||||
apply_xf(&k, &mut a, xf1)?;
|
||||
let other = match c2 {
|
||||
Some(c) => Some(build(c)?),
|
||||
Some(c) => {
|
||||
let mut o = build(c)?;
|
||||
apply_xf(&k, &mut o, xf2)?;
|
||||
Some(o)
|
||||
}
|
||||
None => None,
|
||||
};
|
||||
let bb = other.as_ref().unwrap_or(&a);
|
||||
@@ -830,8 +904,10 @@ fn gen_case(k: &Kernel, rng: &mut Rng) -> OpIn {
|
||||
};
|
||||
OpIn::Gci {
|
||||
c1,
|
||||
xf1: Vec::new(),
|
||||
ivl1,
|
||||
c2,
|
||||
xf2: Vec::new(),
|
||||
ivl2,
|
||||
tol: gen_tol(rng),
|
||||
skip: rng.chance(0.15),
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
//! inside_out}}` (domain in degrees), as in unit
|
||||
//! `curve.curve_p8`): `gcs` (`GlobalCurveSolve`: `c2: null` solves the first curve
|
||||
//! against itself; `sop` the `SmSolverOperationType`, `target` the optional target
|
||||
//! distance, `vecs` the option vectors, `requested` the `SmSolutionRequestedType`),
|
||||
//! distance, `vecs` the option vectors, `requested` the `SmSolutionRequestedType`,
|
||||
//! optional `transform1` an `[origin, x, y]` placement `c1` is `Transform`ed by first),
|
||||
//! `self_intersect`, `tight_box`, `tight_pseudo_box` (`basis`), `on_plane` (`p`, `n`,
|
||||
//! `tol`, optional `ivl`) and `positive_side` (`planes`: point and normal pairs). Both
|
||||
//! sides produce the flat record documented in the ffi module; the runner reports its
|
||||
@@ -751,6 +752,11 @@ enum OpIn {
|
||||
/// The `SmSolutionRequestedType` value.
|
||||
#[serde(default = "one_i")]
|
||||
requested: i32,
|
||||
/// Optional `[origin, x, y]` of an `SmAxis2Placement` (`SetCanonical`, status
|
||||
/// ignored) that `c1` is `Transform`ed by before the solve (as in the upstream
|
||||
/// tests that move a curve).
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
transform1: Option<[[f64; 3]; 3]>,
|
||||
},
|
||||
SelfIntersect {
|
||||
c: CurveIn,
|
||||
@@ -794,6 +800,7 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
target,
|
||||
vecs,
|
||||
requested,
|
||||
transform1,
|
||||
} => {
|
||||
curve_block(&mut v, c1)?;
|
||||
v.extend_from_slice(ivl1);
|
||||
@@ -813,6 +820,10 @@ fn cpp_input(op: &OpIn) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
v.extend_from_slice(x);
|
||||
}
|
||||
v.push(f64::from(*requested));
|
||||
v.push(b(transform1.is_some()));
|
||||
for x in transform1.iter().flatten() {
|
||||
v.extend_from_slice(x);
|
||||
}
|
||||
Op::Gcs
|
||||
}
|
||||
OpIn::SelfIntersect { c, ivl, tol } => {
|
||||
@@ -883,8 +894,13 @@ fn rust(op: &OpIn) -> Result<Output, HarnessError> {
|
||||
target,
|
||||
vecs,
|
||||
requested,
|
||||
transform1,
|
||||
} => {
|
||||
let a = build(c1)?;
|
||||
let mut a = build(c1)?;
|
||||
if let Some([org, x, y]) = transform1 {
|
||||
let frame = Axis2Placement::new(v3(*org), v3(*x), v3(*y));
|
||||
tri!(o, a.transform(&k, &frame, None));
|
||||
}
|
||||
let other = match c2 {
|
||||
Some(c) => Some(build(c)?),
|
||||
None => None,
|
||||
@@ -1282,6 +1298,7 @@ fn gen_gcs(k: &Kernel, rng: &mut Rng) -> OpIn {
|
||||
target,
|
||||
vecs,
|
||||
requested: i32::from(!rng.chance(0.3)),
|
||||
transform1: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
//! on both sides (the Rust side applies the same predicate with its own evaluations).
|
||||
//!
|
||||
//! Deferred cases: `TestSpanAccuracy` spans that reach `smsurf_IsPointOnNormal`
|
||||
//! Curves and surfaces may be upstream `.dat` files (database version 30), read on the
|
||||
//! C++ side by `SmBSplineCurve::ReadFromFile` / `SmBSplineSurface::ReadFromFile` and on
|
||||
//! the Rust side by the same steps (`read_file_db`, then `ReadFromDB`); a `Trim` case
|
||||
//! without a domain or interval uses the natural ones, as upstream's `prog_test` does.
|
||||
//!
|
||||
//! Deferred cases: `TestSpanAccuracy` spans that reach `smsurf_IsPointOnNormal`
|
||||
//! (`surface.surface_p3`), every `DropAndTrimCurve` (`SmSurfaceDropCurve::DoTrace`,
|
||||
//! `intersect.surface_drop_curve`), and surface evaluations of kinds whose evaluators are
|
||||
//! not ported yet.
|
||||
@@ -24,6 +30,7 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Value;
|
||||
|
||||
use solidcore::curve::curve::p2::BSPLINE_CURVE_TYPE;
|
||||
use solidcore::curve::curve::Curve;
|
||||
use solidcore::curve::ellipse::{Ellipse, EllipseOptions};
|
||||
use solidcore::curve::hermite_curve::HermiteCurve;
|
||||
@@ -46,7 +53,9 @@ use solidcore::nurbs::math::{CPoint, NOW};
|
||||
use solidcore::nurbs::srf_basic::Surface as NurbSurface;
|
||||
use solidcore::surface::plane::Plane;
|
||||
use solidcore::surface::surf_of_revolution::SurfOfRevolution;
|
||||
use solidcore::surface::surface::p2::B_SPLINE_SURFACE_TYPE;
|
||||
use solidcore::surface::surface::Surface;
|
||||
use solidcore::topology::database_io::{DatabaseReader, FileType};
|
||||
use solidcore::topology::ObjectHandle;
|
||||
use solidcore::SolidError;
|
||||
use solidcore_ffi::units::intersect_surface_drop_lib_p1 as ffi;
|
||||
@@ -86,6 +95,10 @@ enum CurveIn {
|
||||
cpts: Vec<[f64; 4]>,
|
||||
knots: Vec<f64>,
|
||||
},
|
||||
/// An upstream `.dat` file read as `SmBSplineCurve::ReadFromFile` does.
|
||||
File {
|
||||
file: String,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
@@ -111,6 +124,10 @@ enum SurfIn {
|
||||
axis: [f64; 3],
|
||||
swap: bool,
|
||||
},
|
||||
/// An upstream `.dat` file read as `SmBSplineSurface::ReadFromFile` does.
|
||||
File {
|
||||
file: String,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
@@ -193,8 +210,12 @@ enum Inputs {
|
||||
Trim {
|
||||
surface: SurfIn,
|
||||
curve: CurveIn,
|
||||
domain: [f64; 4],
|
||||
interval: [f64; 2],
|
||||
/// `None`: the surface's natural UV domain.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
domain: Option<[f64; 4]>,
|
||||
/// `None`: the curve's natural interval.
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
interval: Option<[f64; 2]>,
|
||||
tol: f64,
|
||||
keep_all: bool,
|
||||
on_surface: bool,
|
||||
@@ -218,6 +239,7 @@ fn ffi_curve(c: &CurveIn) -> ffi::CurveIn {
|
||||
cpts: cpts.clone(),
|
||||
knots: knots.clone(),
|
||||
},
|
||||
CurveIn::File { file } => ffi::CurveIn::File { path: file.clone() },
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,6 +265,7 @@ fn ffi_surface(s: &SurfIn) -> ffi::SurfaceIn {
|
||||
u: u.clone(),
|
||||
v: v.clone(),
|
||||
},
|
||||
SurfIn::File { file } => ffi::SurfaceIn::File { path: file.clone() },
|
||||
SurfIn::Revolution {
|
||||
gen,
|
||||
point,
|
||||
@@ -474,9 +497,36 @@ fn rust_curve(k: &Kernel, c: &CurveIn) -> Result<Curve, HarnessError> {
|
||||
.map_err(|e| harness(format!("curve: {e}")))?;
|
||||
Ok(Curve::from(BSplineCurve::from_nurb(cur, 3, false)))
|
||||
}
|
||||
CurveIn::File { file } => {
|
||||
let mut db = read_file_db(file, b'C')?;
|
||||
Curve::read_from_db(k, BSPLINE_CURVE_TYPE, &mut db, 3, 30)
|
||||
.map_err(|e| harness(format!("{file}: {e}")))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The ASCII database stream `SmCurve::ReadFromFile` / `SmSurface::ReadFromFile` read
|
||||
/// `path` from, for a file without an `Object` header (database version 30): a leading
|
||||
/// line feed is skipped, and a first line starting with `header` (`C` / `S`) too.
|
||||
fn read_file_db(path: &str, header: u8) -> Result<DatabaseReader, HarnessError> {
|
||||
let bytes = std::fs::read(path).map_err(|e| harness(format!("{path}: {e}")))?;
|
||||
let mut rest: &[u8] = &bytes;
|
||||
if let Some((b'\n', tail)) = rest.split_first() {
|
||||
rest = tail;
|
||||
}
|
||||
match rest.first() {
|
||||
Some(b'O') => return Err(harness(format!("{path}: versioned file not supported"))),
|
||||
Some(&c) if c == header => {
|
||||
let at = rest.iter().position(|&b| b == b'\n').map_or(rest.len(), |p| p + 1);
|
||||
rest = rest.get(at..).unwrap_or(&[]);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
let mut db = DatabaseReader::new();
|
||||
db.open_for_read(rest.to_vec(), FileType::Ascii);
|
||||
Ok(db)
|
||||
}
|
||||
|
||||
/// The surface; `Ok(None)` when a surface of revolution cannot be made.
|
||||
fn rust_surface(k: &Kernel, s: &SurfIn) -> Result<Option<Surface>, HarnessError> {
|
||||
Ok(match s {
|
||||
@@ -513,6 +563,13 @@ fn rust_surface(k: &Kernel, s: &SurfIn) -> Result<Option<Surface>, HarnessError>
|
||||
.ok()
|
||||
.map(Surface::from)
|
||||
}
|
||||
SurfIn::File { file } => {
|
||||
let mut db = read_file_db(file, b'S')?;
|
||||
Some(
|
||||
Surface::read_from_db(k, B_SPLINE_SURFACE_TYPE, &mut db, 30)
|
||||
.map_err(|e| harness(format!("{file}: {e}")))?,
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -897,11 +954,16 @@ fn run_op(k: &Kernel, i: &Inputs, o: &mut Vec<f64>) -> Result<(), Fail> {
|
||||
return Ok(());
|
||||
};
|
||||
let c = rust_curve(k, curve)?;
|
||||
let dom = domain.map_or_else(|| s.natural_uv_domain(), ext);
|
||||
let ivl = interval.map_or_else(
|
||||
|| c.natural_interval(),
|
||||
|i| Extent1d::from_min_max(i[0], i[1]),
|
||||
);
|
||||
let r = s.drop_and_trim_curve::<ObjectHandle>(
|
||||
k,
|
||||
&ext(*domain),
|
||||
&dom,
|
||||
&c,
|
||||
&Extent1d::from_min_max(interval[0], interval[1]),
|
||||
&ivl,
|
||||
*tol,
|
||||
*keep_all,
|
||||
*on_surface,
|
||||
@@ -1604,8 +1666,8 @@ fn gen_trim(rng: &mut Rng, k: &Kernel) -> Option<Inputs> {
|
||||
Some(Inputs::Trim {
|
||||
surface,
|
||||
curve: CurveIn::Line { a: pa, b: pb },
|
||||
domain: nat,
|
||||
interval: [0.0, 1.0],
|
||||
domain: Some(nat),
|
||||
interval: Some([0.0, 1.0]),
|
||||
tol: 1.0e-6,
|
||||
keep_all: rng.chance(0.5),
|
||||
on_surface: rng.chance(0.5),
|
||||
|
||||
@@ -4,24 +4,41 @@
|
||||
//! plane normal, a previous point and boundary testing. Cases whose C++ path reaches
|
||||
//! `sm_IntersectSrfBndryCrv` (`surface.surface_p8`) or `LocalSurfaceSolve`
|
||||
//! (`surface.surface_p3`) are deferred.
|
||||
//!
|
||||
//! Op 2 is `SmSurface::LiftCurve` (`SmSurface.cpp:24054`): a UV curve (an upstream
|
||||
//! `.dat` file read as `SmBSplineCurve::ReadFromFile` does, or an inline 2D B-spline)
|
||||
//! lifted onto a surface (a file read as `SmBSplineSurface::ReadFromFile` does, or a
|
||||
//! patch / plane as above) over its natural or a given domain and interval; the
|
||||
//! status, `rdMaxDistToSurf` and the whole lifted curve are compared.
|
||||
use crate::{Case, CaseContext, HarnessError, Output, Rng, UnitDiff};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Value;
|
||||
use solidcore::curve::curve::p2::BSPLINE_CURVE_TYPE;
|
||||
use solidcore::curve::curve::{Curve, CurveKind};
|
||||
use solidcore::geom::extent1d::Extent1d;
|
||||
use solidcore::geom::extent2d::Extent2d;
|
||||
use solidcore::geom::vector2d::{Point2, Vec2};
|
||||
use solidcore::geom::vector3d::Vec3;
|
||||
use solidcore::kernel::Kernel;
|
||||
use solidcore::nurbs::b_spline_curve::BSplineCurve;
|
||||
use solidcore::nurbs::b_spline_surface::BSplineSurface;
|
||||
use solidcore::nurbs::math::{CPoint, NOW};
|
||||
use solidcore::nurbs::crv_basic::Curve as NlCurve;
|
||||
use solidcore::nurbs::math::{CPoint, NOW, NOZ};
|
||||
use solidcore::nurbs::srf_basic::Surface as NlSurface;
|
||||
use solidcore::surface::plane::Plane;
|
||||
use solidcore::surface::surface::p11::LocalSurfaceIntersectOptions;
|
||||
use solidcore::surface::surface::p2::B_SPLINE_SURFACE_TYPE;
|
||||
use solidcore::surface::surface::Surface;
|
||||
use solidcore::topology::database_io::{DatabaseReader, FileType};
|
||||
use solidcore_ffi::units::surface_surface_p11 as ffi;
|
||||
|
||||
/// Differential runner for `LocalSurfaceIntersect`.
|
||||
pub struct Runner;
|
||||
|
||||
/// Generated `LiftCurve` cases per run, whatever `--seeds` says (it can only raise
|
||||
/// this).
|
||||
pub const LIFT_CASES: usize = 200;
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct SurfaceIn {
|
||||
/// 0: biquadratic Bezier patch; 1: plane (origin, x axis, y axis in `net[0..3]`).
|
||||
@@ -47,6 +64,56 @@ struct Inputs {
|
||||
boundary_testing: bool,
|
||||
}
|
||||
|
||||
/// Just the op of a case.
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct OpOnly {
|
||||
#[serde(default)]
|
||||
op: i32,
|
||||
}
|
||||
|
||||
/// The surface of a `LiftCurve` case.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(untagged)]
|
||||
enum LiftSurfaceIn {
|
||||
/// An upstream `.dat` B-spline surface file (`SmBSplineSurface::ReadFromFile`); the
|
||||
/// domain is its natural one unless given.
|
||||
File {
|
||||
file: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
domain: Option<[f64; 4]>,
|
||||
},
|
||||
/// A patch or plane; its `domain` is the `LiftCurve` domain.
|
||||
Inline(SurfaceIn),
|
||||
}
|
||||
|
||||
/// The UV curve of a `LiftCurve` case.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(untagged)]
|
||||
enum LiftCurveIn {
|
||||
/// An upstream `.dat` B-spline curve file (`SmBSplineCurve::ReadFromFile`).
|
||||
File { file: String },
|
||||
/// A non-rational 2D B-spline.
|
||||
Inline {
|
||||
degree: i64,
|
||||
cpts: Vec<[f64; 2]>,
|
||||
knots: Vec<f64>,
|
||||
},
|
||||
}
|
||||
|
||||
/// Op 2: `surface.LiftCurve(ctx, domain, curve, interval, tol, max_dist, lifted,
|
||||
/// skip_continuity_checks)`; the interval is the curve's natural one unless given.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct LiftInputs {
|
||||
op: i32,
|
||||
surface: LiftSurfaceIn,
|
||||
curve: LiftCurveIn,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
interval: Option<[f64; 2]>,
|
||||
tol: f64,
|
||||
#[serde(default)]
|
||||
skip_continuity_checks: bool,
|
||||
}
|
||||
|
||||
fn harness(e: impl std::fmt::Display) -> HarnessError {
|
||||
HarnessError::new(e.to_string())
|
||||
}
|
||||
@@ -150,6 +217,150 @@ fn run_rust_isb(i: &Inputs) -> Result<Output, HarnessError> {
|
||||
})
|
||||
}
|
||||
|
||||
/// The ASCII database stream `SmCurve::ReadFromFile` / `SmSurface::ReadFromFile` read
|
||||
/// `path` from, for a file without an `Object` header (database version 30): a leading
|
||||
/// line feed is skipped, and a first line starting with `header` (`C` / `S`) too.
|
||||
fn read_file_db(path: &str, header: u8) -> Result<DatabaseReader, HarnessError> {
|
||||
let bytes = std::fs::read(path).map_err(|e| harness(format!("{path}: {e}")))?;
|
||||
let mut rest: &[u8] = &bytes;
|
||||
if let Some((b'\n', tail)) = rest.split_first() {
|
||||
rest = tail;
|
||||
}
|
||||
match rest.first() {
|
||||
Some(b'O') => return Err(harness(format!("{path}: versioned file not supported"))),
|
||||
Some(&c) if c == header => {
|
||||
let at = rest.iter().position(|&b| b == b'\n').map_or(rest.len(), |p| p + 1);
|
||||
rest = rest.get(at..).unwrap_or(&[]);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
let mut db = DatabaseReader::new();
|
||||
db.open_for_read(rest.to_vec(), FileType::Ascii);
|
||||
Ok(db)
|
||||
}
|
||||
|
||||
/// The `SmBSplineCurve` part of a lifted curve, with its NURB.
|
||||
fn bspline_part(c: &Curve) -> Result<std::borrow::Cow<'_, BSplineCurve>, HarnessError> {
|
||||
use std::borrow::Cow;
|
||||
match c.kind() {
|
||||
CurveKind::BSpline(b) => Ok(Cow::Borrowed(b)),
|
||||
CurveKind::Line(l) => l.base_with_nurb().map_err(harness),
|
||||
CurveKind::Ellipse(e) => Ok(Cow::Borrowed(e.base())),
|
||||
CurveKind::Hyperbola(h) => Ok(Cow::Borrowed(h.base())),
|
||||
CurveKind::Parabola(p) => Ok(Cow::Borrowed(p.base())),
|
||||
_ => Err(harness("lifted curve is not an SmBSplineCurve")),
|
||||
}
|
||||
}
|
||||
|
||||
/// `[status, max_dist, type, dim, degree, ncp, cpts (x y z w), nknots, knots, mults,
|
||||
/// interval min, max]` as an output.
|
||||
fn lift_output(flat: &[f64]) -> Output {
|
||||
match flat {
|
||||
[status, ..] if *status != 0.0 => Output::err("LiftCurve failed"),
|
||||
[_, max_dist, ty, dim, rest @ ..] => Output::new()
|
||||
.scalar("max_dist", *max_dist)
|
||||
.int("type", *ty as i64)
|
||||
.int("dim", *dim as i64)
|
||||
.values("curve", rest.to_vec()),
|
||||
_ => Output::err("short output"),
|
||||
}
|
||||
}
|
||||
|
||||
fn lift_flat(c: &Curve, max_dist: f64) -> solidcore::Result<Vec<f64>> {
|
||||
let b = bspline_part(c).map_err(|_| solidcore::SolidError::sm_err("difftest::lift"))?;
|
||||
let mut o = vec![0.0, max_dist, c.type_code() as f64, c.dim() as f64];
|
||||
o.push(b.degree()? as f64);
|
||||
let cp = b.control_points()?;
|
||||
o.push(cp.len() as f64);
|
||||
for p in cp {
|
||||
o.extend([p.x, p.y, p.z, p.w]);
|
||||
}
|
||||
let (k, m) = c.knots(None)?;
|
||||
o.push(k.len() as f64);
|
||||
o.extend_from_slice(&k);
|
||||
o.extend(m.iter().map(|&x| x as f64));
|
||||
let ivl = c.natural_interval();
|
||||
o.extend([ivl.min(), ivl.max()]);
|
||||
Ok(o)
|
||||
}
|
||||
|
||||
fn run_rust_lift(i: &LiftInputs) -> Result<Output, HarnessError> {
|
||||
let k = Kernel::default();
|
||||
let (s, dom) = match &i.surface {
|
||||
LiftSurfaceIn::File { file, domain } => {
|
||||
let mut db = read_file_db(file, b'S')?;
|
||||
let s = Surface::read_from_db(&k, B_SPLINE_SURFACE_TYPE, &mut db, 30)
|
||||
.map_err(|e| harness(format!("{file}: {e}")))?;
|
||||
let d = domain.map_or_else(|| s.natural_uv_domain(), domain_of);
|
||||
(s, d)
|
||||
}
|
||||
LiftSurfaceIn::Inline(si) => (surface(si)?, domain(si.domain)),
|
||||
};
|
||||
let c = match &i.curve {
|
||||
LiftCurveIn::File { file } => {
|
||||
let mut db = read_file_db(file, b'C')?;
|
||||
Curve::read_from_db(&k, BSPLINE_CURVE_TYPE, &mut db, 3, 30)
|
||||
.map_err(|e| harness(format!("{file}: {e}")))?
|
||||
}
|
||||
LiftCurveIn::Inline {
|
||||
degree,
|
||||
cpts,
|
||||
knots,
|
||||
} => {
|
||||
let p = usize::try_from(*degree).map_err(harness)?;
|
||||
let pw = cpts.iter().map(|c| CPoint::new(c[0], c[1], NOZ, NOW)).collect();
|
||||
let cur = NlCurve::new(pw, p, knots.clone()).map_err(harness)?;
|
||||
Curve::from(BSplineCurve::from_nurb(cur, 2, false))
|
||||
}
|
||||
};
|
||||
let ivl = i
|
||||
.interval
|
||||
.map_or_else(|| c.natural_interval(), |v| Extent1d::from_min_max(v[0], v[1]));
|
||||
let r = s
|
||||
.lift_curve(&k, &dom, &c, &ivl, i.tol, i.skip_continuity_checks)
|
||||
.and_then(|l| lift_flat(&l.curve, l.max_approx_dev));
|
||||
Ok(match r {
|
||||
Ok(flat) => lift_output(&flat),
|
||||
Err(e) => Output::unported(&e).unwrap_or_else(|| lift_output(&[1.0])),
|
||||
})
|
||||
}
|
||||
|
||||
fn domain_of(d: [f64; 4]) -> Extent2d {
|
||||
domain(d)
|
||||
}
|
||||
|
||||
fn run_cpp_lift(i: &LiftInputs) -> Result<Output, HarnessError> {
|
||||
let (surface, dom) = match &i.surface {
|
||||
LiftSurfaceIn::File { file, domain } => (ffi::LiftSurface::File(file.clone()), *domain),
|
||||
LiftSurfaceIn::Inline(s) => (
|
||||
ffi::LiftSurface::Inline(Box::new(ffi_surface(s))),
|
||||
Some(s.domain),
|
||||
),
|
||||
};
|
||||
let curve = match &i.curve {
|
||||
LiftCurveIn::File { file } => ffi::LiftUvCurve::File(file.clone()),
|
||||
LiftCurveIn::Inline {
|
||||
degree,
|
||||
cpts,
|
||||
knots,
|
||||
} => ffi::LiftUvCurve::Inline {
|
||||
degree: *degree,
|
||||
cpts: cpts.clone(),
|
||||
knots: knots.clone(),
|
||||
},
|
||||
};
|
||||
let flat = ffi::lift_curve(
|
||||
&surface,
|
||||
dom,
|
||||
&curve,
|
||||
i.interval,
|
||||
i.tol,
|
||||
i.skip_continuity_checks,
|
||||
)
|
||||
.map_err(harness)?;
|
||||
Ok(lift_output(&flat))
|
||||
}
|
||||
|
||||
fn run_rust(i: &Inputs) -> Result<Output, HarnessError> {
|
||||
let k = Kernel::default();
|
||||
if i.op == 1 {
|
||||
@@ -240,14 +451,29 @@ impl UnitDiff for Runner {
|
||||
}
|
||||
|
||||
fn cases(&self, ctx: &CaseContext) -> Result<Vec<Case>, HarnessError> {
|
||||
let ctx = CaseContext {
|
||||
let main = CaseContext {
|
||||
seeds: ctx.seeds.max(600),
|
||||
..ctx.clone()
|
||||
};
|
||||
crate::runner::default_cases(self, &ctx)
|
||||
let mut v = crate::runner::default_cases(self, &main)?;
|
||||
// LiftCurve cases: their own seed stream (`<unit>:lift`), so the other ops'
|
||||
// generated cases are unchanged; named `liftNNNN`.
|
||||
let lift = CaseContext {
|
||||
seeds: ctx.seeds.max(LIFT_CASES),
|
||||
..ctx.clone()
|
||||
};
|
||||
for mut c in lift.generated_cases("surface.surface_p11:lift", generate_lift) {
|
||||
c.name = c.name.replacen("gen", "lift", 1);
|
||||
c.unit = self.id().to_string();
|
||||
v.push(c);
|
||||
}
|
||||
Ok(v)
|
||||
}
|
||||
|
||||
fn run_cpp(&self, case: &Case) -> Result<Output, HarnessError> {
|
||||
if case.parse::<OpOnly>()?.op == 2 {
|
||||
return run_cpp_lift(&case.parse()?);
|
||||
}
|
||||
let i: Inputs = case.parse()?;
|
||||
if i.op == 1 {
|
||||
let flat =
|
||||
@@ -269,6 +495,9 @@ impl UnitDiff for Runner {
|
||||
}
|
||||
|
||||
fn run_rust(&self, case: &Case) -> Result<Output, HarnessError> {
|
||||
if case.parse::<OpOnly>()?.op == 2 {
|
||||
return run_rust_lift(&case.parse()?);
|
||||
}
|
||||
run_rust(&case.parse()?)
|
||||
}
|
||||
|
||||
@@ -276,6 +505,7 @@ impl UnitDiff for Runner {
|
||||
if rng.chance(0.2) {
|
||||
return generate_isb(rng);
|
||||
}
|
||||
|
||||
let tiny = rng.chance(0.1);
|
||||
let huge = !tiny && rng.chance(0.1);
|
||||
let (lo, hi) = if tiny {
|
||||
@@ -469,3 +699,107 @@ fn generate_isb(rng: &mut Rng) -> Option<Value> {
|
||||
})
|
||||
.ok()
|
||||
}
|
||||
|
||||
/// A `LiftCurve` case: a 2D B-spline UV curve (an iso line, possibly on the domain
|
||||
/// boundary, a line segment or a random curve inside the domain) lifted onto a patch
|
||||
/// over its natural domain or a sub-domain, over the curve's natural interval or a
|
||||
/// sub-interval.
|
||||
fn generate_lift(rng: &mut Rng) -> Option<Value> {
|
||||
let scale = match rng.below(10) {
|
||||
0 => rng.uniform(1e-4, 1e-2),
|
||||
1 => rng.uniform(100.0, 1000.0),
|
||||
_ => rng.uniform(0.5, 3.0),
|
||||
};
|
||||
let height = scale * rng.uniform(0.0, 0.6);
|
||||
// patches only: a plane defers on curve.crv_on_surf (SmCrvOnSurf over a non-B-spline
|
||||
// surface, unported) and would keep this green unit partial; the runner and FFI
|
||||
// still take planes (`kind` 1)
|
||||
let (kind, net) = (0, patch(rng, scale, height));
|
||||
let dom = sub_domain(rng);
|
||||
let degree = 1 + rng.below(3) as i64;
|
||||
let ncp = degree as usize + 1 + rng.below(4) as usize;
|
||||
let at = |rng: &mut Rng, lo: f64, hi: f64| lo + (hi - lo) * rng.unit();
|
||||
let cpts: Vec<[f64; 2]> = match rng.below(4) {
|
||||
// an iso line (u or v constant), on the boundary half of the time
|
||||
0 => {
|
||||
let along_v = rng.chance(0.5);
|
||||
let (lo, hi) = if along_v { (dom[0], dom[2]) } else { (dom[1], dom[3]) };
|
||||
let c = if rng.chance(0.5) {
|
||||
if rng.chance(0.5) {
|
||||
lo
|
||||
} else {
|
||||
hi
|
||||
}
|
||||
} else {
|
||||
at(rng, lo, hi)
|
||||
};
|
||||
let (a, b) = if along_v { (dom[1], dom[3]) } else { (dom[0], dom[2]) };
|
||||
let (s0, s1) = (at(rng, a, a + 0.3 * (b - a)), at(rng, b - 0.3 * (b - a), b));
|
||||
(0..ncp)
|
||||
.map(|j| {
|
||||
let t = s0 + (s1 - s0) * j as f64 / (ncp - 1) as f64;
|
||||
if along_v {
|
||||
[c, t]
|
||||
} else {
|
||||
[t, c]
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
// a straight segment
|
||||
1 => {
|
||||
let p0 = [at(rng, dom[0], dom[2]), at(rng, dom[1], dom[3])];
|
||||
let p1 = [at(rng, dom[0], dom[2]), at(rng, dom[1], dom[3])];
|
||||
(0..ncp)
|
||||
.map(|j| {
|
||||
let t = j as f64 / (ncp - 1) as f64;
|
||||
[p0[0] + (p1[0] - p0[0]) * t, p0[1] + (p1[1] - p0[1]) * t]
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
// a random curve inside the domain
|
||||
_ => (0..ncp)
|
||||
.map(|_| [at(rng, dom[0], dom[2]), at(rng, dom[1], dom[3])])
|
||||
.collect(),
|
||||
};
|
||||
let (k0, k1) = if rng.chance(0.3) {
|
||||
let a = rng.uniform(-5.0, 5.0);
|
||||
(a, a + rng.uniform(0.1, 10.0))
|
||||
} else {
|
||||
(0.0, 1.0)
|
||||
};
|
||||
let p = degree as usize;
|
||||
let mut inner: Vec<f64> = (0..ncp - p - 1).map(|_| at(rng, k0, k1)).collect();
|
||||
inner.sort_by(f64::total_cmp);
|
||||
let mut knots = vec![k0; p + 1];
|
||||
knots.extend(inner);
|
||||
knots.extend(vec![k1; p + 1]);
|
||||
let interval = rng.chance(0.35).then(|| {
|
||||
let a = at(rng, k0, k0 + 0.4 * (k1 - k0));
|
||||
[a, at(rng, a + 0.1 * (k1 - k0), k1)]
|
||||
});
|
||||
let tol = scale
|
||||
* match rng.below(4) {
|
||||
0 => 1e-2,
|
||||
1 => 1e-4,
|
||||
2 => 1e-6,
|
||||
_ => rng.uniform(1e-5, 1e-1),
|
||||
};
|
||||
serde_json::to_value(LiftInputs {
|
||||
op: 2,
|
||||
surface: LiftSurfaceIn::Inline(SurfaceIn {
|
||||
kind,
|
||||
net,
|
||||
domain: if kind == 1 { [0.0, 0.0, 1.0, 1.0] } else { dom },
|
||||
}),
|
||||
curve: LiftCurveIn::Inline {
|
||||
degree,
|
||||
cpts,
|
||||
knots,
|
||||
},
|
||||
interval,
|
||||
tol,
|
||||
skip_continuity_checks: rng.chance(0.2),
|
||||
})
|
||||
.ok()
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Value;
|
||||
|
||||
use solidcore::curve::curve::Curve as SmCurve;
|
||||
use solidcore::curve::curve::{Curve as SmCurve, CurveKind};
|
||||
use solidcore::curve::line::{BoundedLineOptions, Line};
|
||||
use solidcore::geom::a_object;
|
||||
use solidcore::geom::assert_array::{AssertArray, ObjectKey};
|
||||
@@ -222,6 +222,12 @@ enum OpIn {
|
||||
dom: [f64; 4],
|
||||
other: BssIn,
|
||||
other_dom: [f64; 4],
|
||||
/// `pOptApproxTol3d` (`None`: upstream's default).
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
tol: Option<f64>,
|
||||
/// Translates both surfaces first (`prog_test` `my_test_one_ssi`).
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
translate: Option<[f64; 3]>,
|
||||
},
|
||||
Lift2 {
|
||||
v: Vec<[f64; 3]>,
|
||||
@@ -770,10 +776,15 @@ fn cpp_input(i: &Inputs) -> Result<(Op, Vec<f64>), HarnessError> {
|
||||
dom,
|
||||
other,
|
||||
other_dom,
|
||||
tol,
|
||||
translate,
|
||||
} => {
|
||||
o.extend_from_slice(dom);
|
||||
push_bss(&mut o, other)?;
|
||||
o.extend_from_slice(other_dom);
|
||||
o.extend([flag(tol.is_some()), tol.unwrap_or(0.0)]);
|
||||
o.push(flag(translate.is_some()));
|
||||
o.extend_from_slice(&translate.unwrap_or([0.0; 3]));
|
||||
}
|
||||
OpIn::Lift2 { v } | OpIn::Lift3 { v } | OpIn::Geom { e: v } => {
|
||||
for x in v {
|
||||
@@ -1187,6 +1198,44 @@ fn dump_state(o: &mut Vec<f64>, s: Option<&Surface>) {
|
||||
}
|
||||
}
|
||||
|
||||
/// `GlobalSurfaceIntersect`'s outputs: `n`, `same` (the arrays agree in length) and per
|
||||
/// curve the 3D curve and the two UV curves (each its type code, `0` for none, then
|
||||
/// [`dump_curve`] for a B-spline), the curve type and the deviation.
|
||||
fn put_intersection(o: &mut Vec<f64>, r: &sp2::SurfaceIntersection) {
|
||||
let n = r.curves_3d.len();
|
||||
o.push(n as f64);
|
||||
let same = r.surface1_uv_curves.len() == n
|
||||
&& r.surface2_uv_curves.len() == n
|
||||
&& r.curve_types.len() == n
|
||||
&& r.deviations.len() == n;
|
||||
o.push(flag(same));
|
||||
if !same {
|
||||
return;
|
||||
}
|
||||
let put = |o: &mut Vec<f64>, c: Option<&SmCurve>| match c {
|
||||
None => o.push(0.0),
|
||||
Some(c) => {
|
||||
o.push(c.type_code() as f64);
|
||||
if let CurveKind::BSpline(b) = c.kind() {
|
||||
dump_curve(o, b);
|
||||
}
|
||||
}
|
||||
};
|
||||
for (((c3, (u1, u2)), t), d) in r
|
||||
.curves_3d
|
||||
.iter()
|
||||
.zip(r.surface1_uv_curves.iter().zip(&r.surface2_uv_curves))
|
||||
.zip(&r.curve_types)
|
||||
.zip(&r.deviations)
|
||||
{
|
||||
put(o, Some(c3));
|
||||
put(o, u1.as_ref());
|
||||
put(o, u2.as_ref());
|
||||
o.push(f64::from(*t as i32));
|
||||
o.push(*d);
|
||||
}
|
||||
}
|
||||
|
||||
fn dump_curve(o: &mut Vec<f64>, c: &BSplineCurve) {
|
||||
o.push(c.dim() as f64);
|
||||
o.push(flag(c.gw_nurb().is_some()));
|
||||
@@ -1537,20 +1586,30 @@ fn rust_surface_op(k: &Kernel, op: &OpIn, t: &This) -> Result<Run, HarnessError>
|
||||
dom,
|
||||
other,
|
||||
other_dom,
|
||||
tol,
|
||||
translate,
|
||||
} => {
|
||||
let other = Surface::from(bss_of(other)?);
|
||||
let mut other = Surface::from(bss_of(other)?);
|
||||
let mut this = s.clone();
|
||||
record(|o| {
|
||||
let x = s.as_ref().ok_or_else(base_err)?;
|
||||
let k = Kernel::default();
|
||||
let x = this.as_mut().ok_or_else(base_err)?;
|
||||
if let Some(t) = translate {
|
||||
let mut ax = Axis2Placement::default();
|
||||
ax.translate(v3(*t));
|
||||
x.transform(&k, &ax, None)?;
|
||||
other.transform(&k, &ax, None)?;
|
||||
}
|
||||
let r = x.global_surface_intersect(
|
||||
&Kernel::default(),
|
||||
&k,
|
||||
&dom_of(*dom),
|
||||
&other,
|
||||
&dom_of(*other_dom),
|
||||
[true, true],
|
||||
None,
|
||||
*tol,
|
||||
None,
|
||||
)?;
|
||||
o.push(r.curves_3d.len() as f64);
|
||||
put_intersection(o, &r);
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
//!
|
||||
//! | [`Op`] | upstream | parameters | outputs |
|
||||
//! |-------------|------------------------------------------|---------------------------------------------|---------|
|
||||
//! | `Gps` | `GlobalPointSolve` | curve `a b sop P tol has_tg tg` vecs `req` | `n sol*n` (on success) |
|
||||
//! | `Gps` | `GlobalPointSolve` | curve xforms `a b sop P tol has_tg tg` vecs `req` | `n sol*n` (on success) |
|
||||
//! | `Approx` | `ApproximateCurve` | curve `nb breaks[nb] tol analytics match copy` | `written tol` curve (on success) |
|
||||
//! | `Bisect` | `TessellateByBisection` | curve `a b chord angle max3d` | `nt np nd t[nt] P[3 np] D[3 nd]` (on success) |
|
||||
//! | `Tess` | `Tessellate` (virtual) | curve `a b chord angle minseg` | as `Bisect` |
|
||||
@@ -20,6 +20,9 @@
|
||||
//! | `Span` | `sm_TestSpanAccuracy` (static) | curve `lt LP[3] LD[3] ct CP[3] CD[3] tol match` | `pass dist` (on success) |
|
||||
//! | `Refine` | `sm_RefineCCSolutions` (static) | curve curve `n (type nvar o0 o1 v0 s0 s1 v1 e0 e1)*n` | `n (v0 s0 s1 v1 e0 e1)*n` (always) |
|
||||
//!
|
||||
//! `xforms` is `nt (O[3] X[3] Y[3] has_s S[3])*nt`, transforms applied to the curve before
|
||||
//! them in order (`SmAxis2Placement::SetCanonical(O, X, Y)`, then `SmCurve::Transform`
|
||||
//! with the scale `S` when `has_s`; B-splines only, `nt = 0` for none).
|
||||
//! A `Gps` solution is `type nvar nobj o0 value s0 [evalue e0]` (the end for a range);
|
||||
//! objects are `0` (the curve), `2` (another object, the cache's analytic curve), `-1`
|
||||
//! (`NULL`). A result curve is `type dim has_nurb [n p m cpts(x y z w) knots]`. `Refine`
|
||||
@@ -47,6 +50,8 @@ pub const MAX_DEGREE: usize = 9;
|
||||
pub const MAX_COORD: f64 = 1e6;
|
||||
/// Parameters may lie this many interval lengths outside the curve's range.
|
||||
pub const MAX_REL_DIST: f64 = 2.0;
|
||||
/// Most transforms after a curve block.
|
||||
pub const MAX_TRANSFORMS: usize = 16;
|
||||
/// Most breaks of `Approx`.
|
||||
pub const MAX_BREAKS: usize = 8;
|
||||
/// Most solutions of `Refine`.
|
||||
@@ -302,10 +307,48 @@ fn two_curve_ends(rd: &mut Reader<'_>, c1: &CurveInfo, c2: &CurveInfo) -> Result
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Whether the next curve block is a B-spline (kind `0`).
|
||||
fn next_is_bspline(rd: &Reader<'_>) -> bool {
|
||||
rd.input.get(rd.at) == Some(&0.0)
|
||||
}
|
||||
|
||||
/// The transforms `nt (O[3] X[3] Y[3] has_s S[3])*nt` after a curve block, applied to it
|
||||
/// in order (`SmAxis2Placement::SetCanonical(O, X, Y)`, then `SmCurve::Transform` with
|
||||
/// the scale `S` when `has_s`): B-splines only, at most [`MAX_TRANSFORMS`], origins of
|
||||
/// magnitude at most `MAX_COORD / MAX_TRANSFORMS`, non-parallel axes and scales of
|
||||
/// magnitude within `[1e-3, 1]` (so transformed points stay within a few `MAX_COORD`).
|
||||
fn transforms(rd: &mut Reader<'_>, bspline: bool) -> Result<(), FfiError> {
|
||||
let nt = rd.index(MAX_TRANSFORMS)?;
|
||||
if nt > 0 && !bspline {
|
||||
return Err(bad("transforms apply to B-splines only"));
|
||||
}
|
||||
let sq = |v: [f64; 3]| v.iter().map(|c| c * c).sum::<f64>();
|
||||
for _ in 0..nt {
|
||||
let o = rd.vec3()?;
|
||||
if o.iter().any(|c| c.abs() > MAX_COORD / MAX_TRANSFORMS as f64) {
|
||||
return Err(bad("transform: origin too far"));
|
||||
}
|
||||
let [x0, x1, x2] = rd.nonzero3()?;
|
||||
let [y0, y1, y2] = rd.nonzero3()?;
|
||||
let cross = [x1 * y2 - x2 * y1, x2 * y0 - x0 * y2, x0 * y1 - x1 * y0];
|
||||
if sq(cross) < 1e-6 * sq([x0, x1, x2]) * sq([y0, y1, y2]) {
|
||||
return Err(bad("transform: parallel axes"));
|
||||
}
|
||||
let has_scale = rd.flag()?;
|
||||
let s = rd.vec3()?;
|
||||
if has_scale && s.iter().any(|c| !(1e-3..=1.0).contains(&c.abs())) {
|
||||
return Err(bad("transform: scale outside [1e-3, 1]"));
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn validate_op(op: Op, rd: &mut Reader<'_>) -> Result<(), FfiError> {
|
||||
match op {
|
||||
Op::Gps => {
|
||||
let bspline = next_is_bspline(rd);
|
||||
let c = curve_block(rd)?;
|
||||
transforms(rd, bspline)?;
|
||||
interval(rd, &c)?;
|
||||
let sop = rd.index(24)?;
|
||||
let need = gps_vectors(sop)
|
||||
|
||||
@@ -16,8 +16,11 @@
|
||||
//! |------------|-------------------------------------------------|------------|---------|
|
||||
//! | `CciSolve` | `SmCCIGlobalSolver::SolveIt` | `c1 self [c2] cache1 [cache2] a1 b1 a2 b2 sop tol proj ptype` vecs | `[status nsol sol*]` |
|
||||
//! | `CciLocal` | `SmCCIGlobalSolver::LocalSolve` on one leaf pair | as `CciSolve`, then `leaf1 leaf2` | `nleaf1 nleaf2 [status [needs nsol sol*]]` |
|
||||
//! | `Property` | `SmCurve::GlobalPropertyAnalysis` | curve `a b prop has_val val` vecs `tol comb` | `status [nsol sol* npt P[3]* nvec V[3]*]` |
|
||||
//! | `Property` | `SmCurve::GlobalPropertyAnalysis` | curve xforms `a b prop has_val val` vecs `tol comb` | `status [nsol sol* npt P[3]* nvec V[3]*]` |
|
||||
//!
|
||||
//! `xforms` is `nt (O[3] X[3] Y[3] has_s S[3])*nt`, transforms applied to the curve before
|
||||
//! them in order (`SmAxis2Placement::SetCanonical(O, X, Y)`, then `SmCurve::Transform`
|
||||
//! with the scale `S` when `has_s`; B-splines only, `nt = 0` for none).
|
||||
//! A solution `sol` is `type nvar nobj o0 o1 n0 n1 sval s[P] eval e[P]` with
|
||||
//! `P = max(nvar, 2)`; objects are `0` (first curve), `1` (second), `2` (another), `-1`
|
||||
//! (`NULL`); nodes are pre-order indices in the first / second tree (`-1` = `NULL`). The
|
||||
@@ -44,6 +47,8 @@ pub const MAX_DEGREE: usize = 9;
|
||||
pub const MAX_COORD: f64 = 1e6;
|
||||
/// Parameters may lie this many interval lengths outside the curve's range.
|
||||
pub const MAX_REL_DIST: f64 = 2.0;
|
||||
/// Most transforms after a curve block.
|
||||
pub const MAX_TRANSFORMS: usize = 16;
|
||||
/// Largest `lMinimumNumberOfSegments` of the cache.
|
||||
pub const MAX_SEGMENTS: usize = 64;
|
||||
/// Smallest `dMinimumParametricRatio` of the cache.
|
||||
@@ -315,6 +320,42 @@ fn proj_vecs(rd: &mut Reader<'_>, need: usize, unit: &[usize]) -> Result<(), Ffi
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Whether the next curve block is a B-spline (kind `0`).
|
||||
fn next_is_bspline(rd: &Reader<'_>) -> bool {
|
||||
rd.input.get(rd.at) == Some(&0.0)
|
||||
}
|
||||
|
||||
/// The transforms `nt (O[3] X[3] Y[3] has_s S[3])*nt` after a curve block, applied to it
|
||||
/// in order (`SmAxis2Placement::SetCanonical(O, X, Y)`, then `SmCurve::Transform` with
|
||||
/// the scale `S` when `has_s`): B-splines only, at most [`MAX_TRANSFORMS`], origins of
|
||||
/// magnitude at most `MAX_COORD / MAX_TRANSFORMS`, non-parallel axes and scales of
|
||||
/// magnitude within `[1e-3, 1]` (so transformed points stay within a few `MAX_COORD`).
|
||||
fn transforms(rd: &mut Reader<'_>, bspline: bool) -> Result<(), FfiError> {
|
||||
let nt = rd.index(MAX_TRANSFORMS)?;
|
||||
if nt > 0 && !bspline {
|
||||
return Err(bad("transforms apply to B-splines only"));
|
||||
}
|
||||
let sq = |v: [f64; 3]| v.iter().map(|c| c * c).sum::<f64>();
|
||||
for _ in 0..nt {
|
||||
let o = rd.vec3()?;
|
||||
if o.iter().any(|c| c.abs() > MAX_COORD / MAX_TRANSFORMS as f64) {
|
||||
return Err(bad("transform: origin too far"));
|
||||
}
|
||||
let [x0, x1, x2] = rd.nonzero3()?;
|
||||
let [y0, y1, y2] = rd.nonzero3()?;
|
||||
let cross = [x1 * y2 - x2 * y1, x2 * y0 - x0 * y2, x0 * y1 - x1 * y0];
|
||||
if sq(cross) < 1e-6 * sq([x0, x1, x2]) * sq([y0, y1, y2]) {
|
||||
return Err(bad("transform: parallel axes"));
|
||||
}
|
||||
let has_scale = rd.flag()?;
|
||||
let s = rd.vec3()?;
|
||||
if has_scale && s.iter().any(|c| !(1e-3..=1.0).contains(&c.abs())) {
|
||||
return Err(bad("transform: scale outside [1e-3, 1]"));
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn validate_op(op: Op, rd: &mut Reader<'_>) -> Result<(), FfiError> {
|
||||
match op {
|
||||
Op::CciSolve | Op::CciLocal => {
|
||||
@@ -351,7 +392,9 @@ fn validate_op(op: Op, rd: &mut Reader<'_>) -> Result<(), FfiError> {
|
||||
}
|
||||
}
|
||||
Op::Property => {
|
||||
let bspline = next_is_bspline(rd);
|
||||
let c = cached_curve(rd)?;
|
||||
transforms(rd, bspline)?;
|
||||
interval(rd, &c)?;
|
||||
rd.index(28)?; // property
|
||||
// the property solvers read values and vectors without NULL checks
|
||||
|
||||
@@ -13,8 +13,11 @@
|
||||
//!
|
||||
//! | [`Op`] | upstream | parameters | outputs |
|
||||
//! |--------|------------------------|------------------------------------------------|-----------|
|
||||
//! | `Gci` | `GlobalCurveIntersect` | curve `a b same [curve] a2 b2 tol skip` | `n sol*n` |
|
||||
//! | `Gci` | `GlobalCurveIntersect` | curve xforms `a b same [curve xforms] a2 b2 tol skip` | `n sol*n` |
|
||||
//!
|
||||
//! `xforms` is `nt (O[3] X[3] Y[3] has_s S[3])*nt`, transforms applied to the curve before
|
||||
//! them in order (`SmAxis2Placement::SetCanonical(O, X, Y)`, then `SmCurve::Transform`
|
||||
//! with the scale `S` when `has_s`; B-splines only, `nt = 0` for none).
|
||||
//! `same` passes this curve itself as the other one (no second block; a self
|
||||
//! intersection); `skip` is `bSkipGlobalCoincidenceCheck`. A solution `sol` is `type nvar
|
||||
//! nobj o0 o1 value s0 s1 [evalue e0 e1]` (the end for a range; `s1`/`e1` are `0` for a
|
||||
@@ -39,6 +42,8 @@ pub const MAX_DEGREE: usize = 9;
|
||||
pub const MAX_COORD: f64 = 1e6;
|
||||
/// Parameters may lie this many interval lengths outside the curve's range.
|
||||
pub const MAX_REL_DIST: f64 = 2.0;
|
||||
/// Most transforms after a curve block.
|
||||
pub const MAX_TRANSFORMS: usize = 16;
|
||||
|
||||
/// Shim operations.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
@@ -222,13 +227,58 @@ fn tol(rd: &mut Reader<'_>) -> Result<f64, FfiError> {
|
||||
Ok(v)
|
||||
}
|
||||
|
||||
/// Whether the next curve block is a B-spline (kind `0`).
|
||||
fn next_is_bspline(rd: &Reader<'_>) -> bool {
|
||||
rd.input.get(rd.at) == Some(&0.0)
|
||||
}
|
||||
|
||||
/// The transforms `nt (O[3] X[3] Y[3] has_s S[3])*nt` after a curve block, applied to it
|
||||
/// in order (`SmAxis2Placement::SetCanonical(O, X, Y)`, then `SmCurve::Transform` with
|
||||
/// the scale `S` when `has_s`): B-splines only, at most [`MAX_TRANSFORMS`], origins of
|
||||
/// magnitude at most `MAX_COORD / MAX_TRANSFORMS`, non-parallel axes and scales of
|
||||
/// magnitude within `[1e-3, 1]` (so transformed points stay within a few `MAX_COORD`).
|
||||
fn transforms(rd: &mut Reader<'_>, bspline: bool) -> Result<(), FfiError> {
|
||||
let nt = rd.index(MAX_TRANSFORMS)?;
|
||||
if nt > 0 && !bspline {
|
||||
return Err(bad("transforms apply to B-splines only"));
|
||||
}
|
||||
let sq = |v: [f64; 3]| v.iter().map(|c| c * c).sum::<f64>();
|
||||
for _ in 0..nt {
|
||||
let o = rd.vec3()?;
|
||||
if o.iter().any(|c| c.abs() > MAX_COORD / MAX_TRANSFORMS as f64) {
|
||||
return Err(bad("transform: origin too far"));
|
||||
}
|
||||
let [x0, x1, x2] = rd.nonzero3()?;
|
||||
let [y0, y1, y2] = rd.nonzero3()?;
|
||||
let cross = [x1 * y2 - x2 * y1, x2 * y0 - x0 * y2, x0 * y1 - x1 * y0];
|
||||
if sq(cross) < 1e-6 * sq([x0, x1, x2]) * sq([y0, y1, y2]) {
|
||||
return Err(bad("transform: parallel axes"));
|
||||
}
|
||||
let has_scale = rd.flag()?;
|
||||
let s = rd.vec3()?;
|
||||
if has_scale && s.iter().any(|c| !(1e-3..=1.0).contains(&c.abs())) {
|
||||
return Err(bad("transform: scale outside [1e-3, 1]"));
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn validate_op(op: Op, rd: &mut Reader<'_>) -> Result<(), FfiError> {
|
||||
match op {
|
||||
Op::Gci => {
|
||||
let bspline = next_is_bspline(rd);
|
||||
let c = curve_block(rd)?;
|
||||
transforms(rd, bspline)?;
|
||||
interval(rd, &c)?;
|
||||
let same = rd.flag()?;
|
||||
let c2 = if same { c } else { curve_block(rd)? };
|
||||
let c2 = if same {
|
||||
c
|
||||
} else {
|
||||
let bspline = next_is_bspline(rd);
|
||||
let c2 = curve_block(rd)?;
|
||||
transforms(rd, bspline)?;
|
||||
c2
|
||||
};
|
||||
interval(rd, &c2)?;
|
||||
tol(rd)?;
|
||||
rd.flag()?;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
//!
|
||||
//! | [`Op`] | upstream | parameters | outputs |
|
||||
//! |------------------|------------------------------|--------------------------------------------------------------|--------------------------|
|
||||
//! | `Gcs` | `GlobalCurveSolve` | curve `a b same [curve] a2 b2 op tol has_target target nvec vec*nvec requested` | `n sol*n` |
|
||||
//! | `Gcs` | `GlobalCurveSolve` | curve `a b same [curve] a2 b2 op tol has_target target nvec vec*nvec requested has_xf [O X Y]` | `n sol*n` |
|
||||
//! | `SelfIntersect` | `GlobalCurveSelfIntersect` | curve `a b tol` | `n sol*n` |
|
||||
//! | `TightBox` | `CalculateTightBoundingBox` | curve `a b` | `umin vmin wmin umax vmax wmax` |
|
||||
//! | `TightPseudoBox` | `CalculateTightPseudoBox` | curve `a b B0[3] B1[3] B2[3]` | `basis[9] (min max)*3` |
|
||||
@@ -27,7 +27,9 @@
|
||||
//! `same` passes this curve itself as the other one (no second block); `op` is an
|
||||
//! `SmSolverOperationType` from [`PLAIN_OPS`] (no vectors, `nvec` `0`) or
|
||||
//! [`VECTOR_OPS`] (`nvec` `3`); `has_target` passes `&target` (required for
|
||||
//! `SM_SO_AT_DISTANCE`); `requested` is `SM_SR_SINGLE` (`0`) or `SM_SR_ALL` (`1`). A
|
||||
//! `SM_SO_AT_DISTANCE`); `requested` is `SM_SR_SINGLE` (`0`) or `SM_SR_ALL` (`1`);
|
||||
//! `has_xf` `1` builds an `SmAxis2Placement` with `SetCanonical(O, X, Y)` (non-zero,
|
||||
//! non-parallel axes) and `Transform`s this curve by it before the solve. A
|
||||
//! solution `sol` is `type nvar nobj o0 o1 value s0 s1 [evalue e0 e1]` (the end for a
|
||||
//! range); objects are `0` (this curve), `1` (the other), `2` (another object), `-1`
|
||||
//! (`NULL`). `IsOnPlane`'s `max_dist` starts as `SM_UNDEF_DOUBLE`; `has_ivl` `0` passes
|
||||
@@ -329,6 +331,13 @@ fn check_projection_vectors(code: i32, vecs: &[[f64; 3]; 3]) -> Result<(), FfiEr
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Whether `x` and `y` are far from parallel (`SetCanonical` then builds a proper frame).
|
||||
fn independent(x: [f64; 3], y: [f64; 3]) -> bool {
|
||||
let len = |v: [f64; 3]| v.iter().map(|c| c * c).sum::<f64>().sqrt();
|
||||
let dot: f64 = x.iter().zip(&y).map(|(a, b)| a * b).sum();
|
||||
(dot / (len(x) * len(y))).abs() < 1.0 - 1e-6
|
||||
}
|
||||
|
||||
fn validate_op(op: Op, rd: &mut Reader<'_>) -> Result<(), FfiError> {
|
||||
match op {
|
||||
Op::Gcs => {
|
||||
@@ -358,6 +367,14 @@ fn validate_op(op: Op, rd: &mut Reader<'_>) -> Result<(), FfiError> {
|
||||
}
|
||||
check_projection_vectors(code, &vecs)?;
|
||||
rd.index(1)?;
|
||||
if rd.flag()? {
|
||||
rd.vec3()?;
|
||||
let x = rd.nonzero3()?;
|
||||
let y = rd.nonzero3()?;
|
||||
if !independent(x, y) {
|
||||
return Err(bad("transform axes parallel"));
|
||||
}
|
||||
}
|
||||
}
|
||||
Op::SelfIntersect => {
|
||||
let c = curve_block(rd)?;
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
//! | `FixCurves` | `sm_FixBoundaryCurves(poly, dom, tx, ty, change = FALSE)` | `change poly` |
|
||||
//! | `Dups` | `sm_RemoveDuplicateDropPointSolutions` (`m_vStart = (u, v)`, value = index) | `count (index u v)*` |
|
||||
//! | `Iso` | `DropIsoCurve` | `status [ok max_drop max_dev has [curve]]` |
|
||||
//! | `Trim` | `DropAndTrimCurve(.., keep, on_surface, NULL)` | `status [max_drop max_dev n curves]` |
|
||||
//! | `Trim` | `DropAndTrimCurve(.., keep, on_surface, NULL)` (natural domain / interval when not given) | `status [max_drop max_dev n curves]` |
|
||||
//!
|
||||
//! A surface of revolution whose `CreateCanonical` fails makes the record
|
||||
//! [[`NO_SURFACE`]]. [`run`] accepts only finite inputs of magnitude at most
|
||||
@@ -65,6 +65,8 @@ pub const NOW: f64 = -f64::MAX;
|
||||
pub const REJECTED: f64 = -2.0;
|
||||
/// The record of an op whose surface of revolution could not be made.
|
||||
pub const NO_SURFACE: f64 = -3.0;
|
||||
/// Longest file path.
|
||||
pub const MAX_PATH: usize = 4096;
|
||||
/// Values per drop point.
|
||||
pub const PT_LEN: usize = 38;
|
||||
|
||||
@@ -108,6 +110,12 @@ pub enum SurfaceIn {
|
||||
/// `bSwapUV`.
|
||||
swap: bool,
|
||||
},
|
||||
/// `SmBSplineSurface::ReadFromFile(ctx, path, s)`: an upstream test file (contents
|
||||
/// trusted, not validated).
|
||||
File {
|
||||
/// The file.
|
||||
path: String,
|
||||
},
|
||||
}
|
||||
|
||||
/// A 3D curve.
|
||||
@@ -142,6 +150,12 @@ pub enum CurveIn {
|
||||
/// Knots (`n + p + 2`).
|
||||
knots: Vec<f64>,
|
||||
},
|
||||
/// `SmBSplineCurve::ReadFromFile(ctx, path, c)`: an upstream test file (contents
|
||||
/// trusted, not validated).
|
||||
File {
|
||||
/// The file.
|
||||
path: String,
|
||||
},
|
||||
}
|
||||
|
||||
/// A span stack op.
|
||||
@@ -283,10 +297,10 @@ pub enum Op {
|
||||
surface: SurfaceIn,
|
||||
/// The curve.
|
||||
curve: CurveIn,
|
||||
/// `crUVDomain`.
|
||||
domain: [f64; 4],
|
||||
/// `crInterval` (`SmExtent1d(a, b)`).
|
||||
interval: [f64; 2],
|
||||
/// `crUVDomain` (`None`: `GetNaturalUVDomain()`).
|
||||
domain: Option<[f64; 4]>,
|
||||
/// `crInterval` (`SmExtent1d(a, b)`; `None`: `GetNaturalInterval()`).
|
||||
interval: Option<[f64; 2]>,
|
||||
/// `sApproxTol3d`.
|
||||
tol: f64,
|
||||
/// `bKeepAllDropCurves`.
|
||||
@@ -390,6 +404,17 @@ impl Enc {
|
||||
self.int(usize::from(x));
|
||||
Ok(())
|
||||
}
|
||||
/// `nbytes bytes`: a file path (1 to [`MAX_PATH`] bytes, no NUL).
|
||||
fn path(&mut self, p: &str) -> Result<(), FfiError> {
|
||||
let b = p.as_bytes();
|
||||
if b.is_empty() || b.len() > MAX_PATH || b.contains(&0) {
|
||||
return Err(bad("file path"));
|
||||
}
|
||||
self.int(b.len());
|
||||
self.v.extend(b.iter().map(|&x| f64::from(x)));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn cpt(&mut self, c: &[f64; 4]) -> Result<(), FfiError> {
|
||||
self.nums(&c[..3])?;
|
||||
self.v.push(c[3]);
|
||||
@@ -455,6 +480,10 @@ impl Enc {
|
||||
}
|
||||
self.nums(knots)
|
||||
}
|
||||
CurveIn::File { path } => {
|
||||
self.int(3);
|
||||
self.path(path)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -523,13 +552,19 @@ impl Enc {
|
||||
g.curve(gen)?;
|
||||
self.v.extend(g.v);
|
||||
}
|
||||
CurveIn::BSpline { .. } => return Err(bad("revolution generator")),
|
||||
CurveIn::BSpline { .. } | CurveIn::File { .. } => {
|
||||
return Err(bad("revolution generator"))
|
||||
}
|
||||
}
|
||||
self.nums(point)?;
|
||||
self.nums(axis)?;
|
||||
self.flag(*swap);
|
||||
Ok(())
|
||||
}
|
||||
SurfaceIn::File { path } => {
|
||||
self.int(3);
|
||||
self.path(path)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -702,8 +737,14 @@ impl Enc {
|
||||
self.int(13);
|
||||
self.surface(surface)?;
|
||||
self.curve(curve)?;
|
||||
self.nums(domain)?;
|
||||
self.nums(interval)?;
|
||||
self.flag(domain.is_some());
|
||||
if let Some(d) = domain {
|
||||
self.nums(d)?;
|
||||
}
|
||||
self.flag(interval.is_some());
|
||||
if let Some(i) = interval {
|
||||
self.nums(i)?;
|
||||
}
|
||||
self.num(*tol)?;
|
||||
self.flag(*keep_all);
|
||||
self.flag(*on_surface);
|
||||
|
||||
@@ -5,7 +5,10 @@
|
||||
//! `[0,1]^2`) or an analytic `SmPlane` (kind 1: origin `net[0]`, x axis `net[1]`, y axis
|
||||
//! `net[2]`, unit scales). Every value must be finite; plane axes must be non-zero and
|
||||
//! not parallel (`SmAxis2Placement::SetCanonical` fails on them and leaves the axes
|
||||
//! undefined); domains must not be inverted. No counts cross the FFI.
|
||||
//! undefined); domains must not be inverted. No counts cross the FFI except the
|
||||
//! control point count of [`lift_curve`]'s inline UV curve, checked against its arrays.
|
||||
use std::ffi::CString;
|
||||
|
||||
use crate::{call_with_buffer, FfiError};
|
||||
|
||||
mod sys {
|
||||
@@ -34,6 +37,25 @@ mod sys {
|
||||
cap: i64,
|
||||
out_len: *mut i64,
|
||||
) -> i32;
|
||||
pub fn sc_surface_surface_p11_lift(
|
||||
surf_path: *const std::ffi::c_char,
|
||||
kind: i32,
|
||||
xyz: *const f64,
|
||||
has_domain: i32,
|
||||
domain: *const f64,
|
||||
curve_path: *const std::ffi::c_char,
|
||||
degree: i32,
|
||||
ncp: i64,
|
||||
cpts: *const f64,
|
||||
knots: *const f64,
|
||||
has_interval: i32,
|
||||
interval: *const f64,
|
||||
tol: f64,
|
||||
skip_checks: i32,
|
||||
output: *mut f64,
|
||||
cap: i64,
|
||||
out_len: *mut i64,
|
||||
) -> i32;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,3 +199,173 @@ pub fn local_surface_intersect(
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/// The surface of [`lift_curve`].
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum LiftSurface {
|
||||
/// `SmBSplineSurface::ReadFromFile(path)` (an upstream test file; its contents are
|
||||
/// trusted, not validated).
|
||||
File(String),
|
||||
/// A patch or plane as for [`local_surface_intersect`] (its `domain` is not used:
|
||||
/// [`lift_curve`] takes the domain separately).
|
||||
Inline(Box<SurfaceInput>),
|
||||
}
|
||||
|
||||
/// The UV curve of [`lift_curve`].
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum LiftUvCurve {
|
||||
/// `SmBSplineCurve::ReadFromFile(path)` (an upstream test file; trusted).
|
||||
File(String),
|
||||
/// A non-rational 2D B-spline: degree, control points `(u, v)` and knots.
|
||||
Inline {
|
||||
/// Degree, `1..=8`.
|
||||
degree: i64,
|
||||
/// Control points, `degree + 1 ..= 64` of them.
|
||||
cpts: Vec<[f64; 2]>,
|
||||
/// `cpts.len() + degree + 1` clamped non-decreasing knots, interior
|
||||
/// multiplicity at most `degree`.
|
||||
knots: Vec<f64>,
|
||||
},
|
||||
}
|
||||
|
||||
/// Largest magnitude of an inline UV control point or knot.
|
||||
pub const MAX_UV: f64 = 1e6;
|
||||
|
||||
fn path(p: &str) -> Result<CString, FfiError> {
|
||||
CString::new(p).map_err(|_| FfiError::InvalidArgument("path with NUL".into()))
|
||||
}
|
||||
|
||||
/// Clamped, non-decreasing, finite knots with interior multiplicity at most `p`.
|
||||
fn knots_ok(knots: &[f64], ncp: usize, p: usize) -> bool {
|
||||
let (Some(&k0), Some(&km)) = (knots.first(), knots.last()) else {
|
||||
return false;
|
||||
};
|
||||
if knots.len() != ncp + p + 1
|
||||
|| knots.iter().any(|k| !(k.is_finite() && k.abs() <= MAX_UV))
|
||||
|| knots.windows(2).any(|w| w.first() > w.last())
|
||||
|| km <= k0
|
||||
|| knots.iter().take(p + 1).any(|&k| k != k0)
|
||||
|| knots.iter().rev().take(p + 1).any(|&k| k != km)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
let mut run = 0usize;
|
||||
let mut last = f64::NAN;
|
||||
for &k in knots.iter().filter(|&&k| k != k0 && k != km) {
|
||||
run = if k == last { run + 1 } else { 1 };
|
||||
last = k;
|
||||
if run > p {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
/// `surface.LiftCurve(ctx, domain, uv_curve, interval, tol, max_dist, curve,
|
||||
/// skip_checks)` (`domain` / `interval` default to the natural ones): `[status,
|
||||
/// max_dist, type, dim, degree, ncp, cpts (x y z w), nknots, knots, mults, interval
|
||||
/// min, max]` (only the status when `LiftCurve` fails).
|
||||
///
|
||||
/// # Errors
|
||||
/// Rejected before C++: an invalid inline surface (as [`local_surface_intersect`]), an
|
||||
/// inline UV curve outside the limits of [`LiftUvCurve::Inline`] or with control points
|
||||
/// that are not finite or larger than [`MAX_UV`], an inverted or non-finite domain, an
|
||||
/// interval that is inverted, not finite or (for an inline curve) not inside the
|
||||
/// curve's knot range, a tolerance that is not finite and positive (`SmApproxTol3d`
|
||||
/// treats other values as its default). Shim failures (a file that does not read)
|
||||
/// return `FfiError::Status`.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn lift_curve(
|
||||
surface: &LiftSurface,
|
||||
domain: Option<[f64; 4]>,
|
||||
uv_curve: &LiftUvCurve,
|
||||
interval: Option<[f64; 2]>,
|
||||
tol: f64,
|
||||
skip_continuity_checks: bool,
|
||||
) -> Result<Vec<f64>, FfiError> {
|
||||
let invalid = || FfiError::InvalidArgument("unsafe surface p11 lift input".into());
|
||||
let (surf_path, kind, xyz) = match surface {
|
||||
LiftSurface::File(p) => (Some(path(p)?), 0, vec![0.0; 27]),
|
||||
LiftSurface::Inline(s) => {
|
||||
check_surface(&SurfaceInput {
|
||||
domain: [0.0, 0.0, 1.0, 1.0],
|
||||
..**s
|
||||
})?;
|
||||
(None, s.kind, s.net.iter().flatten().copied().collect())
|
||||
}
|
||||
};
|
||||
if let Some(d) = domain {
|
||||
if d.iter().any(|v| !v.is_finite()) || d[0] > d[2] || d[1] > d[3] {
|
||||
return Err(invalid());
|
||||
}
|
||||
}
|
||||
if !(tol.is_finite() && tol > 0.0) {
|
||||
return Err(invalid());
|
||||
}
|
||||
let (curve_path, degree, cpts, knots) = match uv_curve {
|
||||
LiftUvCurve::File(p) => (Some(path(p)?), 0, Vec::new(), Vec::new()),
|
||||
LiftUvCurve::Inline {
|
||||
degree,
|
||||
cpts,
|
||||
knots,
|
||||
} => {
|
||||
let p = usize::try_from(*degree).map_err(|_| invalid())?;
|
||||
if !(1..=8).contains(&p)
|
||||
|| !(p + 1..=64).contains(&cpts.len())
|
||||
|| cpts
|
||||
.iter()
|
||||
.flatten()
|
||||
.any(|v| !(v.is_finite() && v.abs() <= MAX_UV))
|
||||
|| !knots_ok(knots, cpts.len(), p)
|
||||
{
|
||||
return Err(invalid());
|
||||
}
|
||||
if let Some(i) = interval {
|
||||
let (k0, km) = (
|
||||
knots.first().copied().unwrap_or(f64::NAN),
|
||||
knots.last().copied().unwrap_or(f64::NAN),
|
||||
);
|
||||
if !(k0 <= i[0] && i[1] <= km) {
|
||||
return Err(invalid());
|
||||
}
|
||||
}
|
||||
(None, p as i32, cpts.iter().flatten().copied().collect(), knots.clone())
|
||||
}
|
||||
};
|
||||
if let Some(i) = interval {
|
||||
if i.iter().any(|v| !v.is_finite()) || i[0] > i[1] {
|
||||
return Err(invalid());
|
||||
}
|
||||
}
|
||||
let dom = domain.unwrap_or([0.0; 4]);
|
||||
let ivl = interval.unwrap_or([0.0; 2]);
|
||||
let ncp = (cpts.len() / 2) as i64;
|
||||
let null = std::ptr::null::<std::ffi::c_char>();
|
||||
call_with_buffer(1024, |buffer, len| {
|
||||
// SAFETY: paths are NUL-terminated C strings or NULL; `xyz` holds 27 values,
|
||||
// `dom` 4, `ivl` 2; an inline curve's `cpts` holds `2 * ncp` and `knots`
|
||||
// `ncp + degree + 1` values (checked above); the shim copies output only within
|
||||
// the buffer capacity.
|
||||
unsafe {
|
||||
sys::sc_surface_surface_p11_lift(
|
||||
surf_path.as_ref().map_or(null, |p| p.as_ptr()),
|
||||
kind,
|
||||
xyz.as_ptr(),
|
||||
i32::from(domain.is_some()),
|
||||
dom.as_ptr(),
|
||||
curve_path.as_ref().map_or(null, |p| p.as_ptr()),
|
||||
degree,
|
||||
ncp,
|
||||
cpts.as_ptr(),
|
||||
knots.as_ptr(),
|
||||
i32::from(interval.is_some()),
|
||||
ivl.as_ptr(),
|
||||
tol,
|
||||
i32::from(skip_continuity_checks),
|
||||
buffer.as_mut_ptr(),
|
||||
buffer.len() as i64,
|
||||
&raw mut *len,
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
//! | `DropFast` | `DropPointFast` | `D V` |
|
||||
//! | `ConvertUv` | `ConvertUVFromSTEPToNURBS` / `ConvertUVFromNURBSToSTEP` | `u v` |
|
||||
//! | `SEval` | `SmSurfaceEval` | `ctor u v V k` then `k` x `kind a b c` |
|
||||
//! | `Gssi` | `GlobalSurfaceIntersect` | `D` surface (`oob form` + data) `D` |
|
||||
//! | `Gssi` | `GlobalSurfaceIntersect` | `D` surface (`oob form` + data) `D` `has_tol tol has_move V` |
|
||||
//! | `Lift2`, `Lift3` | `smsurf_Lift*Derivative` | 7 / 12 `V` |
|
||||
//! | `ScaleStep` | `smsurf_ScaleSTEPAngularDerivatives` | `hu hv u_ang v_ang` `(hu+1)(hv+1)` `V` |
|
||||
//! | `Geom` | `smsurf_EvaluateGeometric` | 9 `V` (row major `[i][j]`) |
|
||||
@@ -69,7 +69,7 @@ use crate::validate::{bad, check_knots, NOW, NOZ};
|
||||
use crate::{call_with_buffer, FfiError};
|
||||
|
||||
/// Largest control point index accepted by [`eval`].
|
||||
pub const MAX_INDEX: usize = 64;
|
||||
pub const MAX_INDEX: usize = 128;
|
||||
/// Largest NURB degree accepted by [`eval`].
|
||||
pub const MAX_DEGREE: usize = 9;
|
||||
/// Largest coordinate magnitude accepted by [`eval`].
|
||||
@@ -502,6 +502,13 @@ fn validate_surface_op(op: Op, rd: &mut Reader<'_>, dom: Option<[f64; 4]>) -> Re
|
||||
rd.domain()?;
|
||||
bspline_block(rd)?;
|
||||
rd.domain()?;
|
||||
let has_tol = rd.flag()?;
|
||||
let tol = rd.finite()?;
|
||||
if has_tol && tol <= 0.0 {
|
||||
return Err(bad("intersection tolerance: need a positive value"));
|
||||
}
|
||||
rd.flag()?;
|
||||
rd.vec3()?;
|
||||
}
|
||||
_ => return Err(bad("not a surface op")),
|
||||
}
|
||||
|
||||
@@ -0,0 +1,733 @@
|
||||
{
|
||||
"cases": [
|
||||
{
|
||||
"name": "cp_nurb_min_original",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:5168 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x19x1 bbox grid (95 points), before Transform",
|
||||
"inputs": {
|
||||
"op": "gps",
|
||||
"curve": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[-9.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, -4.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, -3.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, -2.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, -1.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, 1.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, 2.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, 3.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, 4.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, 4.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.05263157894736842, 0.10526315789473684, 0.15789473684210525, 0.21052631578947367, 0.2631578947368421, 0.3157894736842105, 0.3684210526315789, 0.42105263157894735, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.631578947368421, 0.6842105263157895, 0.7368421052631579, 0.7894736842105263, 0.8421052631578947, 0.8947368421052632, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl": [0.0, 1.0],
|
||||
"p": [-9.0, -4.5, 0.0],
|
||||
"pts": [
|
||||
[-9.0, -4.0000000000000275, 0.0],
|
||||
[-9.0, -3.5000000000000555, 0.0],
|
||||
[-9.0, -3.0000000000000835, 0.0],
|
||||
[-9.0, -2.500000000000111, 0.0],
|
||||
[-9.0, -2.0000000000001386, 0.0],
|
||||
[-9.0, -1.5000000000001665, 0.0],
|
||||
[-9.0, -1.0000000000001945, 0.0],
|
||||
[-9.0, -0.500000000000222, 0.0],
|
||||
[-9.0, -2.495781359357352e-13, 0.0],
|
||||
[-9.0, 0.4999999999997229, 0.0],
|
||||
[-9.0, 0.9999999999996945, 0.0],
|
||||
[-9.0, 1.499999999999667, 0.0],
|
||||
[-9.0, 1.9999999999996394, 0.0],
|
||||
[-9.0, 2.499999999999611, 0.0],
|
||||
[-9.0, 2.9999999999995834, 0.0],
|
||||
[-9.0, 3.499999999999556, 0.0],
|
||||
[-9.0, 3.9999999999995275, 0.0],
|
||||
[-9.0, 4.499999999999501, 0.0],
|
||||
[-8.500000000000124, -4.5, 0.0],
|
||||
[-8.500000000000124, -4.0000000000000275, 0.0],
|
||||
[-8.500000000000124, -3.5000000000000555, 0.0],
|
||||
[-8.500000000000124, -3.0000000000000835, 0.0],
|
||||
[-8.500000000000124, -2.500000000000111, 0.0],
|
||||
[-8.500000000000124, -2.0000000000001386, 0.0],
|
||||
[-8.500000000000124, -1.5000000000001665, 0.0],
|
||||
[-8.500000000000124, -1.0000000000001945, 0.0],
|
||||
[-8.500000000000124, -0.500000000000222, 0.0],
|
||||
[-8.500000000000124, -2.495781359357352e-13, 0.0],
|
||||
[-8.500000000000124, 0.4999999999997229, 0.0],
|
||||
[-8.500000000000124, 0.9999999999996945, 0.0],
|
||||
[-8.500000000000124, 1.499999999999667, 0.0],
|
||||
[-8.500000000000124, 1.9999999999996394, 0.0],
|
||||
[-8.500000000000124, 2.499999999999611, 0.0],
|
||||
[-8.500000000000124, 2.9999999999995834, 0.0],
|
||||
[-8.500000000000124, 3.499999999999556, 0.0],
|
||||
[-8.500000000000124, 3.9999999999995275, 0.0],
|
||||
[-8.500000000000124, 4.499999999999501, 0.0],
|
||||
[-8.00000000000025, -4.5, 0.0],
|
||||
[-8.00000000000025, -4.0000000000000275, 0.0],
|
||||
[-8.00000000000025, -3.5000000000000555, 0.0],
|
||||
[-8.00000000000025, -3.0000000000000835, 0.0],
|
||||
[-8.00000000000025, -2.500000000000111, 0.0],
|
||||
[-8.00000000000025, -2.0000000000001386, 0.0],
|
||||
[-8.00000000000025, -1.5000000000001665, 0.0],
|
||||
[-8.00000000000025, -1.0000000000001945, 0.0],
|
||||
[-8.00000000000025, -0.500000000000222, 0.0],
|
||||
[-8.00000000000025, -2.495781359357352e-13, 0.0],
|
||||
[-8.00000000000025, 0.4999999999997229, 0.0],
|
||||
[-8.00000000000025, 0.9999999999996945, 0.0],
|
||||
[-8.00000000000025, 1.499999999999667, 0.0],
|
||||
[-8.00000000000025, 1.9999999999996394, 0.0],
|
||||
[-8.00000000000025, 2.499999999999611, 0.0],
|
||||
[-8.00000000000025, 2.9999999999995834, 0.0],
|
||||
[-8.00000000000025, 3.499999999999556, 0.0],
|
||||
[-8.00000000000025, 3.9999999999995275, 0.0],
|
||||
[-8.00000000000025, 4.499999999999501, 0.0],
|
||||
[-7.500000000000375, -4.5, 0.0],
|
||||
[-7.500000000000375, -4.0000000000000275, 0.0],
|
||||
[-7.500000000000375, -3.5000000000000555, 0.0],
|
||||
[-7.500000000000375, -3.0000000000000835, 0.0],
|
||||
[-7.500000000000375, -2.500000000000111, 0.0],
|
||||
[-7.500000000000375, -2.0000000000001386, 0.0],
|
||||
[-7.500000000000375, -1.5000000000001665, 0.0],
|
||||
[-7.500000000000375, -1.0000000000001945, 0.0],
|
||||
[-7.500000000000375, -0.500000000000222, 0.0],
|
||||
[-7.500000000000375, -2.495781359357352e-13, 0.0],
|
||||
[-7.500000000000375, 0.4999999999997229, 0.0],
|
||||
[-7.500000000000375, 0.9999999999996945, 0.0],
|
||||
[-7.500000000000375, 1.499999999999667, 0.0],
|
||||
[-7.500000000000375, 1.9999999999996394, 0.0],
|
||||
[-7.500000000000375, 2.499999999999611, 0.0],
|
||||
[-7.500000000000375, 2.9999999999995834, 0.0],
|
||||
[-7.500000000000375, 3.499999999999556, 0.0],
|
||||
[-7.500000000000375, 3.9999999999995275, 0.0],
|
||||
[-7.500000000000375, 4.499999999999501, 0.0],
|
||||
[-7.0000000000005, -4.5, 0.0],
|
||||
[-7.0000000000005, -4.0000000000000275, 0.0],
|
||||
[-7.0000000000005, -3.5000000000000555, 0.0],
|
||||
[-7.0000000000005, -3.0000000000000835, 0.0],
|
||||
[-7.0000000000005, -2.500000000000111, 0.0],
|
||||
[-7.0000000000005, -2.0000000000001386, 0.0],
|
||||
[-7.0000000000005, -1.5000000000001665, 0.0],
|
||||
[-7.0000000000005, -1.0000000000001945, 0.0],
|
||||
[-7.0000000000005, -0.500000000000222, 0.0],
|
||||
[-7.0000000000005, -2.495781359357352e-13, 0.0],
|
||||
[-7.0000000000005, 0.4999999999997229, 0.0],
|
||||
[-7.0000000000005, 0.9999999999996945, 0.0],
|
||||
[-7.0000000000005, 1.499999999999667, 0.0],
|
||||
[-7.0000000000005, 1.9999999999996394, 0.0],
|
||||
[-7.0000000000005, 2.499999999999611, 0.0],
|
||||
[-7.0000000000005, 2.9999999999995834, 0.0],
|
||||
[-7.0000000000005, 3.499999999999556, 0.0],
|
||||
[-7.0000000000005, 3.9999999999995275, 0.0],
|
||||
[-7.0000000000005, 4.499999999999501, 0.0]
|
||||
],
|
||||
"req": 1,
|
||||
"sop": 3,
|
||||
"target": 0.9219544457292888,
|
||||
"tol": 1e-05,
|
||||
"vecs": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cp_nurb_min_transformed",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:5176 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x1x19 bbox grid (95 points), after Transform(SetCanonical((0,7,-5), (1,0,0), (0,0,1)))",
|
||||
"inputs": {
|
||||
"op": "gps",
|
||||
"curve": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[-9.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, -4.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, -3.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, -2.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, -1.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, -0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, 1.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, 2.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, 3.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-7.0, 4.0, 0.0, -1.7976931348623157e+308],
|
||||
[-8.0, 4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-9.0, 4.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.05263157894736842, 0.10526315789473684, 0.15789473684210525, 0.21052631578947367, 0.2631578947368421, 0.3157894736842105, 0.3684210526315789, 0.42105263157894735, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.631578947368421, 0.6842105263157895, 0.7368421052631579, 0.7894736842105263, 0.8421052631578947, 0.8947368421052632, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl": [0.0, 1.0],
|
||||
"p": [-9.0, 7.0, -9.5],
|
||||
"pts": [
|
||||
[-9.0, 7.0, -9.000000000000028],
|
||||
[-9.0, 7.0, -8.500000000000055],
|
||||
[-9.0, 7.0, -8.000000000000083],
|
||||
[-9.0, 7.0, -7.500000000000111],
|
||||
[-9.0, 7.0, -7.0000000000001386],
|
||||
[-9.0, 7.0, -6.500000000000167],
|
||||
[-9.0, 7.0, -6.0000000000001945],
|
||||
[-9.0, 7.0, -5.500000000000222],
|
||||
[-9.0, 7.0, -5.00000000000025],
|
||||
[-9.0, 7.0, -4.500000000000277],
|
||||
[-9.0, 7.0, -4.0000000000003055],
|
||||
[-9.0, 7.0, -3.500000000000333],
|
||||
[-9.0, 7.0, -3.0000000000003606],
|
||||
[-9.0, 7.0, -2.500000000000389],
|
||||
[-9.0, 7.0, -2.0000000000004166],
|
||||
[-9.0, 7.0, -1.500000000000444],
|
||||
[-9.0, 7.0, -1.0000000000004725],
|
||||
[-9.0, 7.0, -0.5000000000004992],
|
||||
[-8.500000000000124, 7.0, -9.5],
|
||||
[-8.500000000000124, 7.0, -9.000000000000028],
|
||||
[-8.500000000000124, 7.0, -8.500000000000055],
|
||||
[-8.500000000000124, 7.0, -8.000000000000083],
|
||||
[-8.500000000000124, 7.0, -7.500000000000111],
|
||||
[-8.500000000000124, 7.0, -7.0000000000001386],
|
||||
[-8.500000000000124, 7.0, -6.500000000000167],
|
||||
[-8.500000000000124, 7.0, -6.0000000000001945],
|
||||
[-8.500000000000124, 7.0, -5.500000000000222],
|
||||
[-8.500000000000124, 7.0, -5.00000000000025],
|
||||
[-8.500000000000124, 7.0, -4.500000000000277],
|
||||
[-8.500000000000124, 7.0, -4.0000000000003055],
|
||||
[-8.500000000000124, 7.0, -3.500000000000333],
|
||||
[-8.500000000000124, 7.0, -3.0000000000003606],
|
||||
[-8.500000000000124, 7.0, -2.500000000000389],
|
||||
[-8.500000000000124, 7.0, -2.0000000000004166],
|
||||
[-8.500000000000124, 7.0, -1.500000000000444],
|
||||
[-8.500000000000124, 7.0, -1.0000000000004725],
|
||||
[-8.500000000000124, 7.0, -0.5000000000004992],
|
||||
[-8.00000000000025, 7.0, -9.5],
|
||||
[-8.00000000000025, 7.0, -9.000000000000028],
|
||||
[-8.00000000000025, 7.0, -8.500000000000055],
|
||||
[-8.00000000000025, 7.0, -8.000000000000083],
|
||||
[-8.00000000000025, 7.0, -7.500000000000111],
|
||||
[-8.00000000000025, 7.0, -7.0000000000001386],
|
||||
[-8.00000000000025, 7.0, -6.500000000000167],
|
||||
[-8.00000000000025, 7.0, -6.0000000000001945],
|
||||
[-8.00000000000025, 7.0, -5.500000000000222],
|
||||
[-8.00000000000025, 7.0, -5.00000000000025],
|
||||
[-8.00000000000025, 7.0, -4.500000000000277],
|
||||
[-8.00000000000025, 7.0, -4.0000000000003055],
|
||||
[-8.00000000000025, 7.0, -3.500000000000333],
|
||||
[-8.00000000000025, 7.0, -3.0000000000003606],
|
||||
[-8.00000000000025, 7.0, -2.500000000000389],
|
||||
[-8.00000000000025, 7.0, -2.0000000000004166],
|
||||
[-8.00000000000025, 7.0, -1.500000000000444],
|
||||
[-8.00000000000025, 7.0, -1.0000000000004725],
|
||||
[-8.00000000000025, 7.0, -0.5000000000004992],
|
||||
[-7.500000000000375, 7.0, -9.5],
|
||||
[-7.500000000000375, 7.0, -9.000000000000028],
|
||||
[-7.500000000000375, 7.0, -8.500000000000055],
|
||||
[-7.500000000000375, 7.0, -8.000000000000083],
|
||||
[-7.500000000000375, 7.0, -7.500000000000111],
|
||||
[-7.500000000000375, 7.0, -7.0000000000001386],
|
||||
[-7.500000000000375, 7.0, -6.500000000000167],
|
||||
[-7.500000000000375, 7.0, -6.0000000000001945],
|
||||
[-7.500000000000375, 7.0, -5.500000000000222],
|
||||
[-7.500000000000375, 7.0, -5.00000000000025],
|
||||
[-7.500000000000375, 7.0, -4.500000000000277],
|
||||
[-7.500000000000375, 7.0, -4.0000000000003055],
|
||||
[-7.500000000000375, 7.0, -3.500000000000333],
|
||||
[-7.500000000000375, 7.0, -3.0000000000003606],
|
||||
[-7.500000000000375, 7.0, -2.500000000000389],
|
||||
[-7.500000000000375, 7.0, -2.0000000000004166],
|
||||
[-7.500000000000375, 7.0, -1.500000000000444],
|
||||
[-7.500000000000375, 7.0, -1.0000000000004725],
|
||||
[-7.500000000000375, 7.0, -0.5000000000004992],
|
||||
[-7.0000000000005, 7.0, -9.5],
|
||||
[-7.0000000000005, 7.0, -9.000000000000028],
|
||||
[-7.0000000000005, 7.0, -8.500000000000055],
|
||||
[-7.0000000000005, 7.0, -8.000000000000083],
|
||||
[-7.0000000000005, 7.0, -7.500000000000111],
|
||||
[-7.0000000000005, 7.0, -7.0000000000001386],
|
||||
[-7.0000000000005, 7.0, -6.500000000000167],
|
||||
[-7.0000000000005, 7.0, -6.0000000000001945],
|
||||
[-7.0000000000005, 7.0, -5.500000000000222],
|
||||
[-7.0000000000005, 7.0, -5.00000000000025],
|
||||
[-7.0000000000005, 7.0, -4.500000000000277],
|
||||
[-7.0000000000005, 7.0, -4.0000000000003055],
|
||||
[-7.0000000000005, 7.0, -3.500000000000333],
|
||||
[-7.0000000000005, 7.0, -3.0000000000003606],
|
||||
[-7.0000000000005, 7.0, -2.500000000000389],
|
||||
[-7.0000000000005, 7.0, -2.0000000000004166],
|
||||
[-7.0000000000005, 7.0, -1.500000000000444],
|
||||
[-7.0000000000005, 7.0, -1.0000000000004725],
|
||||
[-7.0000000000005, 7.0, -0.5000000000004992]
|
||||
],
|
||||
"req": 1,
|
||||
"sop": 3,
|
||||
"target": 0.9219544457292888,
|
||||
"tol": 1e-05,
|
||||
"vecs": [],
|
||||
"xf": [
|
||||
{
|
||||
"o": [0.0, 7.0, -5.0],
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 0.0, 1.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cp_nurb_normalize_original",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:5183 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x5x1 bbox grid (25 points), before Transform",
|
||||
"inputs": {
|
||||
"op": "gps",
|
||||
"curve": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[-5.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, -4.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, -3.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, -2.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, -1.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, 1.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, 2.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, 3.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, 4.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, 4.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.05263157894736842, 0.10526315789473684, 0.15789473684210525, 0.21052631578947367, 0.2631578947368421, 0.3157894736842105, 0.3684210526315789, 0.42105263157894735, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.631578947368421, 0.6842105263157895, 0.7368421052631579, 0.7894736842105263, 0.8421052631578947, 0.8947368421052632, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl": [0.0, 1.0],
|
||||
"p": [-5.0, -4.5, 0.0],
|
||||
"pts": [
|
||||
[-5.0, -2.2500000000005627, 0.0],
|
||||
[-5.0, -1.1253220577600587e-12, 0.0],
|
||||
[-5.0, 2.2499999999983125, 0.0],
|
||||
[-5.0, 4.499999999997749, 0.0],
|
||||
[-4.500000000000125, -4.5, 0.0],
|
||||
[-4.500000000000125, -2.2500000000005627, 0.0],
|
||||
[-4.500000000000125, -1.1253220577600587e-12, 0.0],
|
||||
[-4.500000000000125, 2.2499999999983125, 0.0],
|
||||
[-4.500000000000125, 4.499999999997749, 0.0],
|
||||
[-4.0000000000002505, -4.5, 0.0],
|
||||
[-4.0000000000002505, -2.2500000000005627, 0.0],
|
||||
[-4.0000000000002505, -1.1253220577600587e-12, 0.0],
|
||||
[-4.0000000000002505, 2.2499999999983125, 0.0],
|
||||
[-4.0000000000002505, 4.499999999997749, 0.0],
|
||||
[-3.500000000000375, -4.5, 0.0],
|
||||
[-3.500000000000375, -2.2500000000005627, 0.0],
|
||||
[-3.500000000000375, -1.1253220577600587e-12, 0.0],
|
||||
[-3.500000000000375, 2.2499999999983125, 0.0],
|
||||
[-3.500000000000375, 4.499999999997749, 0.0],
|
||||
[-3.0000000000005, -4.5, 0.0],
|
||||
[-3.0000000000005, -2.2500000000005627, 0.0],
|
||||
[-3.0000000000005, -1.1253220577600587e-12, 0.0],
|
||||
[-3.0000000000005, 2.2499999999983125, 0.0],
|
||||
[-3.0000000000005, 4.499999999997749, 0.0]
|
||||
],
|
||||
"req": 1,
|
||||
"sop": 5,
|
||||
"target": 0.9219544457292888,
|
||||
"tol": 1e-05,
|
||||
"vecs": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cp_nurb_normalize_transformed",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:5192 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x1x5 bbox grid (25 points), after Transform(SetCanonical((0,7,-5), (1,0,0), (0,0,1)), scale (1,0.5,1))",
|
||||
"inputs": {
|
||||
"op": "gps",
|
||||
"curve": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[-5.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, -4.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, -3.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, -2.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, -1.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, -0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, 1.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, 2.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, 3.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-3.0, 4.0, 0.0, -1.7976931348623157e+308],
|
||||
[-4.0, 4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-5.0, 4.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.05263157894736842, 0.10526315789473684, 0.15789473684210525, 0.21052631578947367, 0.2631578947368421, 0.3157894736842105, 0.3684210526315789, 0.42105263157894735, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.631578947368421, 0.6842105263157895, 0.7368421052631579, 0.7894736842105263, 0.8421052631578947, 0.8947368421052632, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl": [0.0, 1.0],
|
||||
"p": [-5.0, 7.0, -7.25],
|
||||
"pts": [
|
||||
[-5.0, 7.0, -6.1250000000002816],
|
||||
[-5.0, 7.0, -5.000000000000563],
|
||||
[-5.0, 7.0, -3.8750000000008438],
|
||||
[-5.0, 7.0, -2.7500000000011253],
|
||||
[-4.500000000000125, 7.0, -7.25],
|
||||
[-4.500000000000125, 7.0, -6.1250000000002816],
|
||||
[-4.500000000000125, 7.0, -5.000000000000563],
|
||||
[-4.500000000000125, 7.0, -3.8750000000008438],
|
||||
[-4.500000000000125, 7.0, -2.7500000000011253],
|
||||
[-4.0000000000002505, 7.0, -7.25],
|
||||
[-4.0000000000002505, 7.0, -6.1250000000002816],
|
||||
[-4.0000000000002505, 7.0, -5.000000000000563],
|
||||
[-4.0000000000002505, 7.0, -3.8750000000008438],
|
||||
[-4.0000000000002505, 7.0, -2.7500000000011253],
|
||||
[-3.500000000000375, 7.0, -7.25],
|
||||
[-3.500000000000375, 7.0, -6.1250000000002816],
|
||||
[-3.500000000000375, 7.0, -5.000000000000563],
|
||||
[-3.500000000000375, 7.0, -3.8750000000008438],
|
||||
[-3.500000000000375, 7.0, -2.7500000000011253],
|
||||
[-3.0000000000005, 7.0, -7.25],
|
||||
[-3.0000000000005, 7.0, -6.1250000000002816],
|
||||
[-3.0000000000005, 7.0, -5.000000000000563],
|
||||
[-3.0000000000005, 7.0, -3.8750000000008438],
|
||||
[-3.0000000000005, 7.0, -2.7500000000011253]
|
||||
],
|
||||
"req": 1,
|
||||
"sop": 5,
|
||||
"target": 0.4924428900898052,
|
||||
"tol": 1e-05,
|
||||
"vecs": [],
|
||||
"xf": [
|
||||
{
|
||||
"o": [0.0, 7.0, -5.0],
|
||||
"scale": [1.0, 0.5, 1.0],
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 0.0, 1.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cp_nurb_max_original",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:5199 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x5x1 bbox grid (25 points), before Transform",
|
||||
"inputs": {
|
||||
"op": "gps",
|
||||
"curve": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[-1.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, -4.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, -3.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -2.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, -2.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, -1.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -0.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, 1.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 1.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 2.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, 3.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 3.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 4.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, 4.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.05263157894736842, 0.10526315789473684, 0.15789473684210525, 0.21052631578947367, 0.2631578947368421, 0.3157894736842105, 0.3684210526315789, 0.42105263157894735, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.631578947368421, 0.6842105263157895, 0.7368421052631579, 0.7894736842105263, 0.8421052631578947, 0.8947368421052632, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl": [0.0, 1.0],
|
||||
"p": [-1.0, -4.5, 0.0],
|
||||
"pts": [
|
||||
[-1.0, -2.2500000000005627, 0.0],
|
||||
[-1.0, -1.1253220577600587e-12, 0.0],
|
||||
[-1.0, 2.2499999999983125, 0.0],
|
||||
[-1.0, 4.499999999997749, 0.0],
|
||||
[-0.500000000000125, -4.5, 0.0],
|
||||
[-0.500000000000125, -2.2500000000005627, 0.0],
|
||||
[-0.500000000000125, -1.1253220577600587e-12, 0.0],
|
||||
[-0.500000000000125, 2.2499999999983125, 0.0],
|
||||
[-0.500000000000125, 4.499999999997749, 0.0],
|
||||
[-2.5002222514558525e-13, -4.5, 0.0],
|
||||
[-2.5002222514558525e-13, -2.2500000000005627, 0.0],
|
||||
[-2.5002222514558525e-13, -1.1253220577600587e-12, 0.0],
|
||||
[-2.5002222514558525e-13, 2.2499999999983125, 0.0],
|
||||
[-2.5002222514558525e-13, 4.499999999997749, 0.0],
|
||||
[0.49999999999962497, -4.5, 0.0],
|
||||
[0.49999999999962497, -2.2500000000005627, 0.0],
|
||||
[0.49999999999962497, -1.1253220577600587e-12, 0.0],
|
||||
[0.49999999999962497, 2.2499999999983125, 0.0],
|
||||
[0.49999999999962497, 4.499999999997749, 0.0],
|
||||
[0.9999999999995, -4.5, 0.0],
|
||||
[0.9999999999995, -2.2500000000005627, 0.0],
|
||||
[0.9999999999995, -1.1253220577600587e-12, 0.0],
|
||||
[0.9999999999995, 2.2499999999983125, 0.0],
|
||||
[0.9999999999995, 4.499999999997749, 0.0]
|
||||
],
|
||||
"req": 1,
|
||||
"sop": 4,
|
||||
"target": 0.9219544457292888,
|
||||
"tol": 1e-05,
|
||||
"vecs": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cp_nurb_max_transformed",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:5207 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x1x5 bbox grid (25 points), after Transform(SetCanonical((0,7,-5), (1,0,0), (0,0,1)))",
|
||||
"inputs": {
|
||||
"op": "gps",
|
||||
"curve": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[-1.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, -4.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -3.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, -3.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -2.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, -2.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -1.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, -1.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, -0.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 0.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, 1.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 1.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 2.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 2.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, 3.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 3.5, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 4.0, 0.0, -1.7976931348623157e+308],
|
||||
[0.0, 4.5, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, 4.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.05263157894736842, 0.10526315789473684, 0.15789473684210525, 0.21052631578947367, 0.2631578947368421, 0.3157894736842105, 0.3684210526315789, 0.42105263157894735, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.631578947368421, 0.6842105263157895, 0.7368421052631579, 0.7894736842105263, 0.8421052631578947, 0.8947368421052632, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl": [0.0, 1.0],
|
||||
"p": [-1.0, 7.0, -9.5],
|
||||
"pts": [
|
||||
[-1.0, 7.0, -7.250000000000563],
|
||||
[-1.0, 7.0, -5.000000000001125],
|
||||
[-1.0, 7.0, -2.7500000000016875],
|
||||
[-1.0, 7.0, -0.5000000000022506],
|
||||
[-0.500000000000125, 7.0, -9.5],
|
||||
[-0.500000000000125, 7.0, -7.250000000000563],
|
||||
[-0.500000000000125, 7.0, -5.000000000001125],
|
||||
[-0.500000000000125, 7.0, -2.7500000000016875],
|
||||
[-0.500000000000125, 7.0, -0.5000000000022506],
|
||||
[-2.5002222514558525e-13, 7.0, -9.5],
|
||||
[-2.5002222514558525e-13, 7.0, -7.250000000000563],
|
||||
[-2.5002222514558525e-13, 7.0, -5.000000000001125],
|
||||
[-2.5002222514558525e-13, 7.0, -2.7500000000016875],
|
||||
[-2.5002222514558525e-13, 7.0, -0.5000000000022506],
|
||||
[0.49999999999962497, 7.0, -9.5],
|
||||
[0.49999999999962497, 7.0, -7.250000000000563],
|
||||
[0.49999999999962497, 7.0, -5.000000000001125],
|
||||
[0.49999999999962497, 7.0, -2.7500000000016875],
|
||||
[0.49999999999962497, 7.0, -0.5000000000022506],
|
||||
[0.9999999999995, 7.0, -9.5],
|
||||
[0.9999999999995, 7.0, -7.250000000000563],
|
||||
[0.9999999999995, 7.0, -5.000000000001125],
|
||||
[0.9999999999995, 7.0, -2.7500000000016875],
|
||||
[0.9999999999995, 7.0, -0.5000000000022506]
|
||||
],
|
||||
"req": 1,
|
||||
"sop": 4,
|
||||
"target": 0.9219544457292888,
|
||||
"tol": 1e-05,
|
||||
"vecs": [],
|
||||
"xf": [
|
||||
{
|
||||
"o": [0.0, 7.0, -5.0],
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 0.0, 1.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cp_nurb_at_distance_original",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:5214 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x5x1 bbox grid (25 points), before Transform",
|
||||
"inputs": {
|
||||
"op": "gps",
|
||||
"curve": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[3.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, -4.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -3.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, -3.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -2.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, -2.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -1.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, -1.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -0.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 0.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, 1.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 1.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, 2.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 2.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, 3.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 3.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, 4.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 4.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, 4.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.05263157894736842, 0.10526315789473684, 0.15789473684210525, 0.21052631578947367, 0.2631578947368421, 0.3157894736842105, 0.3684210526315789, 0.42105263157894735, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.631578947368421, 0.6842105263157895, 0.7368421052631579, 0.7894736842105263, 0.8421052631578947, 0.8947368421052632, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl": [0.0, 1.0],
|
||||
"p": [3.0, -4.5, 0.0],
|
||||
"pts": [
|
||||
[3.0, -2.2500000000005627, 0.0],
|
||||
[3.0, -1.1253220577600587e-12, 0.0],
|
||||
[3.0, 2.2499999999983125, 0.0],
|
||||
[3.0, 4.499999999997749, 0.0],
|
||||
[3.4999999999998748, -4.5, 0.0],
|
||||
[3.4999999999998748, -2.2500000000005627, 0.0],
|
||||
[3.4999999999998748, -1.1253220577600587e-12, 0.0],
|
||||
[3.4999999999998748, 2.2499999999983125, 0.0],
|
||||
[3.4999999999998748, 4.499999999997749, 0.0],
|
||||
[3.99999999999975, -4.5, 0.0],
|
||||
[3.99999999999975, -2.2500000000005627, 0.0],
|
||||
[3.99999999999975, -1.1253220577600587e-12, 0.0],
|
||||
[3.99999999999975, 2.2499999999983125, 0.0],
|
||||
[3.99999999999975, 4.499999999997749, 0.0],
|
||||
[4.499999999999625, -4.5, 0.0],
|
||||
[4.499999999999625, -2.2500000000005627, 0.0],
|
||||
[4.499999999999625, -1.1253220577600587e-12, 0.0],
|
||||
[4.499999999999625, 2.2499999999983125, 0.0],
|
||||
[4.499999999999625, 4.499999999997749, 0.0],
|
||||
[4.9999999999995, -4.5, 0.0],
|
||||
[4.9999999999995, -2.2500000000005627, 0.0],
|
||||
[4.9999999999995, -1.1253220577600587e-12, 0.0],
|
||||
[4.9999999999995, 2.2499999999983125, 0.0],
|
||||
[4.9999999999995, 4.499999999997749, 0.0]
|
||||
],
|
||||
"req": 1,
|
||||
"sop": 6,
|
||||
"target": 0.9219544457292888,
|
||||
"tol": 1e-05,
|
||||
"vecs": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cp_nurb_at_distance_transformed",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:5222 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x1x5 bbox grid (25 points), after Transform(SetCanonical((0,7,-5), (1,0,0), (0,0,1)))",
|
||||
"inputs": {
|
||||
"op": "gps",
|
||||
"curve": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[3.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -4.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, -4.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -3.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, -3.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -2.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, -2.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -1.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, -1.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, -0.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 0.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, 1.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 1.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, 2.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 2.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, 3.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 3.5, 0.0, -1.7976931348623157e+308],
|
||||
[5.0, 4.0, 0.0, -1.7976931348623157e+308],
|
||||
[4.0, 4.5, 0.0, -1.7976931348623157e+308],
|
||||
[3.0, 4.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.05263157894736842, 0.10526315789473684, 0.15789473684210525, 0.21052631578947367, 0.2631578947368421, 0.3157894736842105, 0.3684210526315789, 0.42105263157894735, 0.47368421052631576, 0.5263157894736842, 0.5789473684210527, 0.631578947368421, 0.6842105263157895, 0.7368421052631579, 0.7894736842105263, 0.8421052631578947, 0.8947368421052632, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl": [0.0, 1.0],
|
||||
"p": [3.0, 7.0, -9.5],
|
||||
"pts": [
|
||||
[3.0, 7.0, -7.250000000000563],
|
||||
[3.0, 7.0, -5.000000000001125],
|
||||
[3.0, 7.0, -2.7500000000016875],
|
||||
[3.0, 7.0, -0.5000000000022506],
|
||||
[3.4999999999998748, 7.0, -9.5],
|
||||
[3.4999999999998748, 7.0, -7.250000000000563],
|
||||
[3.4999999999998748, 7.0, -5.000000000001125],
|
||||
[3.4999999999998748, 7.0, -2.7500000000016875],
|
||||
[3.4999999999998748, 7.0, -0.5000000000022506],
|
||||
[3.99999999999975, 7.0, -9.5],
|
||||
[3.99999999999975, 7.0, -7.250000000000563],
|
||||
[3.99999999999975, 7.0, -5.000000000001125],
|
||||
[3.99999999999975, 7.0, -2.7500000000016875],
|
||||
[3.99999999999975, 7.0, -0.5000000000022506],
|
||||
[4.499999999999625, 7.0, -9.5],
|
||||
[4.499999999999625, 7.0, -7.250000000000563],
|
||||
[4.499999999999625, 7.0, -5.000000000001125],
|
||||
[4.499999999999625, 7.0, -2.7500000000016875],
|
||||
[4.499999999999625, 7.0, -0.5000000000022506],
|
||||
[4.9999999999995, 7.0, -9.5],
|
||||
[4.9999999999995, 7.0, -7.250000000000563],
|
||||
[4.9999999999995, 7.0, -5.000000000001125],
|
||||
[4.9999999999995, 7.0, -2.7500000000016875],
|
||||
[4.9999999999995, 7.0, -0.5000000000022506]
|
||||
],
|
||||
"req": 1,
|
||||
"sop": 6,
|
||||
"target": 0.9219544457292888,
|
||||
"tol": 1e-05,
|
||||
"vecs": [],
|
||||
"xf": [
|
||||
{
|
||||
"o": [0.0, 7.0, -5.0],
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 0.0, 1.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,261 @@
|
||||
{
|
||||
"cases": [
|
||||
{
|
||||
"name": "cci_coincidence_nurbs_partly_coincident",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:3975 my_test_cci_coincidence: GlobalCurveIntersect(pNurb1, pNurb2) via my_test_GlobalCC_intersect (expects 3)",
|
||||
"inputs": {
|
||||
"op": "gci",
|
||||
"c1": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[0.0, 0.1, 0.0, -1.7976931348623157e+308],
|
||||
[0.2, 0.1, 0.0, -1.7976931348623157e+308],
|
||||
[0.4, 0.2, 0.0, -1.7976931348623157e+308],
|
||||
[0.6, -0.3, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[1.1, 0.2, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 0.5, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.2, 0.4, 0.6, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"c2": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[0.0, 0.1, 0.0, -1.7976931348623157e+308],
|
||||
[0.2, 0.1, 0.0, -1.7976931348623157e+308],
|
||||
[0.4, 0.2, 0.0, -1.7976931348623157e+308],
|
||||
[0.6, -0.3, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 0.2, 0.0, -1.7976931348623157e+308],
|
||||
[1.1, -0.1, 0.0, -1.7976931348623157e+308],
|
||||
[1.0, 0.3, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 3,
|
||||
"u": [0.0, 0.0, 0.0, 0.0, 0.2, 0.4, 0.6, 1.0, 1.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl1": [0.0, 1.0],
|
||||
"ivl2": [0.0, 1.0],
|
||||
"skip": false,
|
||||
"tol": 1e-05
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cci_coincidence_overlapping_lines",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:3988 my_test_cci_coincidence: GlobalCurveIntersect(pLine, pLine2) (expects 1)",
|
||||
"inputs": {
|
||||
"op": "gci",
|
||||
"c1": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[-2.0, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[-1.0, 0.0, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 1,
|
||||
"u": [0.0, 0.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"c2": {
|
||||
"bspline": {
|
||||
"cpts": [
|
||||
[-1.5, 0.0, 0.0, -1.7976931348623157e+308],
|
||||
[-0.5, 0.0, 0.0, -1.7976931348623157e+308]
|
||||
],
|
||||
"dim": 3,
|
||||
"p": 1,
|
||||
"u": [0.0, 0.0, 1.0, 1.0]
|
||||
}
|
||||
},
|
||||
"ivl1": [0.0, 1.0],
|
||||
"ivl2": [0.0, 1.0],
|
||||
"skip": false,
|
||||
"tol": 1e-05
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cci_coincidence_circles_radius_gap",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:3992 my_test_cci_coincidence: GlobalCurveIntersect(pCir4 quintic r=0.500005, pCir3 quadratic r=0.499999) (expects 1)",
|
||||
"inputs": {
|
||||
"op": "gci",
|
||||
"c1": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [1.5, -1.5, 0.0],
|
||||
"quintic": true,
|
||||
"radius": 0.500005,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"c2": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [1.5, -1.5, 0.0],
|
||||
"radius": 0.499999,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"ivl1": [0.0, 1.0],
|
||||
"ivl2": [0.0, 1.0],
|
||||
"skip": false,
|
||||
"tol": 1e-05
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cci_coincidence_circles_quintic_quadratic",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:4001 my_test_cci_coincidence: GlobalCurveIntersect(pCir1 quintic, pCir2 quadratic) (expects 1)",
|
||||
"inputs": {
|
||||
"op": "gci",
|
||||
"c1": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [2.0, 0.0, 0.0],
|
||||
"quintic": true,
|
||||
"radius": 0.5,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"c2": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [2.0, 0.0, 0.0],
|
||||
"radius": 0.5,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"ivl1": [0.0, 1.0],
|
||||
"ivl2": [0.0, 1.0],
|
||||
"skip": false,
|
||||
"tol": 1e-05
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cci_coincidence_circles_rotated_start",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:4014 my_test_cci_coincidence: GlobalCurveIntersect(pCir5, pCir6 after Transform(SetCanonical(0, (0,1,0), (-1,0,0))) at :4012) (expects 2)",
|
||||
"inputs": {
|
||||
"op": "gci",
|
||||
"c1": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [0.0, 0.0, 0.0],
|
||||
"quintic": true,
|
||||
"radius": 0.5,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"c2": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [0.0, 0.0, 0.0],
|
||||
"radius": 0.5,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"ivl1": [0.0, 1.0],
|
||||
"ivl2": [0.0, 1.0],
|
||||
"skip": false,
|
||||
"tol": 1e-05,
|
||||
"xf2": [
|
||||
{
|
||||
"o": [0.0, 0.0, 0.0],
|
||||
"x": [0.0, 1.0, 0.0],
|
||||
"y": [-1.0, 0.0, 0.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cci_coincidence_circles_opposite_direction",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:4022 my_test_cci_coincidence: GlobalCurveIntersect(pCir5, pCir7 after Transform(SetCanonical(0, (1,0,0), (0,-1,0))) at :4020) (expects 1)",
|
||||
"inputs": {
|
||||
"op": "gci",
|
||||
"c1": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [0.0, 0.0, 0.0],
|
||||
"quintic": true,
|
||||
"radius": 0.5,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"c2": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [0.0, 0.0, 0.0],
|
||||
"radius": 0.5,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"ivl1": [0.0, 1.0],
|
||||
"ivl2": [0.0, 1.0],
|
||||
"skip": false,
|
||||
"tol": 1e-05,
|
||||
"xf2": [
|
||||
{
|
||||
"o": [0.0, 0.0, 0.0],
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, -1.0, 0.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cci_coincidence_circles_rotated_opposite",
|
||||
"upstream_ref": "tests/prog_test/src/smCurveTest.cpp:4030 my_test_cci_coincidence: GlobalCurveIntersect(pCir5, pCir8 after Transform(SetCanonical(0, (0,1,0), (1,0,0))) at :4028) (expects 2)",
|
||||
"inputs": {
|
||||
"op": "gci",
|
||||
"c1": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [0.0, 0.0, 0.0],
|
||||
"quintic": true,
|
||||
"radius": 0.5,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"c2": {
|
||||
"circle": {
|
||||
"a0": 0.0,
|
||||
"a1": 360.0,
|
||||
"center": [0.0, 0.0, 0.0],
|
||||
"radius": 0.5,
|
||||
"x": [1.0, 0.0, 0.0],
|
||||
"y": [0.0, 1.0, 0.0]
|
||||
}
|
||||
},
|
||||
"ivl1": [0.0, 1.0],
|
||||
"ivl2": [0.0, 1.0],
|
||||
"skip": false,
|
||||
"tol": 1e-05,
|
||||
"xf2": [
|
||||
{
|
||||
"o": [0.0, 0.0, 0.0],
|
||||
"x": [0.0, 1.0, 0.0],
|
||||
"y": [1.0, 0.0, 0.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,114 @@
|
||||
{
|
||||
"cases": [
|
||||
{
|
||||
"name": "prog_drop_trim_ps10_1_sub_piece_natural_boundary",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2144 my_test_drop_curve: drop curve to sub-piece of surface natural boundary; pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL)",
|
||||
"inputs": {
|
||||
"op": "trim",
|
||||
"surface": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Srf1.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Crv1.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.01,
|
||||
"keep_all": true,
|
||||
"on_surface": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "prog_drop_trim_ps10_2_non_iso_large_aspect",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2182 my_test_drop_curve: nonIsoCurve drop to large aspect ratio surface (large radius, long slender circular face); pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL)",
|
||||
"inputs": {
|
||||
"op": "trim",
|
||||
"surface": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Srf2.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Crv2.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.01,
|
||||
"keep_all": true,
|
||||
"on_surface": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "prog_drop_trim_ps10_3_small_cylinder_end_on_boundary",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2227 my_test_drop_curve: small cylinder with curve ending on natural boundary; pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL)",
|
||||
"inputs": {
|
||||
"op": "trim",
|
||||
"surface": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Srf3.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Crv3.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.01,
|
||||
"keep_all": true,
|
||||
"on_surface": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "prog_drop_trim_ps10_4_short_curve_not_over_surface",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2266 my_test_drop_curve: very large aspect ratio surface, very short curve not over the surface - no drop result; pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL)",
|
||||
"inputs": {
|
||||
"op": "trim",
|
||||
"surface": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Srf4.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Crv4.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.01,
|
||||
"keep_all": true,
|
||||
"on_surface": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "prog_drop_trim_ps10_5_long_natural_boundary_large_aspect",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2304 my_test_drop_curve: long natural boundary drop to very large aspect surface; pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL)",
|
||||
"inputs": {
|
||||
"op": "trim",
|
||||
"surface": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Srf5.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"kind": "file",
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS10_drp_Crv5.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.01,
|
||||
"keep_all": true,
|
||||
"on_surface": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"cases": [
|
||||
{
|
||||
"name": "lift_crv1_short_iso_large_aspect",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2394 my_test_drop_curve: short isoParameter curve lift on very large aspect ratio surface; pSurface->LiftCurve(ctx, GetNaturalUVDomain(), *pCurve, GetNaturalInterval(), 0.01, dMaxDistToSurf, p3DCurve)",
|
||||
"inputs": {
|
||||
"op": 2,
|
||||
"surface": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_LiftCrv_Srf1.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_LiftCrv_Crv1.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.01
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lift_crv2_internal_normal_surface",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2442 my_test_drop_curve: internal curve lift from normal surface; pSurface->LiftCurve(ctx, GetNaturalUVDomain(), *pCurve, GetNaturalInterval(), 0.005, dMaxDistToSurf, p3DCurve)",
|
||||
"inputs": {
|
||||
"op": 2,
|
||||
"surface": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_LiftCrv_Srf2.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_LiftCrv_Crv2.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.005
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lift_crv3_internal_large_aspect",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2490 my_test_drop_curve: internal curve lift from large aspect surface; pSurface->LiftCurve(ctx, GetNaturalUVDomain(), *pCurve, GetNaturalInterval(), 0.005, dMaxDistToSurf, p3DCurve)",
|
||||
"inputs": {
|
||||
"op": 2,
|
||||
"surface": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_LiftCrv_Srf3.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_LiftCrv_Crv3.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.005
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lift_crv4_nonlinear_normal_surface",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2538 my_test_drop_curve: non linear curve lift from normal surface; pSurface->LiftCurve(ctx, GetNaturalUVDomain(), *pCurve, GetNaturalInterval(), 0.005, dMaxDistToSurf, p3DCurve)",
|
||||
"inputs": {
|
||||
"op": 2,
|
||||
"surface": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_LiftCrv_Srf4.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_LiftCrv_Crv4.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.005
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lift_crv1_iso_segment_swept",
|
||||
"upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:2636 my_test_drop_curve: isoparam segment curve on large aspect ratio swept surface with dramatic turns; pSurface->LiftCurve(ctx, GetNaturalUVDomain(), *pCurve, GetNaturalInterval(), 0.01, dMaxDistToSurf, p3DCurve)",
|
||||
"inputs": {
|
||||
"op": 2,
|
||||
"surface": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_lift_srf1.dat"
|
||||
}
|
||||
},
|
||||
"curve": {
|
||||
"file": {
|
||||
"$upstream_file": "Drop/PS_lift_crv1.dat"
|
||||
}
|
||||
},
|
||||
"tol": 0.01
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,7 @@
|
||||
#include "sc_shim.h"
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include <SmAxis2Placement.h>
|
||||
#include <SmBSplineCurve.h>
|
||||
#include <SmContext.h>
|
||||
#include <SmCurve.h>
|
||||
@@ -348,6 +349,23 @@ SmCurve* read_curve(Rd& rd, const SmContext& ctx)
|
||||
return new (ctx) SmHermiteCurve(p1, d1, p2, d2, dim);
|
||||
}
|
||||
|
||||
// The transforms `nt (O X Y has_s S)*nt` after a curve block, applied to `c` in order.
|
||||
void read_transforms(Rd& rd, SmCurve* c)
|
||||
{
|
||||
int64_t nt = rd.idx();
|
||||
for (int64_t i = 0; i < nt; i++)
|
||||
{
|
||||
SmPoint3d o = rd.vec();
|
||||
SmVector3d x = rd.vec();
|
||||
SmVector3d y = rd.vec();
|
||||
bool has_s = rd.flag();
|
||||
SmVector3d s = rd.vec();
|
||||
SmAxis2Placement a2p;
|
||||
a2p.SetCanonical(o, x, y);
|
||||
c->Transform(a2p, has_s ? &s : NULL);
|
||||
}
|
||||
}
|
||||
|
||||
// `nv V[nv]` into `vecs`; returns NULL for nv == 0.
|
||||
const SmVector3d* read_vecs(Rd& rd, SmVector3d vecs[4])
|
||||
{
|
||||
@@ -423,6 +441,7 @@ void run(int32_t op, Rd& rd, const SmContext& ctx, std::vector<double>& o)
|
||||
case OP_GPS:
|
||||
{
|
||||
SmCurve* c = read_curve(rd, ctx);
|
||||
read_transforms(rd, c);
|
||||
double a = rd.num();
|
||||
double b = rd.num();
|
||||
SmSolverOperationType sop = (SmSolverOperationType)rd.idx();
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "sc_shim.h"
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include <SmAxis2Placement.h>
|
||||
#include <SmBSplineCurve.h>
|
||||
#include <SmCacheMgr.h>
|
||||
#include <SmContext.h>
|
||||
@@ -1851,6 +1852,23 @@ SmCurve* read_curve(Rd& rd, const SmContext& ctx)
|
||||
return new (ctx) SmHermiteCurve(p1, d1, p2, d2, dim);
|
||||
}
|
||||
|
||||
// The transforms `nt (O X Y has_s S)*nt` after a curve block, applied to `c` in order.
|
||||
void read_transforms(Rd& rd, SmCurve* c)
|
||||
{
|
||||
int64_t nt = rd.idx();
|
||||
for (int64_t i = 0; i < nt; i++)
|
||||
{
|
||||
SmPoint3d o = rd.vec();
|
||||
SmVector3d x = rd.vec();
|
||||
SmVector3d y = rd.vec();
|
||||
bool has_s = rd.flag();
|
||||
SmVector3d s = rd.vec();
|
||||
SmAxis2Placement a2p;
|
||||
a2p.SetCanonical(o, x, y);
|
||||
c->Transform(a2p, has_s ? &s : NULL);
|
||||
}
|
||||
}
|
||||
|
||||
// `nv V[nv]` into `vecs`; returns NULL for nv == 0.
|
||||
const SmVector3d* read_vecs(Rd& rd, SmVector3d vecs[4])
|
||||
{
|
||||
@@ -2036,6 +2054,7 @@ void run(int32_t op, Rd& rd, const SmContext& ctx, std::vector<double>& o)
|
||||
case OP_PROPERTY:
|
||||
{
|
||||
SmCurve* c = read_curve(rd, ctx);
|
||||
read_transforms(rd, c);
|
||||
double a = rd.num();
|
||||
double b = rd.num();
|
||||
SmCurvePropertyType prop = (SmCurvePropertyType)rd.idx();
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "sc_shim.h"
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include <SmAxis2Placement.h>
|
||||
#include <SmBSplineCurve.h>
|
||||
#include <SmContext.h>
|
||||
#include <SmCurve.h>
|
||||
@@ -70,6 +71,23 @@ SmCurve* read_curve(Rd& rd, const SmContext& ctx)
|
||||
return new (ctx) SmHermiteCurve(p1, d1, p2, d2, dim);
|
||||
}
|
||||
|
||||
// The transforms `nt (O X Y has_s S)*nt` after a curve block, applied to `c` in order.
|
||||
void read_transforms(Rd& rd, SmCurve* c)
|
||||
{
|
||||
int64_t nt = rd.idx();
|
||||
for (int64_t i = 0; i < nt; i++)
|
||||
{
|
||||
SmPoint3d o = rd.vec();
|
||||
SmVector3d x = rd.vec();
|
||||
SmVector3d y = rd.vec();
|
||||
bool has_s = rd.flag();
|
||||
SmVector3d s = rd.vec();
|
||||
SmAxis2Placement a2p;
|
||||
a2p.SetCanonical(o, x, y);
|
||||
c->Transform(a2p, has_s ? &s : NULL);
|
||||
}
|
||||
}
|
||||
|
||||
// A solution `type nvar nobj o0 o1 value s0 s1 [evalue e0 e1]`; objects `0` = a, `1` = b,
|
||||
// `2` = another object, `-1` = NULL.
|
||||
void put_sol(std::vector<double>& o, const SmSolution& s, const void* a, const void* b)
|
||||
@@ -98,10 +116,16 @@ void run(int32_t op, Rd& rd, const SmContext& ctx, std::vector<double>& o)
|
||||
case OP_GCI:
|
||||
{
|
||||
SmCurve* c = read_curve(rd, ctx);
|
||||
read_transforms(rd, c);
|
||||
double a = rd.num();
|
||||
double b = rd.num();
|
||||
bool same = rd.flag();
|
||||
SmCurve* other = same ? c : read_curve(rd, ctx);
|
||||
SmCurve* other = c;
|
||||
if (!same)
|
||||
{
|
||||
other = read_curve(rd, ctx);
|
||||
read_transforms(rd, other);
|
||||
}
|
||||
double a2 = rd.num();
|
||||
double b2 = rd.num();
|
||||
double tol = rd.num();
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "sc_shim.h"
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include <SmAxis2Placement.h>
|
||||
#include <SmBSplineCurve.h>
|
||||
#include <SmContext.h>
|
||||
#include <SmCurve.h>
|
||||
@@ -149,6 +150,23 @@ void run(int32_t op, Rd& rd, const SmContext& ctx, std::vector<double>& o)
|
||||
for (int64_t i = 0; i < nvec; i++)
|
||||
vecs[i] = rd.vec();
|
||||
SmSolutionRequestedType req = (SmSolutionRequestedType)rd.idx();
|
||||
if (rd.flag())
|
||||
{
|
||||
SmPoint3d org = rd.vec();
|
||||
SmVector3d x = rd.vec();
|
||||
SmVector3d y = rd.vec();
|
||||
SmAxis2Placement a2p;
|
||||
a2p.SetCanonical(org, x, y);
|
||||
SmStatus ts = c->Transform(a2p);
|
||||
if (ts != SM_SUCCESS)
|
||||
{
|
||||
o.push_back(st(ts));
|
||||
if (!same)
|
||||
delete other;
|
||||
delete c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
SmSolutionArray sols;
|
||||
SmStatus s = c->GlobalCurveSolve(SmExtent1d(a, b), *other, SmExtent1d(a2, b2), sop, tol,
|
||||
has_target ? &target : NULL, nvec > 0 ? vecs : NULL, req,
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
#include <nurbs.h>
|
||||
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#define SmDropPt sc_sdl1_SmDropPt
|
||||
@@ -162,11 +163,31 @@ struct Owned
|
||||
}
|
||||
};
|
||||
|
||||
// `0 a[3] b[3]` SmLine (its NURB made), `1 c[3] x[3] y[3] d0 d1 r` SmCircle, or
|
||||
// `2 p ncp cpts(x y z w) knots` SmBSplineCurve (dim 3).
|
||||
// `nbytes bytes`: a file path.
|
||||
std::string read_path(Rd& rd)
|
||||
{
|
||||
int64_t n = rd.idx(1, 4096);
|
||||
std::string p;
|
||||
for (int64_t i = 0; i < n; i++)
|
||||
p.push_back((char)rd.idx(1, 255));
|
||||
return p;
|
||||
}
|
||||
|
||||
// `0 a[3] b[3]` SmLine (its NURB made), `1 c[3] x[3] y[3] d0 d1 r` SmCircle,
|
||||
// `2 p ncp cpts(x y z w) knots` SmBSplineCurve (dim 3), or `3 path` SmBSplineCurve::ReadFromFile.
|
||||
SmCurve* read_curve(Rd& rd, const SmContext& ctx, Owned& own)
|
||||
{
|
||||
int64_t kind = rd.idx(0, 2);
|
||||
int64_t kind = rd.idx(0, 3);
|
||||
if (kind == 3)
|
||||
{
|
||||
std::string path = read_path(rd);
|
||||
SmBSplineCurve* c = NULL;
|
||||
SmBSplineCurve::ReadFromFile(ctx, path.c_str(), c);
|
||||
if (c == NULL)
|
||||
throw Bad();
|
||||
own.curves.push_back(c);
|
||||
return c;
|
||||
}
|
||||
if (kind == 0)
|
||||
{
|
||||
SmPoint3d a = rd.vec();
|
||||
@@ -212,13 +233,23 @@ SmCurve* read_curve(Rd& rd, const SmContext& ctx, Owned& own)
|
||||
return c;
|
||||
}
|
||||
|
||||
// `0 o x y scale dom` SmPlane, `1 p q nu nv net(x y z w) u v` SmBSplineSurface, or
|
||||
// `0 o x y scale dom` SmPlane, `1 p q nu nv net(x y z w) u v` SmBSplineSurface,
|
||||
// `2 gen point[3] axis[3] swap` SmSurfOfRevolution::CreateCanonical with the generator a
|
||||
// line `0 a b` or a circle `1 c x y d0 d1 r` (see read_curve). NULL when CreateCanonical
|
||||
// fails.
|
||||
// line `0 a b` or a circle `1 c x y d0 d1 r` (see read_curve), or `3 path`
|
||||
// SmBSplineSurface::ReadFromFile. NULL when CreateCanonical fails.
|
||||
SmSurface* read_surface(Rd& rd, const SmContext& ctx, Owned& own)
|
||||
{
|
||||
int64_t kind = rd.idx(0, 2);
|
||||
int64_t kind = rd.idx(0, 3);
|
||||
if (kind == 3)
|
||||
{
|
||||
std::string path = read_path(rd);
|
||||
SmBSplineSurface* s = NULL;
|
||||
SmBSplineSurface::ReadFromFile(ctx, path.c_str(), s);
|
||||
if (s == NULL)
|
||||
throw Bad();
|
||||
own.surfaces.push_back(s);
|
||||
return s;
|
||||
}
|
||||
if (kind == 0)
|
||||
{
|
||||
SmPoint3d o = rd.vec();
|
||||
@@ -751,9 +782,11 @@ void run(Rd& rd, std::vector<double>& o)
|
||||
{
|
||||
SmSurface* s = read_surface(rd, ctx, own);
|
||||
SmCurve* c = read_curve(rd, ctx, own);
|
||||
SmExtent2d d = rd.dom4();
|
||||
double i0 = rd.num();
|
||||
double i1 = rd.num();
|
||||
bool has_dom = rd.idx(0, 1) != 0;
|
||||
SmExtent2d d = has_dom ? rd.dom4() : SmExtent2d();
|
||||
bool has_ivl = rd.idx(0, 1) != 0;
|
||||
double i0 = has_ivl ? rd.num() : 0.0;
|
||||
double i1 = has_ivl ? rd.num() : 0.0;
|
||||
double tol = rd.num();
|
||||
SmBoolean keep = (SmBoolean)rd.idx(0, 1);
|
||||
SmBoolean on = (SmBoolean)rd.idx(0, 1);
|
||||
@@ -762,9 +795,12 @@ void run(Rd& rd, std::vector<double>& o)
|
||||
o.push_back(NO_SURFACE);
|
||||
return;
|
||||
}
|
||||
if (!has_dom)
|
||||
d = s->GetNaturalUVDomain();
|
||||
SmExtent1d ivl = has_ivl ? SmExtent1d(i0, i1) : c->GetNaturalInterval();
|
||||
double md = -1.0, mv = -1.0;
|
||||
SmTArray<SmBSplineCurve*> uvs;
|
||||
SmStatus stt = s->sc_sdl1_DropAndTrimCurve(ctx, d, *c, SmExtent1d(i0, i1), tol, md, mv, uvs, keep, on, NULL);
|
||||
SmStatus stt = s->sc_sdl1_DropAndTrimCurve(ctx, d, *c, ivl, tol, md, mv, uvs, keep, on, NULL);
|
||||
o.push_back(st(stt));
|
||||
if (stt == SM_SUCCESS)
|
||||
{
|
||||
|
||||
@@ -12,11 +12,13 @@
|
||||
#include "sc_shim.h"
|
||||
|
||||
#include "StdAfx.h"
|
||||
#include <SmBSplineCurve.h>
|
||||
#include <SmBSplineSurface.h>
|
||||
#include <SmContext.h>
|
||||
#include <SmCurve.h>
|
||||
#include <SmExtent1d.h>
|
||||
#include <SmExtent2d.h>
|
||||
#include <SmNurbsCrv.h>
|
||||
#include <SmPlane.h>
|
||||
#include <SmSolutionArray.h>
|
||||
#include <SmSurface.h>
|
||||
@@ -160,3 +162,109 @@ SC_EXPORT int32_t sc_surface_surface_p11_isb(const int32_t* kinds, const double*
|
||||
return sc_copy_out(out.data(), (int64_t)out.size(), output, cap, out_len);
|
||||
SC_CATCH
|
||||
}
|
||||
|
||||
// SmSurface::LiftCurve (SmSurface.cpp:24054) of a UV curve on a surface. The surface is read
|
||||
// with SmBSplineSurface::ReadFromFile(surf_path) when surf_path is given, else made from kind
|
||||
// and xyz as above; the UV curve is read with SmBSplineCurve::ReadFromFile(curve_path) when
|
||||
// curve_path is given, else it is a non-rational 2D SmBSplineCurve(gw_CURVE*, 2, FALSE) of
|
||||
// degree `degree` with ncp control points (u, v; z = NL_NOZ) and ncp + degree + 1 knots. The
|
||||
// domain (umin, vmin, umax, vmax) and interval are the surface's natural UV domain and the
|
||||
// curve's natural interval unless given. Output: [status, max_dist, type, dim, degree, ncp,
|
||||
// cpts (x y z w), nknots, knots, mults, interval min, max] of the lifted curve (only the status
|
||||
// when LiftCurve fails). The curve values come from GetOrCreateGwNurbPointer and GetKnots.
|
||||
SC_EXPORT int32_t sc_surface_surface_p11_lift(const char* surf_path, int32_t kind, const double* xyz,
|
||||
int32_t has_domain, const double* domain,
|
||||
const char* curve_path, int32_t degree, int64_t ncp,
|
||||
const double* cpts, const double* knots,
|
||||
int32_t has_interval, const double* interval, double tol,
|
||||
int32_t skip_checks, double* output, int64_t cap,
|
||||
int64_t* out_len)
|
||||
{
|
||||
SC_TRY
|
||||
SmContext context;
|
||||
SmSurface* s = NULL;
|
||||
if (surf_path != NULL)
|
||||
{
|
||||
SmBSplineSurface* bs = NULL;
|
||||
SmBSplineSurface::ReadFromFile(context, surf_path, bs);
|
||||
s = bs;
|
||||
}
|
||||
else
|
||||
s = sc_p11_surface(context, kind, xyz);
|
||||
if (s == NULL)
|
||||
return SC_ERR_ARG;
|
||||
SmBSplineCurve* uv = NULL;
|
||||
if (curve_path != NULL)
|
||||
SmBSplineCurve::ReadFromFile(context, curve_path, uv);
|
||||
else
|
||||
{
|
||||
gw_INDEX n = (gw_INDEX)(ncp - 1);
|
||||
gw_INDEX m = (gw_INDEX)(ncp + degree);
|
||||
gw_CURVE* cur = sm_AllocateNurbCurve(n, (gw_DEGREE)degree, m);
|
||||
if (cur != NULL)
|
||||
{
|
||||
for (gw_INDEX i = 0; i <= n; i++)
|
||||
{
|
||||
cur->pol->Pw[i].x = cpts[2 * i];
|
||||
cur->pol->Pw[i].y = cpts[2 * i + 1];
|
||||
cur->pol->Pw[i].z = NL_NOZ;
|
||||
cur->pol->Pw[i].w = NL_NOW;
|
||||
}
|
||||
for (gw_INDEX i = 0; i <= m; i++)
|
||||
cur->knt->U[i] = knots[i];
|
||||
uv = new (context) SmBSplineCurve(cur, 2, FALSE);
|
||||
}
|
||||
}
|
||||
if (uv == NULL)
|
||||
{
|
||||
delete s;
|
||||
return SC_ERR_ARG;
|
||||
}
|
||||
SmExtent2d dom = has_domain ? SmExtent2d(domain[0], domain[1], domain[2], domain[3]) : s->GetNaturalUVDomain();
|
||||
SmExtent1d ivl = has_interval ? SmExtent1d(interval[0], interval[1]) : uv->GetNaturalInterval();
|
||||
double max_dist = -1.0;
|
||||
SmBSplineCurve* lifted = NULL;
|
||||
SmStatus r = s->LiftCurve(context, dom, *uv, ivl, SmApproxTol3d(tol), max_dist, lifted,
|
||||
skip_checks ? TRUE : FALSE);
|
||||
std::vector<double> out;
|
||||
out.push_back(r == SM_SUCCESS ? 0.0 : (double)r);
|
||||
bool bad = false;
|
||||
if (r == SM_SUCCESS)
|
||||
{
|
||||
gw_CURVE* cur = lifted != NULL ? lifted->GetOrCreateGwNurbPointer() : NULL;
|
||||
SmTArray<double> ks;
|
||||
SmTArray<ULONG> mults;
|
||||
if (cur == NULL || lifted->GetKnots(ks, &mults) != SM_SUCCESS)
|
||||
bad = true;
|
||||
else
|
||||
{
|
||||
out.push_back(max_dist);
|
||||
out.push_back((double)lifted->GetType());
|
||||
out.push_back((double)lifted->GetDim());
|
||||
out.push_back((double)cur->p);
|
||||
out.push_back((double)(cur->pol->n + 1));
|
||||
for (gw_INDEX i = 0; i <= cur->pol->n; i++)
|
||||
{
|
||||
out.push_back(cur->pol->Pw[i].x);
|
||||
out.push_back(cur->pol->Pw[i].y);
|
||||
out.push_back(cur->pol->Pw[i].z);
|
||||
out.push_back(cur->pol->Pw[i].w);
|
||||
}
|
||||
out.push_back((double)ks.GetSize());
|
||||
for (ULONG i = 0; i < ks.GetSize(); i++)
|
||||
out.push_back(ks[i]);
|
||||
for (ULONG i = 0; i < mults.GetSize(); i++)
|
||||
out.push_back((double)mults[i]);
|
||||
SmExtent1d nat = lifted->GetNaturalInterval();
|
||||
out.push_back(nat.GetMin());
|
||||
out.push_back(nat.GetMax());
|
||||
}
|
||||
}
|
||||
delete lifted;
|
||||
delete uv;
|
||||
delete s;
|
||||
if (bad)
|
||||
return SC_ERR_ARG;
|
||||
return sc_copy_out(out.data(), (int64_t)out.size(), output, cap, out_len);
|
||||
SC_CATCH
|
||||
}
|
||||
|
||||
@@ -1204,12 +1204,56 @@ void surface_op(int32_t op, Rd& rd, const SmContext& ctx, SmSurface* s, std::vec
|
||||
SmExtent2d d = rd.domain();
|
||||
SmBSplineSurface* other = read_bspline(rd, ctx);
|
||||
SmExtent2d d2 = rd.domain();
|
||||
bool has_tol = rd.flag();
|
||||
SmApproxTol3d tol = rd.num();
|
||||
bool has_move = rd.flag();
|
||||
SmVector3d move = rd.vec();
|
||||
// prog_test my_test_one_ssi: both B-reps translated by the same vector first
|
||||
if (has_move)
|
||||
{
|
||||
SmAxis2Placement ax;
|
||||
ax.Translate(move);
|
||||
SmStatus ts = s->Transform(ax, NULL);
|
||||
if (ts == SM_SUCCESS)
|
||||
ts = other->Transform(ax, NULL);
|
||||
if (ts != SM_SUCCESS)
|
||||
{
|
||||
o.push_back(st(ts));
|
||||
delete other;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// all outputs requested, as smTopoTest my_test_ssi does
|
||||
SmBoolean edges[2] = {TRUE, TRUE};
|
||||
SmTArray<SmCurve*> c3, c1, c2;
|
||||
SmStatus stt =
|
||||
s->GlobalSurfaceIntersect(ctx, d, *other, d2, edges, NULL, NULL, &c3, &c1, &c2, NULL, NULL);
|
||||
SmTArray<SmTsectCurveType> types;
|
||||
SmTArray<double> devs;
|
||||
SmStatus stt = s->GlobalSurfaceIntersect(ctx, d, *other, d2, edges, has_tol ? &tol : NULL,
|
||||
NULL, &c3, &c1, &c2, &types, &devs);
|
||||
o.push_back(st(stt));
|
||||
o.push_back((double)c3.GetSize());
|
||||
// on success: `n`, `same` (the output arrays agree in length) and per curve: 3D
|
||||
// curve, UV curve on this, UV curve on other (each `GetType()`, `0` when null, then
|
||||
// `put_curve` for a B-spline), type, deviation
|
||||
if (stt == SM_SUCCESS)
|
||||
{
|
||||
ULONG n = c3.GetSize();
|
||||
o.push_back((double)n);
|
||||
bool same = c1.GetSize() == n && c2.GetSize() == n && types.GetSize() == n &&
|
||||
devs.GetSize() == n;
|
||||
o.push_back(flg(same));
|
||||
for (ULONG i = 0; same && i < n; i++)
|
||||
{
|
||||
const SmCurve* cs[3] = {c3[i], c1[i], c2[i]};
|
||||
for (const SmCurve* c : cs)
|
||||
{
|
||||
o.push_back(c != NULL ? (double)c->GetType() : 0.0);
|
||||
if (c != NULL && c->IsKindOf(SmBSplineCurve_TYPE))
|
||||
put_curve(o, (const SmBSplineCurve*)c);
|
||||
}
|
||||
o.push_back((double)types[i]);
|
||||
o.push_back(devs[i]);
|
||||
}
|
||||
}
|
||||
for (ULONG i = 0; i < c3.GetSize(); i++)
|
||||
delete c3[i];
|
||||
for (ULONG i = 0; i < c1.GetSize(); i++)
|
||||
|
||||
@@ -0,0 +1,199 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Writes fixtures/surface.surface_p2/ssi_adv.json from upstream's advanced SSI regression.
|
||||
|
||||
Upstream `tests/prog_test/src/smAdvancedTest.cpp` `my_test_ssi_adv` calls
|
||||
`my_test_one_ssi(file, translate, expected)` for `pt_TestFiles/ssi_*.smp` part files:
|
||||
it reads the two B-reps, translates both by `translate` and (`smTopoTest.cpp`
|
||||
`my_test_ssi`) calls `SmSurface::GlobalSurfaceIntersect` on every (face of B-rep 0,
|
||||
face of B-rep 1) pair with `SmApproxTol3d 1e-3`, summing the 3D curve counts.
|
||||
|
||||
Every face in these files is an `SmBSplineSurface` (type 15002), so each pair becomes one
|
||||
`gssi` case on the face surfaces over the faces' stored UV domains (`SmFaceData` reads
|
||||
`UMin UMax VMin VMax`; the fixture domain is `[umin, vmin, umax, vmax]`). The control net
|
||||
is copied as stored (`wx wy wz w` when rational), as `.sms` files are read.
|
||||
|
||||
Run from the repo root: `python3 -I harness/fixturegen/ssi_adv.py`.
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
ROOT = os.getcwd()
|
||||
TEST = os.path.join(ROOT, "upstream/tests/prog_test/src/smAdvancedTest.cpp")
|
||||
FILES = os.path.join(ROOT, "upstream/TestFiles/pt_TestFiles")
|
||||
OUT = os.path.join(ROOT, "fixtures/surface.surface_p2/ssi_adv.json")
|
||||
APPROX_TOL = 1.0e-3 # my_test_one_ssi -> my_test_ssi(pBrep1, pBrep2, 1.0e-3, ...)
|
||||
|
||||
# Pairs whose tangent/singular start points need the SmAdvSurfaceIntersector
|
||||
# ComputeSingularityPoint override in SurfaceIntersector::compute_point_values: on main
|
||||
# the Rust side calls the base stub (SM_ERR) and drops them. PR #140 adds that dispatch;
|
||||
# with it all of these compare equal. Remove this list when #140 is on main.
|
||||
PENDING_PR140 = {
|
||||
"ssi_tor_sph_tan.smp",
|
||||
"ssi_tor_sph_tan2.smp",
|
||||
"ssi_tor_in_tor_tang_hyper.smp",
|
||||
"ssi_tor_in_tor_tan_ellip.smp",
|
||||
"ssi_rev_rev_sing.smp",
|
||||
"ssi_cyl_cyl_sing2.smp",
|
||||
"ssi_clasic_ruled.smp",
|
||||
"ssi_cylcyl_90_tan.smp",
|
||||
}
|
||||
|
||||
CALL = re.compile(
|
||||
r'my_test_one_ssi\(_T\("\.\./\.\./TestFiles/pt_TestFiles/([A-Za-z0-9_]+\.smp)"\),'
|
||||
r"\s*SmVector3d\(([^)]*)\),\s*([0-9]+)\)"
|
||||
)
|
||||
|
||||
|
||||
def calls():
|
||||
"""(line, file, translate, expected) of every live call, in source order."""
|
||||
out = []
|
||||
with open(TEST, encoding="latin-1") as f:
|
||||
for no, line in enumerate(f, 1):
|
||||
code = line.split("//", 1)[0]
|
||||
m = CALL.search(code)
|
||||
if m:
|
||||
t = [float(x) for x in m.group(2).split(",")]
|
||||
out.append((no, m.group(1), t, int(m.group(3))))
|
||||
return out
|
||||
|
||||
|
||||
def section(lines, header, start):
|
||||
"""Index of the line after `header` (searching from `start`)."""
|
||||
for i in range(start, len(lines)):
|
||||
if lines[i].strip() == header:
|
||||
return i + 1
|
||||
raise ValueError(f"missing {header!r}")
|
||||
|
||||
|
||||
def count(line, what):
|
||||
m = re.match(rf"\s*(\d+) {what}", line)
|
||||
if not m:
|
||||
raise ValueError(f"expected count of {what!r}, got {line!r}")
|
||||
return int(m.group(1))
|
||||
|
||||
|
||||
def nums(lines, i, k):
|
||||
"""`k` numbers from line `i` on; returns them and the next line index."""
|
||||
out = []
|
||||
while len(out) < k:
|
||||
out.extend(float(t) for t in lines[i].split())
|
||||
i += 1
|
||||
if len(out) != k:
|
||||
raise ValueError(f"line {i}: record does not end at a line break")
|
||||
return out, i
|
||||
|
||||
|
||||
def surface(lines, i):
|
||||
"""An `SmBSplineSurface` DB record (version <= 32) starting at line `i`."""
|
||||
(n, m), i = nums(lines, i, 2)
|
||||
(p, q), i = nums(lines, i, 2)
|
||||
(rat,), i = nums(lines, i, 1)
|
||||
n, m, p, q = int(n), int(m), int(p), int(q)
|
||||
net = []
|
||||
for _ in range(n + 1):
|
||||
row = []
|
||||
for _ in range(m + 1):
|
||||
if rat:
|
||||
pt, i = nums(lines, i, 4)
|
||||
else:
|
||||
pt, i = nums(lines, i, 3)
|
||||
pt.append(-1.7976931348623157e308) # NOW: not rational
|
||||
row.append(pt)
|
||||
net.append(row)
|
||||
u, i = nums(lines, i, n + p + 2)
|
||||
v, i = nums(lines, i, m + q + 2)
|
||||
return {"net": net, "p": p, "q": q, "u": u, "v": v}, i
|
||||
|
||||
|
||||
def brep(lines, start):
|
||||
"""The faces of the B-rep block from `start`: `(surface, [umin, vmin, umax, vmax])`."""
|
||||
i = section(lines, "//Face Data", start)
|
||||
nf = count(lines[i], "Faces In Brep")
|
||||
i += 3 # count, two column comments
|
||||
faces = []
|
||||
for _ in range(nf):
|
||||
toks = lines[i].split()
|
||||
srf = int(toks[-4]) # ... Surface, Outer Loop, # of Loops, Naturally Trimmed
|
||||
(u0, u1, v0, v1), i = nums(lines, i + 1, 4)
|
||||
attrs = lines[i].split() # indexed attributes: count, then the indices
|
||||
if not attrs or not all(a.isdigit() for a in attrs) or int(attrs[0]) != len(attrs) - 1:
|
||||
raise ValueError(f"line {i + 1}: expected the face's attribute indices")
|
||||
i += 1
|
||||
faces.append((srf, [u0, v0, u1, v1]))
|
||||
i = section(lines, "//Surface Data", i)
|
||||
ns = count(lines[i], "Surfaces In Brep")
|
||||
i += 1
|
||||
surfaces = []
|
||||
for k in range(ns):
|
||||
if lines[i].split()[:3] != [str(k), "-", "Surface"]:
|
||||
raise ValueError(f"line {i + 1}: expected surface {k}")
|
||||
typ = lines[i + 1].split()
|
||||
if typ != ["Surface", "Type", "15002"]:
|
||||
raise ValueError(f"line {i + 2}: not an SmBSplineSurface: {typ}")
|
||||
s, i = surface(lines, i + 2)
|
||||
surfaces.append(s)
|
||||
attrs = lines[i].split() # the surface's attribute indices
|
||||
if not attrs or not all(a.isdigit() for a in attrs):
|
||||
raise ValueError(f"line {i + 1}: expected the surface's attribute indices")
|
||||
i += 1
|
||||
while i < len(lines) and not lines[i].strip():
|
||||
i += 1
|
||||
return [(surfaces[s], d) for s, d in faces]
|
||||
|
||||
|
||||
def part(name):
|
||||
with open(os.path.join(FILES, name), encoding="latin-1") as f:
|
||||
lines = f.read().split("\n")
|
||||
version = count(lines[1].replace("// (1)", ""), "Curves") // 1000000
|
||||
if version > 32:
|
||||
raise ValueError(f"{name}: version {version} records carry knot type and form")
|
||||
starts = [i for i, l in enumerate(lines) if l.startswith("[Brep #")]
|
||||
if len(starts) < 2:
|
||||
raise ValueError(f"{name}: fewer than two B-reps")
|
||||
return brep(lines, starts[0]), brep(lines, starts[1])
|
||||
|
||||
|
||||
def main():
|
||||
cases = []
|
||||
seen = set()
|
||||
for line, name, t, expected in calls():
|
||||
key = (name, tuple(t))
|
||||
if key in seen:
|
||||
continue # the same call again (upstream repeats some under other flags)
|
||||
seen.add(key)
|
||||
if name in PENDING_PR140:
|
||||
continue
|
||||
b0, b1 = part(name)
|
||||
stem = name[: -len(".smp")]
|
||||
for i, (s0, d0) in enumerate(b0):
|
||||
for j, (s1, d1) in enumerate(b1):
|
||||
cases.append(
|
||||
{
|
||||
"name": f"ssi_adv_{stem}_f{i}_f{j}",
|
||||
"upstream_ref": (
|
||||
f"tests/prog_test/src/smAdvancedTest.cpp:{line} my_test_one_ssi "
|
||||
f"{name} faces {i}x{j} of {len(b0)}x{len(b1)}; upstream expects "
|
||||
f"{expected} curves over all pairs"
|
||||
),
|
||||
"inputs": {
|
||||
"this": {"srf": s0},
|
||||
"op": "gssi",
|
||||
"dom": d0,
|
||||
"other": {"srf": s1},
|
||||
"other_dom": d1,
|
||||
"tol": APPROX_TOL,
|
||||
"translate": t,
|
||||
},
|
||||
}
|
||||
)
|
||||
with open(OUT, "w", encoding="utf-8") as f:
|
||||
json.dump({"cases": cases}, f, indent=1)
|
||||
f.write("\n")
|
||||
print(f"{len(cases)} cases from {len(seen)} calls -> {os.path.relpath(OUT, ROOT)}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -13075,6 +13075,50 @@ operation, not to the whole B-rep.
|
||||
536 deferred, 0 failed, unchanged (its face paths go through the unported
|
||||
`topology.brep_p8` and `primitive_creation_p*`).
|
||||
|
||||
## Upstream prog_test parity cases (2026-10-21, `tests/upstream-parity`): what they found
|
||||
|
||||
New fixtures replicate upstream prog_test calls in `surface.surface_p2` (`ssi_adv.json`,
|
||||
`smAdvancedTest.cpp` `my_test_ssi_adv`), `curve.curve_p1/p7/p8/p9`, `surface.surface_p7/p8`,
|
||||
`surface.surface_p11` and `intersect.surface_drop_lib_p1` (`upstream_prog_test.json`).
|
||||
|
||||
- **`surface.surface_p2` SSI: tangent and singular start points dropped.** Eight
|
||||
`my_test_ssi_adv` part files (`ssi_tor_sph_tan`, `ssi_tor_sph_tan2`,
|
||||
`ssi_tor_in_tor_tang_hyper`, `ssi_tor_in_tor_tan_ellip`, `ssi_rev_rev_sing`,
|
||||
`ssi_cyl_cyl_sing2`, `ssi_clasic_ruled`, `ssi_cylcyl_90_tan`) disagree on `main`: Rust finds
|
||||
0 or fewer curves (e.g. `ssi_tor_sph_tan`: C++ 4 boundary start points, Rust 0). Cause:
|
||||
`SurfaceIntersector::compute_point_values` (`intersect/surface_intersector/p2.rs`, the
|
||||
near-parallel-normals branch) calls the base `compute_singularity_point_base` (`SM_ERR`)
|
||||
where upstream's virtual call reaches `SmAdvSurfaceIntersector::ComputeSingularityPoint`
|
||||
(`SmAdvSurfaceIntersector.cpp:116`), so `FindBoundaryStartPoints` skips those points and
|
||||
traces stop at them. PR #140 adds this dispatch (`advanced` flag); on #140's head all 56
|
||||
pairs pass or defer (0 failures). The eight files are listed in
|
||||
`harness/fixturegen/ssi_adv.py` `PENDING_PR140`; remove the list and regenerate once #140
|
||||
is on `main`.
|
||||
- **`surface.surface_p11` `LiftCurve`: `PS_lift_crv2` on `PS_lift_srf2` disagrees**
|
||||
(`smSurfaceTest.cpp:2587`, the "kinked UVTrimCurve" case upstream itself expects to trip
|
||||
`AssertValid`; left out of the fixture). Same max distance 0.009390995684972677, type
|
||||
14033, dim 3, degree 3, but C++ has 235 control points / 79 knots and Rust 232 / 78. The
|
||||
C0 split segment [12.99999867340698, 13]: Rust's 10-sample degenerate check finds all
|
||||
samples within tol/100 and skips it; C++ keeps it (extra knots 12.99999867332897,
|
||||
12.99999999992199; later knots shift by about 1.3e-6). Suspected: the `SmCrvOnSurf`
|
||||
evaluation near the kink inside the `GetDomainWithContinuity` segment (clamping), i.e.
|
||||
`domain_with_continuity` or CrvOnSurf clamping. Open.
|
||||
- **Upstream assertion that the C++ itself fails** (`surface.surface_p8`,
|
||||
`smSurfaceTest.cpp` `my_test_csi_tangency`): for the lines with y < 1 the test asserts 2
|
||||
hits, but C++ returns one range-of-values solution (e.g. `prog_csi_tangency_line_00`: t
|
||||
0.4776 to 0.5224); Rust returns the same, so the cases are kept. The circle cases match the
|
||||
assertions.
|
||||
- **Back-edges that now block these cases although their units are partial** (library
|
||||
wiring, not done here): `intersect/surface_drop_lib/p1.rs` `drop_curve_trace`
|
||||
(`UNPORTED(intersect.surface_drop_curve)`; defers the 5 `PS10_drp` DropAndTrimCurve cases;
|
||||
`SurfaceDropCurve::drop_trace` exists), and `Surface::create_silhouette_curves`
|
||||
(`surface/surface/p1.rs`, `UNPORTED(intersect.surface_tracer)`; `SurfaceSilhouette` and its
|
||||
trace exist; the non-perspective post-processing of `SmSurface.cpp` ~9632-9695 is also
|
||||
missing), which keeps `smAdvancedTest.cpp` `my_test_sil_adv` out of reach.
|
||||
- **`curve.curve_p1` fuzz: `Curve::tessellate` allocated from `min_segments` unchecked**
|
||||
(`tess` with `minseg = 4294967296` aborted the Rust side): fixed on `main` by PR #322
|
||||
(`Line::tessellate` reserves with `try_reserve_exact`, `InvalidInput`).
|
||||
|
||||
## Fuzz "Rust-only hangs" (surface.surface_point_solve_p2, offset.offset_executive_p1; 2026-10-21)
|
||||
|
||||
The fuzz sweep (#321-#325) reported two Rust-only timeouts as possible port divergences.
|
||||
|
||||
@@ -665,6 +665,70 @@
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream.json#60 (upstream tests/SM_API_test/src/TestSmCurves.cpp:468)",
|
||||
"values_compared": 17
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cp_nurb_min_original",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream_prog_test.json#0 (upstream tests/prog_test/src/smCurveTest.cpp:5168 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x19x1 bbox grid (95 points), before Transform)",
|
||||
"values_compared": 725
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cp_nurb_min_transformed",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream_prog_test.json#1 (upstream tests/prog_test/src/smCurveTest.cpp:5176 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x1x19 bbox grid (95 points), after Transform(SetCanonical((0,7,-5), (1,0,0), (0,0,1))))",
|
||||
"values_compared": 725
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cp_nurb_normalize_original",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream_prog_test.json#2 (upstream tests/prog_test/src/smCurveTest.cpp:5183 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x5x1 bbox grid (25 points), before Transform)",
|
||||
"values_compared": 415
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cp_nurb_normalize_transformed",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream_prog_test.json#3 (upstream tests/prog_test/src/smCurveTest.cpp:5192 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x1x5 bbox grid (25 points), after Transform(SetCanonical((0,7,-5), (1,0,0), (0,0,1)), scale (1,0.5,1)))",
|
||||
"values_compared": 859
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cp_nurb_max_original",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream_prog_test.json#4 (upstream tests/prog_test/src/smCurveTest.cpp:5199 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x5x1 bbox grid (25 points), before Transform)",
|
||||
"values_compared": 199
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cp_nurb_max_transformed",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream_prog_test.json#5 (upstream tests/prog_test/src/smCurveTest.cpp:5207 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x1x5 bbox grid (25 points), after Transform(SetCanonical((0,7,-5), (1,0,0), (0,0,1))))",
|
||||
"values_compared": 199
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cp_nurb_at_distance_original",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream_prog_test.json#6 (upstream tests/prog_test/src/smCurveTest.cpp:5214 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x5x1 bbox grid (25 points), before Transform)",
|
||||
"values_compared": 325
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cp_nurb_at_distance_transformed",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p1/upstream_prog_test.json#7 (upstream tests/prog_test/src/smCurveTest.cpp:5222 my_test_cp_nurb: my_test_point_extrema (:548 GlobalPointSolve) 5x1x5 bbox grid (25 points), after Transform(SetCanonical((0,7,-5), (1,0,0), (0,0,1))))",
|
||||
"values_compared": 325
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0000",
|
||||
@@ -24773,8 +24837,8 @@
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 26,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 3057,
|
||||
"cases_total": 3083,
|
||||
"cases_passed": 3065,
|
||||
"cases_total": 3091,
|
||||
"deferred_by_unit": {
|
||||
"geom.tol": 26
|
||||
},
|
||||
|
||||
@@ -217,6 +217,302 @@
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream.json#15 (upstream prog_test:my_test_matrix)",
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_properties_circle_plane_tangency",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#0 (upstream tests/prog_test/src/smCurveTest.cpp:8006 my_test_curve_properties: quintic circle PLANE_INTERSECTION D=-0.99999 N=(0,1,0) (expects 2))",
|
||||
"values_compared": 929
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_plane_classify",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#1 (upstream tests/prog_test/src/smCurveTest.cpp:7268 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 0 Transform(+2.5 x)))",
|
||||
"values_compared": 968
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_plane_classify_neg",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#2 (upstream tests/prog_test/src/smCurveTest.cpp:7333 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 1 Transform(+2.5 x)))",
|
||||
"values_compared": 981
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_plane_intersection",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#3 (upstream tests/prog_test/src/smCurveTest.cpp:7393 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 2 Transform(+2.5 x)))",
|
||||
"values_compared": 1033
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_silhouette_vector",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#4 (upstream tests/prog_test/src/smCurveTest.cpp:7437 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 3 Transform(+2.5 x)))",
|
||||
"values_compared": 994
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_silhouette_point",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#5 (upstream tests/prog_test/src/smCurveTest.cpp:7475 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 4 Transform(+2.5 x)))",
|
||||
"values_compared": 981
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_parallel_to_vector",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#6 (upstream tests/prog_test/src/smCurveTest.cpp:7515 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 5 Transform(+2.5 x)))",
|
||||
"values_compared": 994
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_inflection_points",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#7 (upstream tests/prog_test/src/smCurveTest.cpp:7549 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 6 Transform(+2.5 x)))",
|
||||
"values_compared": 1007
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_min_first_derivative",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#8 (upstream tests/prog_test/src/smCurveTest.cpp:7584 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 7 Transform(+2.5 x)))",
|
||||
"values_compared": 916
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_max_first_derivative",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#9 (upstream tests/prog_test/src/smCurveTest.cpp:7609 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 7 Transform(+2.5 x)))",
|
||||
"values_compared": 916
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_min_radius_of_curvature",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#10 (upstream tests/prog_test/src/smCurveTest.cpp:7643 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 8 Transform(+2.5 x)))",
|
||||
"values_compared": 916
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_max_radius_of_curvature",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#11 (upstream tests/prog_test/src/smCurveTest.cpp:7668 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 8 Transform(+2.5 x)))",
|
||||
"values_compared": 1007
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_first_derivative_length",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#12 (upstream tests/prog_test/src/smCurveTest.cpp:7705 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 9 Transform(+2.5 x)))",
|
||||
"values_compared": 1111
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_radius_of_curvature",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#13 (upstream tests/prog_test/src/smCurveTest.cpp:7743 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 10 Transform(+2.5 x)))",
|
||||
"values_compared": 1137
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_x_normal",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#14 (upstream tests/prog_test/src/smCurveTest.cpp:7780 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 11 Transform(+2.5 x)))",
|
||||
"values_compared": 1020
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_y_normal",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#15 (upstream tests/prog_test/src/smCurveTest.cpp:7817 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 12 Transform(+2.5 x)))",
|
||||
"values_compared": 942
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_z_normal",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#16 (upstream tests/prog_test/src/smCurveTest.cpp:7846 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 12 Transform(+2.5 x)))",
|
||||
"values_compared": 903
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_xyz_normal",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#17 (upstream tests/prog_test/src/smCurveTest.cpp:7885 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 13 Transform(+2.5 x)))",
|
||||
"values_compared": 1059
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_planar_nurb_tangent_to_circle",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#18 (upstream tests/prog_test/src/smCurveTest.cpp:7929 my_test_one_curve_prop (planar nurb from my_test_curve_properties:8048, after 14 Transform(+2.5 x)))",
|
||||
"values_compared": 981
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_plane_classify",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#19 (upstream tests/prog_test/src/smCurveTest.cpp:7268 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 0 Transform(+2.5 x)))",
|
||||
"values_compared": 916
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_plane_classify_neg",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#20 (upstream tests/prog_test/src/smCurveTest.cpp:7333 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 1 Transform(+2.5 x)))",
|
||||
"values_compared": 903
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_plane_intersection",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#21 (upstream tests/prog_test/src/smCurveTest.cpp:7393 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 2 Transform(+2.5 x)))",
|
||||
"values_compared": 903
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_silhouette_vector",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#22 (upstream tests/prog_test/src/smCurveTest.cpp:7437 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 3 Transform(+2.5 x)))",
|
||||
"values_compared": 1072
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_silhouette_point",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#23 (upstream tests/prog_test/src/smCurveTest.cpp:7475 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 4 Transform(+2.5 x)))",
|
||||
"values_compared": 1007
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_parallel_to_vector",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#24 (upstream tests/prog_test/src/smCurveTest.cpp:7515 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 5 Transform(+2.5 x)))",
|
||||
"values_compared": 903
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_inflection_points",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#25 (upstream tests/prog_test/src/smCurveTest.cpp:7549 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 6 Transform(+2.5 x)))",
|
||||
"values_compared": 903
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_min_first_derivative",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#26 (upstream tests/prog_test/src/smCurveTest.cpp:7584 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 7 Transform(+2.5 x)))",
|
||||
"values_compared": 916
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_max_first_derivative",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#27 (upstream tests/prog_test/src/smCurveTest.cpp:7609 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 7 Transform(+2.5 x)))",
|
||||
"values_compared": 916
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_min_radius_of_curvature",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#28 (upstream tests/prog_test/src/smCurveTest.cpp:7643 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 8 Transform(+2.5 x)))",
|
||||
"values_compared": 916
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_max_radius_of_curvature",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#29 (upstream tests/prog_test/src/smCurveTest.cpp:7668 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 8 Transform(+2.5 x)))",
|
||||
"values_compared": 916
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_first_derivative_length",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#30 (upstream tests/prog_test/src/smCurveTest.cpp:7705 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 9 Transform(+2.5 x)))",
|
||||
"values_compared": 1111
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_radius_of_curvature",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#31 (upstream tests/prog_test/src/smCurveTest.cpp:7743 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 10 Transform(+2.5 x)))",
|
||||
"values_compared": 1163
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_x_normal",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#32 (upstream tests/prog_test/src/smCurveTest.cpp:7780 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 11 Transform(+2.5 x)))",
|
||||
"values_compared": 1020
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_y_normal",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#33 (upstream tests/prog_test/src/smCurveTest.cpp:7817 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 12 Transform(+2.5 x)))",
|
||||
"values_compared": 942
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_z_normal",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#34 (upstream tests/prog_test/src/smCurveTest.cpp:7846 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 12 Transform(+2.5 x)))",
|
||||
"values_compared": 1007
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_xyz_normal",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#35 (upstream tests/prog_test/src/smCurveTest.cpp:7885 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 13 Transform(+2.5 x)))",
|
||||
"values_compared": 1163
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "curve_prop_3d_nurb_tangent_to_circle",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p7/upstream_prog_test.json#36 (upstream tests/prog_test/src/smCurveTest.cpp:7929 my_test_one_curve_prop (3d nurb from my_test_curve_properties:8084, after 14 Transform(+2.5 x)))",
|
||||
"values_compared": 1046
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0000",
|
||||
@@ -24221,8 +24517,8 @@
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 0,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 3027,
|
||||
"cases_total": 3027,
|
||||
"cases_passed": 3064,
|
||||
"cases_total": 3064,
|
||||
"deferred_by_unit": {},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
@@ -465,6 +465,62 @@
|
||||
"source": "fixture:fixtures/curve.curve_p8/upstream.json#37 (upstream tests/prog_test/src/smCurveTest.cpp:4605 (CreateCircleSegment(center (0,3,0), r 1, 0..360, quadratic)))",
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cci_coincidence_nurbs_partly_coincident",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p8/upstream_prog_test.json#0 (upstream tests/prog_test/src/smCurveTest.cpp:3975 my_test_cci_coincidence: GlobalCurveIntersect(pNurb1, pNurb2) via my_test_GlobalCC_intersect (expects 3))",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cci_coincidence_overlapping_lines",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p8/upstream_prog_test.json#1 (upstream tests/prog_test/src/smCurveTest.cpp:3988 my_test_cci_coincidence: GlobalCurveIntersect(pLine, pLine2) (expects 1))",
|
||||
"values_compared": 12
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cci_coincidence_circles_radius_gap",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p8/upstream_prog_test.json#2 (upstream tests/prog_test/src/smCurveTest.cpp:3992 my_test_cci_coincidence: GlobalCurveIntersect(pCir4 quintic r=0.500005, pCir3 quadratic r=0.499999) (expects 1))",
|
||||
"values_compared": 12
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cci_coincidence_circles_quintic_quadratic",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p8/upstream_prog_test.json#3 (upstream tests/prog_test/src/smCurveTest.cpp:4001 my_test_cci_coincidence: GlobalCurveIntersect(pCir1 quintic, pCir2 quadratic) (expects 1))",
|
||||
"values_compared": 12
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cci_coincidence_circles_rotated_start",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p8/upstream_prog_test.json#4 (upstream tests/prog_test/src/smCurveTest.cpp:4014 my_test_cci_coincidence: GlobalCurveIntersect(pCir5, pCir6 after Transform(SetCanonical(0, (0,1,0), (-1,0,0))) at :4012) (expects 2))",
|
||||
"values_compared": 23
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cci_coincidence_circles_opposite_direction",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p8/upstream_prog_test.json#5 (upstream tests/prog_test/src/smCurveTest.cpp:4022 my_test_cci_coincidence: GlobalCurveIntersect(pCir5, pCir7 after Transform(SetCanonical(0, (1,0,0), (0,-1,0))) at :4020) (expects 1))",
|
||||
"values_compared": 12
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cci_coincidence_circles_rotated_opposite",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p8/upstream_prog_test.json#6 (upstream tests/prog_test/src/smCurveTest.cpp:4030 my_test_cci_coincidence: GlobalCurveIntersect(pCir5, pCir8 after Transform(SetCanonical(0, (0,1,0), (1,0,0))) at :4028) (expects 2))",
|
||||
"values_compared": 23
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0000",
|
||||
@@ -24469,8 +24525,8 @@
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 0,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 3058,
|
||||
"cases_total": 3058,
|
||||
"cases_passed": 3065,
|
||||
"cases_total": 3065,
|
||||
"deferred_by_unit": {},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
@@ -889,6 +889,126 @@
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream.json#18 (upstream tests/prog_test/src/smCurveTest.cpp:653 (my_test_GlobalCC_extrema))",
|
||||
"values_compared": 17
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cc_nurb_zigzag_apart_min",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#0 (upstream tests/prog_test/src/smCurveTest.cpp:4384 my_test_cc_nurb (GlobalCC_extrema SM_SO_MINIMIZE, asserts 2))",
|
||||
"values_compared": 17
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cc_nurb_zigzag_apart_max",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#1 (upstream tests/prog_test/src/smCurveTest.cpp:4386 my_test_cc_nurb (GlobalCC_extrema SM_SO_MAXIMIZE, asserts 2))",
|
||||
"values_compared": 17
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cc_nurb_zigzag_near_min",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#2 (upstream tests/prog_test/src/smCurveTest.cpp:4393 my_test_cc_nurb (GlobalCC_extrema SM_SO_MINIMIZE, asserts 3))",
|
||||
"values_compared": 25
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cc_nurb_zigzag_near_max",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#3 (upstream tests/prog_test/src/smCurveTest.cpp:4395 my_test_cc_nurb (GlobalCC_extrema SM_SO_MAXIMIZE, asserts 2))",
|
||||
"values_compared": 17
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cc_nurb_zigzag_normalize",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#4 (upstream tests/prog_test/src/smCurveTest.cpp:4402 my_test_cc_nurb (GlobalCC_extrema SM_SO_NORMALIZE, asserts 81))",
|
||||
"values_compared": 649
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "cc_nurb_zigzag_line_at_distance",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#5 (upstream tests/prog_test/src/smCurveTest.cpp:4409 my_test_cc_nurb (GlobalCC_extrema SM_SO_AT_DISTANCE vs line, asserts 10))",
|
||||
"values_compared": 81
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "projected_tangency_transformed_circle_circle",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#6 (upstream tests/prog_test/src/smCurveTest.cpp:8563 my_test_crv_projected_tangency (SM_SO_PROJECTED_TANGENCY, asserts 4))",
|
||||
"values_compared": 33
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "signed_directed_min_quad_cubic",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#7 (upstream tests/prog_test/src/smCurveTest.cpp:8885 my_test_crv_signed_directed_min (SM_SO_SIGNED_DIRECTED_MINIMIZE, asserts 1))",
|
||||
"values_compared": 9
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "signed_directed_min_ford_quads",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#8 (upstream tests/prog_test/src/smCurveTest.cpp:8919 my_test_crv_signed_directed_min (SM_SO_SIGNED_DIRECTED_MINIMIZE, asserts 1))",
|
||||
"values_compared": 9
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "signed_pivot_min_circle_line",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#9 (upstream tests/prog_test/src/smCurveTest.cpp:8957 my_test_signed_pivot_min (SM_SO_SIGNED_PIVOT_MINIMIZE circ/line, asserts 1))",
|
||||
"values_compared": 9
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "signed_pivot_min_line_circle",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#10 (upstream tests/prog_test/src/smCurveTest.cpp:8982 my_test_signed_pivot_min (SM_SO_SIGNED_PIVOT_MINIMIZE line/circ, asserts 1))",
|
||||
"values_compared": 9
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "signed_pivot_min_circle2_circle1",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#11 (upstream tests/prog_test/src/smCurveTest.cpp:9005 my_test_signed_pivot_min (SM_SO_SIGNED_PIVOT_MINIMIZE circ2/circ1, asserts 1))",
|
||||
"values_compared": 9
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "signed_pivot_min_circle1_circle2",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#12 (upstream tests/prog_test/src/smCurveTest.cpp:9028 my_test_signed_pivot_min (SM_SO_SIGNED_PIVOT_MINIMIZE circ1/circ2, asserts 1))",
|
||||
"values_compared": 9
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "signed_pivot_min_diag_line_circle",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#13 (upstream tests/prog_test/src/smCurveTest.cpp:9053 my_test_signed_pivot_min (SM_SO_SIGNED_PIVOT_MINIMIZE line (3,0)-(5,-2)/circ, asserts 1))",
|
||||
"values_compared": 9
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "signed_pivot_min_upper_line_circle",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/curve.curve_p9/upstream_prog_test.json#14 (upstream tests/prog_test/src/smCurveTest.cpp:9078 my_test_signed_pivot_min (SM_SO_SIGNED_PIVOT_MINIMIZE line (3,3)-(2,4)/circ, asserts 1))",
|
||||
"values_compared": 9
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0000",
|
||||
@@ -24893,8 +25013,8 @@
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 0,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 3111,
|
||||
"cases_total": 3111,
|
||||
"cases_passed": 3126,
|
||||
"cases_total": 3126,
|
||||
"deferred_by_unit": {},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
@@ -2625,6 +2625,66 @@
|
||||
"source": "fixture:fixtures/intersect.surface_drop_lib_p1/review_poles.json#327 (upstream review of PR #98 (adversarial): poles (cone apex, spheres r=1 and 1e3, both swaps), a B-spline with a collapsed u=0 edge, sm_FixBoundaryCurves and duplicate-solution edge cases)",
|
||||
"values_compared": 4
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_drop_trim_ps10_1_sub_piece_natural_boundary",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/intersect.surface_drop_lib_p1/upstream_prog_test.json#0 (upstream tests/prog_test/src/smSurfaceTest.cpp:2144 my_test_drop_curve: drop curve to sub-piece of surface natural boundary; pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL))",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_drop_trim_ps10_2_non_iso_large_aspect",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/intersect.surface_drop_lib_p1/upstream_prog_test.json#1 (upstream tests/prog_test/src/smSurfaceTest.cpp:2182 my_test_drop_curve: nonIsoCurve drop to large aspect ratio surface (large radius, long slender circular face); pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL))",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_drop_trim_ps10_3_small_cylinder_end_on_boundary",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/intersect.surface_drop_lib_p1/upstream_prog_test.json#2 (upstream tests/prog_test/src/smSurfaceTest.cpp:2227 my_test_drop_curve: small cylinder with curve ending on natural boundary; pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL))",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_drop_trim_ps10_4_short_curve_not_over_surface",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/intersect.surface_drop_lib_p1/upstream_prog_test.json#3 (upstream tests/prog_test/src/smSurfaceTest.cpp:2266 my_test_drop_curve: very large aspect ratio surface, very short curve not over the surface - no drop result; pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL))",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_drop_trim_ps10_5_long_natural_boundary_large_aspect",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/intersect.surface_drop_lib_p1/upstream_prog_test.json#4 (upstream tests/prog_test/src/smSurfaceTest.cpp:2304 my_test_drop_curve: long natural boundary drop to very large aspect surface; pSurface->DropAndTrimCurve(ctx, GetNaturalUVDomain(), *pCurveToDrop, GetNaturalInterval(), 1.0e-2, dMaxDistToSurf, dDeviation, sProjCurves) (defaults: bKeepAllDropCurves TRUE, bOptCurveIsOnSurface FALSE, pOptDropCurveFail NULL))",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "rectangle_bottom_edge_iso",
|
||||
@@ -14959,12 +15019,12 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 15,
|
||||
"cases_deferred": 20,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 1847,
|
||||
"cases_total": 1862,
|
||||
"cases_total": 1867,
|
||||
"deferred_by_unit": {
|
||||
"intersect.surface_drop_curve": 15
|
||||
"intersect.surface_drop_curve": 20
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -547,7 +547,7 @@
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/cases.json#67 (upstream SmSurface::GlobalSurfaceIntersect (my_test_ssi inputs: two crossing bilinear patches))",
|
||||
"values_compared": 2
|
||||
"values_compared": 95
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
@@ -557,6 +557,470 @@
|
||||
"source": "fixture:fixtures/surface.surface_p2/cases.json#68 (upstream SmSurface::CreatePlaneWith3DCurves (SM_API SmApiCreatePlanarFace inputs))",
|
||||
"values_compared": 1
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_ext_coin_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#0 (upstream tests/prog_test/src/smAdvancedTest.cpp:1095 my_test_one_ssi ssi_ext_ext_coin.smp faces 0x0 of 1x1; upstream expects 11 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_cyl_none_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#1 (upstream tests/prog_test/src/smAdvancedTest.cpp:1100 my_test_one_ssi ssi_ext_cyl_none.smp faces 0x0 of 1x1; upstream expects 0 curves over all pairs)",
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_cyl_touch_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#2 (upstream tests/prog_test/src/smAdvancedTest.cpp:1105 my_test_one_ssi ssi_ext_cyl_touch.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 115
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_cyl_2int_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#3 (upstream tests/prog_test/src/smAdvancedTest.cpp:1109 my_test_one_ssi ssi_ext_cyl_2int.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 187
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_ext_none_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#4 (upstream tests/prog_test/src/smAdvancedTest.cpp:1113 my_test_one_ssi ssi_ext_ext_none.smp faces 0x0 of 1x1; upstream expects 0 curves over all pairs)",
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_ext_inside_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#5 (upstream tests/prog_test/src/smAdvancedTest.cpp:1118 my_test_one_ssi ssi_ext_ext_inside.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 371
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_ext_opposite_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#6 (upstream tests/prog_test/src/smAdvancedTest.cpp:1122 my_test_one_ssi ssi_ext_ext_opposite.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 371
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_ext_touch_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#7 (upstream tests/prog_test/src/smAdvancedTest.cpp:1126 my_test_one_ssi ssi_ext_ext_touch.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 91
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_ext_overlap_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#8 (upstream tests/prog_test/src/smAdvancedTest.cpp:1130 my_test_one_ssi ssi_ext_ext_overlap.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 371
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_ext_ext_same_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#9 (upstream tests/prog_test/src/smAdvancedTest.cpp:1134 my_test_one_ssi ssi_ext_ext_same.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 371
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_rev_360_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#10 (upstream tests/prog_test/src/smAdvancedTest.cpp:1138 my_test_one_ssi ssi_rev_rev_360.smp faces 0x0 of 1x1; upstream expects 3 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_rev_opposite_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#11 (upstream tests/prog_test/src/smAdvancedTest.cpp:1142 my_test_one_ssi ssi_rev_rev_opposite.smp faces 0x0 of 1x1; upstream expects 3 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_rev_90_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#12 (upstream tests/prog_test/src/smAdvancedTest.cpp:1152 my_test_one_ssi ssi_rev_rev_90.smp faces 0x0 of 1x1; upstream expects 3 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_rev_rot180_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#13 (upstream tests/prog_test/src/smAdvancedTest.cpp:1157 my_test_one_ssi ssi_rev_rev_rot180.smp faces 0x0 of 1x1; upstream expects 6 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_rev_180_pts_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#14 (upstream tests/prog_test/src/smAdvancedTest.cpp:1162 my_test_one_ssi ssi_rev_rev_180_pts.smp faces 0x0 of 1x1; upstream expects 6 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_rev_coin_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#15 (upstream tests/prog_test/src/smAdvancedTest.cpp:1171 my_test_one_ssi ssi_rev_rev_coin.smp faces 0x0 of 1x1; upstream expects 5 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_rev_coin_touch_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#16 (upstream tests/prog_test/src/smAdvancedTest.cpp:1179 my_test_one_ssi ssi_rev_rev_coin_touch.smp faces 0x0 of 1x1; upstream expects 7 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_sph_full_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#17 (upstream tests/prog_test/src/smAdvancedTest.cpp:1185 my_test_one_ssi ssi_rev_sph_full.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 1271
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_cyl_full_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#18 (upstream tests/prog_test/src/smAdvancedTest.cpp:1191 my_test_one_ssi ssi_rev_cyl_full.smp faces 0x0 of 1x1; upstream expects 6 curves over all pairs)",
|
||||
"values_compared": 2175
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_cone_full_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#19 (upstream tests/prog_test/src/smAdvancedTest.cpp:1197 my_test_one_ssi ssi_rev_cone_full.smp faces 0x0 of 1x1; upstream expects 6 curves over all pairs)",
|
||||
"values_compared": 1815
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceIntersector::ComputePointValues",
|
||||
"unit": "intersect.surface_intersector_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_tor_purpen_tor_sing_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#20 (upstream tests/prog_test/src/smAdvancedTest.cpp:1202 my_test_one_ssi ssi_tor_purpen_tor_sing.smp faces 0x0 of 1x1; upstream expects 14 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_2pl_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#21 (upstream tests/prog_test/src/smAdvancedTest.cpp:1228 my_test_one_ssi ssi_2pl.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 95
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_cylcyl1_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#22 (upstream tests/prog_test/src/smAdvancedTest.cpp:1233 my_test_one_ssi ssi_cylcyl1.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 3157
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceIntersector::ComputePointValues",
|
||||
"unit": "intersect.surface_intersector_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_pln_rev1_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#23 (upstream tests/prog_test/src/smAdvancedTest.cpp:1238 my_test_one_ssi ssi_pln_rev1.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_pln_rev2_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#24 (upstream tests/prog_test/src/smAdvancedTest.cpp:1243 my_test_one_ssi ssi_pln_rev2.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_pln_rev3_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#25 (upstream tests/prog_test/src/smAdvancedTest.cpp:1251 my_test_one_ssi ssi_pln_rev3.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 1312
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_plncyl1_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#26 (upstream tests/prog_test/src/smAdvancedTest.cpp:1256 my_test_one_ssi ssi_plncyl1.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 365
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_plncyl2_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#27 (upstream tests/prog_test/src/smAdvancedTest.cpp:1260 my_test_one_ssi ssi_plncyl2.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 2075
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceIntersector::ComputePointValues",
|
||||
"unit": "intersect.surface_intersector_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rev_rev1_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#28 (upstream tests/prog_test/src/smAdvancedTest.cpp:1265 my_test_one_ssi ssi_rev_rev1.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceIntersector::ComputePointValues",
|
||||
"unit": "intersect.surface_intersector_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_bumppy_plane2_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#29 (upstream tests/prog_test/src/smAdvancedTest.cpp:1270 my_test_one_ssi ssi_bumppy_plane2.smp faces 0x0 of 1x1; upstream expects 50 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_bumppy_plane_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#30 (upstream tests/prog_test/src/smAdvancedTest.cpp:1277 my_test_one_ssi ssi_bumppy_plane.smp faces 0x0 of 1x1; upstream expects 84 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceIntersector::ComputePointValues",
|
||||
"unit": "intersect.surface_intersector_p2"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_cyl_cyl_sing_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#31 (upstream tests/prog_test/src/smAdvancedTest.cpp:1289 my_test_one_ssi ssi_cyl_cyl_sing.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_coincident_planes_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#32 (upstream tests/prog_test/src/smAdvancedTest.cpp:1304 my_test_one_ssi ssi_coincident_planes.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_coincident_cyls_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#33 (upstream tests/prog_test/src/smAdvancedTest.cpp:1312 my_test_one_ssi ssi_coincident_cyls.smp faces 0x0 of 1x1; upstream expects 3 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_coincident_spheres_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#34 (upstream tests/prog_test/src/smAdvancedTest.cpp:1321 my_test_one_ssi ssi_coincident_spheres.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_coincident_spheres2_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#35 (upstream tests/prog_test/src/smAdvancedTest.cpp:1326 my_test_one_ssi ssi_coincident_spheres2.smp faces 0x0 of 1x1; upstream expects 4 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_coincident_torii_f0_f0",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#36 (upstream tests/prog_test/src/smAdvancedTest.cpp:1334 my_test_one_ssi ssi_coincident_torii.smp faces 0x0 of 1x1; upstream expects 8 curves over all pairs)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_tor_sph_touch_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#37 (upstream tests/prog_test/src/smAdvancedTest.cpp:1339 my_test_one_ssi ssi_tor_sph_touch.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_rhino_bug1_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#38 (upstream tests/prog_test/src/smAdvancedTest.cpp:1344 my_test_one_ssi ssi_rhino_bug1.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 95
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_sph_plane1_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#39 (upstream tests/prog_test/src/smAdvancedTest.cpp:1356 my_test_one_ssi ssi_sph_plane1.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 1535
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_sph_plane2_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#40 (upstream tests/prog_test/src/smAdvancedTest.cpp:1366 my_test_one_ssi ssi_sph_plane2.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 2345
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_cone_plane1_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#41 (upstream tests/prog_test/src/smAdvancedTest.cpp:1375 my_test_one_ssi ssi_cone_plane1.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 187
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_cone_cyl1_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#42 (upstream tests/prog_test/src/smAdvancedTest.cpp:1380 my_test_one_ssi ssi_cone_cyl1.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 547
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_cone_cyl2_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#43 (upstream tests/prog_test/src/smAdvancedTest.cpp:1385 my_test_one_ssi ssi_cone_cyl2.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 457
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_cone_2pln_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#44 (upstream tests/prog_test/src/smAdvancedTest.cpp:1390 my_test_one_ssi ssi_cone_2pln.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 2075
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_cyl_bicub_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#45 (upstream tests/prog_test/src/smAdvancedTest.cpp:1395 my_test_one_ssi ssi_cyl_bicub.smp faces 0x0 of 1x1; upstream expects 2 curves over all pairs)",
|
||||
"values_compared": 2122
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_tor_overlap_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#46 (upstream tests/prog_test/src/smAdvancedTest.cpp:1400 my_test_one_ssi ssi_tor_overlap.smp faces 0x0 of 1x1; upstream expects 6 curves over all pairs)",
|
||||
"values_compared": 5460
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "ssi_adv_ssi_spiral_f0_f0",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p2/ssi_adv.json#47 (upstream tests/prog_test/src/smAdvancedTest.cpp:1405 my_test_one_ssi ssi_spiral.smp faces 0x0 of 1x1; upstream expects 1 curves over all pairs)",
|
||||
"values_compared": 2975
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0000",
|
||||
@@ -133015,11 +133479,13 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 1,
|
||||
"cases_deferred": 21,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 16625,
|
||||
"cases_total": 16626,
|
||||
"cases_passed": 16653,
|
||||
"cases_total": 16674,
|
||||
"deferred_by_unit": {
|
||||
"intersect.surface_drop_curve": 15,
|
||||
"intersect.surface_intersector_p2": 5,
|
||||
"surface.surface_p2": 1
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
|
||||
@@ -5281,6 +5281,550 @@
|
||||
"source": "fixture:fixtures/surface.surface_p7/edge_cases.json#659",
|
||||
"values_compared": 3
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_00_circle1_sdmin_negz",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#0 (upstream tests/prog_test/src/smSurfaceTest.cpp:1490 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle1 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; 3D_SIGNED_DIRECTED_MINIMIZE, -z; asserts 1; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_01_line_sdmin_negz",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#1 (upstream tests/prog_test/src/smSurfaceTest.cpp:1492 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve line (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; 3D_SIGNED_DIRECTED_MINIMIZE, -z; asserts 1; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_02_circle1_sdmin_posz",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#2 (upstream tests/prog_test/src/smSurfaceTest.cpp:1494 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle1 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; 3D_SIGNED_DIRECTED_MINIMIZE, +z; asserts 1; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_03_line_sdmin_posz",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#3 (upstream tests/prog_test/src/smSurfaceTest.cpp:1496 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve line (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; 3D_SIGNED_DIRECTED_MINIMIZE, +z; asserts 1; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_04_circle1_sdmin_tilt",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#4 (upstream tests/prog_test/src/smSurfaceTest.cpp:1498 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle1 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; 3D_SIGNED_DIRECTED_MINIMIZE, unit(0.2,0.2,-1); asserts 1; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_05_line_sdmin_tilt",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#5 (upstream tests/prog_test/src/smSurfaceTest.cpp:1500 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve line (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; 3D_SIGNED_DIRECTED_MINIMIZE, unit(0.2,0.2,-1); asserts 1; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_06_circle1_max",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#6 (upstream tests/prog_test/src/smSurfaceTest.cpp:1503 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle1 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MAXIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_07_circle1_normalize",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#7 (upstream tests/prog_test/src/smSurfaceTest.cpp:1507 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle1 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; NORMALIZE; asserts 4; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 26
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_08_circle2_min",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#8 (upstream tests/prog_test/src/smSurfaceTest.cpp:1510 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle2 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MINIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_09_circle2_max",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#9 (upstream tests/prog_test/src/smSurfaceTest.cpp:1511 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle2 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MAXIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_10_circle3_min",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#10 (upstream tests/prog_test/src/smSurfaceTest.cpp:1516 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle3 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MINIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_11_circle3_max",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#11 (upstream tests/prog_test/src/smSurfaceTest.cpp:1517 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle3 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MAXIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_12_circle4_min",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#12 (upstream tests/prog_test/src/smSurfaceTest.cpp:1519 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle4 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MINIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_13_circle4_max",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#13 (upstream tests/prog_test/src/smSurfaceTest.cpp:1521 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle4 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MAXIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_14_circle5_min",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#14 (upstream tests/prog_test/src/smSurfaceTest.cpp:1524 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle5 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MINIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_15_circle5_max",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#15 (upstream tests/prog_test/src/smSurfaceTest.cpp:1526 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle5 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MAXIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_16_circle6_min",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#16 (upstream tests/prog_test/src/smSurfaceTest.cpp:1529 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle6 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MINIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_cs_nurb_17_circle6_max",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#17 (upstream tests/prog_test/src/smSurfaceTest.cpp:1531 my_test_cs_nurb: GlobalCurveSolve of my_create_crease_surf (my_load_surf3_pts, 9x7 cubic) vs the SmBSplineCurve circle6 (CreateLineSegment / CreateCircleSegment SM_CO_QUADRATIC, as my_create_line/my_create_circle build it), SM_ZONE_TOL_3D, no target, SM_SR_ALL; MAXIMIZE; the second upstream vector slot is unset and unused)",
|
||||
"values_compared": 8
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_01",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#18 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 1 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_02",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#19 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 2 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_03",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#20 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 3 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_04",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#21 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 4 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_05",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#22 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 5 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_06",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#23 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 6 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_07",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#24 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 7 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_08",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#25 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 8 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_09",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#26 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 9 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_10",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#27 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 10 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_11",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#28 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 11 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_12",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#29 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 12 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_13",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#30 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 13 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_14",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#31 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 14 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_15",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#32 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 15 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_16",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#33 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 16 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_17",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#34 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 17 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_18",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#35 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 18 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_19",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#36 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 19 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_shovel_20",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#37 (upstream tests/prog_test/src/smSurfaceTest.cpp:4349 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 20 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); no count asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_01",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#38 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 1 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_02",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#39 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 2 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_03",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#40 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 3 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_04",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#41 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 4 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_05",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#42 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 5 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_06",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#43 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 6 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_07",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#44 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 7 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_08",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#45 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 8 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_09",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#46 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 9 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb1_10",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#47 (upstream tests/prog_test/src/smSurfaceTest.cpp:4405 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 10 of 10 (SM_CO_QUADRATIC, radius i/10*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 15 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_01",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#48 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 1 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_02",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#49 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 2 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_03",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#50 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 3 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_04",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#51 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 4 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_05",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#52 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 5 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_06",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#53 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 6 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_07",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#54 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 7 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_08",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#55 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 8 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_09",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#56 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 9 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_10",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#57 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 10 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_11",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#58 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 11 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_12",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#59 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 12 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_13",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#60 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 13 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_14",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#61 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 14 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_15",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#62 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 15 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_16",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#63 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 16 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_17",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#64 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 17 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_18",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#65 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 18 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_19",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#66 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 19 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_projection_nurb2_20",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p7/upstream_prog_test.json#67 (upstream tests/prog_test/src/smSurfaceTest.cpp:4411 my_test_projection -> my_test_parallel_projection (tests/prog_test/src/smSurfaceTest.cpp:782): CreateParallelProjectionCurves along (0,0,-1) of circle 20 of 20 (SM_CO_QUADRATIC, radius i/20*max(box width)/2, centred at the top centre of CalculateBoundingBox(natural domain), computed with the green nurbs.b_spline_surface_p1/b_spline_curve_p1 port); 29 curves in total asserted)",
|
||||
"values_compared": 2
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "gen0000",
|
||||
@@ -29289,8 +29833,8 @@
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 1,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 3659,
|
||||
"cases_total": 3660,
|
||||
"cases_passed": 3727,
|
||||
"cases_total": 3728,
|
||||
"deferred_by_unit": {
|
||||
"intersect.surface_intersector_p2": 1
|
||||
},
|
||||
|
||||
@@ -433,6 +433,478 @@
|
||||
"source": "fixture:fixtures/surface.surface_p8/plane_line_fallback.json#53",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_00",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#0 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=0): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,0/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_01",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#1 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=1): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,1/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_02",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#2 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=2): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,2/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_03",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#3 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=3): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,3/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_04",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#4 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=4): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,4/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_05",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#5 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=5): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,5/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_06",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#6 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=6): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,6/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_07",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#7 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=7): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,7/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_08",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#8 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=8): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,8/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_09",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#9 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=9): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,9/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_10",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#10 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=10): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,10/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 28
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_11",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#11 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=11): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,11/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_12",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#12 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=12): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,12/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_13",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#13 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=13): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,13/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_14",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#14 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=14): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,14/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_15",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#15 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=15): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,15/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_16",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#16 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=16): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,16/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_17",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#17 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=17): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,17/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_18",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#18 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=18): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,18/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_19",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#19 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=19): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,19/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_20",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#20 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=20): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,20/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_circle_21",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#21 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=0, i=21): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve SM_CO_QUINTIC unit circle centred (0,yc,21/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_00",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#22 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=0): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,0/21)-(1,y,0/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_01",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#23 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=1): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,1/21)-(1,y,1/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_02",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#24 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=2): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,2/21)-(1,y,2/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_03",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#25 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=3): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,3/21)-(1,y,3/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_04",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#26 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=4): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,4/21)-(1,y,4/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_05",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#27 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=5): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,5/21)-(1,y,5/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_06",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#28 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=6): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,6/21)-(1,y,6/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_07",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#29 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=7): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,7/21)-(1,y,7/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_08",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#30 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=8): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,8/21)-(1,y,8/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_09",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#31 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=9): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,9/21)-(1,y,9/21) (y, yc stepped by 2e-3/22 as upstream; asserts 2 hit(s); the C++ reference returns one SM_ST_RANGE_OF_VALUES solution here, as the Rust port); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_10",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#32 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=10): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,10/21)-(1,y,10/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_11",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#33 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=11): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,11/21)-(1,y,11/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_12",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#34 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=12): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,12/21)-(1,y,12/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_13",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#35 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=13): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,13/21)-(1,y,13/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_14",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#36 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=14): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,14/21)-(1,y,14/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_15",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#37 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=15): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,15/21)-(1,y,15/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_16",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#38 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=16): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,16/21)-(1,y,16/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_17",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#39 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=17): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,17/21)-(1,y,17/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_18",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#40 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=18): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,18/21)-(1,y,18/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_19",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#41 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=19): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,19/21)-(1,y,19/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_20",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#42 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=20): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,20/21)-(1,y,20/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_tangency_line_21",
|
||||
"outcome": "pass",
|
||||
"pass": true,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#43 (upstream tests/prog_test/src/smSurfaceTest.cpp:1138 my_test_csi_tangency (m=1, i=21): GlobalCurveIntersect at tol 1.0001e-3 of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with the SmBSplineCurve line (-1,y,21/21)-(1,y,21/21) (y, yc stepped by 2e-3/22 as upstream; asserts 1 hit(s)); cone net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 15
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_line_on_side_quadratic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#44 (upstream tests/prog_test/src/smSurfaceTest.cpp:1321 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUADRATIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve line along the side (asserts 1); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_line_on_side_quintic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#45 (upstream tests/prog_test/src/smSurfaceTest.cpp:1326 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve line along the side (asserts 1); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_line_left_short_quadratic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#46 (upstream tests/prog_test/src/smSurfaceTest.cpp:1334 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUADRATIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve shorter line on the left side (asserts 1); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_line_left_short_quintic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#47 (upstream tests/prog_test/src/smSurfaceTest.cpp:1339 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve shorter line on the left side (asserts 1); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_line_seam_long_quadratic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#48 (upstream tests/prog_test/src/smSurfaceTest.cpp:1347 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUADRATIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve longer line along the seam (asserts 2); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_line_seam_long_quintic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#49 (upstream tests/prog_test/src/smSurfaceTest.cpp:1352 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve longer line along the seam (asserts 2); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_circle_end_quadratic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#50 (upstream tests/prog_test/src/smSurfaceTest.cpp:1360 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUADRATIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve SM_CO_QUADRATIC circle at the bottom end (asserts 1); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_circle_end_quintic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#51 (upstream tests/prog_test/src/smSurfaceTest.cpp:1365 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve SM_CO_QUADRATIC circle at the bottom end (asserts 1); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_circle_mid_quadratic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#52 (upstream tests/prog_test/src/smSurfaceTest.cpp:1373 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUADRATIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve SM_CO_QUADRATIC circle at z=0.3 (asserts 1); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
"unit": "intersect.surface_drop_curve"
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"name": "prog_csi_coincidence_circle_mid_quintic",
|
||||
"outcome": "deferred",
|
||||
"pass": false,
|
||||
"source": "fixture:fixtures/surface.surface_p8/upstream_prog_test.json#53 (upstream tests/prog_test/src/smSurfaceTest.cpp:1378 my_test_csi_coincidence: GlobalCurveIntersect at SM_ZONE_TOL_3D of the SM_CO_QUINTIC CreateConePatch(unit radii, 0-360 deg, height 1) with a SmBSplineCurve SM_CO_QUADRATIC circle at z=0.3 (asserts 1); net computed with the green nurbs.b_spline_surface_p1 port and inlined)",
|
||||
"values_compared": 0
|
||||
},
|
||||
{
|
||||
"deferred": {
|
||||
"symbol": "SmSurfaceDropCurve::DoTrace",
|
||||
@@ -16455,12 +16927,12 @@
|
||||
}
|
||||
],
|
||||
"cases_both_errored": 0,
|
||||
"cases_deferred": 5,
|
||||
"cases_deferred": 15,
|
||||
"cases_failed": 0,
|
||||
"cases_passed": 2049,
|
||||
"cases_total": 2054,
|
||||
"cases_passed": 2093,
|
||||
"cases_total": 2108,
|
||||
"deferred_by_unit": {
|
||||
"intersect.surface_drop_curve": 5
|
||||
"intersect.surface_drop_curve": 15
|
||||
},
|
||||
"max_rel_err": 0.0,
|
||||
"pass": true,
|
||||
|
||||
Reference in New Issue
Block a user