use super::super::*;
use crate::geometry::pcurve::PcurveNurbs;
use crate::{ids::SurfaceId, index::ModelIndex, math::Point2};
#[test]
fn numerical_audit_mapped_pcurve_search_ignores_knot_units() {
const EPS_POINT: f64 = 1e-6;
let mut ir = crate::CadIr::empty();
let id = SurfaceId::mint("test:audit:surface#1").unwrap();
ir.model.surfaces.push(crate::geometry::Surface {
id: id.clone(),
geometry: SurfaceGeometry::Solved(SolvedSurfaceGeometry::Plane(
crate::geometry::analytic::PlaneSurface::try_new(
Point3::new(0., 0., 0.),
Vector3::new(0., 0., 1.),
Vector3::new(1., 0., 0.),
)
.unwrap(),
)),
source_object: None,
});
let index = ModelIndex::new_model_only(&ir);
let context = SurfacePcurveContext {
model: crate::validate::geometry_consistency::PassEvaluator {
index: &index,
pass: &crate::eval::admission::ModelEvaluationPass::new(),
},
surface_id: &id,
geometry: &ir.model.surfaces[0].geometry,
};
for d in [1., 1e9] {
let p = PcurveGeometry::Nurbs {
nurbs: PcurveNurbs::from_lanes(
1,
vec![0., 0., d, d],
vec![Point2::new(0., 0.), Point2::new(1., 0.)],
None,
false,
)
.unwrap(),
};
let t = mapped_pcurve_parameter_near_point(
&cadmpeg_test_support::service_decode_context(),
&context,
&p,
Point3::new(0.3, 0., 0.),
crate::scalar::FiniteReal::ZERO,
EPS_POINT,
)
.expect("compute the mapped pcurve parameter near point")
.unwrap()
.get();
assert!(
(crate::eval::decode::pcurve_uv(
crate::eval::admission::EvaluationAdmission::Standard,
&p,
t
)
.unwrap()
.u - 0.3)
.abs()
<= EPS_POINT
);
}
}