Skip to content

Commit f45249e

Browse files
author
nkx
committed
handles cases when no armature in the scene
1 parent e02b5a0 commit f45249e

5 files changed

Lines changed: 31 additions & 18 deletions

File tree

io_mesh_w3d/common/utils/animation_export.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ def retrieve_channels(obj, hierarchy, timecoded, name=None):
118118

119119

120120
def retrieve_animation(context, animation_name, hierarchy, rig, timecoded):
121+
if hierarchy is None:
122+
return None
123+
121124
channels = []
122125

123126
for mesh in get_objects('MESH'):

io_mesh_w3d/common/utils/hierarchy_export.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ def retrieve_hierarchy(context, container_name):
2424
if len(rigs) == 0:
2525
hierarchy.header.name = container_name
2626
hierarchy.header.center_pos = Vector()
27-
context.warning('scene does not contain an armature object!')
27+
context.warning('Scene does not contain an armature object! Can only export meshes')
28+
return None, None
2829

2930
if len(rigs) > 0:
3031
rig = rigs[0]

io_mesh_w3d/common/utils/mesh_export.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def retrieve_meshes(context, hierarchy, rig, container_name, force_vertex_materi
8787
matrix = Matrix.Identity(4)
8888
matrix_2 = Matrix.Identity(4)
8989

90-
if vertex.groups:
90+
if vertex.groups and hierarchy:
9191
vert_inf = VertexInfluence()
9292
vert_inf.bone_idx = find_bone_index(hierarchy, mesh_object, vertex.groups[0].group)
9393
vert_inf.bone_inf = vertex.groups[0].weight
@@ -130,7 +130,7 @@ def retrieve_meshes(context, hierarchy, rig, container_name, force_vertex_materi
130130
else:
131131
matrix_2 = matrix
132132

133-
elif is_skinned:
133+
elif is_skinned and hierarchy:
134134
unskinned_vertices_error = True
135135
context.error(f'skinned mesh \'{mesh_object.name}\' vertex {i} is not rigged to any bone!')
136136

io_mesh_w3d/export_utils.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@ def retrieve_data(context, export_settings):
4040
context.error(f'Filename is longer than {STRING_LENGTH} characters, aborting export!')
4141
return None
4242

43-
bpy.ops.object.mode_set(mode='OBJECT')
43+
try:
44+
bpy.ops.object.mode_set(mode='OBJECT')
45+
except:
46+
pass
4447
hierarchy, rig, hlod = None, None, None
4548

4649
hierarchy, rig = retrieve_hierarchy(context, container_name)
47-
hlod = create_hlod(hierarchy, container_name)
50+
if hierarchy:
51+
hlod = create_hlod(hierarchy, container_name)
4852

4953
data_context = DataContext(
5054
container_name=container_name,
@@ -72,12 +76,14 @@ def retrieve_data(context, export_settings):
7276
context.error('aborting export!')
7377
return None
7478

75-
if 'H' in export_mode and not hierarchy.validate(context):
76-
context.error('aborting export!')
77-
return None
79+
if 'H' in export_mode :
80+
if hierarchy is not None:
81+
if not hierarchy.validate(context):
82+
context.error('aborting export!')
83+
return None
7884

7985
if export_mode in ['HM', 'HAM']:
80-
if not data_context.hlod.validate(context):
86+
if data_context.hlod and not data_context.hlod.validate(context):
8187
context.error('aborting export!')
8288
return None
8389

@@ -89,7 +95,7 @@ def retrieve_data(context, export_settings):
8995
if 'A' in export_mode:
9096
timecoded = export_settings['compression'] == 'TC'
9197
data_context.animation = retrieve_animation(context, container_name, hierarchy, rig, timecoded)
92-
if not data_context.animation.validate(context):
98+
if data_context.animation and not data_context.animation.validate(context):
9399
context.error('aborting export!')
94100
return None
95101
return data_context

io_mesh_w3d/w3x/export_w3x.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def save(context, export_settings, data_context):
2424

2525
# directory = os.path.dirname(context.filepath) + os.path.sep
2626

27-
if 'H' in export_mode:
27+
if 'H' in export_mode and data_context.hierarchy:
2828
if export_settings['individual_files']:
2929
path = filepath_pure + "_SKL" + context.filename_ext
3030
context.info('Saving file :' + path)
@@ -50,14 +50,15 @@ def save(context, export_settings, data_context):
5050
else:
5151
mesh.create(root)
5252
# w3dcontainer
53-
if export_settings['individual_files']:
54-
path = filepath_pure + "_SKN" + context.filename_ext
55-
context.info('Saving file :' + path)
56-
write_struct(data_context.hlod, path)
57-
else:
58-
data_context.hlod.create(root)
53+
if data_context.hlod:
54+
if export_settings['individual_files']:
55+
path = filepath_pure + "_SKN" + context.filename_ext
56+
context.info('Saving file :' + path)
57+
write_struct(data_context.hlod, path)
58+
else:
59+
data_context.hlod.create(root)
5960

60-
if "A" in export_mode:
61+
if "A" in export_mode and data_context.animation:
6162
if export_settings['individual_files']:
6263
path = directory + data_context.animation.name() + context.filename_ext
6364
context.info('Saving file :' + path)
@@ -78,5 +79,7 @@ def save(context, export_settings, data_context):
7879
context.info('Saving file :' + filepath)
7980
write(root, filepath)
8081

82+
if not data_context.hierarchy:
83+
context.warning('Export incomplete')
8184

8285
return {'FINISHED'}

0 commit comments

Comments
 (0)