[−][src]Enum truck_geometry::errors::Error
Geometrical Errors
Variants
The following operations are failed if the knot vector has zero range.
- Creating
BSplineCurve
orBSplineSurface
, - Calculating bspline basis functions, or
- Normalizing the knot vector.
Examples
use truck_geometry::*; use errors::Error; let mut knot_vec = KnotVec::from(vec![0.0, 0.0, 0.0, 0.0]); assert_eq!(knot_vec.try_normalize(), Err(Error::ZeroRange)); assert_eq!(knot_vec.try_bspline_basis_functions(1, 0.0), Err(Error::ZeroRange)); let ctrl_pts = vec![Vector2::new(0.0, 0.0), Vector2::new(1.0, 1.0)]; assert_eq!(BSplineCurve::try_new(knot_vec, ctrl_pts), Err(Error::ZeroRange));
Fails concatting two knot vectors if there is a difference between the back knot of the former knot vector and the front knot of the latter knot vector.
Examples
use truck_geometry::*; use errors::Error; let mut knot_vec0 = KnotVec::from(vec![0.0, 0.0, 1.0, 1.0]); let knot_vec1 = KnotVec::from(vec![2.0, 2.0, 3.0, 3.0]); assert_eq!(knot_vec0.try_concat(&knot_vec1, 1), Err(Error::DifferentBackFront(1.0, 2.0)));
If the knot vector is not clamped, then one cannot concat the vector with another knot vector.
Examples
use truck_geometry::*; use errors::Error; let mut knot_vec0 = KnotVec::from(vec![0.0, 0.0, 1.0, 1.0]); let knot_vec1 = KnotVec::from(vec![2.0, 2.0, 3.0, 3.0]); assert_eq!(knot_vec0.try_concat(&knot_vec1, 2), Err(Error::NotClampedKnotVector));
Creating a knot vector by KnotVec::try_from()
is failed if the given vector is not sorted.
<KnotVec as From<Vec<f64>>>::from()
does not panic by this error because sorts the given
vector before creating the knot vector. So, KnotVec::try_from()
is more efficient than
<KnotVec as From<Vec<f64>>>::from()
.
Examples
use truck_geometry::*; use errors::Error; use std::convert::*; assert_eq!(KnotVec::try_from(vec![1.0, 3.0, 0.0, 2.0]), Err(Error::NotSortedVector)); assert_eq!( <KnotVec as From<Vec<f64>>>::from(vec![1.0, 3.0, 0.0, 2.0]), KnotVec::try_from(vec![0.0, 1.0, 2.0, 3.0]).unwrap(), );
The given degree is too large to calculate bspline basis functions.
Examples
use truck_geometry::*; use errors::Error; // a knot vector with length = 4. let knot_vec = KnotVec::from(vec![0.0, 0.0, 1.0, 1.0]); assert_eq!( knot_vec.try_bspline_basis_functions(5, 0.5), Err(Error::TooLargeDegree(4, 5)), );
CannotRemoveKnot(usize)
The specified knot cannot be removed.
Examples
use truck_geometry::*; use errors::Error; let knot_vec = KnotVec::bezier_knot(2); let ctrl_pts = vec![Vector2::new(-1.0, 1.0), Vector2::new(0.0, -1.0), Vector2::new(1.0, 1.0)]; let mut bspcurve = BSplineCurve::new(knot_vec, ctrl_pts); let org_curve = bspcurve.clone(); bspcurve.add_knot(0.5).add_knot(0.5).add_knot(0.25).add_knot(0.75); assert!(bspcurve.try_remove_knot(3).is_ok()); assert_eq!(bspcurve.try_remove_knot(2), Err(Error::CannotRemoveKnot(2)));
Empty vector of points cannot construct B-spline.
Examples
use truck_geometry::*; use errors::Error; let knot_vec = KnotVec::bezier_knot(2); let ctrl_pts: Vec<Vector4> = Vec::new(); assert_eq!( BSplineCurve::try_new(knot_vec, ctrl_pts), Err(Error::EmptyControlPoints), );
The knot vector of B-spline curves or B-spline surfaces must be longer than the corresponded array of control points.
Examples
use truck_geometry::*; use errors::Error; let knot_vec = KnotVec::from(vec![0.0, 1.0, 2.0]); let ctrl_pts = vec![Vector2::new(0.0, 0.0), Vector2::new(0.0, 0.0), Vector2::new(0.0, 0.0), Vector2::new(0.0, 0.0)]; assert_eq!( BSplineCurve::try_new(knot_vec, ctrl_pts), Err(Error::TooShortKnotVector(3, 4)), );
The length of the given arrays of control points to create a B-spline surface is irregular.
Examples
use truck_geometry::*; use errors::Error; let knot_vecs = (KnotVec::bezier_knot(2), KnotVec::bezier_knot(2)); let ctrl_pts = vec![ vec![Vector2::new(1.0, 2.0), Vector2::new(1.0, 2.0)], // length = 2 vec![Vector2::new(1.0, 2.0)] // length = 1 ]; assert_eq!( BSplineSurface::try_new(knot_vecs, ctrl_pts), Err(Error::IrregularControlPoints), );
Attempted to get the curve from the empty curve collector.
Example
use truck_geometry::*; use errors::Error; use std::convert::TryInto; let cc = CurveCollector::<Vector2>::Singleton; let error: Result<BSplineCurve<Vector2>> = cc.try_into(); assert_eq!(error, Err(Error::EmptyCurveCollector));
Trait Implementations
impl Debug for Error
[src]
impl Display for Error
[src]
impl Error for Error
[src]
pub fn source(&self) -> Option<&(dyn Error + 'static)>
1.30.0[src]
pub fn backtrace(&self) -> Option<&Backtrace>
[src]
pub fn description(&self) -> &str
1.0.0[src]
pub fn cause(&self) -> Option<&dyn Error>
1.0.0[src]
impl PartialEq<Error> for Error
[src]
impl StructuralPartialEq for Error
[src]
Auto Trait Implementations
impl RefUnwindSafe for Error
[src]
impl Send for Error
[src]
impl Sync for Error
[src]
impl Unpin for Error
[src]
impl UnwindSafe for Error
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,