Files
UnrealEngineUWP/Engine/Plugins/Runtime/GeometryProcessing/Source/DynamicMesh/Private/Solvers/MeshLaplacian.cpp
david hill 1b53940a8c GeometryCore: Add Embedded Path Tracing across FDynamicMesh surfaces and Intrinsic Triangulations of FDynamicMeshes. Also update Mesh Laplacian Code to generate Cotan Laplacians from Intrinsic Triangulation.
MeshGeodesicSurfaceTracer.{h,cpp}  -  Add embedded path tracing.
GeodesicSurfaceTracerTests.cpp     -  unit tests for embedded path tracing

IntrinsicTriangulationMesh.{h, cpp}  - Adds two Intrinsic Triangulation mesh types (the more sophisticaed requires embedded path tracing)
IntrinsicMeshTests.cpp               -  unit tests for Intrinsic mesh types.

MeshLaplacian.{h,cpp}                - Adds new enum types for Intrinsic Delaunay Triangulation (IDT)  Laplacians
LaplacianOperators.{h,cpp}           - Adds wrappers and allow enum switches to build IDT Laplacians if requested
LaplacianMatrixAssembly.h            - Actually construction of IDT Laplacian.
Laplacian.cpp                        - Added trivial unit test for construction of IDT Laplacian

#rb jimmy.andrews
#preflight 6138bca42d09b9000158c95a

#ROBOMERGE-AUTHOR: david.hill
#ROBOMERGE-SOURCE: CL 17458853 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)

[CL 17458863 by david hill in ue5-release-engine-test branch]
2021-09-08 11:15:58 -04:00

73 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Solvers/MeshLaplacian.h"
FString LaplacianSchemeName(const ELaplacianWeightScheme Scheme)
{
FString LaplacianName;
switch (Scheme)
{
case ELaplacianWeightScheme::ClampedCotangent:
LaplacianName = FString(TEXT("Clamped Cotangent Laplacian"));
break;
case ELaplacianWeightScheme::Cotangent:
LaplacianName = FString(TEXT("Cotangent Laplacian"));
break;
case ELaplacianWeightScheme::Umbrella:
LaplacianName = FString(TEXT("Umbrella Laplacian"));
break;
case ELaplacianWeightScheme::MeanValue:
LaplacianName = FString(TEXT("MeanValue Laplacian"));
break;
case ELaplacianWeightScheme::Uniform:
LaplacianName = FString(TEXT("Uniform Laplacian"));
break;
case ELaplacianWeightScheme::Valence:
LaplacianName = FString(TEXT("Valence Laplacian"));
break;
case ELaplacianWeightScheme::IDTCotanget:
LaplacianName = FString(TEXT("Intrinsic Delaunay Triangulation Contangent Laplacian"));
break;
default:
check(0 && "Unknown Laplacian Weight Scheme Enum");
}
return LaplacianName;
}
bool bIsSymmetricLaplacian(const ELaplacianWeightScheme Scheme)
{
bool bSymmetric = false;
switch (Scheme)
{
case ELaplacianWeightScheme::ClampedCotangent:
bSymmetric = false;
break;
case ELaplacianWeightScheme::Cotangent:
bSymmetric = false;
break;
case ELaplacianWeightScheme::Umbrella:
bSymmetric = false;
break;
case ELaplacianWeightScheme::MeanValue:
bSymmetric = false;
break;
case ELaplacianWeightScheme::Uniform:
bSymmetric = true;
break;
case ELaplacianWeightScheme::Valence:
bSymmetric = true;
break;
case ELaplacianWeightScheme::IDTCotanget:
bSymmetric = false;
break;
default:
check(0);
}
return bSymmetric;
}