Browse Source

Changes from PR and added vertices to the Table View

Signed-off-by: John Jones-Steele <[email protected]>
John Jones-Steele 2 years ago
parent
commit
31943986e0
17 changed files with 93 additions and 50 deletions
  1. 1 1
      Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp
  2. 0 2
      Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/AssetFolderTableView.cpp
  3. 0 1
      Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/AssetFolderTableView.h
  4. 2 6
      Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserExpandedFilterModel.cpp
  5. 1 3
      Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserExpandedFilterModel.h
  6. 20 13
      Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserExpandedTableViewProxyModel.cpp
  7. 9 0
      Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserExpandedTableViewProxyModel.h
  8. 5 0
      Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntry.cpp
  9. 3 0
      Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntry.h
  10. 23 15
      Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/RootAssetBrowserEntry.cpp
  11. 2 2
      Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserExpandedTableView.h
  12. 5 2
      Code/Tools/SceneAPI/SDKWrapper/AssImpSceneWrapper.cpp
  13. 3 1
      Code/Tools/SceneAPI/SDKWrapper/AssImpSceneWrapper.h
  14. 1 0
      Code/Tools/SceneAPI/SceneBuilder/SceneImporter.cpp
  15. 10 0
      Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp
  16. 3 0
      Code/Tools/SceneAPI/SceneCore/Containers/Scene.h
  17. 5 4
      Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp

+ 1 - 1
Code/Editor/AzAssetBrowser/AzAssetBrowserWindow.cpp

@@ -38,7 +38,7 @@ AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
 
 AZ_CVAR_EXTERNED(bool, ed_useNewAssetBrowserTableView);
 
-AZ_CVAR(bool, ed_useWIPAssetBrowserDesign, true, nullptr, AZ::ConsoleFunctorFlags::Null, "Use the in-progress new Asset Browser design");
+AZ_CVAR(bool, ed_useWIPAssetBrowserDesign, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Use the in-progress new Asset Browser design");
 
 //! When the Asset Browser window is resized to be less than this many pixels in width
 //! the layout changes to accomodate its narrow state better. See AzAssetBrowserWindow::SetNarrowMode

+ 0 - 2
Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/AssetFolderTableView.cpp

@@ -26,8 +26,6 @@ namespace AzQtComponents
         setSortingEnabled(true);
     }
 
-    AssetFolderTableView::~AssetFolderTableView() = default;
-
     void AssetFolderTableView::setRootIndex(const QModelIndex& index)
     {
         if (index != rootIndex())

+ 0 - 1
Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/AssetFolderTableView.h

@@ -25,7 +25,6 @@ namespace AzQtComponents
 
     public:
         explicit AssetFolderTableView(QWidget* parent = nullptr);
-        ~AssetFolderTableView() override;
 
         void SetShowSearchResultsMode(bool searchMode);
         void setRootIndex(const QModelIndex& index) override;

+ 2 - 6
Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserExpandedFilterModel.cpp

@@ -35,13 +35,9 @@ namespace AzToolsFramework
             m_shownColumns.insert(aznumeric_cast<int>(AssetBrowserEntry::Column::DiskSize));
             m_shownColumns.insert(aznumeric_cast<int>(AssetBrowserEntry::Column::Vertices));
             m_shownColumns.insert(aznumeric_cast<int>(AssetBrowserEntry::Column::ApproxSize));
-            m_shownColumns.insert(aznumeric_cast<int>(AssetBrowserEntry::Column::SourceControlStatus));
+            // The below isn't used at present but will be needed in future
+            // m_shownColumns.insert(aznumeric_cast<int>(AssetBrowserEntry::Column::SourceControlStatus));
         }
-
-        AssetBrowserExpandedFilterModel::~AssetBrowserExpandedFilterModel()
-        {
-        }
-
     } // namespace AssetBrowser
 } // namespace AzToolsFramework
 

+ 1 - 3
Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserExpandedFilterModel.h

