Skip to main content

Alternate Python bindings for the Open Asset Import Library (ASSIMP)

Project description

Impasse Readme

Python Test Status codecov

A simple Python wrapper for Assimp using cffi to access the library. Requires Python >= 3.7.

It's largely based on PyAssimp, Assimp's official Python port. In contrast to PyAssimp, it strictly targets modern Python 3 and provides type hints. It also aims to allow mutating scenes before exporting by having all wrapper classes operate directly on the underlying C data structures.

Note that impasse is not complete. Many ASSIMP features are missing.

Usage

Complete example: 3D viewer

impasse comes with a simple 3D viewer that shows how to load and display a 3D model using a shader-based OpenGL pipeline.

Screenshot

To use it:

python ./scripts/3d_viewer_py3.py <path to your model>

You can use this code as starting point in your applications.

Writing your own code

To get started with impasse, examine the simpler sample.py script in scripts/, which illustrates the basic usage. All Assimp data structures are wrapped using ctypes. All the data+length fields in Assimp's data structures (such as aiMesh::mNumVertices, aiMesh::mVertices) are replaced by simple python lists, so you can call len() on them to get their respective size and access members using [].

For example, to load a file named hello.3ds and print the first vertex of the first mesh, you would do (proper error handling substituted by assertions ...):

from impasse import load
with load('hello.3ds') as scene:

  assert len(scene.meshes)
  mesh = scene.meshes[0]

  assert len(mesh.vertices)
  print(mesh.vertices[0])

Another example to list the 'top nodes' in a scene:

from impasse import load
with load('hello.3ds') as scene:

  for c in scene.root_node.children:
      print(str(c))

Installing

Install impasse by running:

pip install impasse

or, if you want to install from the source directory:

pip install -e .

Impasse requires an assimp dynamic library (DLL on Windows, .so on linux, .dynlib on macOS) in order to work. The default search directories are:

  • the current directory
  • on linux additionally: /usr/lib, /usr/local/lib, /usr/lib/<CPU_ARCH>-linux-gnu

To build that library, refer to the Assimp master INSTALL instructions. To look in more places, edit ./impasse/helper.py. There's an additional_dirs list waiting for your entries.

Performance

Impasse tries to avoid unnecessary copies or conversions of data owned by C, and most classes are just thin layers around the underlying CFFI structs. NumPy arrays that directly map to the underlying structs' memory are used for the coordinate structs like Matrix4x4 and Vector3D.

Testing with the same quicktest.py script against assimp's test model directory:

Impasse

** Loaded 169 models, got controlled errors for 28 files, 0 uncontrolled

real	0m1.643s
user	0m1.912s
sys	0m0.531s

PyAssimp

** Loaded 165 models, got controlled errors for 28 files, 4 uncontrolled

real	0m7.607s
user	0m7.746s
sys	0m0.579s

Project details


Download files

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

Source Distribution

impasse-5.0.2.tar.gz (32.5 kB view details)

Uploaded Source

Built Distribution

impasse-5.0.2-py2.py3-none-any.whl (34.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file impasse-5.0.2.tar.gz.

File metadata

  • Download URL: impasse-5.0.2.tar.gz
  • Upload date:
  • Size: 32.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6

File hashes

Hashes for impasse-5.0.2.tar.gz
Algorithm Hash digest
SHA256 d15a2e7670f8a7b0c08cec59c9aaa16f2d0488bae494fa3315bfc3bc65600fb6
MD5 ef1c4a0befe68c90b301d8a4ad9104c9
BLAKE2b-256 fd8534318c4c7c100b2fa602cdf2d98a4bd43358caf0dc20f72cd13a83430f45

See more details on using hashes here.

File details

Details for the file impasse-5.0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: impasse-5.0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 34.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6

File hashes

Hashes for impasse-5.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 547211f154df8dd9d798587f5213e2ad32b1aeee4e7b820a2a6ddbdea894c178
MD5 a126f74c5b10c984c6eaef8bd8b2d0bc
BLAKE2b-256 8ded7557433478e8b90d0f1e770bfe2867ec33173f0220ee4f104493f116dd83

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