// Copyright Epic Games, Inc. All Rights Reserved. #include "ConversionUtils/DynamicMeshViaMeshDescriptionUtil.h" #include "TargetInterfaces/MeshDescriptionCommitter.h" #include "TargetInterfaces/MeshDescriptionProvider.h" #include "DynamicMeshToMeshDescription.h" #include "MeshConversionOptions.h" //FConversionToMeshDescriptionOptions #include "MeshDescriptionToDynamicMesh.h" TSharedPtr UE::Geometry::GetDynamicMeshViaMeshDescription( IMeshDescriptionProvider& MeshDescriptionProvider) { TSharedPtr DynamicMesh = MakeShared(); FMeshDescriptionToDynamicMesh Converter; Converter.Convert(MeshDescriptionProvider.GetMeshDescription(), *DynamicMesh); return DynamicMesh; } void UE::Geometry::CommitDynamicMeshViaMeshDescription( IMeshDescriptionCommitter& MeshDescriptionCommitter, const FDynamicMesh3& Mesh, const IDynamicMeshCommitter::FDynamicMeshCommitInfo& CommitInfo) { FConversionToMeshDescriptionOptions ConversionOptions; ConversionOptions.bSetPolyGroups = CommitInfo.bPolygroupsChanged; ConversionOptions.bUpdatePositions = CommitInfo.bPositionsChanged; ConversionOptions.bUpdateNormals = CommitInfo.bNormalsChanged; ConversionOptions.bUpdateTangents = CommitInfo.bTangentsChanged; ConversionOptions.bUpdateUVs = CommitInfo.bUVsChanged; ConversionOptions.bUpdateVtxColors = CommitInfo.bVertexColorsChanged; MeshDescriptionCommitter.CommitMeshDescription([&CommitInfo, &ConversionOptions, &Mesh](const IMeshDescriptionCommitter::FCommitterParams& CommitParams) { FDynamicMeshToMeshDescription Converter(ConversionOptions); if (!CommitInfo.bTopologyChanged) { Converter.UpdateUsingConversionOptions(&Mesh, *CommitParams.MeshDescriptionOut); } else { // Do a full conversion. Converter.Convert(&Mesh, *CommitParams.MeshDescriptionOut); } }); }