diff --git a/tools/blenvy/TODO.md b/tools/blenvy/TODO.md index 7334435..a6856d3 100644 --- a/tools/blenvy/TODO.md +++ b/tools/blenvy/TODO.md @@ -83,4 +83,6 @@ General issues: - "parents" can only be blueprints - they normally need/have unique export paths (otherwise, user error, perhaps show it ?) - perhaps a simple hashing of the parent's path would be enought - - addon-prefs => settings \ No newline at end of file + - [ ] addon-prefs => settings + + - [ ] generate_gltf_export_preferences => should not use add-on prefs at all ? since we are not overriding gltf settings that way anymore ? \ No newline at end of file diff --git a/tools/blenvy/gltf_auto_export/auto_export/export_gltf.py b/tools/blenvy/gltf_auto_export/auto_export/export_gltf.py index 72f47f5..61458e7 100644 --- a/tools/blenvy/gltf_auto_export/auto_export/export_gltf.py +++ b/tools/blenvy/gltf_auto_export/auto_export/export_gltf.py @@ -46,7 +46,7 @@ def generate_gltf_export_preferences(addon_prefs): for key in addon_prefs.__annotations__.keys(): if str(key) not in AutoExportGltfPreferenceNames: #print("overriding setting", key, "value", getattr(addon_prefs,key)) - gltf_export_preferences[key] = getattr(addon_prefs, key) + pass#gltf_export_preferences[key] = getattr(addon_prefs, key) standard_gltf_exporter_settings = get_standard_exporter_settings() @@ -74,4 +74,4 @@ def export_gltf (path, export_settings): settings = {**export_settings, "filepath": path} # print("export settings",settings) os.makedirs(os.path.dirname(path), exist_ok=True) - #bpy.ops.export_scene.gltf(**settings) + bpy.ops.export_scene.gltf(**settings) diff --git a/tools/blenvy/gltf_auto_export/auto_export/export_main_scenes.py b/tools/blenvy/gltf_auto_export/auto_export/export_main_scenes.py index 0766470..00e0bcc 100644 --- a/tools/blenvy/gltf_auto_export/auto_export/export_main_scenes.py +++ b/tools/blenvy/gltf_auto_export/auto_export/export_main_scenes.py @@ -30,7 +30,6 @@ def export_main_scene(scene, blend_file_path, addon_prefs, blueprints_data): gltf_output_path = os.path.join(levels_path_full, scene.name) #inject_blueprints_list_into_main_scene(scene, blueprints_data, addon_prefs) - return if export_separate_dynamic_and_static_objects: #print("SPLIT STATIC AND DYNAMIC") # first export static objects diff --git a/tools/blenvy/gltf_auto_export/auto_export/prepare_and_export.py b/tools/blenvy/gltf_auto_export/auto_export/prepare_and_export.py index 37b8693..1febee3 100644 --- a/tools/blenvy/gltf_auto_export/auto_export/prepare_and_export.py +++ b/tools/blenvy/gltf_auto_export/auto_export/prepare_and_export.py @@ -7,6 +7,7 @@ from .settings_diff import get_setting_changes # prepare export by gather the changes to the scenes & settings def prepare_and_export(): + print("prepare and export") blenvy = bpy.context.window_manager.blenvy bpy.context.window_manager.auto_export_tracker.disable_change_detection() auto_export_settings = blenvy.auto_export diff --git a/tools/blenvy/gltf_auto_export/auto_export/settings_diff.py b/tools/blenvy/gltf_auto_export/auto_export/settings_diff.py index 18c0089..426294a 100644 --- a/tools/blenvy/gltf_auto_export/auto_export/settings_diff.py +++ b/tools/blenvy/gltf_auto_export/auto_export/settings_diff.py @@ -1,6 +1,6 @@ import bpy -from ...settings import are_settings_identical, load_settings +from ...settings import are_settings_identical, load_settings, upsert_settings # which settings are specific to auto_export # TODO: can we infer this ? auto_export_parameter_names = [ @@ -27,10 +27,19 @@ def get_setting_changes(): previous_export_settings = load_settings(".blenvy_export_settings_previous") current_export_settings = load_settings(".blenvy_export_settings") - auto_export_settings_changed = not are_settings_identical(previous_export_settings, current_export_settings) + export_settings_changed = not are_settings_identical(previous_export_settings, current_export_settings) + # if there were no setting before, it is new, we need export + if previous_gltf_settings is None: + pass + if previous_export_settings is None: + pass + + # write the new settings to the old settings + upsert_settings(".blenvy_gltf_settings_previous", current_gltf_settings) + upsert_settings(".blenvy_export_settings_previous", current_gltf_settings) - return {} + return gltf_settings_changed or export_settings_changed def did_export_settings_change(self): return True diff --git a/tools/blenvy/gltf_auto_export/constants.py b/tools/blenvy/gltf_auto_export/constants.py index 3caf6c0..5aaef1f 100644 --- a/tools/blenvy/gltf_auto_export/constants.py +++ b/tools/blenvy/gltf_auto_export/constants.py @@ -1 +1 @@ -TEMPSCENE_PREFIX = "__temp_scene" \ No newline at end of file +TEMPSCENE_PREFIX = "__temp_scene" diff --git a/tools/blenvy/gltf_auto_export/settings.py b/tools/blenvy/gltf_auto_export/settings.py index 31f0230..b5c1fb8 100644 --- a/tools/blenvy/gltf_auto_export/settings.py +++ b/tools/blenvy/gltf_auto_export/settings.py @@ -72,9 +72,19 @@ class AutoExportSettings(PropertyGroup): default=True ) # type: ignore + dry_run: EnumProperty( + name="dry run", + description="debug/ develop helper to enable everything but the actual exporting of files", + items=( + ("NO_EXPORT", "No export", "do not actually export gltf files"), + ("NO_PREPARE", "No prepare", "do not actually export gltf files AND do not prepare the exports either (ie no creating fake scenes etc)"), + ) + ) # type: ignore # special property for gltf settings gltf_settings_backup: StringProperty( name="gltf settings backup", description="backup for existing gltf settings so that we can restore them" ) # type: ignore + + diff --git a/tools/blenvy/pytest.ini b/tools/blenvy/pytest.ini new file mode 100644 index 0000000..591ed5c --- /dev/null +++ b/tools/blenvy/pytest.ini @@ -0,0 +1,9 @@ +[pytest] +blender-template = ../../testing/bevy_example/art/testing.blend +addopts = -svv +testpaths = + tests + +# dependencies: +# pytest_blender +# pixelmatch \ No newline at end of file diff --git a/tools/blenvy/tests/test_bevy_integration.py b/tools/blenvy/tests/test_bevy_integration.py index 5bbe3e2..596ecc9 100644 --- a/tools/blenvy/tests/test_bevy_integration.py +++ b/tools/blenvy/tests/test_bevy_integration.py @@ -9,6 +9,8 @@ import filecmp from PIL import Image from pixelmatch.contrib.PIL import pixelmatch +from blenvy.gltf_auto_export.auto_export.prepare_and_export import prepare_and_export + @pytest.fixture def setup_data(request): print("\nSetting up resources...") @@ -98,9 +100,17 @@ def test_export_complex(setup_data): # move the main cube bpy.data.objects["Cube"].location = [1, 0, 0] # move the cube in the library - bpy.data.objects["Blueprint1_mesh"].location = [1, 2, 1] + # TODO: add back bpy.data.objects["Blueprint1_mesh"].location = [1, 2, 1] - auto_export_operator( + registry = bpy.context.window_manager.components_registry + blenvy = bpy.context.window_manager.blenvy + main_scene = blenvy.main_scenes.add() + main_scene.name = "World" + blenvy.auto_export.auto_export = True + + prepare_and_export() + + """auto_export_operator( auto_export=True, direct_mode=True, project_root_path = os.path.abspath(root_path), @@ -111,7 +121,7 @@ def test_export_complex(setup_data): export_scene_settings=True, export_blueprints=True, export_materials_library=True - ) + )""" # blueprint1 => has an instance, got changed, should export # blueprint2 => has NO instance, but marked as asset, should export # blueprint3 => has NO instance, not marked as asset, used inside blueprint 4: should export