goat3d

annotate exporters/blendgoat/src/export_goat.py @ 39:0e48907847ad

slugishly progressing with the blender exporter
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 09 Oct 2013 16:40:59 +0300
parents 60f2037680ee
children a5c5cec3cb88
rev   line source
nuclear@39 1 # Goat3D Blender >2.63 exporter
nuclear@33 2 import bpy;
nuclear@36 3 import ctypes
nuclear@36 4 from ctypes import *
nuclear@36 5 from ctypes.util import find_library
nuclear@33 6
nuclear@33 7
nuclear@38 8 def export(oper, ctx, fname):
nuclear@38 9 print("Exporting goat3d file: " + fname)
nuclear@33 10
nuclear@39 11 lib = init_libgoat()
nuclear@39 12 if not lib:
nuclear@39 13 return False
nuclear@39 14
nuclear@39 15 # initiaize a goat3d object and start filling it up with data
nuclear@39 16 goat = lib.goat3d_create()
nuclear@39 17 if not goat:
nuclear@39 18 oper.report({'ERROR'}, "Failed to create goat3d object")
nuclear@39 19 return False
nuclear@39 20
nuclear@39 21 lib.goat3d_set_name(goat, fname.encode('utf-8'))
nuclear@39 22
nuclear@39 23 export_env(ctx, goat, lib)
nuclear@39 24 export_materials(ctx, goat, lib)
nuclear@39 25 export_meshes(ctx, goat, lib)
nuclear@39 26 export_nodes(ctx, goat, lib)
nuclear@39 27
nuclear@39 28 lib.goat3d_save(goat, fname.encode('utf-8'))
nuclear@39 29 lib.goat3d_free(goat)
nuclear@39 30 return True
nuclear@39 31
nuclear@39 32 def export_env(ctx, goat, lib):
nuclear@39 33 return False
nuclear@39 34
nuclear@39 35 def export_materials(ctx, goat, lib):
nuclear@39 36 return False
nuclear@39 37
nuclear@39 38 def export_meshes(ctx, goat, lib):
nuclear@39 39 print("exporting " + str(len(ctx.scene.objects)) + " objects")
nuclear@39 40 for obj in ctx.scene.objects:
nuclear@39 41 if obj.type != 'MESH':
nuclear@39 42 continue
nuclear@39 43
nuclear@39 44 mesh = obj.data
nuclear@39 45 # make sure we get a tesselated mesh
nuclear@39 46 mesh.update(calc_tessface = True)
nuclear@39 47
nuclear@39 48 triangles = []
nuclear@39 49 for idx, face in enumerate(mesh.tessfaces):
nuclear@39 50 fverts = face.vertices
nuclear@39 51 triangles.append(fverts[0])
nuclear@39 52 triangles.append(fverts[1])
nuclear@39 53 triangles.append(fverts[2])
nuclear@39 54
nuclear@39 55 print("creating native array of " + str(len(triangles)) + " triangles")
nuclear@39 56 IndexArrayType = c_int * len(triangles)
nuclear@39 57 indices = IndexArrayType(triangles)
nuclear@39 58 return False
nuclear@39 59
nuclear@39 60
nuclear@39 61 def export_nodes(ctx, goat, lib):
nuclear@39 62 return False
nuclear@39 63
nuclear@39 64 def init_libgoat():
nuclear@38 65 # load all relevant functions from libgoat3d
nuclear@38 66 libname = find_library("goat3d")
nuclear@38 67 if not libname:
nuclear@38 68 oper.report({'ERROR'}, "Could not find the goat3d library! make sure it's installed.")
nuclear@39 69 return None
nuclear@33 70
nuclear@39 71 lib = CDLL(libname)
nuclear@39 72 if not lib:
nuclear@38 73 oper.report({'ERROR'}, "Could not open goat3d library!")
nuclear@39 74 return None
nuclear@37 75
nuclear@39 76 lib.goat3d_create.argtypes = None
nuclear@39 77 lib.goat3d_create.restype = c_void_p
nuclear@36 78
nuclear@39 79 lib.goat3d_free.argtypes = [c_void_p]
nuclear@39 80 lib.goat3d_free.restype = None
nuclear@36 81
nuclear@39 82 lib.goat3d_set_name.argtypes = [c_void_p, c_char_p]
nuclear@36 83
nuclear@39 84 lib.goat3d_set_ambient3f.argtypes = [c_void_p, c_float, c_float, c_float]
nuclear@39 85 lib.goat3d_set_ambient3f.restype = None
nuclear@36 86
nuclear@39 87 lib.goat3d_add_mtl.argtypes = [c_void_p, c_void_p]
nuclear@39 88 lib.goat3d_add_mtl.restype = None
nuclear@36 89
nuclear@39 90 lib.goat3d_create_mtl.argtypes = None
nuclear@39 91 lib.goat3d_create_mtl.restype = c_void_p
nuclear@36 92
nuclear@39 93 lib.goat3d_set_mtl_name.argtypes = [c_void_p, c_char_p]
nuclear@39 94 lib.goat3d_set_mtl_name.restype = None
nuclear@33 95
nuclear@39 96 lib.goat3d_set_mtl_attrib4f.argtypes = [c_void_p, c_char_p, c_float, c_float, c_float, c_float]
nuclear@39 97 lib.goat3d_set_mtl_attrib4f.restype = None
nuclear@33 98
nuclear@39 99 lib.goat3d_set_mtl_attrib_map.argtypes = [c_void_p, c_char_p, c_char_p]
nuclear@39 100 lib.goat3d_set_mtl_attrib_map.restype = None
nuclear@33 101
nuclear@39 102 lib.goat3d_add_mesh.argtypes = [c_void_p, c_void_p]
nuclear@39 103 lib.goat3d_add_mesh.restype = None
nuclear@33 104
nuclear@39 105 lib.goat3d_create_mesh.argtypes = None
nuclear@39 106 lib.goat3d_create_mesh.restype = c_void_p
nuclear@38 107
nuclear@39 108 lib.goat3d_set_mesh_name.argtypes = [c_void_p, c_char_p]
nuclear@39 109 lib.goat3d_set_mesh_name.restype = None
nuclear@38 110
nuclear@39 111 lib.goat3d_set_mesh_mtl.argtypes = [c_void_p, c_void_p]
nuclear@39 112 lib.goat3d_set_mesh_mtl.restype = None
nuclear@38 113
nuclear@39 114 lib.goat3d_set_mesh_attribs.argtypes = [c_void_p, c_int, c_void_p, c_int]
nuclear@39 115 lib.goat3d_set_mesh_attribs.restype = None
nuclear@38 116
nuclear@39 117 lib.goat3d_set_mesh_faces.argtypes = [c_void_p, c_void_p, c_int]
nuclear@39 118 lib.goat3d_set_mesh_faces.restype = None
nuclear@38 119
nuclear@39 120 lib.goat3d_add_node.argtypes = [c_void_p, c_void_p]
nuclear@39 121 lib.goat3d_add_node.restype = None
nuclear@38 122
nuclear@39 123 lib.goat3d_create_node.argtypes = None
nuclear@39 124 lib.goat3d_create_node.restype = c_void_p
nuclear@38 125
nuclear@39 126 lib.goat3d_set_node_name.argtypes = [c_void_p, c_char_p]
nuclear@39 127 lib.goat3d_set_node_name.restype = None
nuclear@38 128
nuclear@39 129 lib.goat3d_set_node_object.argtypes = [c_void_p, c_int, c_void_p]
nuclear@39 130 lib.goat3d_set_node_object.restype = None
nuclear@38 131
nuclear@39 132 lib.goat3d_add_node_child.argtypes = [c_void_p, c_void_p]
nuclear@39 133 lib.goat3d_add_node_child.restype = None
nuclear@38 134
nuclear@39 135 lib.goat3d_set_node_position.argtypes = [c_void_p, c_float, c_float, c_float, c_long]
nuclear@39 136 lib.goat3d_set_node_position.restype = None
nuclear@38 137
nuclear@39 138 lib.goat3d_set_node_rotation.argtypes = [c_void_p, c_float, c_float, c_float, c_float, c_long]
nuclear@39 139 lib.goat3d_set_node_rotation.restype = None
nuclear@38 140
nuclear@39 141 lib.goat3d_set_node_scaling.argtypes = [c_void_p, c_float, c_float, c_float, c_long]
nuclear@39 142 lib.goat3d_set_node_scaling.restype = None
nuclear@38 143
nuclear@39 144 lib.goat3d_set_node_pivot.argtypes = [c_void_p, c_float, c_float, c_float]
nuclear@39 145 lib.goat3d_set_node_pivot.restype = None
nuclear@38 146
nuclear@39 147 lib.goat3d_save.argtypes = [c_void_p, c_char_p]
nuclear@39 148 return lib