Files
UnrealEngineUWP/Engine/Source/Runtime/TextureUtilitiesCommon/Private/UDIMUtilities.cpp

51 lines
1.6 KiB
C++
Raw Normal View History

// 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;
}
}
}