summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/export/blender25/godot_export_manager.py146
-rw-r--r--tools/export/blender25/io_scene_dae/__init__.py2
-rw-r--r--tools/export/blender25/io_scene_dae/export_dae.py1002
3 files changed, 575 insertions, 575 deletions
diff --git a/tools/export/blender25/godot_export_manager.py b/tools/export/blender25/godot_export_manager.py
index 504fdb7934..293e0173e9 100644
--- a/tools/export/blender25/godot_export_manager.py
+++ b/tools/export/blender25/godot_export_manager.py
@@ -55,13 +55,13 @@ class godot_export_manager(bpy.types.Panel):
row = layout.row()
col = row.column()
- col.prop(scene,"godot_export_on_save",text="Export Groups on save")
+ col.prop(scene, "godot_export_on_save", text="Export Groups on save")
row = layout.row()
col = row.column(align=True)
- op = col.operator("scene.godot_add_objects_to_group",text="Add selected objects to Group",icon="COPYDOWN")
+ op = col.operator("scene.godot_add_objects_to_group", text="Add selected objects to Group", icon="COPYDOWN")
- op = col.operator("scene.godot_delete_objects_from_group",text="Delete selected objects from Group",icon="PASTEDOWN")
+ op = col.operator("scene.godot_delete_objects_from_group", text="Delete selected objects from Group", icon="PASTEDOWN")
row = layout.row()
col = row.column()
@@ -70,20 +70,20 @@ class godot_export_manager(bpy.types.Panel):
row = layout.row()
col = row.column()
- col.template_list("UI_List_Godot","dummy",scene, "godot_export_groups", scene, "godot_export_groups_index",rows=1,maxrows=10,type='DEFAULT')
+ col.template_list("UI_List_Godot", "dummy", scene, "godot_export_groups", scene, "godot_export_groups_index", rows=1, maxrows=10, type='DEFAULT')
col = row.column(align=True)
- col.operator("scene.godot_add_export_group",text="",icon="ZOOMIN")
- col.operator("scene.godot_delete_export_group",text="",icon="ZOOMOUT")
- col.operator("scene.godot_export_all_groups",text="",icon="EXPORT")
+ col.operator("scene.godot_add_export_group", text="", icon="ZOOMIN")
+ col.operator("scene.godot_delete_export_group", text="", icon="ZOOMOUT")
+ col.operator("scene.godot_export_all_groups", text="", icon="EXPORT")
if len(scene.godot_export_groups) > 0:
row = layout.row()
col = row.column()
group = scene.godot_export_groups[scene.godot_export_groups_index]
- col.prop(group,"name",text="Group Name")
- col.prop(group,"export_name",text="Export Name")
- col.prop(group,"export_path",text="Export Filepath")
+ col.prop(group, "name", text="Group Name")
+ col.prop(group, "export_name", text="Export Name")
+ col.prop(group, "export_path", text="Export Filepath")
row = layout.row()
col = row.column()
@@ -92,25 +92,25 @@ class godot_export_manager(bpy.types.Panel):
col.label(text="Export Settings:")
col = col.row(align=True)
- col.prop(group,"apply_loc",toggle=True,icon="MAN_TRANS")
- col.prop(group,"apply_rot",toggle=True,icon="MAN_ROT")
- col.prop(group,"apply_scale",toggle=True,icon="MAN_SCALE")
+ col.prop(group, "apply_loc", toggle=True, icon="MAN_TRANS")
+ col.prop(group, "apply_rot", toggle=True, icon="MAN_ROT")
+ col.prop(group, "apply_scale", toggle=True, icon="MAN_SCALE")
row = layout.row()
col = row.column()
- col.prop(group,"use_include_particle_duplicates")
- col.prop(group,"use_mesh_modifiers")
- col.prop(group,"use_tangent_arrays")
- col.prop(group,"use_triangles")
- col.prop(group,"use_copy_images")
- col.prop(group,"use_active_layers")
- col.prop(group,"use_anim")
- col.prop(group,"use_anim_action_all")
- col.prop(group,"use_anim_skip_noexp")
- col.prop(group,"use_anim_optimize")
- col.prop(group,"anim_optimize_precision")
- col.prop(group,"use_metadata")
+ col.prop(group, "use_include_particle_duplicates")
+ col.prop(group, "use_mesh_modifiers")
+ col.prop(group, "use_tangent_arrays")
+ col.prop(group, "use_triangles")
+ col.prop(group, "use_copy_images")
+ col.prop(group, "use_active_layers")
+ col.prop(group, "use_anim")
+ col.prop(group, "use_anim_action_all")
+ col.prop(group, "use_anim_skip_noexp")
+ col.prop(group, "use_anim_optimize")
+ col.prop(group, "anim_optimize_precision")
+ col.prop(group, "use_metadata")
### Custom template_list look
@@ -120,12 +120,12 @@ class UI_List_Godot(bpy.types.UIList):
slot = item
col = layout.row(align=True)
- col.label(text=item.name,icon="GROUP")
- col.prop(item,"active",text="")
+ col.label(text=item.name, icon="GROUP")
+ col.prop(item, "active", text="")
- op = col.operator("scene.godot_select_group_objects",text="",emboss=False,icon="RESTRICT_SELECT_OFF")
+ op = col.operator("scene.godot_select_group_objects", text="", emboss=False, icon="RESTRICT_SELECT_OFF")
op.idx = index
- op = col.operator("scene.godot_export_group",text="",emboss=False,icon="EXPORT")
+ op = col.operator("scene.godot_export_group", text="", emboss=False, icon="EXPORT")
op.idx = index
class add_objects_to_group(bpy.types.Operator):
@@ -135,12 +135,12 @@ class add_objects_to_group(bpy.types.Operator):
undo = BoolProperty(default=True)
- def execute(self,context):
+ def execute(self, context):
scene = context.scene
objects_str = ""
if len(scene.godot_export_groups) > 0:
- for i,object in enumerate(context.selected_objects):
+ for i, object in enumerate(context.selected_objects):
if object.name not in scene.godot_export_groups[scene.godot_export_groups_index].nodes:
node = scene.godot_export_groups[scene.godot_export_groups_index].nodes.add()
node.name = object.name
@@ -161,7 +161,7 @@ class del_objects_from_group(bpy.types.Operator):
bl_label = "Delete Objects from Group"
bl_description = "Delets the selected Objects from the active group below."
- def execute(self,context):
+ def execute(self, context):
scene = context.scene
if len(scene.godot_export_groups) > 0:
@@ -172,7 +172,7 @@ class del_objects_from_group(bpy.types.Operator):
objects_str = ""
j = 0
- for i,node in enumerate(scene.godot_export_groups[scene.godot_export_groups_index].nodes):
+ for i, node in enumerate(scene.godot_export_groups[scene.godot_export_groups_index].nodes):
if node.name in selected_objects:
scene.godot_export_groups[scene.godot_export_groups_index].nodes.remove(i)
@@ -195,7 +195,7 @@ class select_group_objects(bpy.types.Operator):
idx = IntProperty()
- def execute(self,context):
+ def execute(self, context):
scene = context.scene
for object in context.scene.objects:
object.select = False
@@ -211,7 +211,7 @@ class export_groups_autosave(bpy.types.Operator):
bl_label = "Export All Groups"
bl_description = "Exports all groups to Collada."
- def execute(self,context):
+ def execute(self, context):
scene = context.scene
if scene.godot_export_on_save:
for i in range(len(scene.godot_export_groups)):
@@ -227,11 +227,11 @@ class export_all_groups(bpy.types.Operator):
bl_label = "Export All Groups"
bl_description = "Exports all groups to Collada."
- def execute(self,context):
+ def execute(self, context):
scene = context.scene
- for i in range(0,len(scene.godot_export_groups)):
- bpy.ops.scene.godot_export_group(idx=i,export_all=True)
+ for i in range(0, len(scene.godot_export_groups)):
+ bpy.ops.scene.godot_export_group(idx=i, export_all=True)
self.report({'INFO'}, "All Groups exported." )
return{'FINISHED'}
@@ -245,7 +245,7 @@ class export_group(bpy.types.Operator):
idx = IntProperty(default=0)
export_all = BoolProperty(default=False)
- def copy_object_recursive(self,ob,parent,single_user = True):
+ def copy_object_recursive(self, ob, parent, single_user = True):
new_ob = bpy.data.objects[ob.name].copy()
if single_user or ob.type=="ARMATURE":
new_mesh_data = new_ob.data.copy()
@@ -258,22 +258,22 @@ class export_group(bpy.types.Operator):
new_ob.parent = None
for child in ob.children:
- self.copy_object_recursive(child,new_ob,single_user)
+ self.copy_object_recursive(child, new_ob, single_user)
new_ob.select = True
return new_ob
- def delete_object(self,ob):
+ def delete_object(self, ob):
if ob != None:
for child in ob.children:
self.delete_object(child)
bpy.context.scene.objects.unlink(ob)
bpy.data.objects.remove(ob)
- def convert_group_to_node(self,group):
+ def convert_group_to_node(self, group):
if group.dupli_group != None:
for object in group.dupli_group.objects:
if object.parent == None:
- object = self.copy_object_recursive(object,object,True)
+ object = self.copy_object_recursive(object, object, True)
matrix = Matrix(object.matrix_local)
object.matrix_local = Matrix()
object.matrix_local *= group.matrix_local
@@ -281,7 +281,7 @@ class export_group(bpy.types.Operator):
self.delete_object(group)
- def execute(self,context):
+ def execute(self, context):
scene = context.scene
group = context.scene.godot_export_groups
@@ -289,7 +289,7 @@ class export_group(bpy.types.Operator):
if not group[self.idx].active and self.export_all:
return{'FINISHED'}
- for i,object in enumerate(group[self.idx].nodes):
+ for i, object in enumerate(group[self.idx].nodes):
if object.name in bpy.data.objects:
pass
else:
@@ -300,17 +300,17 @@ class export_group(bpy.types.Operator):
if (path.find("//")==0 or path.find("\\\\")==0):
#if relative, convert to absolute
path = bpy.path.abspath(path)
- path = path.replace("\\","/")
+ path = path.replace("\\", "/")
### if path exists and group export name is set the group will be exported
if os.path.exists(path) and group[self.idx].export_name != "":
- context.scene.layers = [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True,True]
+ context.scene.layers = [True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]
if group[self.idx].export_name.endswith(".dae"):
- path = os.path.join(path,group[self.idx].export_name)
+ path = os.path.join(path, group[self.idx].export_name)
else:
- path = os.path.join(path,group[self.idx].export_name+".dae")
+ path = os.path.join(path, group[self.idx].export_name+".dae")
hide_select = []
for object in context.scene.objects:
@@ -322,7 +322,7 @@ class export_group(bpy.types.Operator):
### make particle duplicates, parent and select them
nodes_to_be_added = []
if group[self.idx].use_include_particle_duplicates:
- for i,object in enumerate(group[self.idx].nodes):
+ for i, object in enumerate(group[self.idx].nodes):
if bpy.data.objects[object.name].type != "EMPTY":
context.scene.objects.active = bpy.data.objects[object.name]
bpy.data.objects[object.name].select = True
@@ -339,7 +339,7 @@ class export_group(bpy.types.Operator):
object.select = True
### select all other nodes from the group
- for i,object in enumerate(group[self.idx].nodes):
+ for i, object in enumerate(group[self.idx].nodes):
if bpy.data.objects[object.name].type == "EMPTY":
self.convert_group_to_node(bpy.data.objects[object.name])
else:
@@ -365,7 +365,7 @@ class add_export_group(bpy.types.Operator):
bl_label = "Adds a new export Group"
bl_description = "Creates a new Export Group with the selected Objects assigned to it."
- def execute(self,context):
+ def execute(self, context):
scene = context.scene
item = scene.godot_export_groups.add()
@@ -385,9 +385,9 @@ class del_export_group(bpy.types.Operator):
def invoke(self, context, event):
wm = context.window_manager
- return wm.invoke_confirm(self,event)
+ return wm.invoke_confirm(self, event)
- def execute(self,context):
+ def execute(self, context):
scene = context.scene
scene.godot_export_groups.remove(scene.godot_export_groups_index)
@@ -406,30 +406,30 @@ class godot_export_groups(bpy.types.PropertyGroup):
export_name = StringProperty(name="scene_name")
nodes = CollectionProperty(type=godot_node_list)
export_path = StringProperty(subtype="DIR_PATH")
- active = BoolProperty(default=True,description="Export Group")
+ active = BoolProperty(default=True, description="Export Group")
- object_types = EnumProperty(name="Object Types",options={'ENUM_FLAG'},items=(('EMPTY', "Empty", ""),('CAMERA', "Camera", ""),('LAMP', "Lamp", ""),('ARMATURE', "Armature", ""),('MESH', "Mesh", ""),('CURVE', "Curve", ""),),default={'EMPTY', 'CAMERA', 'LAMP', 'ARMATURE', 'MESH','CURVE'})
+ object_types = EnumProperty(name="Object Types", options={'ENUM_FLAG'}, items=(('EMPTY', "Empty", ""), ('CAMERA', "Camera", ""), ('LAMP', "Lamp", ""), ('ARMATURE', "Armature", ""), ('MESH', "Mesh", ""), ('CURVE', "Curve", ""), ), default={'EMPTY', 'CAMERA', 'LAMP', 'ARMATURE', 'MESH', 'CURVE'})
- apply_scale = BoolProperty(name="Apply Scale",description="Apply Scale before export.",default=False)
- apply_rot = BoolProperty(name="Apply Rotation",description="Apply Rotation before export.",default=False)
- apply_loc = BoolProperty(name="Apply Location",description="Apply Location before export.",default=False)
+ apply_scale = BoolProperty(name="Apply Scale", description="Apply Scale before export.", default=False)
+ apply_rot = BoolProperty(name="Apply Rotation", description="Apply Rotation before export.", default=False)
+ apply_loc = BoolProperty(name="Apply Location", description="Apply Location before export.", default=False)
- use_export_selected = BoolProperty(name="Selected Objects",description="Export only selected objects (and visible in active layers if that applies).",default=True)
- use_mesh_modifiers = BoolProperty(name="Apply Modifiers",description="Apply modifiers to mesh objects (on a copy!).",default=True)
- use_tangent_arrays = BoolProperty(name="Tangent Arrays",description="Export Tangent and Binormal arrays (for normalmapping).",default=False)
- use_triangles = BoolProperty(name="Triangulate",description="Export Triangles instead of Polygons.",default=False)
+ use_export_selected = BoolProperty(name="Selected Objects", description="Export only selected objects (and visible in active layers if that applies).", default=True)
+ use_mesh_modifiers = BoolProperty(name="Apply Modifiers", description="Apply modifiers to mesh objects (on a copy!).", default=True)
+ use_tangent_arrays = BoolProperty(name="Tangent Arrays", description="Export Tangent and Binormal arrays (for normalmapping).", default=False)
+ use_triangles = BoolProperty(name="Triangulate", description="Export Triangles instead of Polygons.", default=False)
- use_copy_images = BoolProperty(name="Copy Images",description="Copy Images (create images/ subfolder)",default=False)
- use_active_layers = BoolProperty(name="Active Layers",description="Export only objects on the active layers.",default=True)
- use_anim = BoolProperty(name="Export Animation",description="Export keyframe animation",default=False)
- use_anim_action_all = BoolProperty(name="All Actions",description=("Export all actions for the first armature found in separate DAE files"),default=False)
- use_anim_skip_noexp = BoolProperty(name="Skip (-noexp) Actions",description="Skip exporting of actions whose name end in (-noexp). Useful to skip control animations.",default=True)
- use_anim_optimize = BoolProperty(name="Optimize Keyframes",description="Remove double keyframes",default=True)
+ use_copy_images = BoolProperty(name="Copy Images", description="Copy Images (create images/ subfolder)", default=False)
+ use_active_layers = BoolProperty(name="Active Layers", description="Export only objects on the active layers.", default=True)
+ use_anim = BoolProperty(name="Export Animation", description="Export keyframe animation", default=False)
+ use_anim_action_all = BoolProperty(name="All Actions", description=("Export all actions for the first armature found in separate DAE files"), default=False)
+ use_anim_skip_noexp = BoolProperty(name="Skip (-noexp) Actions", description="Skip exporting of actions whose name end in (-noexp). Useful to skip control animations.", default=True)
+ use_anim_optimize = BoolProperty(name="Optimize Keyframes", description="Remove double keyframes", default=True)
- anim_optimize_precision = FloatProperty(name="Precision",description=("Tolerence for comparing double keyframes (higher for greater accuracy)"),min=1, max=16,soft_min=1, soft_max=16,default=6.0)
+ anim_optimize_precision = FloatProperty(name="Precision", description=("Tolerence for comparing double keyframes (higher for greater accuracy)"), min=1, max=16, soft_min=1, soft_max=16, default=6.0)
- use_metadata = BoolProperty(name="Use Metadata",default=True,options={'HIDDEN'})
- use_include_particle_duplicates = BoolProperty(name="Include Particle Duplicates",default=True)
+ use_metadata = BoolProperty(name="Use Metadata", default=True, options={'HIDDEN'})
+ use_include_particle_duplicates = BoolProperty(name="Include Particle Duplicates", default=True)
def register():
@@ -447,7 +447,7 @@ def register():
bpy.utils.register_class(UI_List_Godot)
bpy.types.Scene.godot_export_groups = CollectionProperty(type=godot_export_groups)
- bpy.types.Scene.godot_export_groups_index = IntProperty(default=0,min=0)
+ bpy.types.Scene.godot_export_groups_index = IntProperty(default=0, min=0)
def unregister():
diff --git a/tools/export/blender25/io_scene_dae/__init__.py b/tools/export/blender25/io_scene_dae/__init__.py
index 89c1f009c2..3bde01f2df 100644
--- a/tools/export/blender25/io_scene_dae/__init__.py
+++ b/tools/export/blender25/io_scene_dae/__init__.py
@@ -69,7 +69,7 @@ class ExportDAE(bpy.types.Operator, ExportHelper):
('MESH', "Mesh", ""),
('CURVE', "Curve", ""),
),
- default={'EMPTY', 'CAMERA', 'LAMP', 'ARMATURE', 'MESH','CURVE'},
+ default={'EMPTY', 'CAMERA', 'LAMP', 'ARMATURE', 'MESH', 'CURVE'},
)
use_export_selected = BoolProperty(
diff --git a/tools/export/blender25/io_scene_dae/export_dae.py b/tools/export/blender25/io_scene_dae/export_dae.py
index 047c8a063d..0b90a60eb8 100644
--- a/tools/export/blender25/io_scene_dae/export_dae.py
+++ b/tools/export/blender25/io_scene_dae/export_dae.py
@@ -66,7 +66,7 @@ CMP_EPSILON=0.0001
def snap_tup(tup):
ret=()
for x in tup:
- ret+=( x-math.fmod(x,0.0001), )
+ ret+=( x-math.fmod(x, 0.0001), )
return tup
@@ -80,7 +80,7 @@ def strmtx(mtx):
s+=" "
return s
-def numarr(a,mult=1.0):
+def numarr(a, mult=1.0):
s=" "
for x in a:
s+=" "+str(x*mult)
@@ -88,7 +88,7 @@ def numarr(a,mult=1.0):
return s
-def numarr_alpha(a,mult=1.0):
+def numarr_alpha(a, mult=1.0):
s=" "
for x in a:
s+=" "+str(x*mult)
@@ -108,12 +108,12 @@ def strarr(arr):
class DaeExporter:
- def validate_id(self,d):
+ def validate_id(self, d):
if (d.find("id-")==0):
return "z"+d
return d
- def new_id(self,t):
+ def new_id(self, t):
self.last_id+=1
return "id-"+t+"-"+str(self.last_id)
@@ -132,34 +132,34 @@ class DaeExporter:
return True
def get_tup(self):
- tup = (self.vertex.x,self.vertex.y,self.vertex.z,self.normal.x,self.normal.y,self.normal.z)
+ tup = (self.vertex.x, self.vertex.y, self.vertex.z, self.normal.x, self.normal.y, self.normal.z)
for t in self.uv:
- tup = tup + (t.x,t.y)
+ tup = tup + (t.x, t.y)
if (self.color!=None):
- tup = tup + (self.color.x,self.color.y,self.color.z)
+ tup = tup + (self.color.x, self.color.y, self.color.z)
if (self.tangent!=None):
- tup = tup + (self.tangent.x,self.tangent.y,self.tangent.z)
+ tup = tup + (self.tangent.x, self.tangent.y, self.tangent.z)
if (self.bitangent!=None):
- tup = tup + (self.bitangent.x,self.bitangent.y,self.bitangent.z)
+ tup = tup + (self.bitangent.x, self.bitangent.y, self.bitangent.z)
for t in self.bones:
- tup = tup + (float(t),)
+ tup = tup + (float(t), )
for t in self.weights:
- tup = tup + (float(t),)
+ tup = tup + (float(t), )
return tup
def __init__(self):
- self.vertex = Vector( (0.0,0.0,0.0) )
- self.normal = Vector( (0.0,0.0,0.0) )
+ self.vertex = Vector( (0.0, 0.0, 0.0) )
+ self.normal = Vector( (0.0, 0.0, 0.0) )
self.tangent = None
self.bitangent = None
self.color = None
self.uv = []
- self.uv2 = Vector( (0.0,0.0) )
+ self.uv2 = Vector( (0.0, 0.0) )
self.bones=[]
self.weights=[]
- def writel(self,section,indent,text):
+ def writel(self, section, indent, text):
if (not (section in self.sections)):
self.sections[section]=[]
line=""
@@ -168,7 +168,7 @@ class DaeExporter:
line+=text
self.sections[section].append(line)
- def export_image(self,image):
+ def export_image(self, image):
if (image in self.image_cache):
return self.image_cache[image]
@@ -188,12 +188,12 @@ class DaeExporter:
dstfile=basedir+"/"+os.path.basename(imgpath)
if (not os.path.isfile(dstfile)):
- shutil.copy(imgpath,dstfile)
+ shutil.copy(imgpath, dstfile)
imgpath="images/"+os.path.basename(imgpath)
else:
### if file is not found save it as png file in the destination folder
img_tmp_path = image.filepath
- if img_tmp_path.endswith((".bmp",".rgb",".png",".jpeg",".jpg",".jp2",".tga",".cin",".dpx",".exr",".hdr",".tif")):
+ if img_tmp_path.endswith((".bmp", ".rgb", ".png", ".jpeg", ".jpg", ".jp2", ".tga", ".cin", ".dpx", ".exr", ".hdr", ".tif")):
image.filepath = basedir+"/"+os.path.basename(img_tmp_path)
else:
image.filepath = basedir+"/"+image.name+".png"
@@ -209,7 +209,7 @@ class DaeExporter:
else:
#export relative, always, no one wants absolute paths.
try:
- imgpath = os.path.relpath(imgpath,os.path.dirname(self.path)).replace("\\","/") # export unix compatible always
+ imgpath = os.path.relpath(imgpath, os.path.dirname(self.path)).replace("\\", "/") # export unix compatible always
except:
pass #fails sometimes, not sure why
@@ -220,24 +220,24 @@ class DaeExporter:
# if (not os.path.isfile(imgpath)):
# print("NOT FILE?")
-# if imgpath.endswith((".bmp",".rgb",".png",".jpeg",".jpg",".jp2",".tga",".cin",".dpx",".exr",".hdr",".tif")):
+# if imgpath.endswith((".bmp", ".rgb", ".png", ".jpeg", ".jpg", ".jp2", ".tga", ".cin", ".dpx", ".exr", ".hdr", ".tif")):
# imgpath="images/"+os.path.basename(imgpath)
# else:
# imgpath="images/"+image.name+".png"
- self.writel(S_IMGS,1,'<image id="'+imgid+'" name="'+image.name+'">')
- self.writel(S_IMGS,2,'<init_from>'+imgpath+'</init_from>')
- self.writel(S_IMGS,1,'</image>')
+ self.writel(S_IMGS, 1, '<image id="'+imgid+'" name="'+image.name+'">')
+ self.writel(S_IMGS, 2, '<init_from>'+imgpath+'</init_from>')
+ self.writel(S_IMGS, 1, '</image>')
self.image_cache[image]=imgid
return imgid
- def export_material(self,material,double_sided_hint=True):
+ def export_material(self, material, double_sided_hint=True):
if (material in self.material_cache):
return self.material_cache[material]
fxid = self.new_id("fx")
- self.writel(S_FX,1,'<effect id="'+fxid+'" name="'+material.name+'-fx">')
- self.writel(S_FX,2,'<profile_COMMON>')
+ self.writel(S_FX, 1, '<effect id="'+fxid+'" name="'+material.name+'-fx">')
+ self.writel(S_FX, 2, '<profile_COMMON>')
#Find and fetch the textures and create sources
sampler_table={}
@@ -264,19 +264,19 @@ class DaeExporter:
#surface
surface_sid = self.new_id("fx_surf")
- self.writel(S_FX,3,'<newparam sid="'+surface_sid+'">')
- self.writel(S_FX,4,'<surface type="2D">')
- self.writel(S_FX,5,'<init_from>'+imgid+'</init_from>') #this is sooo weird
- self.writel(S_FX,5,'<format>A8R8G8B8</format>')
- self.writel(S_FX,4,'</surface>')
- self.writel(S_FX,3,'</newparam>')
+ self.writel(S_FX, 3, '<newparam sid="'+surface_sid+'">')
+ self.writel(S_FX, 4, '<surface type="2D">')
+ self.writel(S_FX, 5, '<init_from>'+imgid+'</init_from>') #this is sooo weird
+ self.writel(S_FX, 5, '<format>A8R8G8B8</format>')
+ self.writel(S_FX, 4, '</surface>')
+ self.writel(S_FX, 3, '</newparam>')
#sampler, collada sure likes it difficult
sampler_sid = self.new_id("fx_sampler")
- self.writel(S_FX,3,'<newparam sid="'+sampler_sid+'">')
- self.writel(S_FX,4,'<sampler2D>')
- self.writel(S_FX,5,'<source>'+surface_sid+'</source>')
- self.writel(S_FX,4,'</sampler2D>')
- self.writel(S_FX,3,'</newparam>')
+ self.writel(S_FX, 3, '<newparam sid="'+sampler_sid+'">')
+ self.writel(S_FX, 4, '<sampler2D>')
+ self.writel(S_FX, 5, '<source>'+surface_sid+'</source>')
+ self.writel(S_FX, 4, '</sampler2D>')
+ self.writel(S_FX, 3, '</newparam>')
sampler_table[i]=sampler_sid
if (ts.use_map_color_diffuse and diffuse_tex==None):
@@ -288,90 +288,90 @@ class DaeExporter:
if (ts.use_map_normal and normal_tex==None):
normal_tex=sampler_sid
- self.writel(S_FX,3,'<technique sid="common">')
+ self.writel(S_FX, 3, '<technique sid="common">')
shtype="blinn"
- self.writel(S_FX,4,'<'+shtype+'>')
+ self.writel(S_FX, 4, '<'+shtype+'>')
#ambient? from where?
- self.writel(S_FX,5,'<emission>')
+ self.writel(S_FX, 5, '<emission>')
if (emission_tex!=None):
- self.writel(S_FX,6,'<texture texture="'+emission_tex+'" texcoord="CHANNEL1"/>')
+ self.writel(S_FX, 6, '<texture texture="'+emission_tex+'" texcoord="CHANNEL1"/>')
else:
- self.writel(S_FX,6,'<color>'+numarr_alpha(material.diffuse_color,material.emit)+' </color>') # not totally right but good enough
- self.writel(S_FX,5,'</emission>')
+ self.writel(S_FX, 6, '<color>'+numarr_alpha(material.diffuse_color, material.emit)+' </color>') # not totally right but good enough
+ self.writel(S_FX, 5, '</emission>')
- self.writel(S_FX,5,'<ambient>')
- self.writel(S_FX,6,'<color>'+numarr_alpha(self.scene.world.ambient_color,material.ambient)+' </color>')
- self.writel(S_FX,5,'</ambient>')
+ self.writel(S_FX, 5, '<ambient>')
+ self.writel(S_FX, 6, '<color>'+numarr_alpha(self.scene.world.ambient_color, material.ambient)+' </color>')
+ self.writel(S_FX, 5, '</ambient>')
- self.writel(S_FX,5,'<diffuse>')
+ self.writel(S_FX, 5, '<diffuse>')
if (diffuse_tex!=None):
- self.writel(S_FX,6,'<texture texture="'+diffuse_tex+'" texcoord="CHANNEL1"/>')
+ self.writel(S_FX, 6, '<texture texture="'+diffuse_tex+'" texcoord="CHANNEL1"/>')
else:
- self.writel(S_FX,6,'<color>'+numarr_alpha(material.diffuse_color,material.diffuse_intensity)+'</color>')
- self.writel(S_FX,5,'</diffuse>')
+ self.writel(S_FX, 6, '<color>'+numarr_alpha(material.diffuse_color, material.diffuse_intensity)+'</color>')
+ self.writel(S_FX, 5, '</diffuse>')
- self.writel(S_FX,5,'<specular>')
+ self.writel(S_FX, 5, '<specular>')
if (specular_tex!=None):
- self.writel(S_FX,6,'<texture texture="'+specular_tex+'" texcoord="CHANNEL1"/>')
+ self.writel(S_FX, 6, '<texture texture="'+specular_tex+'" texcoord="CHANNEL1"/>')
else:
- self.writel(S_FX,6,'<color>'+numarr_alpha(material.specular_color,material.specular_intensity)+'</color>')
- self.writel(S_FX,5,'</specular>')
+ self.writel(S_FX, 6, '<color>'+numarr_alpha(material.specular_color, material.specular_intensity)+'</color>')
+ self.writel(S_FX, 5, '</specular>')
- self.writel(S_FX,5,'<shininess>')
- self.writel(S_FX,6,'<float>'+str(material.specular_hardness)+'</float>')
- self.writel(S_FX,5,'</shininess>')
+ self.writel(S_FX, 5, '<shininess>')
+ self.writel(S_FX, 6, '<float>'+str(material.specular_hardness)+'</float>')
+ self.writel(S_FX, 5, '</shininess>')
- self.writel(S_FX,5,'<reflective>')
- self.writel(S_FX,6,'<color>'+numarr_alpha(material.mirror_color)+'</color>')
- self.writel(S_FX,5,'</reflective>')
+ self.writel(S_FX, 5, '<reflective>')
+ self.writel(S_FX, 6, '<color>'+numarr_alpha(material.mirror_color)+'</color>')
+ self.writel(S_FX, 5, '</reflective>')
if (material.use_transparency):
- self.writel(S_FX,5,'<transparency>')
- self.writel(S_FX,6,'<float>'+str(material.alpha)+'</float>')
- self.writel(S_FX,5,'</transparency>')
+ self.writel(S_FX, 5, '<transparency>')
+ self.writel(S_FX, 6, '<float>'+str(material.alpha)+'</float>')
+ self.writel(S_FX, 5, '</transparency>')
- self.writel(S_FX,5,'<index_of_refraction>')
- self.writel(S_FX,6,'<float>'+str(material.specular_ior)+'</float>')
- self.writel(S_FX,5,'</index_of_refraction>')
+ self.writel(S_FX, 5, '<index_of_refraction>')
+ self.writel(S_FX, 6, '<float>'+str(material.specular_ior)+'</float>')
+ self.writel(S_FX, 5, '</index_of_refraction>')
- self.writel(S_FX,4,'</'+shtype+'>')
+ self.writel(S_FX, 4, '</'+shtype+'>')
- self.writel(S_FX,4,'<extra>')
- self.writel(S_FX,5,'<technique profile="FCOLLADA">')
+ self.writel(S_FX, 4, '<extra>')
+ self.writel(S_FX, 5, '<technique profile="FCOLLADA">')
if (normal_tex):
- self.writel(S_FX,6,'<bump bumptype="NORMALMAP">')
- self.writel(S_FX,7,'<texture texture="'+normal_tex+'" texcoord="CHANNEL1"/>')
- self.writel(S_FX,6,'</bump>')
+ self.writel(S_FX, 6, '<bump bumptype="NORMALMAP">')
+ self.writel(S_FX, 7, '<texture texture="'+normal_tex+'" texcoord="CHANNEL1"/>')
+ self.writel(S_FX, 6, '</bump>')
- self.writel(S_FX,5,'</technique>')
- self.writel(S_FX,5,'<technique profile="GOOGLEEARTH">')
- self.writel(S_FX,6,'<double_sided>'+["0","1"][double_sided_hint]+"</double_sided>")
- self.writel(S_FX,5,'</technique>')
+ self.writel(S_FX, 5, '</technique>')
+ self.writel(S_FX, 5, '<technique profile="GOOGLEEARTH">')
+ self.writel(S_FX, 6, '<double_sided>'+["0", "1"][double_sided_hint]+"</double_sided>")
+ self.writel(S_FX, 5, '</technique>')
if (material.use_shadeless):
- self.writel(S_FX,5,'<technique profile="GODOT">')
- self.writel(S_FX,6,'<unshaded>1</unshaded>')
- self.writel(S_FX,5,'</technique>')
+ self.writel(S_FX, 5, '<technique profile="GODOT">')
+ self.writel(S_FX, 6, '<unshaded>1</unshaded>')
+ self.writel(S_FX, 5, '</technique>')
- self.writel(S_FX,4,'</extra>')
+ self.writel(S_FX, 4, '</extra>')
- self.writel(S_FX,3,'</technique>')
- self.writel(S_FX,2,'</profile_COMMON>')
- self.writel(S_FX,1,'</effect>')
+ self.writel(S_FX, 3, '</technique>')
+ self.writel(S_FX, 2, '</profile_COMMON>')
+ self.writel(S_FX, 1, '</effect>')
# Also export blender material in all it's glory (if set as active)
# Material
matid = self.new_id("material")
- self.writel(S_MATS,1,'<material id="'+matid+'" name="'+material.name+'">')
- self.writel(S_MATS,2,'<instance_effect url="#'+fxid+'"/>')
- self.writel(S_MATS,1,'</material>')
+ self.writel(S_MATS, 1, '<material id="'+matid+'" name="'+material.name+'">')
+ self.writel(S_MATS, 2, '<instance_effect url="#'+fxid+'"/>')
+ self.writel(S_MATS, 1, '</material>')
self.material_cache[material]=matid
return matid
- def export_mesh(self,node,armature=None,skeyindex=-1,skel_source=None,custom_name=None):
+ def export_mesh(self, node, armature=None, skeyindex=-1, skel_source=None, custom_name=None):
mesh = node.data
if (node.data in self.mesh_cache):
@@ -381,14 +381,14 @@ class DaeExporter:
values=[]
morph_targets=[]
md=None
- for k in range(0,len(mesh.shape_keys.key_blocks)):
+ for k in range(0, len(mesh.shape_keys.key_blocks)):
shape = node.data.shape_keys.key_blocks[k]
values+=[shape.value] #save value
shape.value=0
mid = self.new_id("morph")
- for k in range(0,len(mesh.shape_keys.key_blocks)):
+ for k in range(0, len(mesh.shape_keys.key_blocks)):
shape = node.data.shape_keys.key_blocks[k]
node.show_only_shape_key=True
@@ -403,12 +403,12 @@ class DaeExporter:
p = node.data
v = node.to_mesh(bpy.context.scene, True, "RENDER")
node.data = v
-# self.export_node(node,il,shape.name)
+# self.export_node(node, il, shape.name)
node.data.update()
if (armature and k==0):
- md=self.export_mesh(node,armature,k,mid,shape.name)
+ md=self.export_mesh(node, armature, k, mid, shape.name)
else:
- md=self.export_mesh(node,None,k,None,shape.name)
+ md=self.export_mesh(node, None, k, None, shape.name)
node.data = p
node.data.update()
@@ -421,14 +421,14 @@ class DaeExporter:
node.show_only_shape_key=False
node.active_shape_key_index = 0
- self.writel(S_MORPH,1,'<controller id="'+mid+'" name="">')
+ self.writel(S_MORPH, 1, '<controller id="'+mid+'" name="">')
#if ("skin_id" in morph_targets[0]):
- # self.writel(S_MORPH,2,'<morph source="#'+morph_targets[0]["skin_id"]+'" method="NORMALIZED">')
+ # self.writel(S_MORPH, 2, '<morph source="#'+morph_targets[0]["skin_id"]+'" method="NORMALIZED">')
#else:
- self.writel(S_MORPH,2,'<morph source="#'+morph_targets[0]["id"]+'" method="NORMALIZED">')
+ self.writel(S_MORPH, 2, '<morph source="#'+morph_targets[0]["id"]+'" method="NORMALIZED">')
- self.writel(S_MORPH,3,'<source id="'+mid+'-morph-targets">')
- self.writel(S_MORPH,4,'<IDREF_array id="'+mid+'-morph-targets-array" count="'+str(len(morph_targets)-1)+'">')
+ self.writel(S_MORPH, 3, '<source id="'+mid+'-morph-targets">')
+ self.writel(S_MORPH, 4, '<IDREF_array id="'+mid+'-morph-targets-array" count="'+str(len(morph_targets)-1)+'">')
marr=""
warr=""
for i in range(len(morph_targets)):
@@ -444,32 +444,32 @@ class DaeExporter:
warr+=" 0"
- self.writel(S_MORPH,5,marr)
- self.writel(S_MORPH,4,'</IDREF_array>')
- self.writel(S_MORPH,4,'<technique_common>')
- self.writel(S_MORPH,5,'<accessor source="#'+mid+'-morph-targets-array" count="'+str(len(morph_targets)-1)+'" stride="1">')
- self.writel(S_MORPH,6,'<param name="MORPH_TARGET" type="IDREF"/>')
- self.writel(S_MORPH,5,'</accessor>')
- self.writel(S_MORPH,4,'</technique_common>')
- self.writel(S_MORPH,3,'</source>')
-
- self.writel(S_MORPH,3,'<source id="'+mid+'-morph-weights">')
- self.writel(S_MORPH,4,'<float_array id="'+mid+'-morph-weights-array" count="'+str(len(morph_targets)-1)+'" >')
- self.writel(S_MORPH,5,warr)
- self.writel(S_MORPH,4,'</float_array>')
- self.writel(S_MORPH,4,'<technique_common>')
- self.writel(S_MORPH,5,'<accessor source="#'+mid+'-morph-weights-array" count="'+str(len(morph_targets)-1)+'" stride="1">')
- self.writel(S_MORPH,6,'<param name="MORPH_WEIGHT" type="float"/>')
- self.writel(S_MORPH,5,'</accessor>')
- self.writel(S_MORPH,4,'</technique_common>')
- self.writel(S_MORPH,3,'</source>')
-
- self.writel(S_MORPH,3,'<targets>')
- self.writel(S_MORPH,4,'<input semantic="MORPH_TARGET" source="#'+mid+'-morph-targets"/>')
- self.writel(S_MORPH,4,'<input semantic="MORPH_WEIGHT" source="#'+mid+'-morph-weights"/>')
- self.writel(S_MORPH,3,'</targets>')
- self.writel(S_MORPH,2,'</morph>')
- self.writel(S_MORPH,1,'</controller>')
+ self.writel(S_MORPH, 5, marr)
+ self.writel(S_MORPH, 4, '</IDREF_array>')
+ self.writel(S_MORPH, 4, '<technique_common>')
+ self.writel(S_MORPH, 5, '<accessor source="#'+mid+'-morph-targets-array" count="'+str(len(morph_targets)-1)+'" stride="1">')
+ self.writel(S_MORPH, 6, '<param name="MORPH_TARGET" type="IDREF"/>')
+ self.writel(S_MORPH, 5, '</accessor>')
+ self.writel(S_MORPH, 4, '</technique_common>')
+ self.writel(S_MORPH, 3, '</source>')
+
+ self.writel(S_MORPH, 3, '<source id="'+mid+'-morph-weights">')
+ self.writel(S_MORPH, 4, '<float_array id="'+mid+'-morph-weights-array" count="'+str(len(morph_targets)-1)+'" >')
+ self.writel(S_MORPH, 5, warr)
+ self.writel(S_MORPH, 4, '</float_array>')
+ self.writel(S_MORPH, 4, '<technique_common>')
+ self.writel(S_MORPH, 5, '<accessor source="#'+mid+'-morph-weights-array" count="'+str(len(morph_targets)-1)+'" stride="1">')
+ self.writel(S_MORPH, 6, '<param name="MORPH_WEIGHT" type="float"/>')
+ self.writel(S_MORPH, 5, '</accessor>')
+ self.writel(S_MORPH, 4, '</technique_common>')
+ self.writel(S_MORPH, 3, '</source>')
+
+ self.writel(S_MORPH, 3, '<targets>')
+ self.writel(S_MORPH, 4, '<input semantic="MORPH_TARGET" source="#'+mid+'-morph-targets"/>')
+ self.writel(S_MORPH, 4, '<input semantic="MORPH_WEIGHT" source="#'+mid+'-morph-weights"/>')
+ self.writel(S_MORPH, 3, '</targets>')
+ self.writel(S_MORPH, 2, '</morph>')
+ self.writel(S_MORPH, 1, '</controller>')
if (armature!=None):
self.armature_for_morph[node]=armature
@@ -493,7 +493,7 @@ class DaeExporter:
if (custom_name!=None and custom_name!=""):
name_to_use=custom_name
- mesh=node.to_mesh(self.scene,apply_modifiers,"RENDER") #is this allright?
+ mesh=node.to_mesh(self.scene, apply_modifiers, "RENDER") #is this allright?
triangulate=self.config["use_triangles"]
if (triangulate):
@@ -527,7 +527,7 @@ class DaeExporter:
try:
mesh.calc_tangents()
except:
- self.operator.report({'WARNING'},'CalcTangets failed for mesh "'+mesh.name+'", no tangets will be exported.')
+ self.operator.report({'WARNING'}, 'CalcTangets failed for mesh "'+mesh.name+'", no tangets will be exported.')
#uv_layer_count=0
mesh.calc_normals_split()
has_tangents=False
@@ -551,7 +551,7 @@ class DaeExporter:
mat= None
if (mat!=None):
- materials[f.material_index]=self.export_material( mat,mesh.show_double_sided )
+ materials[f.material_index]=self.export_material( mat, mesh.show_double_sided )
else:
materials[f.material_index]=None #weird, has no material?
@@ -615,7 +615,7 @@ class DaeExporter:
wsum+=vg.weight
if (wsum==0.0):
if not self.wrongvtx_report:
- self.operator.report({'WARNING'},'Mesh for object "'+node.name+'" has unassigned weights. This may look wrong in exported model.')
+ self.operator.report({'WARNING'}, 'Mesh for object "'+node.name+'" has unassigned weights. This may look wrong in exported model.')
self.wrongvtx_report=True
#blender can have bones assigned that weight zero so they remain local
@@ -639,74 +639,74 @@ class DaeExporter:
indices.append(vi)
meshid = self.new_id("mesh")
- self.writel(S_GEOM,1,'<geometry id="'+meshid+'" name="'+name_to_use+'">')
+ self.writel(S_GEOM, 1, '<geometry id="'+meshid+'" name="'+name_to_use+'">')
- self.writel(S_GEOM,2,'<mesh>')
+ self.writel(S_GEOM, 2, '<mesh>')
# Vertex Array
- self.writel(S_GEOM,3,'<source id="'+meshid+'-positions">')
+ self.writel(S_GEOM, 3, '<source id="'+meshid+'-positions">')
float_values=""
for v in vertices:
float_values+=" "+str(v.vertex.x)+" "+str(v.vertex.y)+" "+str(v.vertex.z)
- self.writel(S_GEOM,4,'<float_array id="'+meshid+'-positions-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+meshid+'-positions-array" count="'+str(len(vertices))+'" stride="3">')
- self.writel(S_GEOM,5,'<param name="X" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Y" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Z" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,4,'</technique_common>')
- self.writel(S_GEOM,3,'</source>')
+ self.writel(S_GEOM, 4, '<float_array id="'+meshid+'-positions-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+meshid+'-positions-array" count="'+str(len(vertices))+'" stride="3">')
+ self.writel(S_GEOM, 5, '<param name="X" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Y" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Z" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 4, '</technique_common>')
+ self.writel(S_GEOM, 3, '</source>')
# Normal Array
- self.writel(S_GEOM,3,'<source id="'+meshid+'-normals">')
+ self.writel(S_GEOM, 3, '<source id="'+meshid+'-normals">')
float_values=""
for v in vertices:
float_values+=" "+str(v.normal.x)+" "+str(v.normal.y)+" "+str(v.normal.z)
- self.writel(S_GEOM,4,'<float_array id="'+meshid+'-normals-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+meshid+'-normals-array" count="'+str(len(vertices))+'" stride="3">')
- self.writel(S_GEOM,5,'<param name="X" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Y" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Z" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,4,'</technique_common>')
- self.writel(S_GEOM,3,'</source>')
+ self.writel(S_GEOM, 4, '<float_array id="'+meshid+'-normals-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+meshid+'-normals-array" count="'+str(len(vertices))+'" stride="3">')
+ self.writel(S_GEOM, 5, '<param name="X" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Y" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Z" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 4, '</technique_common>')
+ self.writel(S_GEOM, 3, '</source>')
if (has_tangents):
- self.writel(S_GEOM,3,'<source id="'+meshid+'-tangents">')
+ self.writel(S_GEOM, 3, '<source id="'+meshid+'-tangents">')
float_values=""
for v in vertices:
float_values+=" "+str(v.tangent.x)+" "+str(v.tangent.y)+" "+str(v.tangent.z)
- self.writel(S_GEOM,4,'<float_array id="'+meshid+'-tangents-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+meshid+'-tangents-array" count="'+str(len(vertices))+'" stride="3">')
- self.writel(S_GEOM,5,'<param name="X" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Y" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Z" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,4,'</technique_common>')
- self.writel(S_GEOM,3,'</source>')
-
- self.writel(S_GEOM,3,'<source id="'+meshid+'-bitangents">')
+ self.writel(S_GEOM, 4, '<float_array id="'+meshid+'-tangents-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+meshid+'-tangents-array" count="'+str(len(vertices))+'" stride="3">')
+ self.writel(S_GEOM, 5, '<param name="X" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Y" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Z" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 4, '</technique_common>')
+ self.writel(S_GEOM, 3, '</source>')
+
+ self.writel(S_GEOM, 3, '<source id="'+meshid+'-bitangents">')
float_values=""
for v in vertices:
float_values+=" "+str(v.bitangent.x)+" "+str(v.bitangent.y)+" "+str(v.bitangent.z)
- self.writel(S_GEOM,4,'<float_array id="'+meshid+'-bitangents-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+meshid+'-bitangents-array" count="'+str(len(vertices))+'" stride="3">')
- self.writel(S_GEOM,5,'<param name="X" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Y" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Z" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,4,'</technique_common>')
- self.writel(S_GEOM,3,'</source>')
+ self.writel(S_GEOM, 4, '<float_array id="'+meshid+'-bitangents-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+meshid+'-bitangents-array" count="'+str(len(vertices))+'" stride="3">')
+ self.writel(S_GEOM, 5, '<param name="X" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Y" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Z" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 4, '</technique_common>')
+ self.writel(S_GEOM, 3, '</source>')
# UV Arrays
for uvi in range(uv_layer_count):
- self.writel(S_GEOM,3,'<source id="'+meshid+'-texcoord-'+str(uvi)+'">')
+ self.writel(S_GEOM, 3, '<source id="'+meshid+'-texcoord-'+str(uvi)+'">')
float_values=""
for v in vertices:
try:
@@ -715,36 +715,36 @@ class DaeExporter:
# I don't understand this weird multi-uv-layer API, but with this it seems to works
float_values+=" 0 0 "
- self.writel(S_GEOM,4,'<float_array id="'+meshid+'-texcoord-'+str(uvi)+'-array" count="'+str(len(vertices)*2)+'">'+float_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+meshid+'-texcoord-'+str(uvi)+'-array" count="'+str(len(vertices))+'" stride="2">')
- self.writel(S_GEOM,5,'<param name="S" type="float"/>')
- self.writel(S_GEOM,5,'<param name="T" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,4,'</technique_common>')
- self.writel(S_GEOM,3,'</source>')
+ self.writel(S_GEOM, 4, '<float_array id="'+meshid+'-texcoord-'+str(uvi)+'-array" count="'+str(len(vertices)*2)+'">'+float_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+meshid+'-texcoord-'+str(uvi)+'-array" count="'+str(len(vertices))+'" stride="2">')
+ self.writel(S_GEOM, 5, '<param name="S" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="T" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 4, '</technique_common>')
+ self.writel(S_GEOM, 3, '</source>')
# Color Arrays
if (has_colors):
- self.writel(S_GEOM,3,'<source id="'+meshid+'-colors">')
+ self.writel(S_GEOM, 3, '<source id="'+meshid+'-colors">')
float_values=""
for v in vertices:
float_values+=" "+str(v.color.x)+" "+str(v.color.y)+" "+str(v.color.z)
- self.writel(S_GEOM,4,'<float_array id="'+meshid+'-colors-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+meshid+'-colors-array" count="'+str(len(vertices))+'" stride="3">')
- self.writel(S_GEOM,5,'<param name="X" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Y" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Z" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,4,'</technique_common>')
- self.writel(S_GEOM,3,'</source>')
+ self.writel(S_GEOM, 4, '<float_array id="'+meshid+'-colors-array" count="'+str(len(vertices)*3)+'">'+float_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+meshid+'-colors-array" count="'+str(len(vertices))+'" stride="3">')
+ self.writel(S_GEOM, 5, '<param name="X" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Y" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Z" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 4, '</technique_common>')
+ self.writel(S_GEOM, 3, '</source>')
# Triangle Lists
- self.writel(S_GEOM,3,'<vertices id="'+meshid+'-vertices">')
- self.writel(S_GEOM,4,'<input semantic="POSITION" source="#'+meshid+'-positions"/>')
- self.writel(S_GEOM,3,'</vertices>')
+ self.writel(S_GEOM, 3, '<vertices id="'+meshid+'-vertices">')
+ self.writel(S_GEOM, 4, '<input semantic="POSITION" source="#'+meshid+'-positions"/>')
+ self.writel(S_GEOM, 3, '</vertices>')
prim_type=""
if (triangulate):
@@ -758,22 +758,22 @@ class DaeExporter:
if (mat!=None):
matref = self.new_id("trimat")
- self.writel(S_GEOM,3,'<'+prim_type+' count="'+str(int(len(indices)))+'" material="'+matref+'">') # todo material
- mat_assign.append( (mat,matref) )
+ self.writel(S_GEOM, 3, '<'+prim_type+' count="'+str(int(len(indices)))+'" material="'+matref+'">') # todo material
+ mat_assign.append( (mat, matref) )
else:
- self.writel(S_GEOM,3,'<'+prim_type+' count="'+str(int(len(indices)))+'">') # todo material
+ self.writel(S_GEOM, 3, '<'+prim_type+' count="'+str(int(len(indices)))+'">') # todo material
- self.writel(S_GEOM,4,'<input semantic="VERTEX" source="#'+meshid+'-vertices" offset="0"/>')
- self.writel(S_GEOM,4,'<input semantic="NORMAL" source="#'+meshid+'-normals" offset="0"/>')
+ self.writel(S_GEOM, 4, '<input semantic="VERTEX" source="#'+meshid+'-vertices" offset="0"/>')
+ self.writel(S_GEOM, 4, '<input semantic="NORMAL" source="#'+meshid+'-normals" offset="0"/>')
for uvi in range(uv_layer_count):
- self.writel(S_GEOM,4,'<input semantic="TEXCOORD" source="#'+meshid+'-texcoord-'+str(uvi)+'" offset="0" set="'+str(uvi)+'"/>')
+ self.writel(S_GEOM, 4, '<input semantic="TEXCOORD" source="#'+meshid+'-texcoord-'+str(uvi)+'" offset="0" set="'+str(uvi)+'"/>')
if (has_colors):
- self.writel(S_GEOM,4,'<input semantic="COLOR" source="#'+meshid+'-colors" offset="0"/>')
+ self.writel(S_GEOM, 4, '<input semantic="COLOR" source="#'+meshid+'-colors" offset="0"/>')
if (has_tangents):
- self.writel(S_GEOM,4,'<input semantic="TEXTANGENT" source="#'+meshid+'-tangents" offset="0"/>')
- self.writel(S_GEOM,4,'<input semantic="TEXBINORMAL" source="#'+meshid+'-bitangents" offset="0"/>')
+ self.writel(S_GEOM, 4, '<input semantic="TEXTANGENT" source="#'+meshid+'-tangents" offset="0"/>')
+ self.writel(S_GEOM, 4, '<input semantic="TEXBINORMAL" source="#'+meshid+'-bitangents" offset="0"/>')
if (triangulate):
int_values="<p>"
@@ -781,19 +781,19 @@ class DaeExporter:
for i in p:
int_values+=" "+str(i)
int_values+=" </p>"
- self.writel(S_GEOM,4,int_values)
+ self.writel(S_GEOM, 4, int_values)
else:
for p in indices:
int_values="<p>"
for i in p:
int_values+=" "+str(i)
int_values+=" </p>"
- self.writel(S_GEOM,4,int_values)
+ self.writel(S_GEOM, 4, int_values)
- self.writel(S_GEOM,3,'</'+prim_type+'>')
+ self.writel(S_GEOM, 3, '</'+prim_type+'>')
- self.writel(S_GEOM,2,'</mesh>')
- self.writel(S_GEOM,1,'</geometry>')
+ self.writel(S_GEOM, 2, '</mesh>')
+ self.writel(S_GEOM, 1, '</geometry>')
meshdata={}
meshdata["id"]=meshid
@@ -806,41 +806,41 @@ class DaeExporter:
contid = self.new_id("controller")
- self.writel(S_SKIN,1,'<controller id="'+contid+'">')
+ self.writel(S_SKIN, 1, '<controller id="'+contid+'">')
if (skel_source!=None):
- self.writel(S_SKIN,2,'<skin source="#'+skel_source+'">')
+ self.writel(S_SKIN, 2, '<skin source="#'+skel_source+'">')
else:
- self.writel(S_SKIN,2,'<skin source="#'+meshid+'">')
+ self.writel(S_SKIN, 2, '<skin source="#'+meshid+'">')
- self.writel(S_SKIN,3,'<bind_shape_matrix>'+strmtx(node.matrix_world)+'</bind_shape_matrix>')
+ self.writel(S_SKIN, 3, '<bind_shape_matrix>'+strmtx(node.matrix_world)+'</bind_shape_matrix>')
#Joint Names
- self.writel(S_SKIN,3,'<source id="'+contid+'-joints">')
+ self.writel(S_SKIN, 3, '<source id="'+contid+'-joints">')
name_values=""
for v in si["bone_names"]:
name_values+=" "+v
- self.writel(S_SKIN,4,'<Name_array id="'+contid+'-joints-array" count="'+str(len(si["bone_names"]))+'">'+name_values+'</Name_array>')
- self.writel(S_SKIN,4,'<technique_common>')
- self.writel(S_SKIN,4,'<accessor source="#'+contid+'-joints-array" count="'+str(len(si["bone_names"]))+'" stride="1">')
- self.writel(S_SKIN,5,'<param name="JOINT" type="Name"/>')
- self.writel(S_SKIN,4,'</accessor>')
- self.writel(S_SKIN,4,'</technique_common>')
- self.writel(S_SKIN,3,'</source>')
+ self.writel(S_SKIN, 4, '<Name_array id="'+contid+'-joints-array" count="'+str(len(si["bone_names"]))+'">'+name_values+'</Name_array>')
+ self.writel(S_SKIN, 4, '<technique_common>')
+ self.writel(S_SKIN, 4, '<accessor source="#'+contid+'-joints-array" count="'+str(len(si["bone_names"]))+'" stride="1">')
+ self.writel(S_SKIN, 5, '<param name="JOINT" type="Name"/>')
+ self.writel(S_SKIN, 4, '</accessor>')
+ self.writel(S_SKIN, 4, '</technique_common>')
+ self.writel(S_SKIN, 3, '</source>')
#Pose Matrices!
- self.writel(S_SKIN,3,'<source id="'+contid+'-bind_poses">')
+ self.writel(S_SKIN, 3, '<source id="'+contid+'-bind_poses">')
pose_values=""
for v in si["bone_bind_poses"]:
pose_values+=" "+strmtx(v)
- self.writel(S_SKIN,4,'<float_array id="'+contid+'-bind_poses-array" count="'+str(len(si["bone_bind_poses"])*16)+'">'+pose_values+'</float_array>')
- self.writel(S_SKIN,4,'<technique_common>')
- self.writel(S_SKIN,4,'<accessor source="#'+contid+'-bind_poses-array" count="'+str(len(si["bone_bind_poses"]))+'" stride="16">')
- self.writel(S_SKIN,5,'<param name="TRANSFORM" type="float4x4"/>')
- self.writel(S_SKIN,4,'</accessor>')
- self.writel(S_SKIN,4,'</technique_common>')
- self.writel(S_SKIN,3,'</source>')
+ self.writel(S_SKIN, 4, '<float_array id="'+contid+'-bind_poses-array" count="'+str(len(si["bone_bind_poses"])*16)+'">'+pose_values+'</float_array>')
+ self.writel(S_SKIN, 4, '<technique_common>')
+ self.writel(S_SKIN, 4, '<accessor source="#'+contid+'-bind_poses-array" count="'+str(len(si["bone_bind_poses"]))+'" stride="16">')
+ self.writel(S_SKIN, 5, '<param name="TRANSFORM" type="float4x4"/>')
+ self.writel(S_SKIN, 4, '</accessor>')
+ self.writel(S_SKIN, 4, '</technique_common>')
+ self.writel(S_SKIN, 3, '</source>')
#Skin Weights!
- self.writel(S_SKIN,3,'<source id="'+contid+'-skin_weights">')
+ self.writel(S_SKIN, 3, '<source id="'+contid+'-skin_weights">')
skin_weights=""
skin_weights_total=0
for v in vertices:
@@ -848,21 +848,21 @@ class DaeExporter:
for w in v.weights:
skin_weights+=" "+str(w)
- self.writel(S_SKIN,4,'<float_array id="'+contid+'-skin_weights-array" count="'+str(skin_weights_total)+'">'+skin_weights+'</float_array>')
- self.writel(S_SKIN,4,'<technique_common>')
- self.writel(S_SKIN,4,'<accessor source="#'+contid+'-skin_weights-array" count="'+str(skin_weights_total)+'" stride="1">')
- self.writel(S_SKIN,5,'<param name="WEIGHT" type="float"/>')
- self.writel(S_SKIN,4,'</accessor>')
- self.writel(S_SKIN,4,'</technique_common>')
- self.writel(S_SKIN,3,'</source>')
-
- self.writel(S_SKIN,3,'<joints>')
- self.writel(S_SKIN,4,'<input semantic="JOINT" source="#'+contid+'-joints"/>')
- self.writel(S_SKIN,4,'<input semantic="INV_BIND_MATRIX" source="#'+contid+'-bind_poses"/>')
- self.writel(S_SKIN,3,'</joints>')
- self.writel(S_SKIN,3,'<vertex_weights count="'+str(len(vertices))+'">')
- self.writel(S_SKIN,4,'<input semantic="JOINT" source="#'+contid+'-joints" offset="0"/>')
- self.writel(S_SKIN,4,'<input semantic="WEIGHT" source="#'+contid+'-skin_weights" offset="1"/>')
+ self.writel(S_SKIN, 4, '<float_array id="'+contid+'-skin_weights-array" count="'+str(skin_weights_total)+'">'+skin_weights+'</float_array>')
+ self.writel(S_SKIN, 4, '<technique_common>')
+ self.writel(S_SKIN, 4, '<accessor source="#'+contid+'-skin_weights-array" count="'+str(skin_weights_total)+'" stride="1">')
+ self.writel(S_SKIN, 5, '<param name="WEIGHT" type="float"/>')
+ self.writel(S_SKIN, 4, '</accessor>')
+ self.writel(S_SKIN, 4, '</technique_common>')
+ self.writel(S_SKIN, 3, '</source>')
+
+ self.writel(S_SKIN, 3, '<joints>')
+ self.writel(S_SKIN, 4, '<input semantic="JOINT" source="#'+contid+'-joints"/>')
+ self.writel(S_SKIN, 4, '<input semantic="INV_BIND_MATRIX" source="#'+contid+'-bind_poses"/>')
+ self.writel(S_SKIN, 3, '</joints>')
+ self.writel(S_SKIN, 3, '<vertex_weights count="'+str(len(vertices))+'">')
+ self.writel(S_SKIN, 4, '<input semantic="JOINT" source="#'+contid+'-joints" offset="0"/>')
+ self.writel(S_SKIN, 4, '<input semantic="WEIGHT" source="#'+contid+'-skin_weights" offset="1"/>')
vcounts=""
vs=""
vcount=0
@@ -872,17 +872,17 @@ class DaeExporter:
vs+=" "+str(b)
vs+=" "+str(vcount)
vcount+=1
- self.writel(S_SKIN,4,'<vcount>'+vcounts+'</vcount>')
- self.writel(S_SKIN,4,'<v>'+vs+'</v>')
- self.writel(S_SKIN,3,'</vertex_weights>')
+ self.writel(S_SKIN, 4, '<vcount>'+vcounts+'</vcount>')
+ self.writel(S_SKIN, 4, '<v>'+vs+'</v>')
+ self.writel(S_SKIN, 3, '</vertex_weights>')
- self.writel(S_SKIN,2,'</skin>')
- self.writel(S_SKIN,1,'</controller>')
+ self.writel(S_SKIN, 2, '</skin>')
+ self.writel(S_SKIN, 1, '</controller>')
meshdata["skin_id"]=contid
return meshdata
- def export_mesh_node(self,node,il):
+ def export_mesh_node(self, node, il):
if (node.data==None):
return
@@ -896,12 +896,12 @@ class DaeExporter:
if (node.parent.type=="ARMATURE"):
armature=node.parent
if (armcount>1):
- self.operator.report({'WARNING'},'Object "'+node.name+'" refers to more than one armature! This is unsupported.')
+ self.operator.report({'WARNING'}, 'Object "'+node.name+'" refers to more than one armature! This is unsupported.')
if (armcount==0):
- self.operator.report({'WARNING'},'Object "'+node.name+'" is child of an armature, but has no armature modifier.')
+ self.operator.report({'WARNING'}, 'Object "'+node.name+'" is child of an armature, but has no armature modifier.')
if (armcount>0 and not armature):
- self.operator.report({'WARNING'},'Object "'+node.name+'" has armature modifier, but is not a child of an armature. This is unsupported.')
+ self.operator.report({'WARNING'}, 'Object "'+node.name+'" has armature modifier, but is not a child of an armature. This is unsupported.')
if (node.data.shape_keys!=None):
sk = node.data.shape_keys
@@ -916,50 +916,50 @@ class DaeExporter:
#print("LINKING "+str(node)+" WITH "+str(t.id.name))
self.armature_for_morph[node]=self.scene.objects[t.id.name]
- meshdata = self.export_mesh(node,armature)
+ meshdata = self.export_mesh(node, armature)
close_controller=False
if ("skin_id" in meshdata):
close_controller=True
- self.writel(S_NODES,il,'<instance_controller url="#'+meshdata["skin_id"]+'">')
+ self.writel(S_NODES, il, '<instance_controller url="#'+meshdata["skin_id"]+'">')
for sn in self.skeleton_info[armature]["skeleton_nodes"]:
- self.writel(S_NODES,il+1,'<skeleton>#'+sn+'</skeleton>')
+ self.writel(S_NODES, il+1, '<skeleton>#'+sn+'</skeleton>')
elif ("morph_id" in meshdata):
- self.writel(S_NODES,il,'<instance_controller url="#'+meshdata["morph_id"]+'">')
+ self.writel(S_NODES, il, '<instance_controller url="#'+meshdata["morph_id"]+'">')
close_controller=True
elif (armature==None):
- self.writel(S_NODES,il,'<instance_geometry url="#'+meshdata["id"]+'">')
+ self.writel(S_NODES, il, '<instance_geometry url="#'+meshdata["id"]+'">')
if (len(meshdata["material_assign"])>0):
- self.writel(S_NODES,il+1,'<bind_material>')
- self.writel(S_NODES,il+2,'<technique_common>')
+ self.writel(S_NODES, il+1, '<bind_material>')
+ self.writel(S_NODES, il+2, '<technique_common>')
for m in meshdata["material_assign"]:
- self.writel(S_NODES,il+3,'<instance_material symbol="'+m[1]+'" target="#'+m[0]+'"/>')
+ self.writel(S_NODES, il+3, '<instance_material symbol="'+m[1]+'" target="#'+m[0]+'"/>')
- self.writel(S_NODES,il+2,'</technique_common>')
- self.writel(S_NODES,il+1,'</bind_material>')
+ self.writel(S_NODES, il+2, '</technique_common>')
+ self.writel(S_NODES, il+1, '</bind_material>')
if (close_controller):
- self.writel(S_NODES,il,'</instance_controller>')
+ self.writel(S_NODES, il, '</instance_controller>')
else:
- self.writel(S_NODES,il,'</instance_geometry>')
+ self.writel(S_NODES, il, '</instance_geometry>')
- def export_armature_bone(self,bone,il,si):
+ def export_armature_bone(self, bone, il, si):
boneid = self.new_id("bone")
boneidx = si["bone_count"]
si["bone_count"]+=1
bonesid = si["id"]+"-"+str(boneidx)
if (bone.name in self.used_bones):
if (self.config["use_anim_action_all"]):
- self.operator.report({'WARNING'},'Bone name "'+bone.name+'" used in more than one skeleton. Actions might export wrong.')
+ self.operator.report({'WARNING'}, 'Bone name "'+bone.name+'" used in more than one skeleton. Actions might export wrong.')
else:
self.used_bones.append(bone.name)
si["bone_index"][bone.name]=boneidx
si["bone_ids"][bone]=boneid
si["bone_names"].append(bonesid)
- self.writel(S_NODES,il,'<node id="'+boneid+'" sid="'+bonesid+'" name="'+bone.name+'" type="JOINT">')
+ self.writel(S_NODES, il, '<node id="'+boneid+'" sid="'+bonesid+'" name="'+bone.name+'" type="JOINT">')
il+=1
xform = bone.matrix_local
si["bone_bind_poses"].append((si["armature_xform"] * xform).inverted())
@@ -969,25 +969,25 @@ class DaeExporter:
else:
si["skeleton_nodes"].append(boneid)
- self.writel(S_NODES,il,'<matrix sid="transform">'+strmtx(xform)+'</matrix>')
+ self.writel(S_NODES, il, '<matrix sid="transform">'+strmtx(xform)+'</matrix>')
for c in bone.children:
- self.export_armature_bone(c,il,si)
+ self.export_armature_bone(c, il, si)
il-=1
- self.writel(S_NODES,il,'</node>')
+ self.writel(S_NODES, il, '</node>')
- def export_armature_node(self,node,il):
+ def export_armature_node(self, node, il):
if (node.data==None):
return
self.skeletons.append(node)
armature = node.data
- self.skeleton_info[node]={ "bone_count":0, "id":self.new_id("skelbones"),"name":node.name, "bone_index":{},"bone_ids":{},"bone_names":[],"bone_bind_poses":[],"skeleton_nodes":[],"armature_xform":node.matrix_world }
+ self.skeleton_info[node]={ "bone_count":0, "id":self.new_id("skelbones"), "name":node.name, "bone_index":{}, "bone_ids":{}, "bone_names":[], "bone_bind_poses":[], "skeleton_nodes":[], "armature_xform":node.matrix_world }
for b in armature.bones:
if (b.parent!=None):
continue
- self.export_armature_bone(b,il,self.skeleton_info[node])
+ self.export_armature_bone(b, il, self.skeleton_info[node])
if (node.pose):
for b in node.pose.bones:
@@ -995,86 +995,86 @@ class DaeExporter:
if (x.type=='ACTION'):
self.action_constraints.append(x.action)
- def export_camera_node(self,node,il):
+ def export_camera_node(self, node, il):
if (node.data==None):
return
camera=node.data
camid=self.new_id("camera")
- self.writel(S_CAMS,1,'<camera id="'+camid+'" name="'+camera.name+'">')
- self.writel(S_CAMS,2,'<optics>')
- self.writel(S_CAMS,3,'<technique_common>')
+ self.writel(S_CAMS, 1, '<camera id="'+camid+'" name="'+camera.name+'">')
+ self.writel(S_CAMS, 2, '<optics>')
+ self.writel(S_CAMS, 3, '<technique_common>')
if (camera.type=="PERSP"):
- self.writel(S_CAMS,4,'<perspective>')
- self.writel(S_CAMS,5,'<yfov> '+str(math.degrees(camera.angle))+' </yfov>') # I think?
- self.writel(S_CAMS,5,'<aspect_ratio> '+str(self.scene.render.resolution_x / self.scene.render.resolution_y)+' </aspect_ratio>')
- self.writel(S_CAMS,5,'<znear> '+str(camera.clip_start)+' </znear>')
- self.writel(S_CAMS,5,'<zfar> '+str(camera.clip_end)+' </zfar>')
- self.writel(S_CAMS,4,'</perspective>')
+ self.writel(S_CAMS, 4, '<perspective>')
+ self.writel(S_CAMS, 5, '<yfov> '+str(math.degrees(camera.angle))+' </yfov>') # I think?
+ self.writel(S_CAMS, 5, '<aspect_ratio> '+str(self.scene.render.resolution_x / self.scene.render.resolution_y)+' </aspect_ratio>')
+ self.writel(S_CAMS, 5, '<znear> '+str(camera.clip_start)+' </znear>')
+ self.writel(S_CAMS, 5, '<zfar> '+str(camera.clip_end)+' </zfar>')
+ self.writel(S_CAMS, 4, '</perspective>')
else:
- self.writel(S_CAMS,4,'<orthographic>')
- self.writel(S_CAMS,5,'<xmag> '+str(camera.ortho_scale*0.5)+' </xmag>') # I think?
- self.writel(S_CAMS,5,'<aspect_ratio> '+str(self.scene.render.resolution_x / self.scene.render.resolution_y)+' </aspect_ratio>')
- self.writel(S_CAMS,5,'<znear> '+str(camera.clip_start)+' </znear>')
- self.writel(S_CAMS,5,'<zfar> '+str(camera.clip_end)+' </zfar>')
- self.writel(S_CAMS,4,'</orthographic>')
+ self.writel(S_CAMS, 4, '<orthographic>')
+ self.writel(S_CAMS, 5, '<xmag> '+str(camera.ortho_scale*0.5)+' </xmag>') # I think?
+ self.writel(S_CAMS, 5, '<aspect_ratio> '+str(self.scene.render.resolution_x / self.scene.render.resolution_y)+' </aspect_ratio>')
+ self.writel(S_CAMS, 5, '<znear> '+str(camera.clip_start)+' </znear>')
+ self.writel(S_CAMS, 5, '<zfar> '+str(camera.clip_end)+' </zfar>')
+ self.writel(S_CAMS, 4, '</orthographic>')
- self.writel(S_CAMS,3,'</technique_common>')
- self.writel(S_CAMS,2,'</optics>')
- self.writel(S_CAMS,1,'</camera>')
+ self.writel(S_CAMS, 3, '</technique_common>')
+ self.writel(S_CAMS, 2, '</optics>')
+ self.writel(S_CAMS, 1, '</camera>')
- self.writel(S_NODES,il,'<instance_camera url="#'+camid+'"/>')
+ self.writel(S_NODES, il, '<instance_camera url="#'+camid+'"/>')
- def export_lamp_node(self,node,il):
+ def export_lamp_node(self, node, il):
if (node.data==None):
return
light=node.data
lightid=self.new_id("light")
- self.writel(S_LAMPS,1,'<light id="'+lightid+'" name="'+light.name+'">')
- #self.writel(S_LAMPS,2,'<optics>')
- self.writel(S_LAMPS,3,'<technique_common>')
+ self.writel(S_LAMPS, 1, '<light id="'+lightid+'" name="'+light.name+'">')
+ #self.writel(S_LAMPS, 2, '<optics>')
+ self.writel(S_LAMPS, 3, '<technique_common>')
if (light.type=="POINT"):
- self.writel(S_LAMPS,4,'<point>')
- self.writel(S_LAMPS,5,'<color>'+strarr(light.color)+'</color>')
+ self.writel(S_LAMPS, 4, '<point>')
+ self.writel(S_LAMPS, 5, '<color>'+strarr(light.color)+'</color>')
att_by_distance = 2.0 / light.distance # convert to linear attenuation
- self.writel(S_LAMPS,5,'<linear_attenuation>'+str(att_by_distance)+'</linear_attenuation>')
+ self.writel(S_LAMPS, 5, '<linear_attenuation>'+str(att_by_distance)+'</linear_attenuation>')
if (light.use_sphere):
- self.writel(S_LAMPS,5,'<zfar>'+str(light.distance)+'</zfar>')
+ self.writel(S_LAMPS, 5, '<zfar>'+str(light.distance)+'</zfar>')
- self.writel(S_LAMPS,4,'</point>')
+ self.writel(S_LAMPS, 4, '</point>')
elif (light.type=="SPOT"):
- self.writel(S_LAMPS,4,'<spot>')
- self.writel(S_LAMPS,5,'<color>'+strarr(light.color)+'</color>')
+ self.writel(S_LAMPS, 4, '<spot>')
+ self.writel(S_LAMPS, 5, '<color>'+strarr(light.color)+'</color>')
att_by_distance = 2.0 / light.distance # convert to linear attenuation
- self.writel(S_LAMPS,5,'<linear_attenuation>'+str(att_by_distance)+'</linear_attenuation>')
- self.writel(S_LAMPS,5,'<falloff_angle>'+str(math.degrees(light.spot_size/2))+'</falloff_angle>')
- self.writel(S_LAMPS,4,'</spot>')
+ self.writel(S_LAMPS, 5, '<linear_attenuation>'+str(att_by_distance)+'</linear_attenuation>')
+ self.writel(S_LAMPS, 5, '<falloff_angle>'+str(math.degrees(light.spot_size/2))+'</falloff_angle>')
+ self.writel(S_LAMPS, 4, '</spot>')
else: #write a sun lamp for everything else (not supported)
- self.writel(S_LAMPS,4,'<directional>')
- self.writel(S_LAMPS,5,'<color>'+strarr(light.color)+'</color>')
- self.writel(S_LAMPS,4,'</directional>')
+ self.writel(S_LAMPS, 4, '<directional>')
+ self.writel(S_LAMPS, 5, '<color>'+strarr(light.color)+'</color>')
+ self.writel(S_LAMPS, 4, '</directional>')
- self.writel(S_LAMPS,3,'</technique_common>')
- #self.writel(S_LAMPS,2,'</optics>')
- self.writel(S_LAMPS,1,'</light>')
+ self.writel(S_LAMPS, 3, '</technique_common>')
+ #self.writel(S_LAMPS, 2, '</optics>')
+ self.writel(S_LAMPS, 1, '</light>')
- self.writel(S_NODES,il,'<instance_light url="#'+lightid+'"/>')
+ self.writel(S_NODES, il, '<instance_light url="#'+lightid+'"/>')
- def export_empty_node(self,node,il):
- self.writel(S_NODES,4,'<extra>')
- self.writel(S_NODES,5,'<technique profile="GODOT">')
- self.writel(S_NODES,6,'<empty_draw_type>'+node.empty_draw_type+'</empty_draw_type>')
- self.writel(S_NODES,5,'</technique>')
- self.writel(S_NODES,4,'</extra>')
+ def export_empty_node(self, node, il):
+ self.writel(S_NODES, 4, '<extra>')
+ self.writel(S_NODES, 5, '<technique profile="GODOT">')
+ self.writel(S_NODES, 6, '<empty_draw_type>'+node.empty_draw_type+'</empty_draw_type>')
+ self.writel(S_NODES, 5, '</technique>')
+ self.writel(S_NODES, 4, '</extra>')
- def export_curve(self,curve):
+ def export_curve(self, curve):
splineid = self.new_id("spline")
- self.writel(S_GEOM,1,'<geometry id="'+splineid+'" name="'+curve.name+'">')
- self.writel(S_GEOM,2,'<spline closed="0">')
+ self.writel(S_GEOM, 1, '<geometry id="'+splineid+'" name="'+curve.name+'">')
+ self.writel(S_GEOM, 2, '<spline closed="0">')
points=[]
interps=[]
@@ -1115,122 +1115,122 @@ class DaeExporter:
tilts.append(s.tilt)
interps.append("LINEAR")
- self.writel(S_GEOM,3,'<source id="'+splineid+'-positions">')
+ self.writel(S_GEOM, 3, '<source id="'+splineid+'-positions">')
position_values=""
for x in points:
position_values+=" "+str(x)
- self.writel(S_GEOM,4,'<float_array id="'+splineid+'-positions-array" count="'+str(len(points))+'">'+position_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+splineid+'-positions-array" count="'+str(len(points)/3)+'" stride="3">')
- self.writel(S_GEOM,5,'<param name="X" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Y" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Z" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,3,'</source>')
-
- self.writel(S_GEOM,3,'<source id="'+splineid+'-intangents">')
+ self.writel(S_GEOM, 4, '<float_array id="'+splineid+'-positions-array" count="'+str(len(points))+'">'+position_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+splineid+'-positions-array" count="'+str(len(points)/3)+'" stride="3">')
+ self.writel(S_GEOM, 5, '<param name="X" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Y" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Z" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 3, '</source>')
+
+ self.writel(S_GEOM, 3, '<source id="'+splineid+'-intangents">')
intangent_values=""
for x in handles_in:
intangent_values+=" "+str(x)
- self.writel(S_GEOM,4,'<float_array id="'+splineid+'-intangents-array" count="'+str(len(points))+'">'+intangent_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+splineid+'-intangents-array" count="'+str(len(points)/3)+'" stride="3">')
- self.writel(S_GEOM,5,'<param name="X" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Y" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Z" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,3,'</source>')
-
- self.writel(S_GEOM,3,'<source id="'+splineid+'-outtangents">')
+ self.writel(S_GEOM, 4, '<float_array id="'+splineid+'-intangents-array" count="'+str(len(points))+'">'+intangent_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+splineid+'-intangents-array" count="'+str(len(points)/3)+'" stride="3">')
+ self.writel(S_GEOM, 5, '<param name="X" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Y" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Z" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 3, '</source>')
+
+ self.writel(S_GEOM, 3, '<source id="'+splineid+'-outtangents">')
outtangent_values=""
for x in handles_out:
outtangent_values+=" "+str(x)
- self.writel(S_GEOM,4,'<float_array id="'+splineid+'-outtangents-array" count="'+str(len(points))+'">'+outtangent_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+splineid+'-outtangents-array" count="'+str(len(points)/3)+'" stride="3">')
- self.writel(S_GEOM,5,'<param name="X" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Y" type="float"/>')
- self.writel(S_GEOM,5,'<param name="Z" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,3,'</source>')
-
- self.writel(S_GEOM,3,'<source id="'+splineid+'-interpolations">')
+ self.writel(S_GEOM, 4, '<float_array id="'+splineid+'-outtangents-array" count="'+str(len(points))+'">'+outtangent_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+splineid+'-outtangents-array" count="'+str(len(points)/3)+'" stride="3">')
+ self.writel(S_GEOM, 5, '<param name="X" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Y" type="float"/>')
+ self.writel(S_GEOM, 5, '<param name="Z" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 3, '</source>')
+
+ self.writel(S_GEOM, 3, '<source id="'+splineid+'-interpolations">')
interpolation_values=""
for x in interps:
interpolation_values+=" "+x
- self.writel(S_GEOM,4,'<Name_array id="'+splineid+'-interpolations-array" count="'+str(len(interps))+'">'+interpolation_values+'</Name_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+splineid+'-interpolations-array" count="'+str(len(interps))+'" stride="1">')
- self.writel(S_GEOM,5,'<param name="INTERPOLATION" type="name"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,3,'</source>')
-
- self.writel(S_GEOM,3,'<source id="'+splineid+'-tilts">')
+ self.writel(S_GEOM, 4, '<Name_array id="'+splineid+'-interpolations-array" count="'+str(len(interps))+'">'+interpolation_values+'</Name_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+splineid+'-interpolations-array" count="'+str(len(interps))+'" stride="1">')
+ self.writel(S_GEOM, 5, '<param name="INTERPOLATION" type="name"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 3, '</source>')
+
+ self.writel(S_GEOM, 3, '<source id="'+splineid+'-tilts">')
tilt_values=""
for x in tilts:
tilt_values+=" "+str(x)
- self.writel(S_GEOM,4,'<float_array id="'+splineid+'-tilts-array" count="'+str(len(tilts))+'">'+tilt_values+'</float_array>')
- self.writel(S_GEOM,4,'<technique_common>')
- self.writel(S_GEOM,4,'<accessor source="#'+splineid+'-tilts-array" count="'+str(len(tilts))+'" stride="1">')
- self.writel(S_GEOM,5,'<param name="TILT" type="float"/>')
- self.writel(S_GEOM,4,'</accessor>')
- self.writel(S_GEOM,3,'</source>')
-
- self.writel(S_GEOM,3,'<control_vertices>')
- self.writel(S_GEOM,4,'<input semantic="POSITION" source="#'+splineid+'-positions"/>')
- self.writel(S_GEOM,4,'<input semantic="IN_TANGENT" source="#'+splineid+'-intangents"/>')
- self.writel(S_GEOM,4,'<input semantic="OUT_TANGENT" source="#'+splineid+'-outtangents"/>')
- self.writel(S_GEOM,4,'<input semantic="INTERPOLATION" source="#'+splineid+'-interpolations"/>')
- self.writel(S_GEOM,4,'<input semantic="TILT" source="#'+splineid+'-tilts"/>')
- self.writel(S_GEOM,3,'</control_vertices>')
-
- self.writel(S_GEOM,2,'</spline>')
- self.writel(S_GEOM,1,'</geometry>')
+ self.writel(S_GEOM, 4, '<float_array id="'+splineid+'-tilts-array" count="'+str(len(tilts))+'">'+tilt_values+'</float_array>')
+ self.writel(S_GEOM, 4, '<technique_common>')
+ self.writel(S_GEOM, 4, '<accessor source="#'+splineid+'-tilts-array" count="'+str(len(tilts))+'" stride="1">')
+ self.writel(S_GEOM, 5, '<param name="TILT" type="float"/>')
+ self.writel(S_GEOM, 4, '</accessor>')
+ self.writel(S_GEOM, 3, '</source>')
+
+ self.writel(S_GEOM, 3, '<control_vertices>')
+ self.writel(S_GEOM, 4, '<input semantic="POSITION" source="#'+splineid+'-positions"/>')
+ self.writel(S_GEOM, 4, '<input semantic="IN_TANGENT" source="#'+splineid+'-intangents"/>')
+ self.writel(S_GEOM, 4, '<input semantic="OUT_TANGENT" source="#'+splineid+'-outtangents"/>')
+ self.writel(S_GEOM, 4, '<input semantic="INTERPOLATION" source="#'+splineid+'-interpolations"/>')
+ self.writel(S_GEOM, 4, '<input semantic="TILT" source="#'+splineid+'-tilts"/>')
+ self.writel(S_GEOM, 3, '</control_vertices>')
+
+ self.writel(S_GEOM, 2, '</spline>')
+ self.writel(S_GEOM, 1, '</geometry>')
return splineid
- def export_curve_node(self,node,il):
+ def export_curve_node(self, node, il):
if (node.data==None):
return
curveid = self.export_curve(node.data)
- self.writel(S_NODES,il,'<instance_geometry url="#'+curveid+'">')
- self.writel(S_NODES,il,'</instance_geometry>')
+ self.writel(S_NODES, il, '<instance_geometry url="#'+curveid+'">')
+ self.writel(S_NODES, il, '</instance_geometry>')
- def export_node(self,node,il):
+ def export_node(self, node, il):
if (not node in self.valid_nodes):
return
prev_node = bpy.context.scene.objects.active
bpy.context.scene.objects.active = node
- self.writel(S_NODES,il,'<node id="'+self.validate_id(node.name)+'" name="'+node.name+'" type="NODE">')
+ self.writel(S_NODES, il, '<node id="'+self.validate_id(node.name)+'" name="'+node.name+'" type="NODE">')
il+=1
- self.writel(S_NODES,il,'<matrix sid="transform">'+strmtx(node.matrix_local)+'</matrix>')
+ self.writel(S_NODES, il, '<matrix sid="transform">'+strmtx(node.matrix_local)+'</matrix>')
#print("NODE TYPE: "+node.type+" NAME: "+node.name)
if (node.type=="MESH"):
- self.export_mesh_node(node,il)
+ self.export_mesh_node(node, il)
elif (node.type=="CURVE"):
- self.export_curve_node(node,il)
+ self.export_curve_node(node, il)
elif (node.type=="ARMATURE"):
- self.export_armature_node(node,il)
+ self.export_armature_node(node, il)
elif (node.type=="CAMERA"):
- self.export_camera_node(node,il)
+ self.export_camera_node(node, il)
elif (node.type=="LAMP"):
- self.export_lamp_node(node,il)
+ self.export_lamp_node(node, il)
elif (node.type=="EMPTY"):
- self.export_empty_node(node,il)
+ self.export_empty_node(node, il)
for x in node.children:
- self.export_node(x,il)
+ self.export_node(x, il)
il-=1
- self.writel(S_NODES,il,'</node>')
+ self.writel(S_NODES, il, '</node>')
bpy.context.scene.objects.active = prev_node #make previous node active again
- def is_node_valid(self,node):
+ def is_node_valid(self, node):
if (not node.type in self.config["object_types"]):
return False
@@ -1250,8 +1250,8 @@ class DaeExporter:
return True
def export_scene(self):
- self.writel(S_NODES,0,'<library_visual_scenes>')
- self.writel(S_NODES,1,'<visual_scene id="'+self.scene_name+'" name="scene">')
+ self.writel(S_NODES, 0, '<library_visual_scenes>')
+ self.writel(S_NODES, 1, '<visual_scene id="'+self.scene_name+'" name="scene">')
# validate nodes
for obj in self.scene.objects:
@@ -1266,28 +1266,28 @@ class DaeExporter:
for obj in self.scene.objects:
if (obj in self.valid_nodes and obj.parent==None):
- self.export_node(obj,2)
+ self.export_node(obj, 2)
- self.writel(S_NODES,1,'</visual_scene>')
- self.writel(S_NODES,0,'</library_visual_scenes>')
+ self.writel(S_NODES, 1, '</visual_scene>')
+ self.writel(S_NODES, 0, '</library_visual_scenes>')
def export_asset(self):
- self.writel(S_ASSET,0,'<asset>')
+ self.writel(S_ASSET, 0, '<asset>')
# Why is this time stuff mandatory?, no one could care less...
- self.writel(S_ASSET,1,'<contributor>')
- self.writel(S_ASSET,2,'<author> Anonymous </author>') #Who made Collada, the FBI ?
- self.writel(S_ASSET,2,'<authoring_tool> Collada Exporter for Blender 2.6+, by Juan Linietsky (juan@codenix.com) </authoring_tool>') #Who made Collada, the FBI ?
- self.writel(S_ASSET,1,'</contributor>')
- self.writel(S_ASSET,1,'<created>'+time.strftime("%Y-%m-%dT%H:%M:%SZ ")+'</created>')
- self.writel(S_ASSET,1,'<modified>'+time.strftime("%Y-%m-%dT%H:%M:%SZ")+'</modified>')
- self.writel(S_ASSET,1,'<unit meter="1.0" name="meter"/>')
- self.writel(S_ASSET,1,'<up_axis>Z_UP</up_axis>')
- self.writel(S_ASSET,0,'</asset>')
-
- def export_animation_transform_channel(self,target,keys,matrices=True):
+ self.writel(S_ASSET, 1, '<contributor>')
+ self.writel(S_ASSET, 2, '<author> Anonymous </author>') #Who made Collada, the FBI ?
+ self.writel(S_ASSET, 2, '<authoring_tool> Collada Exporter for Blender 2.6+, by Juan Linietsky (juan@codenix.com) </authoring_tool>') #Who made Collada, the FBI ?
+ self.writel(S_ASSET, 1, '</contributor>')
+ self.writel(S_ASSET, 1, '<created>'+time.strftime("%Y-%m-%dT%H:%M:%SZ ")+'</created>')
+ self.writel(S_ASSET, 1, '<modified>'+time.strftime("%Y-%m-%dT%H:%M:%SZ")+'</modified>')
+ self.writel(S_ASSET, 1, '<unit meter="1.0" name="meter"/>')
+ self.writel(S_ASSET, 1, '<up_axis>Z_UP</up_axis>')
+ self.writel(S_ASSET, 0, '</asset>')
+
+ def export_animation_transform_channel(self, target, keys, matrices=True):
frame_total=len(keys)
anim_id=self.new_id("anim")
- self.writel(S_ANIM,1,'<animation id="'+anim_id+'">')
+ self.writel(S_ANIM, 1, '<animation id="'+anim_id+'">')
source_frames = ""
source_transforms = ""
source_interps = ""
@@ -1302,60 +1302,60 @@ class DaeExporter:
source_interps +=" LINEAR"
# Time Source
- self.writel(S_ANIM,2,'<source id="'+anim_id+'-input">')
- self.writel(S_ANIM,3,'<float_array id="'+anim_id+'-input-array" count="'+str(frame_total)+'">'+source_frames+'</float_array>')
- self.writel(S_ANIM,3,'<technique_common>')
- self.writel(S_ANIM,4,'<accessor source="#'+anim_id+'-input-array" count="'+str(frame_total)+'" stride="1">')
- self.writel(S_ANIM,5,'<param name="TIME" type="float"/>')
- self.writel(S_ANIM,4,'</accessor>')
- self.writel(S_ANIM,3,'</technique_common>')
- self.writel(S_ANIM,2,'</source>')
+ self.writel(S_ANIM, 2, '<source id="'+anim_id+'-input">')
+ self.writel(S_ANIM, 3, '<float_array id="'+anim_id+'-input-array" count="'+str(frame_total)+'">'+source_frames+'</float_array>')
+ self.writel(S_ANIM, 3, '<technique_common>')
+ self.writel(S_ANIM, 4, '<accessor source="#'+anim_id+'-input-array" count="'+str(frame_total)+'" stride="1">')
+ self.writel(S_ANIM, 5, '<param name="TIME" type="float"/>')
+ self.writel(S_ANIM, 4, '</accessor>')
+ self.writel(S_ANIM, 3, '</technique_common>')
+ self.writel(S_ANIM, 2, '</source>')
if (matrices):
# Transform Source
- self.writel(S_ANIM,2,'<source id="'+anim_id+'-transform-output">')
- self.writel(S_ANIM,3,'<float_array id="'+anim_id+'-transform-output-array" count="'+str(frame_total*16)+'">'+source_transforms+'</float_array>')
- self.writel(S_ANIM,3,'<technique_common>')
- self.writel(S_ANIM,4,'<accessor source="#'+anim_id+'-transform-output-array" count="'+str(frame_total)+'" stride="16">')
- self.writel(S_ANIM,5,'<param name="TRANSFORM" type="float4x4"/>')
- self.writel(S_ANIM,4,'</accessor>')
- self.writel(S_ANIM,3,'</technique_common>')
- self.writel(S_ANIM,2,'</source>')
+ self.writel(S_ANIM, 2, '<source id="'+anim_id+'-transform-output">')
+ self.writel(S_ANIM, 3, '<float_array id="'+anim_id+'-transform-output-array" count="'+str(frame_total*16)+'">'+source_transforms+'</float_array>')
+ self.writel(S_ANIM, 3, '<technique_common>')
+ self.writel(S_ANIM, 4, '<accessor source="#'+anim_id+'-transform-output-array" count="'+str(frame_total)+'" stride="16">')
+ self.writel(S_ANIM, 5, '<param name="TRANSFORM" type="float4x4"/>')
+ self.writel(S_ANIM, 4, '</accessor>')
+ self.writel(S_ANIM, 3, '</technique_common>')
+ self.writel(S_ANIM, 2, '</source>')
else:
# Value Source
- self.writel(S_ANIM,2,'<source id="'+anim_id+'-transform-output">')
- self.writel(S_ANIM,3,'<float_array id="'+anim_id+'-transform-output-array" count="'+str(frame_total)+'">'+source_transforms+'</float_array>')
- self.writel(S_ANIM,3,'<technique_common>')
- self.writel(S_ANIM,4,'<accessor source="#'+anim_id+'-transform-output-array" count="'+str(frame_total)+'" stride="1">')
- self.writel(S_ANIM,5,'<param name="X" type="float"/>')
- self.writel(S_ANIM,4,'</accessor>')
- self.writel(S_ANIM,3,'</technique_common>')
- self.writel(S_ANIM,2,'</source>')
+ self.writel(S_ANIM, 2, '<source id="'+anim_id+'-transform-output">')
+ self.writel(S_ANIM, 3, '<float_array id="'+anim_id+'-transform-output-array" count="'+str(frame_total)+'">'+source_transforms+'</float_array>')
+ self.writel(S_ANIM, 3, '<technique_common>')
+ self.writel(S_ANIM, 4, '<accessor source="#'+anim_id+'-transform-output-array" count="'+str(frame_total)+'" stride="1">')
+ self.writel(S_ANIM, 5, '<param name="X" type="float"/>')
+ self.writel(S_ANIM, 4, '</accessor>')
+ self.writel(S_ANIM, 3, '</technique_common>')
+ self.writel(S_ANIM, 2, '</source>')
# Interpolation Source
- self.writel(S_ANIM,2,'<source id="'+anim_id+'-interpolation-output">')
- self.writel(S_ANIM,3,'<Name_array id="'+anim_id+'-interpolation-output-array" count="'+str(frame_total)+'">'+source_interps+'</Name_array>')
- self.writel(S_ANIM,3,'<technique_common>')
- self.writel(S_ANIM,4,'<accessor source="#'+anim_id+'-interpolation-output-array" count="'+str(frame_total)+'" stride="1">')
- self.writel(S_ANIM,5,'<param name="INTERPOLATION" type="Name"/>')
- self.writel(S_ANIM,4,'</accessor>')
- self.writel(S_ANIM,3,'</technique_common>')
- self.writel(S_ANIM,2,'</source>')
-
- self.writel(S_ANIM,2,'<sampler id="'+anim_id+'-sampler">')
- self.writel(S_ANIM,3,'<input semantic="INPUT" source="#'+anim_id+'-input"/>')
- self.writel(S_ANIM,3,'<input semantic="OUTPUT" source="#'+anim_id+'-transform-output"/>')
- self.writel(S_ANIM,3,'<input semantic="INTERPOLATION" source="#'+anim_id+'-interpolation-output"/>')
- self.writel(S_ANIM,2,'</sampler>')
+ self.writel(S_ANIM, 2, '<source id="'+anim_id+'-interpolation-output">')
+ self.writel(S_ANIM, 3, '<Name_array id="'+anim_id+'-interpolation-output-array" count="'+str(frame_total)+'">'+source_interps+'</Name_array>')
+ self.writel(S_ANIM, 3, '<technique_common>')
+ self.writel(S_ANIM, 4, '<accessor source="#'+anim_id+'-interpolation-output-array" count="'+str(frame_total)+'" stride="1">')
+ self.writel(S_ANIM, 5, '<param name="INTERPOLATION" type="Name"/>')
+ self.writel(S_ANIM, 4, '</accessor>')
+ self.writel(S_ANIM, 3, '</technique_common>')
+ self.writel(S_ANIM, 2, '</source>')
+
+ self.writel(S_ANIM, 2, '<sampler id="'+anim_id+'-sampler">')
+ self.writel(S_ANIM, 3, '<input semantic="INPUT" source="#'+anim_id+'-input"/>')
+ self.writel(S_ANIM, 3, '<input semantic="OUTPUT" source="#'+anim_id+'-transform-output"/>')
+ self.writel(S_ANIM, 3, '<input semantic="INTERPOLATION" source="#'+anim_id+'-interpolation-output"/>')
+ self.writel(S_ANIM, 2, '</sampler>')
if (matrices):
- self.writel(S_ANIM,2,'<channel source="#'+anim_id+'-sampler" target="'+target+'/transform"/>')
+ self.writel(S_ANIM, 2, '<channel source="#'+anim_id+'-sampler" target="'+target+'/transform"/>')
else:
- self.writel(S_ANIM,2,'<channel source="#'+anim_id+'-sampler" target="'+target+'"/>')
- self.writel(S_ANIM,1,'</animation>')
+ self.writel(S_ANIM, 2, '<channel source="#'+anim_id+'-sampler" target="'+target+'"/>')
+ self.writel(S_ANIM, 1, '</animation>')
return [anim_id]
- def export_animation(self,start,end,allowed=None):
+ def export_animation(self, start, end, allowed=None):
# Blender -> Collada frames needs a little work
# Collada starts from 0, blender usually from 1
# The last frame must be included also
@@ -1375,7 +1375,7 @@ class DaeExporter:
# This improves performance enormously
#print("anim from: "+str(start)+" to "+str(end)+" allowed: "+str(allowed))
- for t in range(start,end+1):
+ for t in range(start, end+1):
self.scene.frame_set(t)
key = t * frame_len - frame_sub
# print("Export Anim Frame "+str(t)+"/"+str(self.scene.frame_end+1))
@@ -1401,7 +1401,7 @@ class DaeExporter:
if (not (name in blend_cache)):
blend_cache[name]=[]
- blend_cache[name].append( (key,node.data.shape_keys.key_blocks[i].value) )
+ blend_cache[name].append( (key, node.data.shape_keys.key_blocks[i].value) )
if (node.type=="MESH" and node.parent and node.parent.type=="ARMATURE"):
@@ -1417,7 +1417,7 @@ class DaeExporter:
if (node.parent):
mtx = node.parent.matrix_world.inverted() * mtx
- xform_cache[name].append( (key,mtx) )
+ xform_cache[name].append( (key, mtx) )
if (node.type=="ARMATURE"):
#All bones exported for now
@@ -1445,15 +1445,15 @@ class DaeExporter:
if (not parent_invisible):
mtx = parent_posebone.matrix.inverted() * mtx
- xform_cache[bone_name].append( (key,mtx) )
+ xform_cache[bone_name].append( (key, mtx) )
self.scene.frame_set(frame_orig)
#export animation xml
for nid in xform_cache:
- tcn+=self.export_animation_transform_channel(nid,xform_cache[nid],True)
+ tcn+=self.export_animation_transform_channel(nid, xform_cache[nid], True)
for nid in blend_cache:
- tcn+=self.export_animation_transform_channel(nid,blend_cache[nid],False)
+ tcn+=self.export_animation_transform_channel(nid, blend_cache[nid], False)
return tcn
@@ -1464,9 +1464,9 @@ class DaeExporter:
for bone in s.pose.bones:
tmp_bone_mat.append(Matrix(bone.matrix_basis))
bone.matrix_basis = Matrix()
- tmp_mat.append([Matrix(s.matrix_local),tmp_bone_mat])
+ tmp_mat.append([Matrix(s.matrix_local), tmp_bone_mat])
- self.writel(S_ANIM,0,'<library_animations>')
+ self.writel(S_ANIM, 0, '<library_animations>')
if (self.config["use_anim_action_all"] and len(self.skeletons)):
cached_actions = {}
@@ -1475,7 +1475,7 @@ class DaeExporter:
if s.animation_data and s.animation_data.action:
cached_actions[s] = s.animation_data.action.name
- self.writel(S_ANIM_CLIPS,0,'<library_animation_clips>')
+ self.writel(S_ANIM_CLIPS, 0, '<library_animation_clips>')
for x in bpy.data.actions[:]:
if x.users==0 or x in self.action_constraints:
@@ -1496,7 +1496,7 @@ class DaeExporter:
bones.append(dp)
allowed_skeletons=[]
- for i,y in enumerate(self.skeletons):
+ for i, y in enumerate(self.skeletons):
if (y.animation_data):
for z in y.pose.bones:
if (z.bone.name in bones):
@@ -1505,87 +1505,87 @@ class DaeExporter:
y.animation_data.action=x;
y.matrix_local = tmp_mat[i][0]
- for j,bone in enumerate(s.pose.bones):
+ for j, bone in enumerate(s.pose.bones):
bone.matrix_basis = Matrix()
# print("allowed skeletons "+str(allowed_skeletons))
# print(str(x))
- tcn = self.export_animation(int(x.frame_range[0]),int(x.frame_range[1]+0.5),allowed_skeletons)
+ tcn = self.export_animation(int(x.frame_range[0]), int(x.frame_range[1]+0.5), allowed_skeletons)
framelen=(1.0/self.scene.render.fps)
start = x.frame_range[0]*framelen
end = x.frame_range[1]*framelen
#print("Export anim: "+x.name)
- self.writel(S_ANIM_CLIPS,1,'<animation_clip name="'+x.name+'" start="'+str(start)+'" end="'+str(end)+'">')
+ self.writel(S_ANIM_CLIPS, 1, '<animation_clip name="'+x.name+'" start="'+str(start)+'" end="'+str(end)+'">')
for z in tcn:
- self.writel(S_ANIM_CLIPS,2,'<instance_animation url="#'+z+'"/>')
- self.writel(S_ANIM_CLIPS,1,'</animation_clip>')
+ self.writel(S_ANIM_CLIPS, 2, '<instance_animation url="#'+z+'"/>')
+ self.writel(S_ANIM_CLIPS, 1, '</animation_clip>')
if (len(tcn)==0):
- self.operator.report({'WARNING'},'Animation clip "'+x.name+'" contains no tracks.')
+ self.operator.report({'WARNING'}, 'Animation clip "'+x.name+'" contains no tracks.')
- self.writel(S_ANIM_CLIPS,0,'</library_animation_clips>')
+ self.writel(S_ANIM_CLIPS, 0, '</library_animation_clips>')
- for i,s in enumerate(self.skeletons):
+ for i, s in enumerate(self.skeletons):
if (s.animation_data==None):
continue
if s in cached_actions:
s.animation_data.action = bpy.data.actions[cached_actions[s]]
else:
s.animation_data.action = None
- for j,bone in enumerate(s.pose.bones):
+ for j, bone in enumerate(s.pose.bones):
bone.matrix_basis = tmp_mat[i][1][j]
else:
- self.export_animation(self.scene.frame_start,self.scene.frame_end)
+ self.export_animation(self.scene.frame_start, self.scene.frame_end)
- self.writel(S_ANIM,0,'</library_animations>')
+ self.writel(S_ANIM, 0, '</library_animations>')
def export(self):
- self.writel(S_GEOM,0,'<library_geometries>')
- self.writel(S_CONT,0,'<library_controllers>')
- self.writel(S_CAMS,0,'<library_cameras>')
- self.writel(S_LAMPS,0,'<library_lights>')
- self.writel(S_IMGS,0,'<library_images>')
- self.writel(S_MATS,0,'<library_materials>')
- self.writel(S_FX,0,'<library_effects>')
+ self.writel(S_GEOM, 0, '<library_geometries>')
+ self.writel(S_CONT, 0, '<library_controllers>')
+ self.writel(S_CAMS, 0, '<library_cameras>')
+ self.writel(S_LAMPS, 0, '<library_lights>')
+ self.writel(S_IMGS, 0, '<library_images>')
+ self.writel(S_MATS, 0, '<library_materials>')
+ self.writel(S_FX, 0, '<library_effects>')
self.skeletons=[]
self.action_constraints=[]
self.export_asset()
self.export_scene()
- self.writel(S_GEOM,0,'</library_geometries>')
+ self.writel(S_GEOM, 0, '</library_geometries>')
#morphs always go before skin controllers
if S_MORPH in self.sections:
for l in self.sections[S_MORPH]:
- self.writel(S_CONT,0,l)
+ self.writel(S_CONT, 0, l)
del self.sections[S_MORPH]
#morphs always go before skin controllers
if S_SKIN in self.sections:
for l in self.sections[S_SKIN]:
- self.writel(S_CONT,0,l)
+ self.writel(S_CONT, 0, l)
del self.sections[S_SKIN]
- self.writel(S_CONT,0,'</library_controllers>')
- self.writel(S_CAMS,0,'</library_cameras>')
- self.writel(S_LAMPS,0,'</library_lights>')
- self.writel(S_IMGS,0,'</library_images>')
- self.writel(S_MATS,0,'</library_materials>')
- self.writel(S_FX,0,'</library_effects>')
+ self.writel(S_CONT, 0, '</library_controllers>')
+ self.writel(S_CAMS, 0, '</library_cameras>')
+ self.writel(S_LAMPS, 0, '</library_lights>')
+ self.writel(S_IMGS, 0, '</library_images>')
+ self.writel(S_MATS, 0, '</library_materials>')
+ self.writel(S_FX, 0, '</library_effects>')
if (self.config["use_anim"]):
self.export_animations()
try:
- f = open(self.path,"wb")
+ f = open(self.path, "wb")
except:
return False
- f.write(bytes('<?xml version="1.0" encoding="utf-8"?>\n',"UTF-8"))
- f.write(bytes('<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">\n',"UTF-8"))
+ f.write(bytes('<?xml version="1.0" encoding="utf-8"?>\n', "UTF-8"))
+ f.write(bytes('<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">\n', "UTF-8"))
s=[]
for x in self.sections.keys():
@@ -1593,15 +1593,15 @@ class DaeExporter:
s.sort()
for x in s:
for l in self.sections[x]:
- f.write(bytes(l+"\n","UTF-8"))
+ f.write(bytes(l+"\n", "UTF-8"))
- f.write(bytes('<scene>\n',"UTF-8"))
- f.write(bytes('\t<instance_visual_scene url="#'+self.scene_name+'" />\n',"UTF-8"))
- f.write(bytes('</scene>\n',"UTF-8"))
- f.write(bytes('</COLLADA>\n',"UTF-8"))
+ f.write(bytes('<scene>\n', "UTF-8"))
+ f.write(bytes('\t<instance_visual_scene url="#'+self.scene_name+'" />\n', "UTF-8"))
+ f.write(bytes('</scene>\n', "UTF-8"))
+ f.write(bytes('</COLLADA>\n', "UTF-8"))
return True
- def __init__(self,path,kwargs,operator):
+ def __init__(self, path, kwargs, operator):
self.operator=operator
self.scene=bpy.context.scene
self.last_id=0
@@ -1626,7 +1626,7 @@ def save(operator, context,
**kwargs
):
- exp = DaeExporter(filepath,kwargs,operator)
+ exp = DaeExporter(filepath, kwargs, operator)
exp.export()
return {'FINISHED'} # so the script wont run after we have batch exported.