[Bf-extensions-cvs] [ecdaef95] master: glTF importer: Import extra data as custom properties
Julien Duroure
noreply at git.blender.org
Sat Oct 12 17:15:50 CEST 2019
Commit: ecdaef952383c28aa3793f86cee160202f46913b
Author: Julien Duroure
Date: Sat Oct 12 17:15:22 2019 +0200
Branches: master
https://developer.blender.org/rBAecdaef952383c28aa3793f86cee160202f46913b
glTF importer: Import extra data as custom properties
===================================================================
M io_scene_gltf2/__init__.py
A io_scene_gltf2/blender/com/gltf2_blender_extras.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_lights.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
M io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
M io_scene_gltf2/blender/imp/gltf2_blender_camera.py
M io_scene_gltf2/blender/imp/gltf2_blender_light.py
M io_scene_gltf2/blender/imp/gltf2_blender_material.py
M io_scene_gltf2/blender/imp/gltf2_blender_mesh.py
M io_scene_gltf2/blender/imp/gltf2_blender_node.py
===================================================================
diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index 3852f105..faade612 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, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
- "version": (1, 0, 6),
+ "version": (1, 0, 7),
'blender': (2, 81, 6),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/com/gltf2_blender_extras.py b/io_scene_gltf2/blender/com/gltf2_blender_extras.py
new file mode 100644
index 00000000..0be942a0
--- /dev/null
+++ b/io_scene_gltf2/blender/com/gltf2_blender_extras.py
@@ -0,0 +1,91 @@
+# Copyright 2018-2019 The glTF-Blender-IO authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import bpy
+from .gltf2_blender_json import is_json_convertible
+
+
+# Custom properties, which are in most cases present and should not be imported/exported.
+BLACK_LIST = ['cycles', 'cycles_visibility', 'cycles_curves', '_RNA_UI']
+
+
+def generate_extras(blender_element):
+ """Filter and create a custom property, which is stored in the glTF extra field."""
+ if not blender_element:
+ return None
+
+ extras = {}
+
+ for custom_property in blender_element.keys():
+ if custom_property in BLACK_LIST:
+ continue
+
+ value = __to_json_compatible(blender_element[custom_property])
+
+ if value is not None:
+ extras[custom_property] = value
+
+ if not extras:
+ return None
+
+ return extras
+
+
+def __to_json_compatible(value):
+ """Make a value (usually a custom property) compatible with json"""
+
+ if isinstance(value, bpy.types.ID):
+ return value
+
+ elif isinstance(value, str):
+ return value
+
+ elif isinstance(value, (int, float)):
+ return value
+
+ # for list classes
+ elif isinstance(value, list):
+ value = list(value)
+ # make sure contents are json-compatible too
+ for index in range(len(value)):
+ value[index] = __to_json_compatible(value[index])
+ return value
+
+ # for IDPropertyArray classes
+ elif hasattr(value, "to_list"):
+ value = value.to_list()
+ return value
+
+ elif hasattr(value, "to_dict"):
+ value = value.to_dict()
+ if is_json_convertible(value):
+ return value
+
+ return None
+
+
+def set_extras(blender_element, extras, exclude=[]):
+ """Copy extras onto a Blender object."""
+ if not extras or not isinstance(extras, dict):
+ return
+
+ for custom_property, value in extras.items():
+ if custom_property in BLACK_LIST:
+ continue
+ if custom_property in exclude:
+ continue
+
+ blender_element[custom_property] = value
+
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather.py
index 2e4bfe31..80e0c3b2 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather.py
@@ -19,7 +19,7 @@ from io_scene_gltf2.io.com.gltf2_io_debug import print_console
from io_scene_gltf2.blender.exp import gltf2_blender_gather_nodes
from io_scene_gltf2.blender.exp import gltf2_blender_gather_animations
from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
-from io_scene_gltf2.blender.exp import gltf2_blender_generate_extras
+from ..com.gltf2_blender_extras import generate_extras
from io_scene_gltf2.blender.exp import gltf2_blender_export_keys
@@ -124,6 +124,6 @@ def __gather_animations(blender_scene, export_settings):
def __gather_extras(blender_object, export_settings):
if export_settings[gltf2_blender_export_keys.EXTRAS]:
- return gltf2_blender_generate_extras.generate_extras(blender_object)
+ return generate_extras(blender_object)
return None
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py
index e6d82121..3cde0fcb 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_cameras.py
@@ -14,7 +14,7 @@
from . import gltf2_blender_export_keys
from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
-from io_scene_gltf2.blender.exp import gltf2_blender_generate_extras
+from ..com.gltf2_blender_extras import generate_extras
from io_scene_gltf2.io.com import gltf2_io
import bpy
@@ -46,7 +46,7 @@ def __gather_extensions(blender_camera, export_settings):
def __gather_extras(blender_camera, export_settings):
if export_settings['gltf_extras']:
- return gltf2_blender_generate_extras.generate_extras(blender_camera)
+ return generate_extras(blender_camera)
return None
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_lights.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_lights.py
index c87318d0..dbb59e21 100644
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_lights.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_lights.py
@@ -17,6 +17,7 @@ import math
from typing import Optional, List, Dict, Any
from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
+from ..com.gltf2_blender_extras import generate_extras
from io_scene_gltf2.io.com import gltf2_io_lights_punctual
from io_scene_gltf2.io.com import gltf2_io_debug
@@ -112,6 +113,8 @@ def __gather_extensions(blender_lamp, export_settings) -> Optional[dict]:
def __gather_extras(blender_lamp, export_settings) -> Optional[Any]:
+ if export_settings['gltf_extras']:
+ return generate_extras(blender_lamp)
return None
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py
index 3f4466f5..9b9a9abe 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py
@@ -23,7 +23,7 @@ from io_scene_gltf2.blender.exp import gltf2_blender_gather_material_occlusion_t
from io_scene_gltf2.blender.exp import gltf2_blender_search_node_tree
from io_scene_gltf2.blender.exp import gltf2_blender_gather_materials_pbr_metallic_roughness
-from io_scene_gltf2.blender.exp import gltf2_blender_generate_extras
+from ..com.gltf2_blender_extras import generate_extras
from io_scene_gltf2.blender.exp import gltf2_blender_get
@@ -136,7 +136,7 @@ def __gather_extensions(blender_material, export_settings):
def __gather_extras(blender_material, export_settings):
if export_settings['gltf_extras']:
- return gltf2_blender_generate_extras.generate_extras(blender_material)
+ return generate_extras(blender_material)
return None
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
index ca79ef33..3af26ced 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py
@@ -18,7 +18,7 @@ from .gltf2_blender_export_keys import MORPH
from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
from io_scene_gltf2.io.com import gltf2_io
from io_scene_gltf2.blender.exp import gltf2_blender_gather_primitives
-from io_scene_gltf2.blender.exp import gltf2_blender_generate_extras
+from ..com.gltf2_blender_extras import generate_extras
from io_scene_gltf2.io.com.gltf2_io_debug import print_console
@@ -76,7 +76,7 @@ def __gather_extras(blender_mesh: bpy.types.Mesh,
extras = {}
if export_settings['gltf_extras']:
- extras = gltf2_blender_generate_extras.generate_extras(blender_mesh) or {}
+ extras = generate_extras(blender_mesh) or {}
if export_settings[MORPH] and blender_mesh.shape_keys:
morph_max = len(blender_mesh.shape_keys.key_blocks) - 1
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
index 8af73b5d..6ab77945 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py
@@ -25,7 +25,7 @@ from io_scene_gltf2.blender.exp import gltf2_blender_gather_mesh
from io_scene_gltf2.blender.exp import gltf2_blender_gather_joints
from io_scene_gltf2.blender.exp import gltf2_blender_extract
from io_scene_gltf2.blender.exp import gltf2_blender_gather_lights
-from io_scene_gltf2.blender.exp import gltf2_blender_generate_extras
+from ..com.gltf2_blender_extras import generate_extras
from io_scene_gltf2.io.com import gltf2_io
from io_scene_gltf2.io.com import gltf2_io_extensions
@@ -219,7 +219,7 @@ def __gather_extensions(blender_object, export_settings):
def __gather_extras(blender_object, export_settings):
if export_settings['gltf_extras']:
- return gltf2_blender_generate_extras.generate_extras(blender_object)
+ return generate_extras(blender_object)
return None
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_camera.py b/io_scene_gltf2/blender/imp/gltf2_blender_camera.py
index d746c1b1..ec5f0ee4 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_camera.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_camera.py
@@ -13,6 +13,7 @@
# limitations under the License.
import bpy
+from ..com.gltf2_blender_extras import set_extras
class BlenderCamera():
@@ -29,6 +30,7 @@ class BlenderCamera():
pycamera.name = "Camera"
cam = bpy.data.cameras.new(pycamera.name)
+ set_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list