Python package to export FreeCAD objects to the Wavefront (.obj) file format.
This package satisfies some unique requirements for exporting to OBJ that FreeCAD's built-in functions do not currently satisfy:
- Return a string or the file's contents; instead of writing to a file immediately.
- Use an object's
Labelfor the object's name in the.objfile. - Ungroup the following standard container objects:
- Control export granularity keeping container objects grouped, and links unresolved.
- Control which objects are exported (e.g. don't export invisible objects).
- Export wires (the black outline or line segments surrounding parts).
- Export link array elements.
import freecad_to_obj
obj_file_contents = freecad_to_obj.export(objects)Object names in Wavefront .obj are preceded by an "o [ObjectName]" (source).
This library uses the object's Label for the object name by default, but you can change this behavior via the object_name_getter keyword argument (see API).
o [ObjectName]
v [x1] [y1] [y2]
v ...
vn [x1] [y1] [y2]
vn ...
f v1//vn1 v2//vn2 v3//vn3 ...
After the object name are:
- vertices preceded by
v - vertex normals preceded by
vn - and faces preceded by
f- faces reference the vertices and vertex normals by number (starting from 1 instead of 0)
Combined these make up the geometry for the object.
Wires for objects are exported as separate objects in the form:
[ObjectName]WireN
v [x1] [y1] [y2]
v ...
l v1 v2 v3 ...
Where N is a zero-indexed incrementing counter.
For example:
o ExampleObjectWire0
...
o ExampleObjectWire1
...
o ExampleObjectWire2
After the object name are:
- vertices preceded by
v - and line segments preceded by
l- line segments reference the vertices by number (starting from 1 instead of 0)
Exports a list of FreeCAD objects to Wavefront (.obj).
| Name | Type | Required | Description |
|---|---|---|---|
objects |
List[object] |
true |
List of FreeCAD objects to export |
| Name | Type | Default | Description |
|---|---|---|---|
object_name_getter |
Callable[[object, List[object], int], str] |
lambda obj, path, shape_index: obj.Label |
Defaults to the Label. |
keep_unresolved |
Callable[[object, List[object]], bool] |
None |
Function to return whether to keep an object "unresolved" or a group such as App::Link or App::Part. |
do_not_export |
Callable[[object, List[object]], bool] |
lambda obj, path: not obj.Visibility |
Function to return whether to export an object or not. By default, all invisible objects are not exported. |
export_link_array_elements |
boolean |
False |
Boolean to control whether to export link array elements. By default, link arrays are exported as a single element. |
mesh_settings |
dict |
{'LinearDeflection': 0.1, 'AngularDeflection': 0.7, 'Relative': True} |
Mesh settings, see FreeCAD wiki. |
Returns: (string) Wavefront .obj file contents.
See Changelog.
For simplicity, this package does not care about thes generation of material (.mtl) files.
Currently tested with FreeCAD 1.0.0.