pub struct ObjImporter;Expand description
Imports Wavefront OBJ files into 3MF Model structures.
Supports two modes:
read_from_path: Full import with MTL material resolutionread: Geometry-only import (backward compatible, no materials)
Implementations§
Source§impl ObjImporter
impl ObjImporter
Sourcepub fn read_from_path(path: &Path) -> Result<Model>
pub fn read_from_path(path: &Path) -> Result<Model>
Reads an OBJ file from a filesystem path, resolving MTL files relative to it.
This is the recommended entry point for OBJ import. It resolves mtllib
directives relative to the OBJ file’s parent directory, parses materials,
splits groups/objects into separate 3MF Objects, and assigns per-triangle
material properties.
§Arguments
path- Path to the OBJ file on disk
§Returns
A Model containing:
- One [
BaseMaterialsGroup] (if materials are referenced) - One [
Object] per OBJ group/object (or single Object if no groups) - Per-triangle
pid/p1/p2/p3material assignment - One [
BuildItem] per Object
§Errors
Returns errors for I/O failures or invalid OBJ syntax (see read).
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.
This is the backward-compatible entry point. No MTL file resolution is
performed – material directives (usemtl, mtllib) are ignored.
Group directives (g, o) are also ignored for full backward compatibility.
For material-aware import, use read_from_path.
§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.
§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
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