Files
UnrealEngineUWP/Engine/Source/Runtime/MeshUtilitiesCommon/Public/OverlappingCorners.h
Andrew Davidson 3ddc3a4da3 Merge up from //UE5/Dev-LargeWorldCoordinates
#rb none

[CL 16211417 by Andrew Davidson in ue5-main branch]
2021-05-05 15:07:25 -04:00

47 lines
1.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "LayoutUV.h"
/**
* Container to hold overlapping corners. For a vertex, lists all the overlapping vertices
*/
struct MESHUTILITIESCOMMON_API FOverlappingCorners
{
FOverlappingCorners() {}
FOverlappingCorners(const TArray<FVector3f>& InVertices, const TArray<uint32>& InIndices, float ComparisonThreshold);
FOverlappingCorners(const FLayoutUV::IMeshView& MeshView, float ComparisonThreshold);
/* Resets, pre-allocates memory, marks all indices as not overlapping in preperation for calls to Add() */
void Init(int32 NumIndices);
/* Add overlapping indices pair */
void Add(int32 Key, int32 Value);
/* Sorts arrays, converts sets to arrays for sorting and to allow simple iterating code, prevents additional adding */
void FinishAdding();
/* Estimate memory allocated */
uint32 GetAllocatedSize(void) const;
/**
* @return array of sorted overlapping indices including input 'Key', empty array for indices that have no overlaps.
*/
const TArray<int32>& FindIfOverlapping(int32 Key) const
{
check(bFinishedAdding);
int32 ContainerIndex = IndexBelongsTo[Key];
return (ContainerIndex != INDEX_NONE) ? Arrays[ContainerIndex] : EmptyArray;
}
private:
TArray<int32> IndexBelongsTo;
TArray< TArray<int32> > Arrays;
TArray< TSet<int32> > Sets;
TArray<int32> EmptyArray;
bool bFinishedAdding = false;
};