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
|