Merge pull request #3271 from DavidBerger98/pyassimp-contextmanager
Pyassimp - contextmanager for load functionpull/3277/head^2
commit
2aa6ca89bc
|
@ -42,17 +42,14 @@ substituted by assertions ...):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
|
||||||
from pyassimp import *
|
from pyassimp import load
|
||||||
scene = load('hello.3ds')
|
with load('hello.3ds') as scene:
|
||||||
|
|
||||||
assert len(scene.meshes)
|
assert len(scene.meshes)
|
||||||
mesh = scene.meshes[0]
|
mesh = scene.meshes[0]
|
||||||
|
|
||||||
assert len(mesh.vertices)
|
assert len(mesh.vertices)
|
||||||
print(mesh.vertices[0])
|
print(mesh.vertices[0])
|
||||||
|
|
||||||
# don't forget this one, or you will leak!
|
|
||||||
release(scene)
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -61,13 +58,11 @@ scene:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
|
||||||
from pyassimp import *
|
from pyassimp import load
|
||||||
scene = load('hello.3ds')
|
with load('hello.3ds') as scene:
|
||||||
|
|
||||||
for c in scene.rootnode.children:
|
for c in scene.rootnode.children:
|
||||||
print(str(c))
|
print(str(c))
|
||||||
|
|
||||||
release(scene)
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -49,30 +49,27 @@ substituted by assertions ...):
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
|
|
||||||
from pyassimp import *
|
from pyassimp import load
|
||||||
scene = load('hello.3ds')
|
with load('hello.3ds') as scene:
|
||||||
|
|
||||||
assert len(scene.meshes)
|
assert len(scene.meshes)
|
||||||
mesh = scene.meshes[0]
|
mesh = scene.meshes[0]
|
||||||
|
|
||||||
assert len(mesh.vertices)
|
assert len(mesh.vertices)
|
||||||
print(mesh.vertices[0])
|
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:
|
Another example to list the 'top nodes' in a scene:
|
||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
|
|
||||||
from pyassimp import *
|
from pyassimp import load
|
||||||
scene = load('hello.3ds')
|
with load('hello.3ds') as scene:
|
||||||
|
|
||||||
for c in scene.rootnode.children:
|
for c in scene.rootnode.children:
|
||||||
print(str(c))
|
print(str(c))
|
||||||
|
|
||||||
release(scene)
|
|
||||||
|
|
||||||
INSTALL
|
INSTALL
|
||||||
-------
|
-------
|
||||||
|
|
|
@ -14,10 +14,13 @@ if sys.version_info >= (3,0):
|
||||||
xrange = range
|
xrange = range
|
||||||
|
|
||||||
|
|
||||||
try: import numpy
|
try:
|
||||||
except ImportError: numpy = None
|
import numpy
|
||||||
|
except ImportError:
|
||||||
|
numpy = None
|
||||||
import logging
|
import logging
|
||||||
import ctypes
|
import ctypes
|
||||||
|
from contextlib import contextmanager
|
||||||
logger = logging.getLogger("pyassimp")
|
logger = logging.getLogger("pyassimp")
|
||||||
# attach default null handler to logger so it doesn't complain
|
# attach default null handler to logger so it doesn't complain
|
||||||
# even if you don't attach another handler to logger
|
# even if you don't attach another handler to logger
|
||||||
|
@ -272,6 +275,13 @@ def recur_pythonize(node, scene):
|
||||||
for c in node.children:
|
for c in node.children:
|
||||||
recur_pythonize(c, scene)
|
recur_pythonize(c, scene)
|
||||||
|
|
||||||
|
def release(scene):
|
||||||
|
'''
|
||||||
|
Release resources of a loaded scene.
|
||||||
|
'''
|
||||||
|
_assimp_lib.release(ctypes.pointer(scene))
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
def load(filename,
|
def load(filename,
|
||||||
file_type = None,
|
file_type = None,
|
||||||
processing = postprocess.aiProcess_Triangulate):
|
processing = postprocess.aiProcess_Triangulate):
|
||||||
|
@ -319,7 +329,10 @@ def load(filename,
|
||||||
raise AssimpError('Could not import file!')
|
raise AssimpError('Could not import file!')
|
||||||
scene = _init(model.contents)
|
scene = _init(model.contents)
|
||||||
recur_pythonize(scene.rootnode, scene)
|
recur_pythonize(scene.rootnode, scene)
|
||||||
return scene
|
try:
|
||||||
|
yield scene
|
||||||
|
finally:
|
||||||
|
release(scene)
|
||||||
|
|
||||||
def export(scene,
|
def export(scene,
|
||||||
filename,
|
filename,
|
||||||
|
@ -373,9 +386,6 @@ def export_blob(scene,
|
||||||
raise AssimpError('Could not export scene to blob!')
|
raise AssimpError('Could not export scene to blob!')
|
||||||
return exportBlobPtr
|
return exportBlobPtr
|
||||||
|
|
||||||
def release(scene):
|
|
||||||
_assimp_lib.release(ctypes.pointer(scene))
|
|
||||||
|
|
||||||
def _finalize_texture(tex, target):
|
def _finalize_texture(tex, target):
|
||||||
setattr(target, "achformathint", tex.achFormatHint)
|
setattr(target, "achformathint", tex.achFormatHint)
|
||||||
if numpy:
|
if numpy:
|
||||||
|
|
Loading…
Reference in New Issue