Enum CurveMeasure

Source
#[non_exhaustive]
pub enum CurveMeasure { Distance(Scalar), Parameter(Scalar), }
Expand description

Where along a curve to evaluate, and by WHICH method of measurement.

Two different quantities are routinely written into exchange files for the same purpose, and they are not interchangeable:

  • a LENGTH from the start of the curve, and
  • a dimensionless native PARAMETER, which is not a distance at all.

IFC4x3 makes the choice explicit in the file (IfcCurveMeasureSelect, either IfcNonNegativeLengthMeasure or IfcParameterValue), and STEP carries the same distinction. A consumer maps the authored value to this enum ONCE and passes it through; it never has to decide which evaluator to call.

Why this is a value and not two method names: with separate *_at_parameter methods the caller still branches, and a caller that branches can branch wrongly. Passing 1.5 as a distance to a circle authored in radians places an object 1.5 m along a curve where the author meant about 86 degrees around it – wrong, finite, and plausible, which is the worst combination. Carrying the method of measurement in the value makes that mistake unrepresentable.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Distance(Scalar)

A length from the start of the curve.

Interpreted in the provider’s DistanceConvention for that curve, which is why the convention must be consulted before trusting it.

§

Parameter(Scalar)

The curve’s own parameter: an angle for a circle, a knot value for a spline, arc length for an intrinsic curve.

Meaningful for every curve family, including those whose arc length has no closed form, so this route stays available where Distance is refused.

Implementations§

Source§

impl CurveMeasure

Source

pub fn value(self) -> Scalar

The carried number, whichever method of measurement it uses.

For validity checks such as finiteness that apply to both.

Source

pub fn is_distance(self) -> bool

Whether this is a length rather than a native parameter.

Trait Implementations§

Source§

impl Clone for CurveMeasure

Source§

fn clone(&self) -> CurveMeasure

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CurveMeasure

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for CurveMeasure

Source§

fn eq(&self, other: &CurveMeasure) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for CurveMeasure

Source§

impl StructuralPartialEq for CurveMeasure

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.