diff options
Diffstat (limited to 'io_scene_gltf2/__init__.py')
-rwxr-xr-x | io_scene_gltf2/__init__.py | 68 |
1 files changed, 59 insertions, 9 deletions
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py index 97ef843b..1a97bee8 100755 --- a/io_scene_gltf2/__init__.py +++ b/io_scene_gltf2/__init__.py @@ -15,7 +15,7 @@ bl_info = { 'name': 'glTF 2.0 format', 'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors', - "version": (1, 8, 12), + "version": (1, 8, 13), 'blender': (3, 1, 0), 'location': 'File > Import-Export', 'description': 'Import-Export as glTF 2.0', @@ -67,7 +67,8 @@ from bpy_extras.io_utils import ImportHelper, ExportHelper # Functions / Classes. # -extension_panel_unregister_functors = [] +exporter_extension_panel_unregister_functors = [] +importer_extension_panel_unregister_functors = [] def ensure_filepath_matches_export_format(filepath, export_format): @@ -479,11 +480,11 @@ class ExportGLTF2_Base: for addon_name in preferences.addons.keys(): try: if hasattr(sys.modules[addon_name], 'glTF2ExportUserExtension') or hasattr(sys.modules[addon_name], 'glTF2ExportUserExtensions'): - extension_panel_unregister_functors.append(sys.modules[addon_name].register_panel()) + exporter_extension_panel_unregister_functors.append(sys.modules[addon_name].register_panel()) except Exception: pass - self.has_active_extensions = len(extension_panel_unregister_functors) > 0 + self.has_active_exporter_extensions = len(exporter_extension_panel_unregister_functors) > 0 return ExportHelper.invoke(self, context, event) def save_settings(self, context): @@ -945,7 +946,7 @@ class GLTF_PT_export_animation_skinning(bpy.types.Panel): class GLTF_PT_export_user_extensions(bpy.types.Panel): bl_space_type = 'FILE_BROWSER' bl_region_type = 'TOOL_PROPS' - bl_label = "Extensions" + bl_label = "Exporter Extensions" bl_parent_id = "FILE_PT_operator" bl_options = {'DEFAULT_CLOSED'} @@ -954,13 +955,30 @@ class GLTF_PT_export_user_extensions(bpy.types.Panel): sfile = context.space_data operator = sfile.active_operator - return operator.bl_idname == "EXPORT_SCENE_OT_gltf" and operator.has_active_extensions + return operator.bl_idname == "EXPORT_SCENE_OT_gltf" and operator.has_active_exporter_extensions def draw(self, context): layout = self.layout layout.use_property_split = True layout.use_property_decorate = False # No animation. +class GLTF_PT_import_user_extensions(bpy.types.Panel): + bl_space_type = 'FILE_BROWSER' + bl_region_type = 'TOOL_PROPS' + bl_label = "Importer Extensions" + bl_parent_id = "FILE_PT_operator" + bl_options = {'DEFAULT_CLOSED'} + + @classmethod + def poll(cls, context): + sfile = context.space_data + operator = sfile.active_operator + return operator.bl_idname == "IMPORT_SCENE_OT_gltf" and operator.has_active_importer_extensions + + def draw(self, context): + layout = self.layout + layout.use_property_split = True + layout.use_property_decorate = False # No animation. class ExportGLTF2(bpy.types.Operator, ExportGLTF2_Base, ExportHelper): """Export scene as glTF 2.0 file""" @@ -1060,6 +1078,19 @@ class ImportGLTF2(Operator, ImportHelper): layout.prop(self, 'guess_original_bind_pose') layout.prop(self, 'bone_heuristic') + def invoke(self, context, event): + import sys + preferences = bpy.context.preferences + for addon_name in preferences.addons.keys(): + try: + if hasattr(sys.modules[addon_name], 'glTF2ImportUserExtension') or hasattr(sys.modules[addon_name], 'glTF2ImportUserExtensions'): + importer_extension_panel_unregister_functors.append(sys.modules[addon_name].register_panel()) + except Exception: + pass + + self.has_active_importer_extensions = len(importer_extension_panel_unregister_functors) > 0 + return ImportHelper.invoke(self, context, event) + def execute(self, context): return self.import_gltf2(context) @@ -1069,6 +1100,20 @@ class ImportGLTF2(Operator, ImportHelper): self.set_debug_log() import_settings = self.as_keywords() + user_extensions = [] + + import sys + preferences = bpy.context.preferences + for addon_name in preferences.addons.keys(): + try: + module = sys.modules[addon_name] + except Exception: + continue + if hasattr(module, 'glTF2ImportUserExtension'): + extension_ctor = module.glTF2ImportUserExtension + user_extensions.append(extension_ctor()) + import_settings['import_user_extensions'] = user_extensions + if self.files: # Multiple file import ret = {'CANCELLED'} @@ -1137,7 +1182,8 @@ classes = ( GLTF_PT_export_animation_shapekeys, GLTF_PT_export_animation_skinning, GLTF_PT_export_user_extensions, - ImportGLTF2 + ImportGLTF2, + GLTF_PT_import_user_extensions ) @@ -1154,9 +1200,13 @@ def register(): def unregister(): for c in classes: bpy.utils.unregister_class(c) - for f in extension_panel_unregister_functors: + for f in exporter_extension_panel_unregister_functors: + f() + exporter_extension_panel_unregister_functors.clear() + + for f in importer_extension_panel_unregister_functors: f() - extension_panel_unregister_functors.clear() + importer_extension_panel_unregister_functors.clear() # bpy.utils.unregister_module(__name__) |