pub struct BrainMesh {
pub vertices: Vec<f32>,
pub faces: Vec<i32>,
}Expand description
A brain mesh, or any other triangular mesh. Vertices are stored as a vector of x,y,z coordinates, where triplets of coordinates represent a vertex. The triangular faces are stored in the same way as a vector of vertex indices.
Fields§
§vertices: Vec<f32>§faces: Vec<i32>Implementations§
Source§impl BrainMesh
impl BrainMesh
Sourcepub fn to_obj(&self) -> String
pub fn to_obj(&self) -> String
Export a brain mesh to a Wavefront Object (OBJ) format string.
§Examples
let surf = neuroformats::read_surf("/path/to/subjects_dir/subject1/surf/lh.white").unwrap();
let obj_repr = surf.mesh.to_obj();
std::fs::write("/tmp/lhwhite.obj", obj_repr).expect("Unable to write OBJ mesh file");Sourcepub fn to_ply(&self, vertex_colors: Option<&[u8]>) -> String
pub fn to_ply(&self, vertex_colors: Option<&[u8]>) -> String
Export a brain mesh to PLY (Polygon File Format) format string.
§Arguments
vertex_colors- Optional vertex colors as RGB values in [r,g,b, r,g,b, …] format. Must be exactly 3 times the number of vertices if provided.
§Examples
let surf = neuroformats::read_surf("/path/to/subject/surf/lh.white").unwrap();
let colors = vec![255; surf.mesh.vertices.len()]; // White colors for all vertices
let ply_repr = surf.mesh.to_ply(Some(&colors));
std::fs::write("/tmp/lhwhite.ply", ply_repr).expect("Unable to write PLY mesh file");pub fn to_gltf(&self, vertex_colors: Option<&[u8]>) -> String
Sourcepub fn num_vertices(&self) -> usize
pub fn num_vertices(&self) -> usize
Get the number of vertices for this mesh.
Sourcepub fn from_obj_file<P: AsRef<Path>>(path: P) -> Result<BrainMesh>
pub fn from_obj_file<P: AsRef<Path>>(path: P) -> Result<BrainMesh>
Read a brain mesh from a Wavefront object format (.obj) mesh file.
§Examples
let mesh = neuroformats::BrainMesh::from_obj_file("resources/mesh/cube.obj").unwrap();
assert_eq!(24, mesh.vertices.len());Sourcepub fn axes_min_max_coords(&self) -> Result<(f32, f32, f32, f32, f32, f32)>
pub fn axes_min_max_coords(&self) -> Result<(f32, f32, f32, f32, f32, f32)>
Compute the min and max coordinates for the x, y, and z axes of the mesh.
§Panics
If the min and max coordinates for the axes cannot be computed. E.g., when the mesh contains no vertices or invalid vertex coordinates like NAN values.
§Return value
The 6 values in the returned tuple are, in the following order: (min_x, max_x, min_y, max_y, min_z, max_z).
Sourcepub fn center(&self) -> Result<(f32, f32, f32)>
pub fn center(&self) -> Result<(f32, f32, f32)>
Compute the center of the mesh.
The center is simply the mean of the min and max values for the x, y and z axes. So this is NOT the center of mass.
§Panics
If the mean of the min and max coordinates cannot be computed. E.g., when the mesh contains no vertices or invalid vertex coordinates like NAN values.
§Return value
The 3 values in the returned tuple are the x, y and z coordinates of the center, in that order.
Sourcepub fn move_to(&mut self, offset: (f32, f32, f32))
pub fn move_to(&mut self, offset: (f32, f32, f32))
Move the mesh to a new location by adding the given offset to each vertex.
§Arguments
offset- A tuple containing the x, y, and z offsets to apply to each vertex.
§Returns
Nothing, changes the mesh in place.
§Examples
// This example uses the center() function to move the mesh to the origin.
let mut mesh = neuroformats::BrainMesh::from_obj_file("resources/mesh/cube.obj").unwrap();
let (cx, cy, cz) = mesh.center().unwrap();
mesh.move_to((cx, cy, cz));Trait Implementations§
impl StructuralPartialEq for BrainMesh
Auto Trait Implementations§
impl Freeze for BrainMesh
impl RefUnwindSafe for BrainMesh
impl Send for BrainMesh
impl Sync for BrainMesh
impl Unpin for BrainMesh
impl UnwindSafe for BrainMesh
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more