PathType

Struct PathType 

Source
pub struct PathType { /* private fields */ }
Expand description

Represents the homotopy type of a path in a punctured plane.

The PathType struct encapsulates the current path, puncture points, and the word representation of the homotopy type. It provides methods to update the path and retrieve the word representation.

§Fields

  • current_path: The current path represented as a PLPath (piecewise linear path).
  • puncture_points: A shared reference to an array of PuncturePoint objects representing the puncture points in the plane.
  • word: The word representation of the homotopy type, which is automatically updated whenever the path is modified.

§Examples

use your_library::{PathType, PLPath, PuncturePoint};
use std::sync::Arc;

let puncture_points = vec![
    PuncturePoint { position: (0.0, 0.0), name: 'A' },
    PuncturePoint { position: (1.0, 1.0), name: 'B' },
];
let puncture_points = Arc::new(puncture_points);

let initial_path = PLPath::new();
let mut path_type = PathType {
    current_path: initial_path,
    puncture_points,
    word: String::new(),
};

// Update the path
let new_path = PLPath::from_points(&[(0.0, 0.0), (1.0, 0.0), (1.0, 1.0)]);
path_type.update_path(new_path);

// Get the updated word representation
println!("Word representation: {}", path_type.word());

Implementations§

Source§

impl PathType

Source

pub fn word_as_str(&self) -> &str

Source

pub fn word(&self) -> String

Examples found in repository?
examples/homotopy_word_debug.rs (line 112)
106fn homotopy_text_update(
107    mut text_query: Query<&mut Text, With<HomotopyWordText>>,
108    path_query: Query<&PathType>,
109) {
110    if let Ok(path_type) = path_query.get_single() {
111        if let Ok(mut text) = text_query.get_single_mut() {
112            text.sections[0].value = path_type.word();
113        }
114    }
115}
Source

pub fn new(start: Vec2, puncture_points: Vec<PuncturePoint>) -> Self

Examples found in repository?
examples/homotopy_word_debug.rs (line 60)
23fn init(
24    mut commands: Commands,
25    mut meshes: ResMut<Assets<Mesh>>,
26    mut materials: ResMut<Assets<ColorMaterial>>,
27) {
28    // spawn the camera
29    commands.spawn(Camera2dBundle::default());
30
31    // Define some puncture points
32    let puncture_points = vec![
33        PuncturePoint::new(Vec2::new(-225.0, 100.0), 'A'),
34        PuncturePoint::new(Vec2::new(-75.0, 150.0), 'B'),
35        PuncturePoint::new(Vec2::new(75.0, 150.0), 'C'),
36        PuncturePoint::new(Vec2::new(225.0, 100.0), 'D'),
37    ];
38
39    // Render puncture points as red circles
40    let radius = 5.0;
41    let material = materials.add(ColorMaterial::from(Color::RED));
42    for point in puncture_points.iter() {
43        commands.spawn(MaterialMesh2dBundle {
44            mesh: meshes.add(Circle::new(radius)).into(),
45            material: material.clone(),
46            transform: Transform::from_translation(point.position().extend(0.0)),
47            ..Default::default()
48        });
49    }
50
51    // spawn the player
52    commands.spawn((
53        Player,
54        MaterialMesh2dBundle {
55            mesh: meshes.add(Circle::new(10.0)).into(),
56            material: materials.add(PLAYER_COLOR),
57            transform: Transform::from_translation(PLAYER_START),
58            ..Default::default()
59        },
60        PathType::new(PLAYER_START.truncate(), puncture_points),
61    ));
62
63    // spawn the text
64    commands.spawn((
65        TextBundle::from_section(
66            "default",
67            TextStyle {
68                font_size: 60.0,
69                ..Default::default()
70            },
71        )
72        .with_text_justify(JustifyText::Center)
73        .with_style(Style {
74            position_type: PositionType::Absolute,
75            bottom: Val::Px(5.0),
76            right: Val::Px(5.0),
77            ..Default::default()
78        }),
79        HomotopyWordText,
80    ));
81}
Source

pub fn from_path(path: PLPath, puncture_points: Arc<[PuncturePoint]>) -> Self

Source

pub fn concatenate(&self, other: &PLPath) -> Self

Source

pub fn push(&mut self, point: &Vec2)

Appends a 2d position to the end of the current path.

Source

pub fn update_word(&mut self) -> String

Updates the word representing the homotopy type of the path. Returns the updated word.

Trait Implementations§

Source§

impl Clone for PathType

Source§

fn clone(&self) -> PathType

Returns a duplicate 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 Component for PathType
where Self: Send + Sync + 'static,

Source§

type Storage = TableStorage

A marker type indicating the storage type used for this component. This must be either TableStorage or SparseStorage.
Source§

impl Debug for PathType

Source§

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

Formats the value using the given formatter. Read more

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, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
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<C> Bundle for C
where C: Component,

Source§

fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId), )

Source§

unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
where F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a>,

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> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

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

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

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

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

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<C> DynamicBundle for C
where C: Component,

Source§

fn get_components(self, func: &mut impl FnMut(StorageType, OwningPtr<'_>))

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

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

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

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

impl<T> TypeData for T
where T: 'static + Send + Sync + Clone,

Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> Settings for T
where T: 'static + Send + Sync,

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,