Alternate Python bindings for the Open Asset Import Library (ASSIMP)
Project description
Impasse Readme
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.
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | d15a2e7670f8a7b0c08cec59c9aaa16f2d0488bae494fa3315bfc3bc65600fb6 |
|
MD5 | ef1c4a0befe68c90b301d8a4ad9104c9 |
|
BLAKE2b-256 | fd8534318c4c7c100b2fa602cdf2d98a4bd43358caf0dc20f72cd13a83430f45 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 547211f154df8dd9d798587f5213e2ad32b1aeee4e7b820a2a6ddbdea894c178 |
|
MD5 | a126f74c5b10c984c6eaef8bd8b2d0bc |
|
BLAKE2b-256 | 8ded7557433478e8b90d0f1e770bfe2867ec33173f0220ee4f104493f116dd83 |