Files
michael balzer b8a1c9b6cf GeometryCore: Remove ExplicitUseGeometryMathTypes.h
#ROBOMERGE-AUTHOR: michael.balzer
#ROBOMERGE-SOURCE: CL 18227685 in //UE5/Release-5.0/... via CL 18229350
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 18231457 by michael balzer in ue5-release-engine-test branch]
2021-11-17 19:02:44 -05:00

57 lines
1.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ProjectionTargets.h"
#include "Distance/DistPoint3Triangle3.h"
using namespace UE::Geometry;
FVector3d FMeshProjectionTarget::Project(const FVector3d& Point, int Identifier)
{
double fDistSqr;
int tNearestID = Spatial->FindNearestTriangle(Point, fDistSqr);
if (tNearestID < 0)
{
return Point;
}
FTriangle3d Triangle;
Mesh->GetTriVertices(tNearestID, Triangle.V[0], Triangle.V[1], Triangle.V[2]);
FDistPoint3Triangle3d DistanceQuery(Point, Triangle);
DistanceQuery.GetSquared();
if (VectorUtil::IsFinite(DistanceQuery.ClosestTrianglePoint))
{
return DistanceQuery.ClosestTrianglePoint;
}
else
{
return Point;
}
}
/**
* @return Projection of Point onto this target, and set ProjectNormalOut to the triangle normal at the returned point (*not* interpolated vertex normal)
*/
FVector3d FMeshProjectionTarget::Project(const FVector3d& Point, FVector3d& ProjectNormalOut, int Identifier)
{
double fDistSqr;
int tNearestID = Spatial->FindNearestTriangle(Point, fDistSqr);
if (tNearestID < 0)
{
return Point;
}
FTriangle3d Triangle;
Mesh->GetTriVertices(tNearestID, Triangle.V[0], Triangle.V[1], Triangle.V[2]);
ProjectNormalOut = Triangle.Normal();
FDistPoint3Triangle3d DistanceQuery(Point, Triangle);
DistanceQuery.GetSquared();
if (VectorUtil::IsFinite(DistanceQuery.ClosestTrianglePoint))
{
return DistanceQuery.ClosestTrianglePoint;
}
else
{
return Point;
}
}