mirror of
https://github.com/kaosat-dev/Blender_bevy_components_workflow.git
synced 2024-12-23 08:04:10 +00:00
feat(auto_export): more preferences handling tweaks, tracker changes etc
This commit is contained in:
parent
98930af5f5
commit
9ec60a783b
@ -27,12 +27,12 @@ def did_export_settings_change():
|
||||
gltf_settings_changed = sorted(json.loads(previous_gltf_settings.as_string()).items()) != sorted(json.loads(current_gltf_settings.as_string()).items()) if current_gltf_settings != None else False
|
||||
|
||||
"""print("auto settings previous", sorted(json.loads(previous_auto_settings.as_string()).items()))
|
||||
print("auto settings current", sorted(json.loads(current_auto_settings.as_string()).items()))"""
|
||||
print("auto_settings_changed", auto_settings_changed)
|
||||
print("auto settings current", sorted(json.loads(current_auto_settings.as_string()).items()))
|
||||
print("auto_settings_changed", auto_settings_changed)"""
|
||||
|
||||
"""print("gltf settings previous", sorted(json.loads(previous_gltf_settings.as_string()).items()))
|
||||
print("gltf settings current", sorted(json.loads(current_gltf_settings.as_string()).items()))"""
|
||||
print("gltf_settings_changed", gltf_settings_changed)
|
||||
print("gltf settings current", sorted(json.loads(current_gltf_settings.as_string()).items()))
|
||||
print("gltf_settings_changed", gltf_settings_changed)"""
|
||||
|
||||
changed = auto_settings_changed or gltf_settings_changed
|
||||
|
||||
|
@ -16,7 +16,7 @@ def get_collections_to_export(changes_per_scene, changed_export_parameters, addo
|
||||
(collections, blueprint_hierarchy) = get_exportable_collections(level_scenes, library_scenes, addon_prefs)
|
||||
collections_to_export = collections # just for clarity
|
||||
|
||||
print("export_change_detection", export_change_detection, export_gltf_extension, export_blueprints_path, changed_export_parameters, changes_per_scene)
|
||||
print("export_change_detection", export_change_detection, "changed_export_parameters", changed_export_parameters, "changes_per_scene", changes_per_scene)
|
||||
|
||||
# if the export parameters have changed, bail out early
|
||||
# we need to re_export everything if the export parameters have been changed
|
||||
@ -38,7 +38,7 @@ def get_collections_to_export(changes_per_scene, changed_export_parameters, addo
|
||||
# determine which collections have changed
|
||||
for scene, objects in changes_per_scene.items():
|
||||
print(" changed scene", scene)
|
||||
for obj_name, obj in objects.items():
|
||||
for obj_name, obj in list(objects.items()):
|
||||
object_collections = list(obj.users_collection) if hasattr(obj, 'users_collection') else []
|
||||
object_collection_names = list(map(lambda collection: collection.name, object_collections))
|
||||
|
||||
|
@ -3,8 +3,10 @@ import bpy
|
||||
from bpy.types import Operator
|
||||
from bpy_extras.io_utils import ExportHelper
|
||||
from bpy.props import (IntProperty)
|
||||
|
||||
from .preferences import (AutoExportGltfAddonPreferences, AutoExportGltfPreferenceNames)
|
||||
from .auto_export import auto_export
|
||||
from ..helpers.generate_complete_preferences_dict import generate_complete_preferences_dict_auto
|
||||
|
||||
class AutoExportGLTF(Operator, AutoExportGltfAddonPreferences, ExportHelper):
|
||||
"""auto export gltf"""
|
||||
@ -89,13 +91,16 @@ class AutoExportGLTF(Operator, AutoExportGltfAddonPreferences, ExportHelper):
|
||||
return export_props
|
||||
|
||||
def save_settings(self, context):
|
||||
export_props = self.format_settings()
|
||||
self.properties['main_scene_names'] = export_props['main_scene_names']
|
||||
self.properties['library_scene_names'] = export_props['library_scene_names']
|
||||
auto_export_settings = self.format_settings()
|
||||
self.properties['main_scene_names'] = auto_export_settings['main_scene_names']
|
||||
self.properties['library_scene_names'] = auto_export_settings['library_scene_names']
|
||||
|
||||
stored_settings = bpy.data.texts[".gltf_auto_export_settings"] if ".gltf_auto_export_settings" in bpy.data.texts else bpy.data.texts.new(".gltf_auto_export_settings")
|
||||
stored_settings.clear()
|
||||
stored_settings.write(json.dumps(export_props))
|
||||
|
||||
auto_export_settings = generate_complete_preferences_dict_auto(auto_export_settings)
|
||||
stored_settings.write(json.dumps(auto_export_settings))
|
||||
print("saved settings", auto_export_settings)
|
||||
#print("saving settings", bpy.data.texts[".gltf_auto_export_settings"].as_string(), "raw", json.dumps(export_props))
|
||||
|
||||
def load_settings(self, context):
|
||||
@ -182,6 +187,7 @@ class AutoExportGLTF(Operator, AutoExportGltfAddonPreferences, ExportHelper):
|
||||
changed = auto_settings_changed or gltf_settings_changed
|
||||
# now write the current settings to the "previous settings"
|
||||
if current_auto_settings != None:
|
||||
print("writing settings")
|
||||
previous_auto_settings = bpy.data.texts[".gltf_auto_export_settings_previous"] if ".gltf_auto_export_settings_previous" in bpy.data.texts else bpy.data.texts.new(".gltf_auto_export_settings_previous")
|
||||
previous_auto_settings.clear()
|
||||
previous_auto_settings.write(current_auto_settings.as_string()) # TODO : check if this is always valid
|
||||
@ -198,6 +204,7 @@ class AutoExportGLTF(Operator, AutoExportGltfAddonPreferences, ExportHelper):
|
||||
bpy.context.window_manager.auto_export_tracker.disable_change_detection()
|
||||
if self.direct_mode:
|
||||
self.load_settings(context)
|
||||
print("toto", self.will_save_settings)
|
||||
if self.will_save_settings:
|
||||
self.save_settings(context)
|
||||
|
||||
|
@ -106,7 +106,7 @@ class AutoExportTracker(PropertyGroup):
|
||||
if cls.change_detection_enabled:
|
||||
# ignore anything going on with temporary scenes
|
||||
if not scene.name.startswith(TEMPSCENE_PREFIX):
|
||||
# print("depsgraph_update_post", scene.name)
|
||||
print("depsgraph_update_post", scene.name)
|
||||
changed_scene = scene.name or ""
|
||||
#print("-------------")
|
||||
if not changed_scene in cls.changed_objects_per_scene:
|
||||
@ -118,8 +118,9 @@ class AutoExportTracker(PropertyGroup):
|
||||
if isinstance(obj.id, bpy.types.Object):
|
||||
# get the actual object
|
||||
object = bpy.data.objects[obj.id.name]
|
||||
print(" changed object", obj.id.name, "changes", obj, "transforms", obj.is_updated_transform, "geometry", obj.is_updated_geometry)
|
||||
cls.changed_objects_per_scene[scene.name][obj.id.name] = object
|
||||
print(" changed object", obj.id.name, "changes", obj, "evalutated", obj.id.is_evaluated, "transforms", obj.is_updated_transform, "geometry", obj.is_updated_geometry)
|
||||
if obj.is_updated_transform or obj.is_updated_geometry:
|
||||
cls.changed_objects_per_scene[scene.name][obj.id.name] = object
|
||||
elif isinstance(obj.id, bpy.types.Material): # or isinstance(obj.id, bpy.types.ShaderNodeTree):
|
||||
# print(" changed material", obj.id, "scene", scene.name,)
|
||||
material = bpy.data.materials[obj.id.name]
|
||||
@ -135,10 +136,18 @@ class AutoExportTracker(PropertyGroup):
|
||||
if items == 0:
|
||||
cls.changed_objects_per_scene.clear()
|
||||
# print("changed_objects_per_scene", cls.changed_objects_per_scene)
|
||||
else:
|
||||
cls.changed_objects_per_scene.clear()
|
||||
|
||||
|
||||
# filter out invalid objects
|
||||
for scene_name in cls.changed_objects_per_scene.keys():
|
||||
bla = {}
|
||||
for object_name in cls.changed_objects_per_scene[scene.name]:
|
||||
object = cls.changed_objects_per_scene[scene.name][object_name]
|
||||
#print("sdfsd", object, object.valid)
|
||||
#if not cls.changed_objects_per_scene[scene.name][object_name].invalid:
|
||||
# bla[object_name] = cls.changed_objects_per_scene[scene.name][object_name]
|
||||
#cls.changed_objects_per_scene[scene.name]= bla
|
||||
#cls.changed_objects_per_scene[scene_name] = [o for o in cls.changed_objects_per_scene[scene_name] if not o.invalid]
|
||||
|
||||
# get a list of exportable collections for display
|
||||
# keep it simple, just use Simplenamespace for compatibility with the rest of our code
|
||||
# TODO: debounce
|
||||
@ -163,8 +172,10 @@ class AutoExportTracker(PropertyGroup):
|
||||
export_blueprints_path = os.path.join(folder_path, export_output_folder, tmp["export_blueprints_path"]) if tmp["export_blueprints_path"] != '' else folder_path
|
||||
tmp["export_blueprints_path"] = export_blueprints_path
|
||||
tmp["export_models_path"] = export_models_path
|
||||
|
||||
addon_prefs = SimpleNamespace(**tmp)
|
||||
|
||||
print("cls.changed_objects_per_scene", cls.changed_objects_per_scene)
|
||||
(collections, collections_to_export, library_collections, collections_per_scene) = get_collections_to_export(cls.changed_objects_per_scene, export_settings_changed, addon_prefs)
|
||||
print("collections to export", collections_to_export)
|
||||
try:
|
||||
|
@ -1,7 +1,8 @@
|
||||
|
||||
from ..auto_export.preferences import AutoExportGltfAddonPreferences
|
||||
from io_scene_gltf2 import (ExportGLTF2, GLTF_PT_export_main,ExportGLTF2_Base, GLTF_PT_export_include)
|
||||
from io_scene_gltf2 import (ExportGLTF2_Base)
|
||||
|
||||
# given the input (actual) gltf settings, filters out any invalid/useless params & params that are equal to defaults
|
||||
def generate_complete_preferences_dict_gltf(settings):
|
||||
complete_preferences = {}
|
||||
defaults = {}
|
||||
@ -25,14 +26,22 @@ def generate_complete_preferences_dict_gltf(settings):
|
||||
|
||||
complete_preferences = dict(filter(filter_out, dict(complete_preferences).items()))
|
||||
return complete_preferences
|
||||
|
||||
|
||||
# given the input (actual) auto settings, filters out any invalid/useless params & params that are equal to defaults
|
||||
def generate_complete_preferences_dict_auto(settings):
|
||||
complete_preferences = {}
|
||||
defaults = {}
|
||||
|
||||
for k in AutoExportGltfAddonPreferences.__annotations__:
|
||||
item = AutoExportGltfAddonPreferences.__annotations__[k]
|
||||
default = item.keywords.get('default', None)
|
||||
complete_preferences[k] = default
|
||||
#complete_preferences[k] = default
|
||||
defaults[k] = default
|
||||
|
||||
for key in list(settings.keys()):
|
||||
complete_preferences[key] = settings[key]
|
||||
if key in defaults:
|
||||
if settings[key] != defaults[key]: # only write out values different from defaults
|
||||
complete_preferences[key] = settings[key]
|
||||
else:
|
||||
complete_preferences[key] = settings[key]
|
||||
return complete_preferences
|
||||
|
@ -228,8 +228,8 @@ def clear_hollow_scene(temp_scene, original_root_collection):
|
||||
|
||||
# convenience utility to get lists of scenes
|
||||
def get_scenes(addon_prefs):
|
||||
level_scene_names= getattr(addon_prefs,"main_scene_names") #list(map(lambda scene: scene.name, getattr(addon_prefs,"main_scenes")))
|
||||
library_scene_names = getattr(addon_prefs,"library_scene_names") #list(map(lambda scene: scene.name, getattr(addon_prefs,"library_scenes")))
|
||||
level_scene_names= getattr(addon_prefs,"main_scene_names", []) #list(map(lambda scene: scene.name, getattr(addon_prefs,"main_scenes")))
|
||||
library_scene_names = getattr(addon_prefs,"library_scene_names", []) #list(map(lambda scene: scene.name, getattr(addon_prefs,"library_scenes")))
|
||||
|
||||
level_scene_names = list(filter(lambda name: name in bpy.data.scenes, level_scene_names))
|
||||
library_scene_names = list(filter(lambda name: name in bpy.data.scenes, library_scene_names))
|
||||
|
Loading…
Reference in New Issue
Block a user