Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'io_scene_gltf2/blender/exp/gltf2_blender_export.py')
-rwxr-xr-xio_scene_gltf2/blender/exp/gltf2_blender_export.py117
1 files changed, 70 insertions, 47 deletions
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_export.py b/io_scene_gltf2/blender/exp/gltf2_blender_export.py
index 1adbe473..7ef3941d 100755
--- a/io_scene_gltf2/blender/exp/gltf2_blender_export.py
+++ b/io_scene_gltf2/blender/exp/gltf2_blender_export.py
@@ -12,76 +12,93 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import bpy
import sys
import traceback
-from . import gltf2_blender_export_keys
-from . import gltf2_blender_gather
-from .gltf2_blender_gltf2_exporter import GlTF2Exporter
-from ..com import gltf2_blender_json
-from ...io.exp import gltf2_io_export
-from ...io.com.gltf2_io_debug import print_console, print_newline
+from io_scene_gltf2.blender.com import gltf2_blender_json
+from io_scene_gltf2.blender.exp import gltf2_blender_export_keys
+from io_scene_gltf2.blender.exp import gltf2_blender_gather
+from io_scene_gltf2.blender.exp.gltf2_blender_gltf2_exporter import GlTF2Exporter
+from io_scene_gltf2.io.com.gltf2_io_debug import print_console, print_newline
+from io_scene_gltf2.io.exp import gltf2_io_export
-def save(operator,
- context,
- export_settings):
+def save(context, export_settings):
"""Start the glTF 2.0 export and saves to content either to a .gltf or .glb file."""
- print_console('INFO', 'Starting glTF 2.0 export')
- context.window_manager.progress_begin(0, 100)
- context.window_manager.progress_update(0)
+ __notify_start(context)
+ json, buffer = __export(export_settings)
+ __write_file(json, buffer, export_settings)
+ __notify_end(context)
+ return {'FINISHED'}
+
+
+def __export(export_settings):
+ exporter = GlTF2Exporter(__get_copyright(export_settings))
+ __add_root_objects(exporter, export_settings)
+ buffer = __create_buffer(exporter, export_settings)
+ exporter.finalize_images(export_settings[gltf2_blender_export_keys.FILE_DIRECTORY])
+ json = __fix_json(exporter.glTF.to_dict())
- if not export_settings[gltf2_blender_export_keys.COPYRIGHT]:
- export_settings[gltf2_blender_export_keys.COPYRIGHT] = None
+ return json, buffer
+
+def __get_copyright(export_settings):
+ if export_settings[gltf2_blender_export_keys.COPYRIGHT]:
+ return export_settings[gltf2_blender_export_keys.COPYRIGHT]
+ return None
+
+
+def __add_root_objects(exporter, export_settings):
scenes, animations = gltf2_blender_gather.gather_gltf2(export_settings)
- exporter = GlTF2Exporter(copyright=export_settings[gltf2_blender_export_keys.COPYRIGHT])
for scene in scenes:
exporter.add_scene(scene)
for animation in animations:
exporter.add_animation(animation)
+
+def __create_buffer(exporter, export_settings):
buffer = bytes()
- if export_settings[gltf2_blender_export_keys.FORMAT] != 'GLB':
- # .gltf
+ if export_settings[gltf2_blender_export_keys.FORMAT] == 'GLB':
+ buffer = exporter.finalize_buffer(export_settings[gltf2_blender_export_keys.FILE_DIRECTORY], is_glb=True)
+ else:
if export_settings[gltf2_blender_export_keys.FORMAT] == 'GLTF':
exporter.finalize_buffer(export_settings[gltf2_blender_export_keys.FILE_DIRECTORY])
else:
exporter.finalize_buffer(export_settings[gltf2_blender_export_keys.FILE_DIRECTORY],
export_settings[gltf2_blender_export_keys.BINARY_FILENAME])
- else:
- # .glb
- buffer = exporter.finalize_buffer(export_settings[gltf2_blender_export_keys.FILE_DIRECTORY], is_glb=True)
- exporter.finalize_images(export_settings[gltf2_blender_export_keys.FILE_DIRECTORY])
- glTF = exporter.glTF
- #
+ return buffer
+
+def __fix_json(obj):
# TODO: move to custom JSON encoder
- def dict_strip(obj):
- o = obj
- if isinstance(obj, dict):
- o = {}
- for k, v in obj.items():
- if v is None:
- continue
- elif isinstance(v, list) and len(v) == 0:
- continue
- o[k] = dict_strip(v)
- elif isinstance(obj, list):
- o = []
- for v in obj:
- o.append(dict_strip(v))
- elif isinstance(obj, float):
- # force floats to int, if they are integers (prevent INTEGER_WRITTEN_AS_FLOAT validator warnings)
- if int(obj) == obj:
- return int(obj)
- return o
+ fixed = obj
+ if isinstance(obj, dict):
+ fixed = {}
+ for key, value in obj.items():
+ if value is None:
+ continue
+ elif isinstance(value, list) and len(value) == 0:
+ continue
+ fixed[key] = __fix_json(value)
+ elif isinstance(obj, list):
+ fixed = []
+ for value in obj:
+ fixed.append(__fix_json(value))
+ elif isinstance(obj, float):
+ # force floats to int, if they are integers (prevent INTEGER_WRITTEN_AS_FLOAT validator warnings)
+ if int(obj) == obj:
+ return int(obj)
+ return fixed
+
+def __write_file(json, buffer, export_settings):
try:
- gltf2_io_export.save_gltf(dict_strip(glTF.to_dict()), export_settings, gltf2_blender_json.BlenderJSONEncoder,
- buffer)
+ gltf2_io_export.save_gltf(
+ json,
+ export_settings,
+ gltf2_blender_json.BlenderJSONEncoder,
+ buffer)
except AssertionError as e:
_, _, tb = sys.exc_info()
traceback.print_tb(tb) # Fixed format
@@ -92,9 +109,15 @@ def save(operator,
print_console('ERROR', str(e))
raise e
+
+def __notify_start(context):
+ print_console('INFO', 'Starting glTF 2.0 export')
+ context.window_manager.progress_begin(0, 100)
+ context.window_manager.progress_update(0)
+
+
+def __notify_end(context):
print_console('INFO', 'Finished glTF 2.0 export')
context.window_manager.progress_end()
print_newline()
- return {'FINISHED'}
-