ObjImporter

Struct ObjImporter 

Source
pub struct ObjImporter;
Expand description

Imports Wavefront OBJ files into 3MF Model structures.

Supports two modes:

  • read_from_path: Full import with MTL material resolution
  • read: Geometry-only import (backward compatible, no materials)

Implementations§

Source§

impl ObjImporter

Source

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/p3 material assignment
  • One [BuildItem] per Object
§Errors

Returns errors for I/O failures or invalid OBJ syntax (see read).

Source

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 implementing Read containing 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§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V