Skip to main content

SectionPlacement

Enum SectionPlacement 

Source
pub enum SectionPlacement {
    Transplant,
    Rigid,
}
Expand description

HOW a section is placed at each station — the two things “sweep a profile along a path” can mean, and the reason they are not the same shape.

Transplant MOVES the profile onto the path: the anchor origin lands on the station point and the profile plane becomes the station’s NORMAL plane. The profile’s own position and its angle to the path are both discarded — every sweep comes out centred on the path and square to it. That is the classic swept-surface reading, and it is what SWP builds.

Rigid CARRIES the profile: the section at station k is the profile moved by the same rigid motion the PATH undergoes between its start and station k,

    section_k(x) = P_k + R_k · (x − P_0)

where R_k is the rotation taking the start frame (T_0, r_0, s_0) to the station’s (T_k, r_k, s_k). The profile keeps its drawn POSITION and its drawn ANGLE to the path; what changes along the sweep is only what the path itself does. Two consequences are the whole point of the mode:

  • a STRAIGHT path makes every R_k the identity, so the section merely translates and the result is the oblique prism extrude_profile_brep builds from the same profile and vector — pathAlign and translate agree on a straight path rather than merely having the same volume;
  • a circular ARC makes R_k the rotation about the ARC’S OWN CENTRE AXIS (for a planar path the RMF’s transport rotation IS that rotation), so the profile is carried round the pivot and the end cap arrives at the angle the start cap had to the tangent. A full-circle path degenerates to exactly a revolve of the profile about that axis.

R_k = F_k · F_0ᵀ does NOT depend on which perpendicular r_0 the RMF was seeded with: re-seeding rolls F_0 and every F_k by the same angle about the tangent, and the two rolls cancel in the product. That matters because Transplant maps pu → r_k directly, so under IT the profile’s roll about the path is whatever tangents[0].perpendicular() happened to return — an arbitrary orientation no caller can predict. Rigid has no such freedom.

Variants§

§

Transplant

Move the profile onto the path, square to it (the classic sweep).

§

Rigid

Carry the profile by the path’s own rigid motion (see above).

Trait Implementations§

Source§

impl Clone for SectionPlacement

Source§

fn clone(&self) -> SectionPlacement

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for SectionPlacement

Source§

impl Debug for SectionPlacement

Source§

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

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

impl Eq for SectionPlacement

Source§

impl PartialEq for SectionPlacement

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for SectionPlacement

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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 = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more