Files
UnrealEngineUWP/Engine/Source/Runtime/TextureUtilitiesCommon/Private/UDIMUtilities.cpp
Julien StJean 1736abbd73 Interchange support properly multiple source files when creating or reimporting an asset.
#jira UETOOL-4041
#rb Alexis.Matte
#preflight 6127e3c7ec82960001cc366c

[CL 17358681 by Julien StJean in ue5-main branch]
2021-08-30 16:52:42 -04:00

62 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "UDIMUtilities.h"
#include "Internationalization/Regex.h"
namespace UE
{
namespace TextureUtilitiesCommon
{
uint32 ParseUDIMName(const FString& Name, const FString& UdimRegexPattern, FString& OutPrefixName, FString& OutPostfixName)
{
FRegexPattern RegexPattern( UdimRegexPattern );
FRegexMatcher RegexMatcher( RegexPattern, Name );
int32 UdimValue = INDEX_NONE;
if ( RegexMatcher.FindNext() )
{
const int32 StartOfCaptureGroup1 = RegexMatcher.GetCaptureGroupBeginning(1);
const int32 EndOfCaptureGroup1 = RegexMatcher.GetCaptureGroupEnding(1);
const int32 StartOfCaptureGroup2 = RegexMatcher.GetCaptureGroupBeginning(2);
const int32 EndOfCaptureGroup2 = RegexMatcher.GetCaptureGroupEnding(2);
const int32 StartOfCaptureGroup3 = RegexMatcher.GetCaptureGroupBeginning(3);
const int32 EndOfCaptureGroup3 = RegexMatcher.GetCaptureGroupEnding(3);
if ( StartOfCaptureGroup1 != INDEX_NONE && StartOfCaptureGroup2 != INDEX_NONE &&
EndOfCaptureGroup1 != INDEX_NONE && EndOfCaptureGroup2 != INDEX_NONE )
{
LexFromString( UdimValue, *Name.Mid( StartOfCaptureGroup2, EndOfCaptureGroup2 - StartOfCaptureGroup2 ) );
OutPrefixName = Name.Mid( StartOfCaptureGroup1, EndOfCaptureGroup1 - StartOfCaptureGroup1 );
if ( StartOfCaptureGroup3 != INDEX_NONE && EndOfCaptureGroup3 != INDEX_NONE )
{
OutPostfixName = Name.Mid( StartOfCaptureGroup3, EndOfCaptureGroup3 - StartOfCaptureGroup3 );
}
}
}
if ( UdimValue < 1001 )
{
// UDIM starts with 1001 as the origin
return INDEX_NONE;
}
return UdimValue;
}
int32 GetUDIMIndex(int32 BlockX, int32 BlockY)
{
return BlockY * 10 + BlockX + 1001;
}
void ExtractUDIMCoordinates(int32 UDIMIndex, int32& OutBlockX, int32& OutBlockY)
{
OutBlockX = (UDIMIndex - 1001) % 10;
OutBlockY = (UDIMIndex - 1001) / 10;
}
}
}