2494608927
64-bit Compatibility: The first four characters of a String material property would be cut off. A String's length is defined in structs.py as a c_size_t variable, which is 8 bytes wide on 64-bit Python. However, when an aiString is used as an aiMaterial property in C/C++, the length is truncated down to a 4-byte value on 64-bit machines (see MaterialSystem.cpp aiMaterial::AddProperty() for details). A new struct was declared in structs.py (MaterialPropertyString) and used in core._get_properties(). Python 3.3 Compatibility: The built-in function hasattr() changed in Python 3.2 to not trap exceptions, which means a NULL pointer ValueException now escaped when checking if a pointer was valid (hasattr(obj, 'contents') in core.call_init()) (see http://bugs.python.org/issue9666 for details). A new helper function was defined that preserves the legacy functionality of trapping the exceptions (helper.hasattr_silent()) and used throughout the code as a replacement for hasattr(). String objects would import as "bytes" rather than as a string. This was most noticeable in the key names for material properties, where the trailing ' of a bytes object would remain after it was converted to a string. The solution was to call decode() on the bytes object using utf-8 decoding. This applies to various parts of core.py. Closes #35 |
||
---|---|---|
.. | ||
gen | ||
pyassimp | ||
scripts | ||
README.md | ||
setup.py |
README.md
PyAssimp Readme
A simple Python wrapper for Assimp using ctypes
to access the library.
Requires Python >= 2.6.
Python 3 support is mostly here, but not well tested.
Note that pyassimp is not complete. Many ASSIMP features are missing. In particular, only loading of models is currently supported (no export).
USAGE
To get started with pyAssimp, examine the 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 pyassimp import *
scene = load('hello.3ds')
assert len(scene.meshes)
mesh = scene.meshes[0]
assert len(mesh.vertices)
print(mesh.vertices[0])
# don't forget this one, or you will leak!
release(scene)
Another example to list the 'top nodes' in a scene:
from pyassimp import *
scene = load('hello.3ds')
for c in scene.rootnode.children:
print(str(c))
release(scene)
INSTALL
Install pyassimp
by running:
python setup.py install
PyAssimp requires a assimp dynamic library (DLL
on windows,
.so
on linux :-) in order to work. The default search directories
are:
- the current directory
- on linux additionally:
/usr/lib
and/usr/local/lib
To build that library, refer to the Assimp master INSTALL
instructions. To look in more places, edit ./pyassimp/helper.py
.
There's an additional_dirs
list waiting for your entries.