Struct fj_kernel::algorithms::approx::face::FaceApprox
source · pub struct FaceApprox {
pub exterior: CycleApprox,
pub interiors: BTreeSet<CycleApprox>,
pub color: Color,
pub coord_handedness: Handedness,
}Expand description
An approximation of a Face
Fields§
§exterior: CycleApproxApproximation of the exterior cycle
interiors: BTreeSet<CycleApprox>Approximations of the interior cycles
color: ColorThe color of the approximated face
coord_handedness: HandednessThe handedness of the approximated face’s front-side coordinate system
Implementations§
source§impl FaceApprox
impl FaceApprox
sourcepub fn points(&self) -> BTreeSet<ApproxPoint<2>>
pub fn points(&self) -> BTreeSet<ApproxPoint<2>>
Compute all points that make up the approximation
Examples found in repository?
src/algorithms/approx/face.rs (line 41)
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
fn approx_with_cache(
self,
tolerance: impl Into<Tolerance>,
cache: &mut Self::Cache,
) -> Self::Approximation {
let tolerance = tolerance.into();
let approx = self
.into_iter()
.map(|face| face.approx_with_cache(tolerance, cache))
.collect();
let min_distance = ValidationConfig::default().distinct_min_distance;
let mut all_points: BTreeSet<ApproxPoint<2>> = BTreeSet::new();
// Run some validation code on the approximation.
for approx in &approx {
let approx: &FaceApprox = approx;
for point in &approx.points() {
for p in &all_points {
let distance =
(p.global_form - point.global_form).magnitude();
if p.global_form != point.global_form
&& distance < min_distance
{
let a = p;
let b = point;
panic!(
"Invalid approximation: \
Distinct points are too close \
(a: {:?}, b: {:?}, distance: {distance})\n\
source of `a`: {:#?}\n\
source of `b`: {:#?}\n",
a.global_form, b.global_form, a.source, b.source
);
}
}
all_points.insert(point.clone());
}
}
approx
}Trait Implementations§
source§impl Debug for FaceApprox
impl Debug for FaceApprox
source§impl Ord for FaceApprox
impl Ord for FaceApprox
source§fn cmp(&self, other: &FaceApprox) -> Ordering
fn cmp(&self, other: &FaceApprox) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
source§impl PartialEq<FaceApprox> for FaceApprox
impl PartialEq<FaceApprox> for FaceApprox
source§fn eq(&self, other: &FaceApprox) -> bool
fn eq(&self, other: &FaceApprox) -> bool
This method tests for
self and other values to be equal, and is used
by ==.source§impl PartialOrd<FaceApprox> for FaceApprox
impl PartialOrd<FaceApprox> for FaceApprox
source§fn partial_cmp(&self, other: &FaceApprox) -> Option<Ordering>
fn partial_cmp(&self, other: &FaceApprox) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self and other) and is used by the <=
operator. Read moresource§impl Triangulate for FaceApprox
impl Triangulate for FaceApprox
impl Eq for FaceApprox
impl StructuralEq for FaceApprox
impl StructuralPartialEq for FaceApprox
Auto Trait Implementations§
impl !RefUnwindSafe for FaceApprox
impl !Send for FaceApprox
impl !Sync for FaceApprox
impl Unpin for FaceApprox
impl !UnwindSafe for FaceApprox
Blanket Implementations§
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.