#-*- coding: UTF-8 -*- """ Some fancy helper functions. """ import os import ctypes import structs import operator from errors import AssimpError from ctypes import POINTER def vec2tuple(x): """ Converts a VECTOR3D to a Tuple """ 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__) candidates = [] #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) candidates.append((library, load, release)) if not candidates: #no library found raise AssimpError, "assimp library not found" else: #get the newest library candidates = map(lambda x: (os.lstat(x[0])[-2], x), candidates) return max(candidates, key=operator.itemgetter(0))[1][1:]