Переглянути джерело

Adjusted the resetting of the flags to acommodate cases where not all the flags are present in the config file.

raheelx 9 роки тому
батько
коміт
2eb043d40e

+ 59 - 58
Source/ToolCore/Import/OpenAssetImporter.cpp

@@ -74,66 +74,24 @@ OpenAssetImporter::OpenAssetImporter(Context* context) : Object(context) ,
     maxBones_(64),
     defaultTicksPerSecond_(4800.0f),
     startTime_(-1),
-    endTime_(-1), 
-    configSettingsAvailable_(false)
+    endTime_(-1)
 {
 
-    ReadImportConfig();
-
-    if (configSettingsAvailable_)
-    {
-        VariantMap::ConstIterator itr = aiFlagParameters_.Begin();
-
-        aiFlagsDefault_ = 0;
-
-        while (itr != aiFlagParameters_.End())
-        {
-            if (itr->second_ == true)
-            {
-                if (itr->first_ == "aiProcess_ConvertToLeftHanded")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_ConvertToLeftHanded;
-                else if (itr->first_ == "aiProcess_JoinIdenticalVertices")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_JoinIdenticalVertices;
-                else if (itr->first_ == "aiProcess_Triangulate")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_Triangulate;
-                else if (itr->first_ == "aiProcess_GenSmoothNormals")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_GenSmoothNormals;
-                else if (itr->first_ == "aiProcess_LimitBoneWeights")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_LimitBoneWeights;
-                else if (itr->first_ == "aiProcess_ImproveCacheLocality")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_ImproveCacheLocality;
-                else if (itr->first_ == "aiProcess_FixInfacingNormals")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_FixInfacingNormals;
-                else if (itr->first_ == "aiProcess_FindInvalidData")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_FindInvalidData;
-                else if (itr->first_ == "aiProcess_GenUVCoords")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_GenUVCoords;
-                else if (itr->first_ == "aiProcess_FindInstances")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_FindInstances;
-                else if (itr->first_ == "aiProcess_OptimizeMeshes")
-                    aiFlagsDefault_ = aiFlagsDefault_ | aiProcess_OptimizeMeshes;
-            }
+    aiFlagsDefault_ =
+        aiProcess_ConvertToLeftHanded |
+        aiProcess_JoinIdenticalVertices |
+        aiProcess_Triangulate |
+        aiProcess_GenSmoothNormals |
+        aiProcess_LimitBoneWeights |
+        aiProcess_ImproveCacheLocality |
+        aiProcess_FixInfacingNormals |
+        aiProcess_FindInvalidData |
+        aiProcess_GenUVCoords |
+        aiProcess_FindInstances |
+        aiProcess_OptimizeMeshes;
 
-            itr++;
-        }
+    ReadImportConfig();
 
-        configSettingsAvailable_ = false;
-    } 
-    else
-    {
-        aiFlagsDefault_ =
-            aiProcess_ConvertToLeftHanded |
-            aiProcess_JoinIdenticalVertices |
-            aiProcess_Triangulate |
-            aiProcess_GenSmoothNormals |
-            aiProcess_LimitBoneWeights |
-            aiProcess_ImproveCacheLocality |
-            aiProcess_FixInfacingNormals |
-            aiProcess_FindInvalidData |
-            aiProcess_GenUVCoords |
-            aiProcess_FindInstances |
-            aiProcess_OptimizeMeshes;
-    }
     // TODO:  make this an option on importer
 
     aiFlagsDefault_ |= aiProcess_CalcTangentSpace;
@@ -908,6 +866,48 @@ void OpenAssetImporter::CollectAnimations(OutModel* model)
     /// \todo Vertex morphs are ignored for now
 }
 
+void OpenAssetImporter::ApplyFlag(int flag, bool active)
+{
+    aiFlagsDefault_ &= ~flag;
+    if (active)
+        aiFlagsDefault_ |= flag;
+}
+
+void OpenAssetImporter::SetOveriddenFlags(VariantMap aiFlagParameters)
+{
+
+    VariantMap::ConstIterator itr = aiFlagParameters.Begin();
+
+    while (itr != aiFlagParameters.End())
+    {
+        if (itr->first_ == "aiProcess_ConvertToLeftHanded")
+            ApplyFlag(aiProcess_ConvertToLeftHanded, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_JoinIdenticalVertices")
+            ApplyFlag(aiProcess_JoinIdenticalVertices, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_Triangulate")
+            ApplyFlag(aiProcess_Triangulate, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_GenSmoothNormals")
+            ApplyFlag(aiProcess_GenSmoothNormals, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_LimitBoneWeights")
+            ApplyFlag(aiProcess_LimitBoneWeights, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_ImproveCacheLocality")
+            ApplyFlag(aiProcess_ImproveCacheLocality, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_FixInfacingNormals")
+            ApplyFlag(aiProcess_FixInfacingNormals, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_FindInvalidData")
+            ApplyFlag(aiProcess_FindInvalidData, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_GenUVCoords")
+            ApplyFlag(aiProcess_GenUVCoords, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_FindInstances")
+            ApplyFlag(aiProcess_FindInstances, itr->second_.GetBool());
+        else if (itr->first_ == "aiProcess_OptimizeMeshes")
+            ApplyFlag(aiProcess_OptimizeMeshes, itr->second_.GetBool());
+
+        itr++;
+    }
+
+}
+
 void OpenAssetImporter::ReadImportConfig()
 {
     ToolSystem* tsystem = GetSubsystem<ToolSystem>();
@@ -923,8 +923,9 @@ void OpenAssetImporter::ReadImportConfig()
 
     if (ImportConfig::LoadFromFile(context_, filename))
     {
-        configSettingsAvailable_ = true;
-        ImportConfig::ApplyConfig(aiFlagParameters_);
+        VariantMap aiFlagParameters;
+        ImportConfig::ApplyConfig(aiFlagParameters);
+        SetOveriddenFlags(aiFlagParameters);
     }
 
 }

+ 2 - 3
Source/ToolCore/Import/OpenAssetImporter.h

@@ -83,6 +83,8 @@ private:
     void CollectAnimations(OutModel* model = 0);
 
     void ReadImportConfig();
+    void SetOveriddenFlags(VariantMap aiFlagParameters);
+    void ApplyFlag(int processStep, bool active);
 
     String GetMeshMaterialName(aiMesh* mesh);
     String GenerateMaterialName(aiMaterial* material);
@@ -142,9 +144,6 @@ private:
     float startTime_;
     float endTime_;
 
-    VariantMap aiFlagParameters_;
-    bool configSettingsAvailable_;
-
 };
 
 }