[][src]Enum truck_geometry::errors::Error

pub enum Error {
    ZeroRange,
    DifferentBackFront(f64f64),
    NotClampedKnotVector,
    NotSortedVector,
    TooLargeDegree(usizeusize),
    CannotRemoveKnot(usize),
    EmptyControlPoints,
    TooShortKnotVector(usizeusize),
    IrregularControlPoints,
    EmptyCurveCollector,
}

Geometrical Errors

Variants

ZeroRange

The following operations are failed if the knot vector has zero range.

  • Creating BSplineCurve or BSplineSurface,
  • 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));
DifferentBackFront(f64f64)

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)));
NotClampedKnotVector

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));
NotSortedVector

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(),
);
TooLargeDegree(usizeusize)

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)));
EmptyControlPoints

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),
);
TooShortKnotVector(usizeusize)

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)),
);
IrregularControlPoints

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),
);
EmptyCurveCollector

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]

impl PartialEq<Error> for Error[src]

impl StructuralPartialEq for Error[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.