From 0d63d1f971d5fd4e087ad893c0561cf341316adc Mon Sep 17 00:00:00 2001
From: Andy Nichols <andy.nichols@qt.io>
Date: Wed, 5 Aug 2020 16:21:36 +0200
Subject: [PATCH] Add assimp import option to preserve pivot hierarchies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

And turn it off by default since this can lead to very deep QML files
that are slow to load and edit.  The only time these are necessary is
with certain types of animations. So only turn this on when needed.

Fixes: QTBUG-85147
Change-Id: I98b9c2e25b9811fe729afc30b37d2e626fc71a05
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
(cherry picked from commit 171406ff4509ac49d1889a2404a302db39aa9383)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
---
 src/imports/quick3d/doc/src/qtquick3d-tool-balsam.qdoc | 2 ++
 src/plugins/assetimporters/assimp/assimpimporter.cpp   | 3 +++
 src/plugins/assetimporters/assimp/options.json         | 6 ++++++
 3 files changed, 11 insertions(+)

diff --git a/src/imports/quick3d/doc/src/qtquick3d-tool-balsam.qdoc b/src/imports/quick3d/doc/src/qtquick3d-tool-balsam.qdoc
index 74f130c83..4d2002758 100644
--- a/src/imports/quick3d/doc/src/qtquick3d-tool-balsam.qdoc
+++ b/src/imports/quick3d/doc/src/qtquick3d-tool-balsam.qdoc
@@ -167,6 +167,8 @@ meshes.
 from meshes.
 \row \li \c {--removeComponentTextures} \li Removes any embedded texture
 components from meshes.
+\row \li \c {--fbxPreservePivots} \li Preserves extra pivot nodes created by
+FBX assets (can create deep node hierarchies)
 \endtable
 
 The following table lists the command-line options recognized by \c balsam when
diff --git a/src/plugins/assetimporters/assimp/assimpimporter.cpp b/src/plugins/assetimporters/assimp/assimpimporter.cpp
index c8b50b320..c9787035c 100644
--- a/src/plugins/assetimporters/assimp/assimpimporter.cpp
+++ b/src/plugins/assetimporters/assimp/assimpimporter.cpp
@@ -1568,6 +1568,9 @@ void AssimpImporter::processOptions(const QVariantMap &options)
         m_postProcessSteps = aiPostProcessSteps(m_postProcessSteps | aiProcess_RemoveComponent);
         m_importer->SetPropertyInteger(AI_CONFIG_PP_RVC_FLAGS, removeComponents);
     }
+
+    bool preservePivots = checkBooleanOption(QStringLiteral("fbxPreservePivots"), optionsObject);
+    m_importer->SetPropertyBool(AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS, preservePivots);
 }
 
 bool AssimpImporter::checkBooleanOption(const QString &optionName, const QJsonObject &options)
diff --git a/src/plugins/assetimporters/assimp/options.json b/src/plugins/assetimporters/assimp/options.json
index fc108a452..02f24f446 100644
--- a/src/plugins/assetimporters/assimp/options.json
+++ b/src/plugins/assetimporters/assimp/options.json
@@ -162,6 +162,12 @@
             "description": "Removes any embedded texture components from meshes.",
             "value": false,
             "type": "Boolean"
+        },
+        "fbxPreservePivots": {
+            "name": "FBX: Preserve Pivot Points",
+            "description": "Set whether the fbx importer will preserve pivot points (as extra nodes)",
+            "value": false,
+            "type": "Boolean"
         }
     },
     "groups": {
-- 
GitLab