Merge pull request #17 from set-killer/issue/4

Issue/4
This commit is contained in:
Rémi Verschelde
2016-08-15 12:36:07 +02:00
committed by GitHub
2 changed files with 73 additions and 78 deletions

View File

@@ -165,7 +165,7 @@ class add_objects_to_group(bpy.types.Operator):
else:
objects_str += ", "+object.name
self.report({'INFO'}, objects_str + " added to group.")
self.report({'INFO'}, "{} added to group.".format(objects_str))
if self.undo:
bpy.ops.ed.undo_push(message="Objects added to group")
else:
@@ -202,7 +202,7 @@ class del_objects_from_group(bpy.types.Operator):
objects_str += ", "+object.name
j += 1
self.report({'INFO'}, objects_str + " deleted from group.")
self.report({'INFO'}, "{} deleted from group.".format(objects_str))
bpy.ops.ed.undo_push(message="Objects deleted from group")
else:
self.report({'WARNING'}, "There is no group to delete from.")
@@ -338,7 +338,7 @@ class export_group(bpy.types.Operator):
if group[self.idx].export_name.endswith(".dae"):
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, "{}.dae".format(group[self.idx].export_name))
hide_select = []
for object in context.scene.objects:
@@ -396,8 +396,8 @@ class export_group(bpy.types.Operator):
use_metadata=group[self.idx].use_metadata)
self.report({'INFO'},
'"' + group[self.idx].name + '" Group exported.')
msg = "Export Group "+group[self.idx].name
'"{}" Group exported.'.format(group[self.idx].name))
msg = "Export Group {}".format(group[self.idx].name)
bpy.ops.ed.undo_push(message="")
bpy.ops.ed.undo()

View File

