Files
UnrealEngineUWP/Engine/Plugins/Runtime/GeometryProcessing/Source/DynamicMesh/Private/Parameterization/MeshUVPacking.cpp
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

100 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Parameterization/MeshUVPacking.h"
#include "DynamicSubmesh3.h"
#include "Selections/MeshConnectedComponents.h"
// the generic GeometricObjects version
#include "Parameterization/UVPacking.h"
using namespace UE::Geometry;
struct FUVOverlayView : public FUVPacker::IUVMeshView
{
FDynamicMesh3* Mesh;
FDynamicMeshUVOverlay* UVOverlay;
FUVOverlayView(FDynamicMeshUVOverlay* UVOverlay) : UVOverlay(UVOverlay)
{
Mesh = UVOverlay->GetParentMesh();
}
virtual FIndex3i GetTriangle(int32 TID) const
{
return Mesh->GetTriangle(TID);
}
virtual FIndex3i GetUVTriangle(int32 TID) const
{
return UVOverlay->GetTriangle(TID);
}
virtual FVector3d GetVertex(int32 VID) const
{
return Mesh->GetVertex(VID);
}
virtual FVector2f GetUV(int32 EID) const
{
return UVOverlay->GetElement(EID);
}
virtual void SetUV(int32 EID, FVector2f UV)
{
return UVOverlay->SetElement(EID, UV);
}
};
FDynamicMeshUVPacker::FDynamicMeshUVPacker(FDynamicMeshUVOverlay* UVOverlayIn)
{
UVOverlay = UVOverlayIn;
}
bool FDynamicMeshUVPacker::StandardPack()
{
TRACE_CPUPROFILER_EVENT_SCOPE(DynamicMeshUVPacker_StandardPack);
FUVPacker Packer;
Packer.bAllowFlips = bAllowFlips;
Packer.GutterSize = GutterSize;
Packer.TextureResolution = TextureResolution;
FUVOverlayView MeshView(UVOverlay);
FMeshConnectedComponents UVComponents(MeshView.Mesh);
UVComponents.FindConnectedTriangles([&MeshView](int32 Triangle0, int32 Triangle1) {
return MeshView.UVOverlay->AreTrianglesConnected(Triangle0, Triangle1);
});
return Packer.StandardPack(&MeshView, UVComponents.Num(), [&UVComponents](int Idx, TArray<int32>& Island)
{
Island = UVComponents.GetComponent(Idx).Indices;
});
}
bool FDynamicMeshUVPacker::StackPack()
{
TRACE_CPUPROFILER_EVENT_SCOPE(DynamicMeshUVPacker_StackPack);
FUVPacker Packer;
Packer.bAllowFlips = bAllowFlips;
Packer.GutterSize = GutterSize;
Packer.TextureResolution = TextureResolution;
FUVOverlayView MeshView(UVOverlay);
FMeshConnectedComponents UVComponents(MeshView.Mesh);
UVComponents.FindConnectedTriangles([&MeshView](int32 Triangle0, int32 Triangle1) {
return MeshView.UVOverlay->AreTrianglesConnected(Triangle0, Triangle1);
});
return Packer.StackPack(&MeshView, UVComponents.Num(), [&UVComponents](int Idx, TArray<int32>& Island)
{
Island = UVComponents.GetComponent(Idx).Indices;
});
}