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 aPLPath(piecewise linear path).puncture_points: A shared reference to an array ofPuncturePointobjects 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
impl PathType
pub fn word_as_str(&self) -> &str
Sourcepub fn new(start: Vec2, puncture_points: Vec<PuncturePoint>) -> Self
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}pub fn from_path(path: PLPath, puncture_points: Arc<[PuncturePoint]>) -> Self
pub fn concatenate(&self, other: &PLPath) -> Self
Sourcepub fn update_word(&mut self) -> String
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 Component for PathType
impl Component for PathType
Source§type Storage = TableStorage
type Storage = TableStorage
A marker type indicating the storage type used for this component.
This must be either
TableStorage or SparseStorage.Auto Trait Implementations§
impl Freeze for PathType
impl RefUnwindSafe for PathType
impl Send for PathType
impl Sync for PathType
impl Unpin for PathType
impl UnwindSafe for PathType
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId), )
unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
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>
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)
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)
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.