From 2989e5d09f2be564a3c535f26302c6708006f580 Mon Sep 17 00:00:00 2001 From: mik14a Date: Tue, 3 May 2016 02:54:34 +0900 Subject: [PATCH] Simplify import option --- Source/VOX4UEditor/Private/Vox.cpp | 6 +--- .../VOX4UEditor/Private/VoxImportOption.cpp | 7 ++--- Source/VOX4UEditor/Private/VoxImportOption.h | 21 ++++++------- Source/VOX4UEditor/Private/VoxelFactory.cpp | 31 ++++++++----------- 4 files changed, 27 insertions(+), 38 deletions(-) diff --git a/Source/VOX4UEditor/Private/Vox.cpp b/Source/VOX4UEditor/Private/Vox.cpp index 5e40a90..8ed863f 100644 --- a/Source/VOX4UEditor/Private/Vox.cpp +++ b/Source/VOX4UEditor/Private/Vox.cpp @@ -234,11 +234,7 @@ bool FVox::CreateRawMesh(FRawMesh& OutRawMesh, const UVoxImportOption* ImportOpt TArray VertexPositionIndex; for (int VertexIndex = 0; VertexIndex < 4; ++VertexIndex) { FVector v = Origin + Vertexes[Faces[FaceIndex][VertexIndex]]; - int32 vpi; - if (!ImportOption->bMergeVertexes - || INDEX_NONE == (vpi = OutRawMesh.VertexPositions.IndexOfByKey(v))) { - vpi = OutRawMesh.VertexPositions.Add(v); - } + int32 vpi = OutRawMesh.VertexPositions.AddUnique(v); VertexPositionIndex.Add(vpi); } diff --git a/Source/VOX4UEditor/Private/VoxImportOption.cpp b/Source/VOX4UEditor/Private/VoxImportOption.cpp index d673245..592844f 100644 --- a/Source/VOX4UEditor/Private/VoxImportOption.cpp +++ b/Source/VOX4UEditor/Private/VoxImportOption.cpp @@ -11,12 +11,10 @@ UVoxImportOption::UVoxImportOption() : VoxImportType(EVoxImportType::StaticMesh) , bImportXForward(true) , bImportXYCenter(true) - , bMergeVertexes(true) - , Material(nullptr) - , Mesh(nullptr) + , Scale(10.f) { BuildSettings.bUseMikkTSpace = false; - BuildSettings.BuildScale3D = FVector(10.f); + BuildSettings.BuildScale3D = FVector(Scale); } bool UVoxImportOption::GetImportOption(bool& bOutImportAll) @@ -37,6 +35,7 @@ bool UVoxImportOption::GetImportOption(bool& bOutImportAll) FSlateApplication::Get().AddModalWindow(Window, ParentWindow, false); SaveConfig(); + BuildSettings.BuildScale3D = FVector(Scale); bOutImportAll = VoxOptionWidget->ShouldImportAll(); return VoxOptionWidget->ShouldImport(); diff --git a/Source/VOX4UEditor/Private/VoxImportOption.h b/Source/VOX4UEditor/Private/VoxImportOption.h index f4a99aa..513833c 100644 --- a/Source/VOX4UEditor/Private/VoxImportOption.h +++ b/Source/VOX4UEditor/Private/VoxImportOption.h @@ -34,17 +34,8 @@ class UVoxImportOption : public UObject UPROPERTY(EditAnywhere, Category = Generic) uint32 bImportXYCenter : 1; - UPROPERTY(EditAnywhere, Category = StaticMesh) - FMeshBuildSettings BuildSettings; - - UPROPERTY(EditAnywhere, Category = "StaticMesh|DestructibleMesh") - uint32 bMergeVertexes : 1; - - UPROPERTY(EditAnywhere, Category = "StaticMesh|DestructibleMesh") - class UMaterialInterface* Material; - - UPROPERTY(EditAnywhere, Category = "Voxel") - class UStaticMesh* Mesh; + UPROPERTY(EditAnywhere, Category = Generic) + float Scale; public: @@ -52,4 +43,12 @@ class UVoxImportOption : public UObject bool GetImportOption(bool& bOutImportAll); + const FMeshBuildSettings& GetBuildSettings() const { + return BuildSettings; + } + +private: + + FMeshBuildSettings BuildSettings; + }; diff --git a/Source/VOX4UEditor/Private/VoxelFactory.cpp b/Source/VOX4UEditor/Private/VoxelFactory.cpp index a46458f..a9ad6d7 100644 --- a/Source/VOX4UEditor/Private/VoxelFactory.cpp +++ b/Source/VOX4UEditor/Private/VoxelFactory.cpp @@ -167,7 +167,7 @@ UVoxel* UVoxelFactory::CreateVoxel(UObject* InParent, FName InName, EObjectFlags StaticMesh->Materials.Add(MaterialInstance); BuildStaticMesh(StaticMesh, RawMesh); - const FVector& Scale = ImportOption->BuildSettings.BuildScale3D; + const FVector& Scale = ImportOption->GetBuildSettings().BuildScale3D; FKBoxElem BoxElem(Scale.X, Scale.Y, Scale.Z); StaticMesh->BodySetup->AggGeom.BoxElems.Add(BoxElem); @@ -186,7 +186,7 @@ UStaticMesh* UVoxelFactory::BuildStaticMesh(UStaticMesh* OutStaticMesh, FRawMesh { check(OutStaticMesh); FStaticMeshSourceModel* StaticMeshSourceModel = new(OutStaticMesh->SourceModels) FStaticMeshSourceModel(); - StaticMeshSourceModel->BuildSettings = ImportOption->BuildSettings; + StaticMeshSourceModel->BuildSettings = ImportOption->GetBuildSettings(); StaticMeshSourceModel->RawMeshBulkData->SaveRawMesh(RawMesh); TArray Errors; OutStaticMesh->Build(false, &Errors); @@ -195,21 +195,16 @@ UStaticMesh* UVoxelFactory::BuildStaticMesh(UStaticMesh* OutStaticMesh, FRawMesh UMaterialInterface* UVoxelFactory::CreateMaterial(UObject* InParent, FName &InName, EObjectFlags Flags, const FVox* Vox) const { - UMaterialInterface* Material = ImportOption->Material ? ImportOption->Material : [&] { - UMaterialInterface* MaterialInterface = nullptr; - UTexture2D* Texture = NewObject(InParent, *FString::Printf(TEXT("%s_TX"), *InName.GetPlainNameString()), Flags | RF_Public); - if (Vox->CreateTexture(Texture, ImportOption)) { - UMaterial* Material = NewObject(InParent, *FString::Printf(TEXT("%s_MT"), *InName.GetPlainNameString()), Flags | RF_Public); - Material->TwoSided = false; - Material->SetShadingModel(MSM_DefaultLit); - UMaterialExpressionTextureSample* Expression = NewObject(Material); - Material->Expressions.Add(Expression); - Material->BaseColor.Expression = Expression; - Expression->Texture = Texture; - Material->PostEditChange(); - MaterialInterface = Material; - } - return MaterialInterface ? MaterialInterface : UMaterial::GetDefaultMaterial(MD_Surface); - }(); + UMaterial* Material = NewObject(InParent, *FString::Printf(TEXT("%s_MT"), *InName.GetPlainNameString()), Flags | RF_Public); + UTexture2D* Texture = NewObject(InParent, *FString::Printf(TEXT("%s_TX"), *InName.GetPlainNameString()), Flags | RF_Public); + if (Vox->CreateTexture(Texture, ImportOption)) { + Material->TwoSided = false; + Material->SetShadingModel(MSM_DefaultLit); + UMaterialExpressionTextureSample* Expression = NewObject(Material); + Material->Expressions.Add(Expression); + Material->BaseColor.Expression = Expression; + Expression->Texture = Texture; + Material->PostEditChange(); + } return Material; }