diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py index cbcc8675..e17adac2 100644 --- a/io_scene_fbx/export_fbx_bin.py +++ b/io_scene_fbx/export_fbx_bin.py @@ -2205,10 +2205,21 @@ def fbx_data_from_scene(scene, depsgraph, settings): mod.show_viewport = False if mod.show_render or mod.show_viewport: use_org_data = False + if ob.type in BLENDER_OTHER_OBJECT_TYPES and not settings.use_mesh_modifiers: + # If we want to export non-mesh geometry without modifiers, we have to disable them temporarily, + # and still get mesh from evaluated object (getting mesh from orig non-mesh object returns nothing). + for mod in ob.modifiers: + tmp_mods.append((mod, mod.show_render, mod.show_viewport)) + mod.show_render = False + mod.show_viewport = False + # If modifiers has been altered, we need to update dependency graph. + if tmp_mods: + depsgraph.update() if not use_org_data: - tmp_me = ob.to_mesh( - depsgraph, - apply_modifiers=settings.use_mesh_modifiers) + # We always want to convert from evaluated data at this point + # (only case where we do not want that, which is mesh object without exporting modifiers, + # will never lead to that point). + tmp_me = ob.evaluated_get(depsgraph).to_mesh(depsgraph) data_meshes[ob_obj] = (get_blenderID_key(tmp_me), tmp_me, True) # Re-enable temporary disabled modifiers. for mod, show_render, show_viewport in tmp_mods: @@ -3089,7 +3100,8 @@ def save(operator, context, ctx_objects = context.view_layer.objects kwargs_mod["context_objects"] = ctx_objects - ret = save_single(operator, context.scene, context.depsgraph, filepath, **kwargs_mod) + depsgraph = context.evaluated_depsgraph_get() + ret = save_single(operator, context.scene, depsgraph, filepath, **kwargs_mod) else: # XXX We need a way to generate a depsgraph for inactive view_layers first... # XXX Also, what to do in case of batch-exporting scenes, when there is more than one view layer? diff --git a/io_scene_obj/export_obj.py b/io_scene_obj/export_obj.py index 34a279f4..08074089 100644 --- a/io_scene_obj/export_obj.py +++ b/io_scene_obj/export_obj.py @@ -347,8 +347,10 @@ def write_file(filepath, objects, depsgraph, scene, continue # END NURBS + ob_for_convert = ob.evaluated_get(depsgraph) if EXPORT_APPLY_MODIFIERS else ob.original_get() + try: - me = ob.to_mesh(depsgraph, EXPORT_APPLY_MODIFIERS) + me = ob_for_convert.to_mesh(depsgraph) except RuntimeError: me = None @@ -678,7 +680,7 @@ def _write(context, filepath, base_name, ext = os.path.splitext(filepath) context_name = [base_name, '', '', ext] # Base name, scene name, frame number, extension - depsgraph = context.depsgraph + depsgraph = context.evaluated_depsgraph_get() scene = context.scene # Exit edit mode before exporting, so current object states are exported properly.