pub struct ObjImporter;Expand description
Imports Wavefront OBJ files into 3MF Model structures.
Parses vertex positions (v) and faces (f) from OBJ text format. Polygonal faces
with more than 3 vertices are automatically triangulated using fan triangulation.
Implementations§
Source§impl ObjImporter
impl ObjImporter
Sourcepub fn read<R: Read>(reader: R) -> Result<Model>
pub fn read<R: Read>(reader: R) -> Result<Model>
Reads an OBJ file and converts it to a 3MF Model.
§Arguments
reader- Any type implementingReadcontaining OBJ text data
§Returns
A Model containing:
- Single mesh object with ResourceId(1) named “OBJ Import”
- All triangles from the OBJ file (polygons triangulated via fan method)
- All vertices from the OBJ file
- Single build item referencing the mesh object
§Errors
Returns Lib3mfError::Validation if:
- Vertex line has fewer than 4 fields (v x y z)
- Face line has fewer than 4 fields (f v1 v2 v3…)
- Float parsing fails for vertex coordinates
- Integer parsing fails for face indices
- Relative indices (negative values) are used (not supported)
Returns Lib3mfError::Io if reading from the input fails.
§Format Details
- Index conversion: OBJ uses 1-based indices, converted to 0-based for internal mesh
- Fan triangulation: Polygons with N vertices create N-2 triangles using first vertex as fan apex
- Ignored elements: Texture coords (vt), normals (vn), groups (g), materials (usemtl, mtllib)
- Comments: Lines starting with
#are skipped
§Examples
use lib3mf_converters::obj::ObjImporter;
use std::fs::File;
let file = File::open("cube.obj")?;
let model = ObjImporter::read(file)?;
// Access the imported mesh
let obj = model.resources.get_object(lib3mf_core::model::resources::ResourceId(1))
.expect("OBJ import creates object with ID 1");
if let lib3mf_core::model::Geometry::Mesh(mesh) = &obj.geometry {
println!("Imported {} vertices, {} triangles",
mesh.vertices.len(), mesh.triangles.len());
}Auto Trait Implementations§
impl Freeze for ObjImporter
impl RefUnwindSafe for ObjImporter
impl Send for ObjImporter
impl Sync for ObjImporter
impl Unpin for ObjImporter
impl UnwindSafe for ObjImporter
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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<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>
Converts
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>
Converts
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