// Copyright Epic Games, Inc. All Rights Reserved. #include "MeshProcessingNodes/MeshThickenNode.h" #include "Operations/DisplaceMesh.h" using namespace UE::Geometry; using namespace UE::GeometryFlow; void FMeshThickenNode::ProcessMesh( const FNamedDataMap& DatasIn, const FMeshThickenSettings& SettingsIn, const FDynamicMesh3& MeshIn, FDynamicMesh3& MeshOut, TUniquePtr& EvaluationInfo) { TSafeSharedPtr WeightMapMeshArg = DatasIn.FindData(InParamWeightMap()); FWeightMap WeightMap; WeightMapMeshArg->GetDataCopy(WeightMap, (int)EMeshProcessingDataTypes::WeightMap); MeshOut = MeshIn; ApplyThicken(MeshOut, SettingsIn, WeightMap.Weights); } void FMeshThickenNode::ProcessMeshInPlace( const FNamedDataMap& DatasIn, const FMeshThickenSettings& Settings, FDynamicMesh3& MeshInOut, TUniquePtr& EvaluationInfo) { TSafeSharedPtr WeightMapMeshArg = DatasIn.FindData(InParamWeightMap()); FWeightMap WeightMap; WeightMapMeshArg->GetDataCopy(WeightMap, (int)EMeshProcessingDataTypes::WeightMap); ApplyThicken(MeshInOut, Settings, WeightMap.Weights); } void FMeshThickenNode::ApplyThicken(FDynamicMesh3& Mesh, const FMeshThickenSettings& Settings, const TArray& VertexWeights) { if (VertexWeights.Num() == 0) { return; } // TODO: Accept existing normals and/or allow user to choose type of normal to compute FMeshNormals Normals(&Mesh); Normals.ComputeVertexNormals(); FDisplaceMesh::DisplaceMeshWithVertexWeights(Mesh, Normals, VertexWeights, Settings.ThickenAmount); }