// Copyright Epic Games, Inc. All Rights Reserved. #include "Dataflow/ChaosFleshRadialTetrahedronNode.h" #include "Meshing/ChaosFleshRadialMeshing.h" #include "Chaos/Deformable/Utilities.h" #include "ChaosFlesh/ChaosFlesh.h" #include "Chaos/Utilities.h" #include "Chaos/UniformGrid.h" #include "ChaosFlesh/FleshCollection.h" #include "ChaosFlesh/FleshCollectionUtility.h" #include "ChaosLog.h" #include "Dataflow/DataflowInputOutput.h" #include "Dataflow/ChaosFleshNodesUtility.h" #include "DynamicMesh/DynamicMesh3.h" #include "DynamicMesh/DynamicMeshAABBTree3.h" #include "Engine/StaticMesh.h" #include "FTetWildWrapper.h" #include "Generate/IsosurfaceStuffing.h" #include "GeometryCollection/ManagedArrayCollection.h" #include "MeshDescriptionToDynamicMesh.h" #include "Spatial/FastWinding.h" #include "Spatial/MeshAABBTree3.h" //============================================================================= // FRadialTetrahedronDataflowNodes //============================================================================= void FRadialTetrahedronDataflowNodes::Evaluate(UE::Dataflow::FContext& Context, const FDataflowOutput* Out) const { if (Out->IsA(&Collection)) { TUniquePtr InCollection(GetValue(Context, &Collection).NewCopy()); TArray TetElements; TArray TetVertices; RadialTetMesh(InnerRadius, OuterRadius, Height, RadialSample, AngularSample, VerticalSample, BulgeRatio * (OuterRadius - InnerRadius) / (Chaos::FReal)2., TetElements, TetVertices); TArray SurfaceElements = UE::Dataflow::GetSurfaceTriangles(TetElements, !bDiscardInteriorTriangles); TUniquePtr RadialCollection(FTetrahedralCollection::NewTetrahedralCollection(TetVertices, SurfaceElements, TetElements)); InCollection->AppendGeometry(*RadialCollection.Get()); SetValue(Context, *InCollection, &Collection); } }