diff --git a/port/PyAssimp/pyassimp/errors.py b/port/PyAssimp/pyassimp/errors.py new file mode 100644 index 000000000..37db3c08a --- /dev/null +++ b/port/PyAssimp/pyassimp/errors.py @@ -0,0 +1,11 @@ +#-*- coding: UTF-8 -*- + +""" +All possible errors. +""" + +class AssimpError(BaseException): + """ + If an internal error occures. + """ + pass \ No newline at end of file diff --git a/port/PyAssimp/pyassimp/helper.py b/port/PyAssimp/pyassimp/helper.py index 58e1c6167..53046c340 100644 --- a/port/PyAssimp/pyassimp/helper.py +++ b/port/PyAssimp/pyassimp/helper.py @@ -4,9 +4,53 @@ Some fancy helper functions. """ +import os +import ctypes +import structs +from errors import AssimpError +from ctypes import POINTER + def vec2tuple(x): """ Converts a VECTOR3D to a Tuple """ - return (x.x, x.y, x.z) \ No newline at end of file + return (x.x, x.y, x.z) + + +def search_library(): + """ + Loads the assimp-Library. + + result (load-function, release-function) + + exception AssimpError if no library is found + """ + #this path + folder = os.path.dirname(__file__) + + #test every file + for filename in os.listdir(folder): + library = os.path.join(folder, filename) + + try: + dll = ctypes.cdll.LoadLibrary(library) + except: + #OK, this except is evil. But different OSs will throw different + #errors. So just ignore errors. + pass + else: + #get the functions + try: + load = dll.aiImportFile + release = dll.aiReleaseImport + except AttributeError: + #OK, this is a library, but it has not the functions we need + pass + else: + #Library found! + load.restype = POINTER(structs.SCENE) + + return (load, release) + + raise AssimpError, "assimp library not found" \ No newline at end of file diff --git a/port/PyAssimp/pyassimp/pyassimp.py b/port/PyAssimp/pyassimp/pyassimp.py index ada709711..cd40efa42 100644 --- a/port/PyAssimp/pyassimp/pyassimp.py +++ b/port/PyAssimp/pyassimp/pyassimp.py @@ -10,31 +10,19 @@ import structs import ctypes import os import helper +from errors import AssimpError #get the assimp path LIBRARY = os.path.join(os.path.dirname(__file__), "assimp.so") -class AssimpError(BaseException): - """ - If ann internal error occures. - """ - pass - - class AssimpLib(object): - from ctypes import POINTER - - #open library - _dll = ctypes.cdll.LoadLibrary(LIBRARY) - - #get functions - load = _dll.aiImportFile - load.restype = POINTER(structs.SCENE) - - release = _dll.aiReleaseImport + """ + Assimp-Singleton + """ + load, release = helper.search_library()