@@ -23,10 +23,8 @@ namespace AzToolsFramework
             Q_OBJECT
 
         public:
-            AZ_CLASS_ALLOCATOR(AssetBrowserExpandedFilterModel, AZ::SystemAllocator, 0);
+            AZ_CLASS_ALLOCATOR(AssetBrowserExpandedFilterModel, AZ::SystemAllocator);
             explicit AssetBrowserExpandedFilterModel(QObject* parent = nullptr);
-            ~AssetBrowserExpandedFilterModel() override;
-
         };
     } // namespace AssetBrowser
 } // namespace AzToolsFramework

+ 20 - 13
Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserExpandedTableViewProxyModel.cpp

@@ -28,7 +28,7 @@ namespace AzToolsFramework
             AZ_Assert(assetBrowserEntry, "Couldn't fetch asset entry for the given index.");
             if (!assetBrowserEntry)
             {
-                return " No Data ";
+                return tr(" No Data ");
             }
 
             switch (role)
@@ -37,29 +37,35 @@ namespace AzToolsFramework
                 {
                     switch (index.column())
                     {
-                    case 0:
+                    case Name:
                         return static_cast<const SourceAssetBrowserEntry*>(assetBrowserEntry)->GetName().c_str();
-                    case 1:
+                    case Type:
                         {
                             switch (assetBrowserEntry->GetEntryType())
                             {
                             case AssetBrowserEntry::AssetEntryType::Root:
-                                return "Root";
+                                return tr("Root");
                             case AssetBrowserEntry::AssetEntryType::Folder:
-                                return "Folder";
+                                return tr("Folder");
                             case AssetBrowserEntry::AssetEntryType::Source:
                                 return ExtensionToType(static_cast<const SourceAssetBrowserEntry*>(assetBrowserEntry)->GetExtension()).c_str();
                             case AssetBrowserEntry::AssetEntryType::Product:
-                                return "Product";
+                                return tr("Product");
                             }
                         }
-                    case 2:
+                    case DiskSize:
                         if (assetBrowserEntry->GetEntryType() == AssetBrowserEntry::AssetEntryType::Source)
                         {
                             return QString{ "%1" }.arg(assetBrowserEntry->GetDiskSize() / 1024.0, 0, 'f', 3);
                         }
-                        return "";
-                    case 4:
+                        break;
+                    case Vertices:
+                        if (assetBrowserEntry->GetNumVertices() > 0)
+                        {
+                            return assetBrowserEntry->GetNumVertices();
+                        }
+                        break;
+                    case ApproxSize:
                         if (!AZStd::isnan(assetBrowserEntry->GetDimension().GetX()))
                         {
                             const AZ::Vector3& dim{ assetBrowserEntry->GetDimension() };
@@ -72,11 +78,11 @@ namespace AzToolsFramework
                         }
                         return "";
                     default:
-                        return "No data";
+                        return "";
                     }
                 }
             case Qt::TextAlignmentRole:
-                if (index.column() == 2)
+                if (index.column() == DiskSize || index.column() == Vertices)
                 {
                     return QVariant(Qt::AlignRight | Qt::AlignVCenter);
                 }
@@ -111,7 +117,7 @@ namespace AzToolsFramework
 
         int AssetBrowserExpandedTableViewProxyModel::columnCount([[maybe_unused]]const QModelIndex& parent) const
         {
-            return 6;
+            return ColumnCount;
         }
 
         void AssetBrowserExpandedTableViewProxyModel::SetRootIndex(const QModelIndex& index)
@@ -161,6 +167,7 @@ namespace AzToolsFramework
             case ".lua"_hash:
                 return "Lua Script";
             case ".tif"_hash:
+            case ".tiff"_hash:
                 return "TIF";
             case ".physxmaterial"_hash:
                 return "PhysX Material";
@@ -177,7 +184,7 @@ namespace AzToolsFramework
             case ".exr"_hash:
                 return "EXR";
             case ".wav"_hash:
-                return ".WAV";
+                return "WAV";
             case ".uicanvas"_hash:
                 return "UI Canvas";
             case ".wwu"_hash:

+ 9 - 0
Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserExpandedTableViewProxyModel.h

@@ -24,6 +24,15 @@ namespace AzToolsFramework
             explicit AssetBrowserExpandedTableViewProxyModel(QObject* parent = nullptr);
             ~AssetBrowserExpandedTableViewProxyModel() override;
 
+            enum
+            {
+                Name,
+                Type,
+                DiskSize,
+                Vertices,
+                ApproxSize,
+                ColumnCount
+            };
             QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
             QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
             int columnCount(const QModelIndex& parent = QModelIndex()) const override;

+ 5 - 0
Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntry.cpp

@@ -208,6 +208,11 @@ namespace AzToolsFramework
             return m_dimension;
         }
 
+        const uint32_t AssetBrowserEntry::GetNumVertices() const
+        {
+            return m_vertices;
+        }
+
         const AssetBrowserEntry* AssetBrowserEntry::GetChild(int index) const
         {
             if (index < m_children.size())

+ 3 - 0
Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/AssetBrowserEntry.h

@@ -118,6 +118,8 @@ namespace AzToolsFramework
             const size_t GetDiskSize() const;
             //! Returns the dimension of the model
             const AZ::Vector3& GetDimension() const;
+            //! Returns the number of vertices in the model
+            const uint32_t GetNumVertices() const;
 
             //! Get immediate children of specific type
             template<typename EntryType>
@@ -152,6 +154,7 @@ namespace AzToolsFramework
             AZ::IO::Path m_fullPath;
             size_t m_diskSize;
             AZ::Vector3 m_dimension{ NAN, NAN, NAN };
+            uint32_t m_vertices{ 0 };
             AZStd::vector<AssetBrowserEntry*> m_children;
             AssetBrowserEntry* m_parentAssetEntry = nullptr;
 

+ 23 - 15
Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Entries/RootAssetBrowserEntry.cpp

@@ -13,7 +13,8 @@
 
 #include <AzCore/IO/FileIO.h>
 #include <AzCore/IO/Path/Path.h>
-#include <AzCore/JSON/filereadstream.h>
+#include <AzCore/Serialization/Json/JsonSerialization.h>
+#include <AzCore/Serialization/Json/JsonUtils.h>
 #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
 #include <AzCore/Utils/Utils.h>
 
@@ -136,24 +137,31 @@ namespace AzToolsFramework
                 {
                     settingsRegistry->Get(assetPath.Native(), AZ::SettingsRegistryMergeUtils::FilePathKey_CacheRootFolder);
                     assetPath /= fileDatabaseEntry.m_fileName + ".metadata.json";
-                    FILE* f1;
-                    azfopen(&f1, assetPath.c_str(), "r");
-                    if (f1)
-                    {
-                        char readBuffer[65536];
-                        rapidjson::FileReadStream is(f1, readBuffer, sizeof(readBuffer));
 
-                        rapidjson::Document doc;
-                        doc.ParseStream(is);
-                        fclose(f1);
+                    auto result = AZ::JsonSerializationUtils::ReadJsonFile(assetPath.Native());
+
+                    if (result)
+                    {
+                        auto& doc = result.GetValue();
 
                         const rapidjson::Value& metadata = doc["metadata"];
-                        const rapidjson::Value& dimension = metadata["dimension"];
-                        if (dimension.IsArray())
+                        if (metadata.HasMember("dimension"))
+                        {
+                            const rapidjson::Value& dimension = metadata["dimension"];
+                            if (dimension.IsArray())
+                            {
+                                source->m_dimension.SetX(static_cast<float>(dimension[0].GetDouble()));
+                                source->m_dimension.SetY(static_cast<float>(dimension[1].GetDouble()));
+                                source->m_dimension.SetZ(static_cast<float>(dimension[2].GetDouble()));
+                            }
+                        }
+                        if (metadata.HasMember("vertices"))
                         {
-                            source->m_dimension.SetX(static_cast<float>(dimension[0].GetDouble()));
-                            source->m_dimension.SetY(static_cast<float>(dimension[1].GetDouble()));
-                            source->m_dimension.SetZ(static_cast<float>(dimension[2].GetDouble()));
+                            const rapidjson::Value& vertices = metadata["vertices"];
+                            if (vertices.IsUint())
+                            {
+                                source->m_vertices = vertices.GetUint();
+                            }
                         }
                     }
                 }

+ 2 - 2
Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/AssetBrowserExpandedTableView.h

@@ -34,7 +34,7 @@ namespace AzToolsFramework
             : public QStyledItemDelegate
         {
         public:
-            AZ_CLASS_ALLOCATOR(ExpandedTableViewDelegate, AZ::SystemAllocator, 0);
+            AZ_CLASS_ALLOCATOR(ExpandedTableViewDelegate, AZ::SystemAllocator);
             ExpandedTableViewDelegate(QWidget* parent = nullptr);
 
             void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
@@ -45,7 +45,7 @@ namespace AzToolsFramework
         {
             Q_OBJECT
         public:
-            AZ_CLASS_ALLOCATOR(AssetBrowserExpandedTableView, AZ::SystemAllocator, 0);
+            AZ_CLASS_ALLOCATOR(AssetBrowserExpandedTableView, AZ::SystemAllocator);
 
             explicit AssetBrowserExpandedTableView(QWidget* parent = nullptr);
             ~AssetBrowserExpandedTableView() override;

+ 5 - 2
Code/Tools/SceneAPI/SDKWrapper/AssImpSceneWrapper.cpp

@@ -86,7 +86,7 @@ namespace AZ
                 | static_cast<unsigned long>(aiProcess_GenBoundingBoxes) // Generate bounding boxes
                 | aiProcess_GenNormals); //Generate normals for meshes
 
-            CalculateAABB(m_assImpScene, m_aabb);
+            CalculateAABBandVertices(m_assImpScene, m_aabb, m_vertices);
 
 #if AZ_TRAIT_COMPILER_SUPPORT_CSIGNAL
             // Reset abort behavior for anything else that may call abort.
@@ -120,11 +120,13 @@ namespace AZ
             return std::shared_ptr<SDKNode::NodeWrapper>(new AssImpNodeWrapper(m_assImpScene->mRootNode));
         }
 
-        void AssImpSceneWrapper::CalculateAABB(const aiScene* scene, aiAABB& aabb)
+        void AssImpSceneWrapper::CalculateAABBandVertices(const aiScene* scene, aiAABB& aabb, uint32_t& vertices)
         {
             if (scene->HasMeshes())
             {
                 aabb = scene->mMeshes[0]->mAABB;
+                vertices = scene->mMeshes[0]->mNumVertices;
+
                 for (unsigned int i = 1; i < scene->mNumMeshes; ++i)
                 {
                     const aiAABB& thisAabb = scene->mMeshes[i]->mAABB;
@@ -140,6 +142,7 @@ namespace AZ
                         aabb.mMax.y = thisAabb.mMax.y;
                     if (thisAabb.mMax.z > aabb.mMax.z)
                         aabb.mMax.z = thisAabb.mMax.z;
+                    vertices += scene->mMeshes[i]->mNumVertices;
                 }
             }
         }

+ 3 - 1
Code/Tools/SceneAPI/SDKWrapper/AssImpSceneWrapper.h

@@ -31,7 +31,7 @@ namespace AZ
             std::shared_ptr<SDKNode::NodeWrapper> GetRootNode() override;
             virtual const aiScene* GetAssImpScene() const;
             void Clear() override;
-            void CalculateAABB(const aiScene* scene, aiAABB& aabb);
+            void CalculateAABBandVertices(const aiScene* scene, aiAABB& aabb, uint32_t& vertices);
 
             enum class AxisVector
             {
@@ -46,6 +46,7 @@ namespace AZ
 
             AZStd::string GetSceneFileName() const { return m_sceneFileName; }
             aiAABB GetAABB() const { return m_aabb; }
+            uint32_t GetVertices() const { return m_vertices; }
         protected:
             const aiScene* m_assImpScene = nullptr;
             AZStd::unique_ptr<Assimp::Importer> m_importer;
@@ -54,6 +55,7 @@ namespace AZ
             // AssImp does not, so it needs to be specifically handled.
             AZStd::string m_sceneFileName;
             aiAABB m_aabb;
+            uint32_t m_vertices;
         };
 
     } // namespace AssImpSDKWrapper

+ 1 - 0
Code/Tools/SceneAPI/SceneBuilder/SceneImporter.cpp

@@ -106,6 +106,7 @@ namespace AZ
                 aiVector3t dimension = aabb.mMax - aabb.mMin;
                 Vector3 t{ dimension.x, dimension.y, dimension.z };
                 scene.SetSceneDimension(t);
+                scene.SetSceneVertices(assImpSceneWrapper->GetVertices());
 
                 if (upAxisAndSign.second <= 0)
                 {

+ 10 - 0
Code/Tools/SceneAPI/SceneCore/Containers/Scene.cpp

@@ -108,6 +108,11 @@ namespace AZ
                 m_hasDimension = true;
             }
 
+            void Scene::SetSceneVertices(uint32_t vertices)
+            {
+                m_vertices = vertices;
+            }
+
             bool Scene::HasDimension() const
             {
                 return m_hasDimension;
@@ -123,6 +128,11 @@ namespace AZ
                 return m_sceneDimension;
             }
 
+            uint32_t Scene::GetSceneVertices() const
+            {
+                return m_vertices;
+            }
+
             void Scene::Reflect(ReflectContext* context)
             {
                 AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context);

+ 3 - 0
Code/Tools/SceneAPI/SceneCore/Containers/Scene.h

@@ -55,8 +55,10 @@ namespace AZ
 
                 void SetOriginalSceneOrientation(SceneOrientation orientation);
                 void SetSceneDimension(Vector3 dimension);
+                void SetSceneVertices(uint32_t vertices);
                 SceneOrientation GetOriginalSceneOrientation() const;
                 Vector3& GetSceneDimension();
+                uint32_t GetSceneVertices() const;
                 static void Reflect(ReflectContext* context);
 
             private:
@@ -71,6 +73,7 @@ namespace AZ
                 SceneManifest m_manifest;
                 SceneOrientation m_originalOrientation = SceneOrientation::YUp;
                 Vector3 m_sceneDimension;
+                uint32_t m_vertices;
                 bool m_hasDimension{ false };
             AZ_POP_DISABLE_WARNING
             };

+ 5 - 4
Gems/SceneProcessing/Code/Source/SceneBuilder/SceneBuilderWorker.cpp

@@ -454,12 +454,13 @@ namespace SceneBuilder
             writer.Double(dimension.GetY());
             writer.Double(dimension.GetZ());
             writer.EndArray();
+            writer.Key("vertices");
+            writer.Uint(scene->GetSceneVertices());
             writer.EndObject();
             writer.EndObject();
-            FILE* f1;
-            azfopen(&f1, folder.c_str(), "w");
-            fwrite(s.GetString(), 1, s.GetSize(), f1);
-            fclose(f1);
+            rapidjson::Document doc;
+            doc.Parse(s.GetString());
+            AZ::JsonSerializationUtils::WriteJsonFile(doc, folder.c_str());
             AssetBuilderSDK::JobProduct jsonProduct(folder);
             response.m_outputProducts.emplace_back(jsonProduct);
         }