@@ -8,6 +8,34 @@ use crate::{
8
8
Error ,
9
9
} ;
10
10
11
+ /// A (2d or 3d) mesh that has been generated from a [`Glyph`]
12
+ ///
13
+ /// Usage:
14
+ /// ```rust
15
+ /// # use ttf2mesh::{TTFFile, Quality};
16
+ /// # let mut ttf = TTFFile::from_file("./fonts/FiraMono-Medium.ttf").unwrap();
17
+ /// # let mut glyph = ttf.glyph_from_char('€').unwrap();
18
+ /// # let mesh_3d = glyph.to_3d_mesh(Quality::Medium, 2.).unwrap();
19
+ ///
20
+ /// // vertices with for-loop
21
+ /// for vertex in mesh_3d.iter_vertices() {
22
+ /// let values: (f32, f32, f32) = vertex.value();
23
+ /// // do something
24
+ /// }
25
+ ///
26
+ /// // or copying to a new vector
27
+ /// let vertices = mesh_3d.iter_vertices()
28
+ /// .map(|v| v.value())
29
+ /// .collect::<Vec<(f32, f32, f32)>>();
30
+ ///
31
+ /// let faces = mesh_3d.iter_faces()
32
+ /// .map(|v| v.value())
33
+ /// .collect::<Vec<(i32, i32, i32)>>();
34
+ ///
35
+ /// let normals = mesh_3d.iter_normals().unwrap()
36
+ /// .map(|v| v.value())
37
+ /// .collect::<Vec<(f32, f32, f32)>>();
38
+ /// ```
11
39
pub struct Mesh < ' a , T : MeshPointer < ' a > > {
12
40
inner : * mut T ,
13
41
_phantom : & ' a PhantomData < T > ,
@@ -106,20 +134,23 @@ impl<'a, T: MeshPointer<'a>> Mesh<'a, T> {
106
134
} )
107
135
}
108
136
137
+ /// Get an iterator of mesh vertices
109
138
pub fn iter_vertices ( & ' a self ) -> MeshIterator < ' a , <T as MeshPointer >:: VertStruct > {
110
139
let vertices =
111
140
unsafe { slice:: from_raw_parts ( ( & * self . inner ) . get_vert_ptr ( ) , self . vertices_len ( ) ) } ;
112
141
113
142
MeshIterator :: new ( vertices)
114
143
}
115
144
145
+ /// Get an iterator of mesh faces (indices)
116
146
pub fn iter_faces < ' b > ( & ' a self ) -> MeshIterator < ' a , <T as MeshPointer >:: FaceStruct > {
117
147
let faces =
118
148
unsafe { slice:: from_raw_parts ( ( & * self . inner ) . get_face_ptr ( ) , self . faces_len ( ) ) } ;
119
149
120
150
MeshIterator :: new ( faces)
121
151
}
122
152
153
+ /// Get an iterator of mesh normals. Only for 3d mesh, always None for 2d mesh
123
154
pub fn iter_normals < ' b > (
124
155
& ' a self ,
125
156
) -> Option < MeshIterator < ' a , <T as MeshPointer >:: NormalStruct > > {
@@ -133,14 +164,17 @@ impl<'a, T: MeshPointer<'a>> Mesh<'a, T> {
133
164
Some ( MeshIterator :: new ( normals) )
134
165
}
135
166
167
+ /// Get the count of vertices
136
168
pub fn vertices_len ( & self ) -> usize {
137
169
unsafe { & * self . inner } . get_vert_len ( )
138
170
}
139
171
172
+ /// Get the count of faces (indices)
140
173
pub fn faces_len ( & self ) -> usize {
141
174
unsafe { & * self . inner } . get_face_len ( )
142
175
}
143
176
177
+ /// Get the count of normals (always zero for 2d meshes)
144
178
pub fn normals_len ( & self ) -> usize {
145
179
unsafe { & * self . inner } . get_normals_len ( )
146
180
}
0 commit comments