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