summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorRobert Brock <robert.brock@kdab.com>2017-07-11 16:04:48 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-07-19 08:03:28 +0000
commitbb0e4bb405f6a6fdde6ff96fa48cac1dc0dc1504 (patch)
tree8b0d78bd3922ebe4357d905e6ab9b49f3fd39bd5 /tools
parent02783e0901115d2e47f3da61cd833e9e81731fb7 (diff)
Exporters for Qt3D Blender Path and Armatures
Armature export creates a json with bone names, bone matrices and bone parents. Path export creates a json for the camera path. At the moment it is only exporting the path points. Change-Id: I230fa7960cad7c6c7bbfea227fec51275e24d065 Reviewed-by: Paul Lemire <paul.lemire@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/utils/exporters/blender/qt3d_armature_export.py158
-rw-r--r--tools/utils/exporters/blender/qt3d_path_export.py138
2 files changed, 296 insertions, 0 deletions
diff --git a/tools/utils/exporters/blender/qt3d_armature_export.py b/tools/utils/exporters/blender/qt3d_armature_export.py
new file mode 100644
index 000000000..de5583220
--- /dev/null
+++ b/tools/utils/exporters/blender/qt3d_armature_export.py
@@ -0,0 +1,158 @@
+#############################################################################
+##
+## Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the Qt3D module of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU Lesser General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU Lesser
+## General Public License version 3 as published by the Free Software
+## Foundation and appearing in the file LICENSE.LGPL3 included in the
+## packaging of this file. Please review the following information to
+## ensure the GNU Lesser General Public License version 3 requirements
+## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 2.0 or (at your option) the GNU General
+## Public license version 3 or any later version approved by the KDE Free
+## Qt Foundation. The licenses are as published by the Free Software
+## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-2.0.html and
+## https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+# Required Blender information.
+bl_info = {
+ "name": "Qt3D Armature Exporter",
+ "author": "Sean Harmer <sean.harmer@kdab.com>, Robert Brock <robert.brock@kdab.com>",
+ "version": (0, 1),
+ "blender": (2, 78, 0),
+ "location": "File > Export > Qt3D Armature Exporter (.json)",
+ "description": "Export Armature to json to use with Qt3D",
+ "warning": "",
+ "wiki_url": "",
+ "tracker_url": "",
+ "category": "Import-Export"
+ }
+
+import bpy
+import os
+import struct
+import mathutils
+import math
+import json
+from array import array
+from bpy import context
+from bpy_extras.io_utils import ExportHelper
+from bpy.props import (
+ BoolProperty,
+ FloatProperty,
+ StringProperty,
+ EnumProperty,
+ )
+from collections import defaultdict
+
+def jsonBuilder():
+ bonesList = []
+ name = ""
+ boneParent = ""
+
+ ob = bpy.context.object.data
+
+ for bone in ob.bones:
+
+ #check parent exists
+ if bone.parent:
+ boneParent = bone.parent.name
+ else:
+ boneParent = ""
+
+ #add the bones
+ bonesList.append({"bone": bone.name,
+ "parent": boneParent,
+ "matrix": jsonMatrix(bone)
+ })
+
+ return bonesList
+
+def jsonMatrix(bone):
+ matrix = []
+
+ for i in range(0, 4):
+ matrix.append(str("%.4f, %.4f, %.4f, %.4f" % (bone.matrix_local[i][0],
+ bone.matrix_local[i][1],
+ bone.matrix_local[i][2],
+ bone.matrix_local[i][3])))
+
+ return matrix
+
+
+class Qt3DMeshDataConverter:
+
+ def boneInfoToJson(self):
+ # Pass 1 - collect data we need to produce the output in pass 2
+ print(">>> About to enter Objects")
+
+ jsonData = json.dumps({ "bones": jsonBuilder()}, indent=2, sort_keys=True, separators=(',', ': '))
+ return jsonData
+
+
+class Qt3DArmatureExporter(bpy.types.Operator, ExportHelper):
+ """Qt3D Exporter"""
+ bl_idname = "export_scene.qt3d_armature_exporter";
+ bl_label = "Qt3DArmatureExporter";
+ bl_options = {'PRESET'};
+
+ filename_ext = ""
+ use_filter_folder = True
+
+ def __init__(self):
+ pass
+
+ def execute(self, context):
+ print("In Execute" + bpy.context.scene.name)
+
+ self.userpath = self.properties.filepath
+
+ # unselect all
+ bpy.ops.object.select_all(action='DESELECT')
+
+ converter = Qt3DMeshDataConverter()
+ fileContent = converter.boneInfoToJson()
+ with open(self.userpath + ".json", '+w') as f:
+ f.write(fileContent)
+
+ return {'FINISHED'}
+
+def createBlenderMenu(self, context):
+ self.layout.operator(Qt3DArmatureExporter.bl_idname, text="Qt3D Armature Export(.json)")
+
+# Register against Blender
+def register():
+ bpy.utils.register_class(Qt3DArmatureExporter)
+ bpy.types.INFO_MT_file_export.append(createBlenderMenu)
+
+def unregister():
+ bpy.utils.unregister_class(Qt3DArmatureExporter)
+ bpy.types.INFO_MT_file_export.remove(createBlenderMenu)
+
+# Handle running the script from Blender's text editor.
+if (__name__ == "__main__"):
+ register();
+ bpy.ops.export_scene.qt3d_Armature_exporter();
diff --git a/tools/utils/exporters/blender/qt3d_path_export.py b/tools/utils/exporters/blender/qt3d_path_export.py
new file mode 100644
index 000000000..7c42fac9a
--- /dev/null
+++ b/tools/utils/exporters/blender/qt3d_path_export.py
@@ -0,0 +1,138 @@
+#############################################################################
+##
+## Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the Qt3D module of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU Lesser General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU Lesser
+## General Public License version 3 as published by the Free Software
+## Foundation and appearing in the file LICENSE.LGPL3 included in the
+## packaging of this file. Please review the following information to
+## ensure the GNU Lesser General Public License version 3 requirements
+## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 2.0 or (at your option) the GNU General
+## Public license version 3 or any later version approved by the KDE Free
+## Qt Foundation. The licenses are as published by the Free Software
+## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-2.0.html and
+## https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+# Required Blender information.
+bl_info = {
+ "name": "Qt3D Path Exporter",
+ "author": "Sean Harmer <sean.harmer@kdab.com>, Robert Brock <robert.brock@kdab.com>",
+ "version": (0, 1),
+ "blender": (2, 78, 0),
+ "location": "File > Export > Qt3D Path Exporter (.json)",
+ "description": "Export path to json to use with Qt3D",
+ "warning": "",
+ "wiki_url": "",
+ "tracker_url": "",
+ "category": "Import-Export"
+ }
+
+import bpy
+import os
+import struct
+import mathutils
+import math
+import json
+from array import array
+from bpy_extras.io_utils import ExportHelper
+from bpy.props import (
+ BoolProperty,
+ FloatProperty,
+ StringProperty,
+ EnumProperty,
+ )
+from collections import defaultdict
+
+def jsonBuilder():
+ pathList = []
+ name = ""
+
+ obj = bpy.context.object
+ curve = obj.data
+ spline = curve.splines.active
+
+ for point in spline.points:
+ # add the stuff
+ pathList.append({"position": str("%.0f, %.0f, %.0f" % (point.co[0] * -1,
+ point.co[2],
+ point.co[1]))})
+
+ return pathList
+
+class Qt3DPathDataConverter:
+
+ def pathInfoToJson(self):
+ # Pass 1 - collect data we need to produce the output in pass 2
+ print(">>> About to enter Objects")
+
+ jsonData = json.dumps({ "splines": jsonBuilder()}, indent=2, sort_keys=True, separators=(',', ': '))
+ return jsonData
+
+
+class Qt3DTDPathExporter(bpy.types.Operator, ExportHelper):
+ """Qt3D Exporter"""
+ bl_idname = "export_scene.qt3d_td_path_exporter";
+ bl_label = "Qt3DPathExporter";
+ bl_options = {'PRESET'};
+
+ filename_ext = ""
+ use_filter_folder = True
+
+ def __init__(self):
+ pass
+
+ def execute(self, context):
+ print("In Execute" + bpy.context.scene.name)
+
+ self.userpath = self.properties.filepath
+
+ # unselect all
+ bpy.ops.object.select_all(action='DESELECT')
+
+ converter = Qt3DPathDataConverter()
+ fileContent = converter.pathInfoToJson()
+ with open(self.userpath + ".json", '+w') as f:
+ f.write(fileContent)
+
+ return {'FINISHED'}
+
+def createBlenderMenu(self, context):
+ self.layout.operator(Qt3DPathExporter.bl_idname, text="Qt3D Path Export(.json)")
+
+# Register against Blender
+def register():
+ bpy.utils.register_class(Qt3DPathExporter)
+ bpy.types.INFO_MT_file_export.append(createBlenderMenu)
+
+def unregister():
+ bpy.utils.unregister_class(Qt3DPathExporter)
+ bpy.types.INFO_MT_file_export.remove(createBlenderMenu)
+
+# Handle running the script from Blender's text editor.
+if (__name__ == "__main__"):
+ register();
+ bpy.ops.export_scene.qt3d_path_exporter();