nuclear@33: # Goat3D Blender >2.5 exporter nuclear@33: import bpy; nuclear@36: import ctypes nuclear@36: from ctypes import * nuclear@36: from ctypes.util import find_library nuclear@33: nuclear@33: nuclear@38: def export(oper, ctx, fname): nuclear@38: print("Exporting goat3d file: " + fname) nuclear@33: nuclear@38: # load all relevant functions from libgoat3d nuclear@38: libname = find_library("goat3d") nuclear@38: if not libname: nuclear@38: oper.report({'ERROR'}, "Could not find the goat3d library! make sure it's installed.") nuclear@38: return False nuclear@33: nuclear@38: libgoat = CDLL(libname) nuclear@38: if not libgoat: nuclear@38: oper.report({'ERROR'}, "Could not open goat3d library!") nuclear@38: return False nuclear@37: nuclear@38: goat3d_create = libgoat.goat3d_create nuclear@38: goat3d_create.argtypes = None nuclear@38: goat3d_create.restype = c_void_p nuclear@36: nuclear@38: goat3d_free = libgoat.goat3d_free nuclear@38: goat3d_free.argtypes = [c_void_p] nuclear@38: goat3d_free.restype = None nuclear@36: nuclear@38: goat3d_set_name = libgoat.goat3d_set_name nuclear@38: goat3d_set_name.argtypes = [c_void_p, c_char_p] nuclear@36: nuclear@38: goat3d_set_ambient3f = libgoat.goat3d_set_ambient3f nuclear@38: goat3d_set_ambient3f.argtypes = [c_void_p, c_float, c_float, c_float] nuclear@38: goat3d_set_ambient3f.restype = None nuclear@36: nuclear@38: goat3d_add_mtl = libgoat.goat3d_add_mtl nuclear@38: goat3d_add_mtl.argtypes = [c_void_p, c_void_p] nuclear@38: goat3d_add_mtl.restype = None nuclear@36: nuclear@38: goat3d_create_mtl = libgoat.goat3d_create_mtl nuclear@38: goat3d_create_mtl.argtypes = None nuclear@38: goat3d_create_mtl.restype = c_void_p nuclear@36: nuclear@38: goat3d_set_mtl_name = libgoat.goat3d_set_mtl_name nuclear@38: goat3d_set_mtl_name.argtypes = [c_void_p, c_char_p] nuclear@38: goat3d_set_mtl_name.restype = None nuclear@33: nuclear@38: goat3d_set_mtl_attrib4f = libgoat.goat3d_set_mtl_attrib4f nuclear@38: goat3d_set_mtl_attrib4f.argtypes = [c_void_p, c_char_p, c_float, c_float, c_float, c_float] nuclear@38: goat3d_set_mtl_attrib4f.restype = None nuclear@33: nuclear@38: goat3d_set_mtl_attrib_map = libgoat.goat3d_set_mtl_attrib_map nuclear@38: goat3d_set_mtl_attrib_map.argtypes = [c_void_p, c_char_p, c_char_p] nuclear@38: goat3d_set_mtl_attrib_map.restype = None nuclear@33: nuclear@38: goat3d_add_mesh = libgoat.goat3d_add_mesh nuclear@38: goat3d_add_mesh.argtypes = [c_void_p, c_void_p] nuclear@38: goat3d_add_mesh.restype = None nuclear@33: nuclear@38: goat3d_create_mesh = libgoat.goat3d_create_mesh nuclear@38: goat3d_create_mesh.argtypes = None nuclear@38: goat3d_create_mesh.restype = c_void_p nuclear@38: nuclear@38: goat3d_set_mesh_name = libgoat.goat3d_set_mesh_name nuclear@38: goat3d_set_mesh_name.argtypes = [c_void_p, c_char_p] nuclear@38: goat3d_set_mesh_name.restype = None nuclear@38: nuclear@38: goat3d_set_mesh_mtl = libgoat.goat3d_set_mesh_mtl nuclear@38: goat3d_set_mesh_mtl.argtypes = [c_void_p, c_void_p] nuclear@38: goat3d_set_mesh_mtl.restype = None nuclear@38: nuclear@38: goat3d_set_mesh_attribs = libgoat.goat3d_set_mesh_attribs nuclear@38: goat3d_set_mesh_attribs.argtypes = [c_void_p, c_int, c_void_p, c_int] nuclear@38: goat3d_set_mesh_attribs.restype = None nuclear@38: nuclear@38: goat3d_set_mesh_faces = libgoat.goat3d_set_mesh_faces nuclear@38: goat3d_set_mesh_faces.argtypes = [c_void_p, c_void_p, c_int] nuclear@38: goat3d_set_mesh_faces.restype = None nuclear@38: nuclear@38: goat3d_add_node = libgoat.goat3d_add_node nuclear@38: goat3d_add_node.argtypes = [c_void_p, c_void_p] nuclear@38: goat3d_add_node.restype = None nuclear@38: nuclear@38: goat3d_create_node = libgoat.goat3d_create_node nuclear@38: goat3d_create_node.argtypes = None nuclear@38: goat3d_create_node.restype = c_void_p nuclear@38: nuclear@38: goat3d_set_node_name = libgoat.goat3d_set_node_name nuclear@38: goat3d_set_node_name.argtypes = [c_void_p, c_char_p] nuclear@38: goat3d_set_node_name.restype = None nuclear@38: nuclear@38: goat3d_set_node_object = libgoat.goat3d_set_node_object nuclear@38: goat3d_set_node_object.argtypes = [c_void_p, c_int, c_void_p] nuclear@38: goat3d_set_node_object.restype = None nuclear@38: nuclear@38: goat3d_add_node_child = libgoat.goat3d_add_node_child nuclear@38: goat3d_add_node_child.argtypes = [c_void_p, c_void_p] nuclear@38: goat3d_add_node_child.restype = None nuclear@38: nuclear@38: goat3d_set_node_position = libgoat.goat3d_set_node_position nuclear@38: goat3d_set_node_position.argtypes = [c_void_p, c_float, c_float, c_float, c_long] nuclear@38: goat3d_set_node_position.restype = None nuclear@38: nuclear@38: goat3d_set_node_rotation = libgoat.goat3d_set_node_rotation nuclear@38: goat3d_set_node_rotation.argtypes = [c_void_p, c_float, c_float, c_float, c_float, c_long] nuclear@38: goat3d_set_node_rotation.restype = None nuclear@38: nuclear@38: goat3d_set_node_scaling = libgoat.goat3d_set_node_scaling nuclear@38: goat3d_set_node_scaling.argtypes = [c_void_p, c_float, c_float, c_float, c_long] nuclear@38: goat3d_set_node_scaling.restype = None nuclear@38: nuclear@38: goat3d_set_node_pivot = libgoat.goat3d_set_node_pivot nuclear@38: goat3d_set_node_pivot.argtypes = [c_void_p, c_float, c_float, c_float] nuclear@38: goat3d_set_node_pivot.restype = None nuclear@38: nuclear@38: goat3d_save = libgoat.goat3d_save nuclear@38: goat3d_save.argtypes = [c_void_p, c_char_p] nuclear@38: nuclear@38: # initiaize a goat3d object and start filling it up with data nuclear@38: goat = goat3d_create() nuclear@38: if not goat: nuclear@38: oper.report({'ERROR'}, "Failed to create goat3d object") nuclear@38: return False nuclear@38: nuclear@38: goat3d_save(goat, fname.encode('utf-8')) nuclear@38: goat3d_free(goat) nuclear@38: return True nuclear@38: nuclear@38: