Skip to main content

lib3mf is an implementation of the 3D Manufacturing Format file standard

Project description

lib3mf

![Build Status] Documentation Status Version 2.3.2 Supported platforms Simplified BSD License codecov

lib3mf is a C++ implementation of the 3D Manufacturing Format file standard.

It provides 3MF reading and writing capabilities, as well as conversion and validation tools for input and output data. lib3mf runs on Windows, Linux and MacOS and offers a clean and easy-to-use API in various programming languages to speed up the development and keep integration costs at a minimum.

As 3MF shall become an universal 3D Printing standard, its quick adoption is very important. This library shall lower all barriers of adoption to any possible user, let it be software providers, hardware providers, service providers or middleware tools.

The specification can be downloaded at http://3mf.io/specification/.

Example (Create Cube)

import lib3mf
from lib3mf import get_wrapper

# Get version
def get_version(wrapper):
    major, minor, micro = wrapper.GetLibraryVersion()
    print("Lib3MF version: {:d}.{:d}.{:d}".format(major, minor, micro), end="")
    hasInfo, prereleaseinfo = wrapper.GetPrereleaseInformation()
    if hasInfo:
        print("-" + prereleaseinfo, end="")
    hasInfo, buildinfo = wrapper.GetBuildInformation()
    if hasInfo:
        print("+" + buildinfo, end="")
    print("")


# Create vertex in a mesh
def create_vertex(_mesh, x, y, z):
    position = lib3mf.Position()
    position.Coordinates[0] = float(x)
    position.Coordinates[1] = float(y)
    position.Coordinates[2] = float(z)
    _mesh.AddVertex(position)
    return position


# Add triangle in a mesh
def add_triangle(_mesh, p1, p2, p3):
    triangle = lib3mf.Triangle()
    triangle.Indices[0] = p1
    triangle.Indices[1] = p2
    triangle.Indices[2] = p3
    _mesh.AddTriangle(triangle)
    return triangle


# Get a wrapper object
wrapper = get_wrapper()

# Check version always
get_version(wrapper)

# Create a model
model = wrapper.CreateModel()
mesh_object = model.AddMeshObject()
mesh_object.SetName("Box")

# Define the size of the cube
fSizeX, fSizeY, fSizeZ = 100.0, 200.0, 300.0

# Create vertices
vertices = [
    create_vertex(mesh_object, 0, 0, 0),
    create_vertex(mesh_object, fSizeX, 0, 0),
    create_vertex(mesh_object, fSizeX, fSizeY, 0),
    create_vertex(mesh_object, 0, fSizeY, 0),
    create_vertex(mesh_object, 0, 0, fSizeZ),
    create_vertex(mesh_object, fSizeX, 0, fSizeZ),
    create_vertex(mesh_object, fSizeX, fSizeY, fSizeZ),
    create_vertex(mesh_object, 0, fSizeY, fSizeZ)
]

# Define triangles by vertices indices
triangle_indices = [
    (2, 1, 0), (0, 3, 2), (4, 5, 6), (6, 7, 4),
    (0, 1, 5), (5, 4, 0), (2, 3, 7), (7, 6, 2),
    (1, 2, 6), (6, 5, 1), (3, 0, 4), (4, 7, 3)
]

# Create triangles
triangles = []
for v0, v1, v2 in triangle_indices:
    triangles.append(add_triangle(mesh_object, v0, v1, v2))

# Set geometry to the mesh object after creating vertices and triangles
mesh_object.SetGeometry(vertices, triangles)

# Add build item with an identity transform
model.AddBuildItem(mesh_object, wrapper.GetIdentityTransform())

# Save the model to a 3MF file
writer = model.QueryWriter("3mf")
writer.WriteToFile("cube.3mf")

Documentation

lib3mf's documentation is available on https://lib3mf.readthedocs.io.

Obtaining lib3mf

Simply download the precompiled binary SDK https://github.com/3MFConsortium/lib3mf/releases.

Using lib3mf

Allthough the different language bindings are kept as similar as possible, the usage of lib3mf still depends your programming language.

You are best-off starting with one of the examples distributed in the SDK or with this minimal example in C++.

Contributing

lib3mf is an open source project and supported by the 3MF Consortium.

Contributions are welcome and we are always looking for people that improve the implementation of the specification and extensions of 3MF. Have a look at the contributor's guide for details. This page also contains a section about building lib3mf from source or obtaining nightly snapshot builds.

Licenses and third party code

lib3mf is released under the BSD license. The library contains code of the following third parties:

  1. libzip 1.10.1, https://libzip.org/license/
  2. zlib 1.3.1, http://www.zlib.net/zlib_license.html
  3. cpp-base64 2.rc.08, https://github.com/ReneNyffenegger/cpp-base64/blob/master/LICENSE
  4. fast-float v6.0.0, https://github.com/fastfloat/fast_float/tree/v6.0.0?tab=License-3-ov-file

In addition, the automated tests of lib3mf make uses of LibReSSL 3.8.2, License and googletest 1.14.0 License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

lib3mf-2.3.2-py3-none-any.whl (3.0 MB view details)

Uploaded Python 3

File details

Details for the file lib3mf-2.3.2-py3-none-any.whl.

File metadata

  • Download URL: lib3mf-2.3.2-py3-none-any.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.14

File hashes

Hashes for lib3mf-2.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 42a3be872caffe0a9bc53451cd632b87773ce27710e3a4f374877e95a8c11db1
MD5 3d84d6bac048dc9a468374cee83fb861
BLAKE2b-256 80e7f256462072fa27de4dfb27672d3dca1e55c7024a1014b36dd4c6ecea7c7e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page