@@ -61,19 +61,18 @@ def snap_tup(tup):
def strmtx(mtx):
s = " "
s = ""
for x in range(4):
for y in range(4):
s += str(mtx[x][y])
s += " "
s += " "
s += "{} ".format(mtx[x][y])
s = " {} ".format(s)
return s
def numarr(a, mult=1.0):
s = " "
for x in a:
s += " " + str(x * mult)
s += " {}".format(x * mult)
s += " "
return s
@@ -81,7 +80,7 @@ def numarr(a, mult=1.0):
def numarr_alpha(a, mult=1.0):
s = " "
for x in a:
s += " " + str(x * mult)
s += " {}".format(x * mult)
if len(a) == 3:
s += " 1.0"
s += " "
@@ -91,7 +90,7 @@ def numarr_alpha(a, mult=1.0):
def strarr(arr):
s = " "
for x in arr:
s += " " + str(x)
s += " {}".format(x)
s += " "
return s
@@ -105,7 +104,7 @@ class DaeExporter:
def new_id(self, t):
self.last_id += 1
return "id-" + t + "-" + str(self.last_id)
return "id-{}-{}".format(t, self.last_id)
class Vertex:
@@ -157,10 +156,7 @@ class DaeExporter:
def writel(self, section, indent, text):
if (not (section in self.sections)):
self.sections[section] = []
line = ""
for x in range(indent):
line += "\t"
line += text
line = "{}{}".format(indent * "\t", text)
self.sections[section].append(line)
def export_image(self, image):
@@ -192,15 +188,19 @@ class DaeExporter:
# folder
img_tmp_path = image.filepath
if img_tmp_path.lower().endswith(bpy.path.extensions_image):
image.filepath = os.path.join(basedir, os.path.basename(img_tmp_path))
image.filepath =
os.path.join(basedir, os.path.basename(img_tmp_path))
else:
image.filepath = os.path.join(basedir, "{}.png".format(image.name))
image.filepath =
os.path.join(basedir, "{}.png".format(image.name))
dstfile = os.path.join(basedir, os.path.basename(image.filepath))
dstfile =
os.path.join(basedir, os.path.basename(image.filepath))
if not os.path.isfile(dstfile):
image.save()
imgpath = os.path.join("images", os.path.basename(image.filepath))
imgpath =
os.path.join("images", os.path.basename(image.filepath))
image.filepath = img_tmp_path
else:
@@ -216,7 +216,7 @@ class DaeExporter:
imgid = self.new_id("image")
print("FOR: " + imgpath)
print("FOR: {}".format(imgpath))
# if (not os.path.isfile(imgpath)):
# print("NOT FILE?")
@@ -573,8 +573,9 @@ class DaeExporter:
mesh.calc_tangents()
except:
self.operator.report(
{'WARNING'}, 'CalcTangets failed for mesh "' + mesh.name +
'", no tangets will be exported.')
{"WARNING"},
"CalcTangets failed for mesh \"{}\", no tangets will be "\
"exported.".format(mesh.name))
# uv_layer_count=0
mesh.calc_normals_split()
has_tangents = False
@@ -669,9 +670,10 @@ class DaeExporter:
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.')
{"WARNING"},
"Mesh for object \"{}\" has unassigned " \
"weights. This may look wrong in exported "\
"model.".format(node.name))
self.wrongvtx_report = True
# blender can have bones assigned that weight zero
@@ -706,8 +708,7 @@ class DaeExporter:
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)
float_values += " {} {} {}".format(v.vertex.x, v.vertex.y, v.vertex.z)
self.writel(S_GEOM, 4, '<float_array id="' + meshid +
'-positions-array" count="' +
str(len(vertices) * 3) + '">' + float_values +
@@ -728,8 +729,7 @@ class DaeExporter:
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)
float_values += " {} {} {}".format(v.normal.x, v.normal.y, v.normal.z)
self.writel(S_GEOM, 4, '<float_array id="' + meshid +
'-normals-array" count="' +
str(len(vertices) * 3) + '">' + float_values +
@@ -749,9 +749,7 @@ class DaeExporter:
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)
float_values += " {} {} {}".format(v.tangent.x, v.tangent.y, v.tangent.z)
self.writel(S_GEOM, 4, '<float_array id="' + meshid +
'-tangents-array" count="' +
str(len(vertices) * 3) + '">' + float_values +
@@ -770,9 +768,7 @@ class DaeExporter:
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)
float_values += " {} {} {}".format(v.bitangent.x, v.bitangent.y, v.bitangent.z)
self.writel(S_GEOM, 4, '<float_array id="' + meshid +
'-bitangents-array" count="' +
str(len(vertices) * 3) + '">' + float_values +
@@ -797,8 +793,7 @@ class DaeExporter:
float_values = ""
for v in vertices:
try:
float_values += " " + \
str(v.uv[uvi].x) + " " + str(v.uv[uvi].y)
float_values += " {} {}".format(v.uv[uvi].x, v.uv[uvi].y)
except:
# I don't understand this weird multi-uv-layer API, but
# with this it seems to works
@@ -825,9 +820,7 @@ class DaeExporter:
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)
float_values += " {} {} {}".format(v.color.x, v.color.y, v.color.z)
self.writel(S_GEOM, 4, '<float_array id="' + meshid +
'-colors-array" count="' +
str(len(vertices) * 3) + '">' + float_values +
@@ -896,14 +889,14 @@ class DaeExporter:
int_values = "<p>"
for p in indices:
for i in p:
int_values += " " + str(i)
int_values += " {}".format(i)
int_values += " </p>"
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 += " {}".format(i)
int_values += " </p>"
self.writel(S_GEOM, 4, int_values)
@@ -937,7 +930,7 @@ class DaeExporter:
self.writel(S_SKIN, 3, '<source id="' + contid + '-joints">')
name_values = ""
for v in si["bone_names"]:
name_values += " " + v
name_values += " {}".format(v)
self.writel(S_SKIN, 4, '<Name_array id="' + contid +
'-joints-array" count="' +
@@ -955,7 +948,7 @@ class DaeExporter:
self.writel(S_SKIN, 3, '<source id="' + contid + '-bind_poses">')
pose_values = ""
for v in si["bone_bind_poses"]:
pose_values += " " + strmtx(v)
pose_values += " {}".format(strmtx(v))
self.writel(S_SKIN, 4, '<float_array id="' + contid +
'-bind_poses-array" count="' +
@@ -976,7 +969,7 @@ class DaeExporter:
for v in vertices:
skin_weights_total += len(v.weights)
for w in v.weights:
skin_weights += " " + str(w)
skin_weights += " {}".format(w)
self.writel(S_SKIN, 4, '<float_array id="' + contid +
'-skin_weights-array" count="' +
@@ -1009,10 +1002,9 @@ class DaeExporter:
vs = ""
vcount = 0
for v in vertices:
vcounts += " " + str(len(v.weights))
vcounts += " {}".format(len(v.weights))
for b in v.bones:
vs += " " + str(b)
vs += " " + str(vcount)
vs += " {} {}".format(b, vcount)
vcount += 1
self.writel(S_SKIN, 4, '<vcount>' + vcounts + '</vcount>')
self.writel(S_SKIN, 4, '<v>' + vs + '</v>')
@@ -1038,18 +1030,17 @@ 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 \"{}\" refers "\
"to more than one armature! "\
"This is unsupported.".format(node.name))
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 \"{}\" is child "\
"of an armature, but has no armature modifier.".format(node.name))
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 \"{}\" has armature modifier, but is not a child of an "\
"armature. This is unsupported.".format(node.name))
if (node.data.shape_keys is not None):
sk = node.data.shape_keys
@@ -1105,12 +1096,12 @@ class DaeExporter:
boneid = self.new_id("bone")
boneidx = si["bone_count"]
si["bone_count"] += 1
bonesid = si["id"] + "-" + str(boneidx)
bonesid = "{}-{}".format(si["id"], 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 \"{}\" used in more than one skeleton. "\
"Actions might export wrong.".format(bone.name))
else:
self.used_bones.append(bone.name)
@@ -1145,10 +1136,14 @@ class DaeExporter:
self.skeleton_info[node] = {
"bone_count": 0,
"id": self.new_id("skelbones"),
"name": node.name, "bone_index": {},
"bone_ids": {}, "bone_names": [], "bone_bind_poses": [],
"name": node.name,
"bone_index": {},
"bone_ids": {},
"bone_names": [],
"bone_bind_poses": [],
"skeleton_nodes": [],
"armature_xform": node.matrix_world}
"armature_xform": node.matrix_world
}
for b in armature.bones:
if (b.parent is not None):
@@ -1158,7 +1153,7 @@ class DaeExporter:
if (node.pose):
for b in node.pose.bones:
for x in b.constraints:
if (x.type == 'ACTION'):
if (x.type == "ACTION"):
self.action_constraints.append(x.action)
def export_camera_node(self, node, il):
@@ -1310,7 +1305,7 @@ class DaeExporter:
self.writel(S_GEOM, 3, '<source id="' + splineid + '-positions">')
position_values = ""
for x in points:
position_values += " " + str(x)
position_values += " {}".format(x)
self.writel(S_GEOM, 4, '<float_array id="' + splineid +
'-positions-array" count="' +
str(len(points)) + '">' + position_values +
@@ -1328,7 +1323,7 @@ class DaeExporter:
self.writel(S_GEOM, 3, '<source id="' + splineid + '-intangents">')
intangent_values = ""
for x in handles_in:
intangent_values += " " + str(x)
intangent_values += " {}".format(x)
self.writel(S_GEOM, 4, '<float_array id="' + splineid +
'-intangents-array" count="' +
str(len(points)) + '">' + intangent_values +
@@ -1346,7 +1341,7 @@ class DaeExporter:
self.writel(S_GEOM, 3, '<source id="' + splineid + '-outtangents">')
outtangent_values = ""
for x in handles_out:
outtangent_values += " " + str(x)
outtangent_values += " {}".format(x)
self.writel(S_GEOM, 4, '<float_array id="' + splineid +
'-outtangents-array" count="' +
str(len(points)) + '">' + outtangent_values +
@@ -1364,7 +1359,7 @@ class DaeExporter:
self.writel(S_GEOM, 3, '<source id="' + splineid + '-interpolations">')
interpolation_values = ""
for x in interps:
interpolation_values += " " + x
interpolation_values += " {}".format(x)
self.writel(S_GEOM, 4, '<Name_array id="' + splineid +
'-interpolations-array" count="' +
str(len(interps)) + '">' + interpolation_values +
@@ -1380,7 +1375,7 @@ class DaeExporter:
self.writel(S_GEOM, 3, '<source id="' + splineid + '-tilts">')
tilt_values = ""
for x in tilts:
tilt_values += " " + str(x)
tilt_values += " {}".format(x)
self.writel(S_GEOM, 4, '<float_array id="' + splineid +
'-tilts-array" count="' +
str(len(tilts)) + '">' + tilt_values + '</float_array>')
@@ -1525,11 +1520,11 @@ class DaeExporter:
source_interps = ""
for k in keys:
source_frames += " " + str(k[0])
source_frames += " {}".format(k[0])
if (matrices):
source_transforms += " " + strmtx(k[1])
source_transforms += " {}".format(strmtx(k[1]))
else:
source_transforms += " " + str(k[1])
source_transforms += " {}".format(k[1])
source_interps += " LINEAR"
@@ -1663,7 +1658,7 @@ class DaeExporter:
if (i == 0):
continue
name = target + "-morph-weights(" + str(i - 1) + ")"
name = "{}-morph-weights({})".format(target, i - 1)
if (not (name in blend_cache)):
blend_cache[name] = []
@@ -1803,8 +1798,8 @@ class DaeExporter:
self.writel(S_ANIM_CLIPS, 1, '</animation_clip>')
if (len(tcn) == 0):
self.operator.report(
{'WARNING'}, 'Animation clip "' + x.name +
'" contains no tracks.')
{"WARNING"}, "Animation clip \"{}\" contains no "\
"tracks.".format(x.name))
self.writel(S_ANIM_CLIPS, 0, '</library_animation_clips>')