goat3d
diff 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 |
line diff
1.1 --- a/exporters/blendgoat/src/export_goat.py Mon Oct 07 20:02:57 2013 +0300 1.2 +++ b/exporters/blendgoat/src/export_goat.py Wed Oct 09 16:40:59 2013 +0300 1.3 @@ -1,4 +1,4 @@ 1.4 -# Goat3D Blender >2.5 exporter 1.5 +# Goat3D Blender >2.63 exporter 1.6 import bpy; 1.7 import ctypes 1.8 from ctypes import * 1.9 @@ -8,123 +8,141 @@ 1.10 def export(oper, ctx, fname): 1.11 print("Exporting goat3d file: " + fname) 1.12 1.13 + lib = init_libgoat() 1.14 + if not lib: 1.15 + return False 1.16 + 1.17 + # initiaize a goat3d object and start filling it up with data 1.18 + goat = lib.goat3d_create() 1.19 + if not goat: 1.20 + oper.report({'ERROR'}, "Failed to create goat3d object") 1.21 + return False 1.22 + 1.23 + lib.goat3d_set_name(goat, fname.encode('utf-8')) 1.24 + 1.25 + export_env(ctx, goat, lib) 1.26 + export_materials(ctx, goat, lib) 1.27 + export_meshes(ctx, goat, lib) 1.28 + export_nodes(ctx, goat, lib) 1.29 + 1.30 + lib.goat3d_save(goat, fname.encode('utf-8')) 1.31 + lib.goat3d_free(goat) 1.32 + return True 1.33 + 1.34 +def export_env(ctx, goat, lib): 1.35 + return False 1.36 + 1.37 +def export_materials(ctx, goat, lib): 1.38 + return False 1.39 + 1.40 +def export_meshes(ctx, goat, lib): 1.41 + print("exporting " + str(len(ctx.scene.objects)) + " objects") 1.42 + for obj in ctx.scene.objects: 1.43 + if obj.type != 'MESH': 1.44 + continue 1.45 + 1.46 + mesh = obj.data 1.47 + # make sure we get a tesselated mesh 1.48 + mesh.update(calc_tessface = True) 1.49 + 1.50 + triangles = [] 1.51 + for idx, face in enumerate(mesh.tessfaces): 1.52 + fverts = face.vertices 1.53 + triangles.append(fverts[0]) 1.54 + triangles.append(fverts[1]) 1.55 + triangles.append(fverts[2]) 1.56 + 1.57 + print("creating native array of " + str(len(triangles)) + " triangles") 1.58 + IndexArrayType = c_int * len(triangles) 1.59 + indices = IndexArrayType(triangles) 1.60 + return False 1.61 + 1.62 + 1.63 +def export_nodes(ctx, goat, lib): 1.64 + return False 1.65 + 1.66 +def init_libgoat(): 1.67 # load all relevant functions from libgoat3d 1.68 libname = find_library("goat3d") 1.69 if not libname: 1.70 oper.report({'ERROR'}, "Could not find the goat3d library! make sure it's installed.") 1.71 - return False 1.72 + return None 1.73 1.74 - libgoat = CDLL(libname) 1.75 - if not libgoat: 1.76 + lib = CDLL(libname) 1.77 + if not lib: 1.78 oper.report({'ERROR'}, "Could not open goat3d library!") 1.79 - return False 1.80 + return None 1.81 1.82 - goat3d_create = libgoat.goat3d_create 1.83 - goat3d_create.argtypes = None 1.84 - goat3d_create.restype = c_void_p 1.85 + lib.goat3d_create.argtypes = None 1.86 + lib.goat3d_create.restype = c_void_p 1.87 1.88 - goat3d_free = libgoat.goat3d_free 1.89 - goat3d_free.argtypes = [c_void_p] 1.90 - goat3d_free.restype = None 1.91 + lib.goat3d_free.argtypes = [c_void_p] 1.92 + lib.goat3d_free.restype = None 1.93 1.94 - goat3d_set_name = libgoat.goat3d_set_name 1.95 - goat3d_set_name.argtypes = [c_void_p, c_char_p] 1.96 + lib.goat3d_set_name.argtypes = [c_void_p, c_char_p] 1.97 1.98 - goat3d_set_ambient3f = libgoat.goat3d_set_ambient3f 1.99 - goat3d_set_ambient3f.argtypes = [c_void_p, c_float, c_float, c_float] 1.100 - goat3d_set_ambient3f.restype = None 1.101 + lib.goat3d_set_ambient3f.argtypes = [c_void_p, c_float, c_float, c_float] 1.102 + lib.goat3d_set_ambient3f.restype = None 1.103 1.104 - goat3d_add_mtl = libgoat.goat3d_add_mtl 1.105 - goat3d_add_mtl.argtypes = [c_void_p, c_void_p] 1.106 - goat3d_add_mtl.restype = None 1.107 + lib.goat3d_add_mtl.argtypes = [c_void_p, c_void_p] 1.108 + lib.goat3d_add_mtl.restype = None 1.109 1.110 - goat3d_create_mtl = libgoat.goat3d_create_mtl 1.111 - goat3d_create_mtl.argtypes = None 1.112 - goat3d_create_mtl.restype = c_void_p 1.113 + lib.goat3d_create_mtl.argtypes = None 1.114 + lib.goat3d_create_mtl.restype = c_void_p 1.115 1.116 - goat3d_set_mtl_name = libgoat.goat3d_set_mtl_name 1.117 - goat3d_set_mtl_name.argtypes = [c_void_p, c_char_p] 1.118 - goat3d_set_mtl_name.restype = None 1.119 + lib.goat3d_set_mtl_name.argtypes = [c_void_p, c_char_p] 1.120 + lib.goat3d_set_mtl_name.restype = None 1.121 1.122 - goat3d_set_mtl_attrib4f = libgoat.goat3d_set_mtl_attrib4f 1.123 - goat3d_set_mtl_attrib4f.argtypes = [c_void_p, c_char_p, c_float, c_float, c_float, c_float] 1.124 - goat3d_set_mtl_attrib4f.restype = None 1.125 + lib.goat3d_set_mtl_attrib4f.argtypes = [c_void_p, c_char_p, c_float, c_float, c_float, c_float] 1.126 + lib.goat3d_set_mtl_attrib4f.restype = None 1.127 1.128 - goat3d_set_mtl_attrib_map = libgoat.goat3d_set_mtl_attrib_map 1.129 - goat3d_set_mtl_attrib_map.argtypes = [c_void_p, c_char_p, c_char_p] 1.130 - goat3d_set_mtl_attrib_map.restype = None 1.131 + lib.goat3d_set_mtl_attrib_map.argtypes = [c_void_p, c_char_p, c_char_p] 1.132 + lib.goat3d_set_mtl_attrib_map.restype = None 1.133 1.134 - goat3d_add_mesh = libgoat.goat3d_add_mesh 1.135 - goat3d_add_mesh.argtypes = [c_void_p, c_void_p] 1.136 - goat3d_add_mesh.restype = None 1.137 + lib.goat3d_add_mesh.argtypes = [c_void_p, c_void_p] 1.138 + lib.goat3d_add_mesh.restype = None 1.139 1.140 - goat3d_create_mesh = libgoat.goat3d_create_mesh 1.141 - goat3d_create_mesh.argtypes = None 1.142 - goat3d_create_mesh.restype = c_void_p 1.143 + lib.goat3d_create_mesh.argtypes = None 1.144 + lib.goat3d_create_mesh.restype = c_void_p 1.145 1.146 - goat3d_set_mesh_name = libgoat.goat3d_set_mesh_name 1.147 - goat3d_set_mesh_name.argtypes = [c_void_p, c_char_p] 1.148 - goat3d_set_mesh_name.restype = None 1.149 + lib.goat3d_set_mesh_name.argtypes = [c_void_p, c_char_p] 1.150 + lib.goat3d_set_mesh_name.restype = None 1.151 1.152 - goat3d_set_mesh_mtl = libgoat.goat3d_set_mesh_mtl 1.153 - goat3d_set_mesh_mtl.argtypes = [c_void_p, c_void_p] 1.154 - goat3d_set_mesh_mtl.restype = None 1.155 + lib.goat3d_set_mesh_mtl.argtypes = [c_void_p, c_void_p] 1.156 + lib.goat3d_set_mesh_mtl.restype = None 1.157 1.158 - goat3d_set_mesh_attribs = libgoat.goat3d_set_mesh_attribs 1.159 - goat3d_set_mesh_attribs.argtypes = [c_void_p, c_int, c_void_p, c_int] 1.160 - goat3d_set_mesh_attribs.restype = None 1.161 + lib.goat3d_set_mesh_attribs.argtypes = [c_void_p, c_int, c_void_p, c_int] 1.162 + lib.goat3d_set_mesh_attribs.restype = None 1.163 1.164 - goat3d_set_mesh_faces = libgoat.goat3d_set_mesh_faces 1.165 - goat3d_set_mesh_faces.argtypes = [c_void_p, c_void_p, c_int] 1.166 - goat3d_set_mesh_faces.restype = None 1.167 + lib.goat3d_set_mesh_faces.argtypes = [c_void_p, c_void_p, c_int] 1.168 + lib.goat3d_set_mesh_faces.restype = None 1.169 1.170 - goat3d_add_node = libgoat.goat3d_add_node 1.171 - goat3d_add_node.argtypes = [c_void_p, c_void_p] 1.172 - goat3d_add_node.restype = None 1.173 + lib.goat3d_add_node.argtypes = [c_void_p, c_void_p] 1.174 + lib.goat3d_add_node.restype = None 1.175 1.176 - goat3d_create_node = libgoat.goat3d_create_node 1.177 - goat3d_create_node.argtypes = None 1.178 - goat3d_create_node.restype = c_void_p 1.179 + lib.goat3d_create_node.argtypes = None 1.180 + lib.goat3d_create_node.restype = c_void_p 1.181 1.182 - goat3d_set_node_name = libgoat.goat3d_set_node_name 1.183 - goat3d_set_node_name.argtypes = [c_void_p, c_char_p] 1.184 - goat3d_set_node_name.restype = None 1.185 + lib.goat3d_set_node_name.argtypes = [c_void_p, c_char_p] 1.186 + lib.goat3d_set_node_name.restype = None 1.187 1.188 - goat3d_set_node_object = libgoat.goat3d_set_node_object 1.189 - goat3d_set_node_object.argtypes = [c_void_p, c_int, c_void_p] 1.190 - goat3d_set_node_object.restype = None 1.191 + lib.goat3d_set_node_object.argtypes = [c_void_p, c_int, c_void_p] 1.192 + lib.goat3d_set_node_object.restype = None 1.193 1.194 - goat3d_add_node_child = libgoat.goat3d_add_node_child 1.195 - goat3d_add_node_child.argtypes = [c_void_p, c_void_p] 1.196 - goat3d_add_node_child.restype = None 1.197 + lib.goat3d_add_node_child.argtypes = [c_void_p, c_void_p] 1.198 + lib.goat3d_add_node_child.restype = None 1.199 1.200 - goat3d_set_node_position = libgoat.goat3d_set_node_position 1.201 - goat3d_set_node_position.argtypes = [c_void_p, c_float, c_float, c_float, c_long] 1.202 - goat3d_set_node_position.restype = None 1.203 + lib.goat3d_set_node_position.argtypes = [c_void_p, c_float, c_float, c_float, c_long] 1.204 + lib.goat3d_set_node_position.restype = None 1.205 1.206 - goat3d_set_node_rotation = libgoat.goat3d_set_node_rotation 1.207 - goat3d_set_node_rotation.argtypes = [c_void_p, c_float, c_float, c_float, c_float, c_long] 1.208 - goat3d_set_node_rotation.restype = None 1.209 + lib.goat3d_set_node_rotation.argtypes = [c_void_p, c_float, c_float, c_float, c_float, c_long] 1.210 + lib.goat3d_set_node_rotation.restype = None 1.211 1.212 - goat3d_set_node_scaling = libgoat.goat3d_set_node_scaling 1.213 - goat3d_set_node_scaling.argtypes = [c_void_p, c_float, c_float, c_float, c_long] 1.214 - goat3d_set_node_scaling.restype = None 1.215 + lib.goat3d_set_node_scaling.argtypes = [c_void_p, c_float, c_float, c_float, c_long] 1.216 + lib.goat3d_set_node_scaling.restype = None 1.217 1.218 - goat3d_set_node_pivot = libgoat.goat3d_set_node_pivot 1.219 - goat3d_set_node_pivot.argtypes = [c_void_p, c_float, c_float, c_float] 1.220 - goat3d_set_node_pivot.restype = None 1.221 + lib.goat3d_set_node_pivot.argtypes = [c_void_p, c_float, c_float, c_float] 1.222 + lib.goat3d_set_node_pivot.restype = None 1.223 1.224 - goat3d_save = libgoat.goat3d_save 1.225 - goat3d_save.argtypes = [c_void_p, c_char_p] 1.226 - 1.227 - # initiaize a goat3d object and start filling it up with data 1.228 - goat = goat3d_create() 1.229 - if not goat: 1.230 - oper.report({'ERROR'}, "Failed to create goat3d object") 1.231 - return False 1.232 - 1.233 - goat3d_save(goat, fname.encode('utf-8')) 1.234 - goat3d_free(goat) 1.235 - return True 1.236 - 1.237 - 1.238 + lib.goat3d_save.argtypes = [c_void_p, c_char_p] 1.239 + return lib