Skip to content
Snippets Groups Projects
Commit 3ce41afd authored by Julien Duroure's avatar Julien Duroure
Browse files

glTF exporter: more fixes for changing the filename when format changed

parent 1b4485a4
No related branches found
No related tags found
No related merge requests found
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
bl_info = { bl_info = {
'name': 'glTF 2.0 format', 'name': 'glTF 2.0 format',
'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors', 'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
"version": (1, 5, 16), "version": (1, 5, 17),
'blender': (2, 91, 0), 'blender': (2, 91, 0),
'location': 'File > Import-Export', 'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0', 'description': 'Import-Export as glTF 2.0',
...@@ -70,21 +70,42 @@ from bpy_extras.io_utils import ImportHelper, ExportHelper ...@@ -70,21 +70,42 @@ from bpy_extras.io_utils import ImportHelper, ExportHelper
extension_panel_unregister_functors = [] extension_panel_unregister_functors = []
def ensure_filepath_matches_export_format(filepath, export_format):
import os
filename = os.path.basename(filepath)
if not filename:
return filepath
stem, ext = os.path.splitext(filename)
if stem.startswith('.') and not ext:
stem, ext = '', stem
desired_ext = '.glb' if export_format == 'GLB' else '.gltf'
ext_lower = ext.lower()
if ext_lower not in ['.glb', '.gltf']:
return filepath + desired_ext
elif ext_lower != desired_ext:
filepath = filepath[:-len(ext)] # strip off ext
return filepath + desired_ext
else:
return filepath
def on_export_format_changed(self, context): def on_export_format_changed(self, context):
# Update the file extension when the format (.glb/.gltf) changes # Update the filename in the file browser when the format (.glb/.gltf)
# changes
sfile = context.space_data sfile = context.space_data
if sfile is None: if not isinstance(sfile, bpy.types.SpaceFileBrowser):
return # Avoid error when export from background return
operator = sfile.active_operator if not sfile.active_operator:
if operator.bl_idname != "EXPORT_SCENE_OT_gltf":
return return
if operator.check(context): if sfile.active_operator.bl_idname != "EXPORT_SCENE_OT_gltf":
# Weird hack to force the filepicker to notice filename changed return
from os.path import basename
filepath = operator.filepath sfile.params.filename = ensure_filepath_matches_export_format(
bpy.ops.file.filenum(increment=-1) sfile.params.filename,
if basename(operator.filepath) != basename(filepath): self.export_format,
bpy.ops.file.filenum(increment=1) )
class ExportGLTF2_Base: class ExportGLTF2_Base:
...@@ -384,28 +405,12 @@ class ExportGLTF2_Base: ...@@ -384,28 +405,12 @@ class ExportGLTF2_Base:
def check(self, _context): def check(self, _context):
# Ensure file extension matches format # Ensure file extension matches format
import os old_filepath = self.filepath
filename = os.path.basename(self.filepath) self.filepath = ensure_filepath_matches_export_format(
if filename: self.filepath,
filepath = self.filepath self.export_format,
desired_ext = '.glb' if self.export_format == 'GLB' else '.gltf' )
return self.filepath != old_filepath
stem, ext = os.path.splitext(filename)
if stem.startswith('.') and not ext:
stem, ext = '', stem
ext_lower = ext.lower()
if ext_lower not in ['.glb', '.gltf']:
filepath = filepath + desired_ext
elif ext_lower != desired_ext:
filepath = filepath[:-len(ext)] # strip off ext
filepath += desired_ext
if filepath != self.filepath:
self.filepath = filepath
return True
return False
def invoke(self, context, event): def invoke(self, context, event):
settings = context.scene.get(self.scene_key) settings = context.scene.get(self.scene_key)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment