Files
UnrealEngine/Engine/Plugins/Enterprise/DatasmithCADImporter/Source/CADInterfaces/Private/CADFileData.cpp
2025-05-18 13:04:45 +08:00

108 lines
3.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "CADFileData.h"
#include "Misc/FileHelper.h"
namespace CADLibrary
{
void FCADFileData::InitCsvFile()
{
FString CsvData;
CsvData.Reserve(FCString::Strlen(CSV_HEADER) * 2);
CsvData += CSV_HEADER;
const FString& RootPath = FileDescription.GetRootFolder();
const FString& FilePath = FileDescription.GetSourcePath();
//Input File
FString FileName = FilePath.Right(FilePath.Len() - RootPath.Len() - 1);
FileName.ReplaceCharInline(TEXT(','), TEXT('_'));
CsvData += FileName + TEXT(",");
//Input File
CsvData += SceneGraphArchive.ArchiveFileName + TEXT(",");
//FileSize
FFileStatData FileStatData = IFileManager::Get().GetStatData(*FileDescription.GetSourcePath());
constexpr int64 OneKiloBit = 1024;
CsvData += FString::Printf(TEXT("%d,"), FileStatData.FileSize / OneKiloBit);
CsvData += TEXT("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
FString CsvPath = GetValidationFilePath();
FFileHelper::SaveStringToFile(*CsvData, *CsvPath, FFileHelper::EEncodingOptions::ForceUTF8);
}
void FCADFileData::ExportValidationData()
{
FString CsvData;
CsvData.Reserve(FCString::Strlen(CSV_HEADER));
//Time.LoadStep
CsvData += FString::Printf(TEXT("%f,"), Record.ImportTime);
//Time.SavePrcTime
CsvData += FString::Printf(TEXT("%f,"), Record.SavePrcTime);
//Time.AdaptBRepTime
CsvData += FString::Printf(TEXT("%f,"), Record.AdaptBRepTime);
//Time.SewStep
CsvData += FString::Printf(TEXT("%f,"), Record.SewTime);
//Time.MeshStep
CsvData += FString::Printf(TEXT("%f,"), Record.MeshTime);
//Time.Total
CsvData += FString::Printf(TEXT("%f,"), Record.LoadProcessTime);
//MemoryUsage
constexpr float OneMegaBit = 1024.f * 1024.f;
uint64 MaxUsedMemory = Record.MaxMemoryUsed - Record.StartMemoryUsed;
float MaxUsedMemoryF = static_cast<float>(MaxUsedMemory) / OneMegaBit;
CsvData += FString::Printf(TEXT("%f,"), MaxUsedMemoryF);
//SceneGrapheData.InstanceNum
CsvData.AppendInt(SceneGraphArchive.Instances.Num());
CsvData += TEXT(",");
//SceneGrapheData.Bodies
CsvData.AppendInt(SceneGraphArchive.Bodies.Num());
CsvData += TEXT(",");
//SceneGrapheData.References
CsvData.AppendInt(SceneGraphArchive.References.Num());
CsvData += TEXT(",");
//SceneGrapheData.UnloadedReferences
CsvData.AppendInt(SceneGraphArchive.UnloadedReferences.Num());
CsvData += TEXT(",");
//SceneGrapheData.ExternalReferenceFiles
CsvData.AppendInt(SceneGraphArchive.ExternalReferenceFiles.Num());
CsvData += TEXT(",");
//SceneGrapheData.ColorHIdToColor
CsvData.AppendInt(SceneGraphArchive.ColorHIdToColor.Num());
CsvData += TEXT(",");
//SceneGrapheData.MaterialHIdToMaterial
CsvData.AppendInt(SceneGraphArchive.MaterialHIdToMaterial.Num());
CsvData += TEXT(",");
int32 FaceCount = 0;
int32 VertexCount = 0;
GetMeshStatsToCsv(FaceCount, VertexCount);
//Meshes.FaceCount
CsvData.AppendInt(FaceCount);
CsvData += TEXT(",");
//Meshes.VertexCount
CsvData.AppendInt(VertexCount);
CsvData += TEXT(",");
CsvData += TEXT('\0');
FString CsvPath = GetValidationFilePath();
FFileHelper::SaveStringToFile(*CsvData, *CsvPath, FFileHelper::EEncodingOptions::ForceUTF8, &IFileManager::Get(), EFileWrite::FILEWRITE_Append);
}
void FCADFileData::GetMeshStatsToCsv(int32& FaceCount, int32& VertexCount)
{
for (const FBodyMesh& BodyMesh : BodyMeshes)
{
FaceCount += BodyMesh.Faces.Num();
VertexCount += BodyMesh.VertexArray.Num();
}
}
}