Files
UnrealEngine/Engine/Plugins/MetaHuman/MetaHumanCharacter/Source/MetaHumanCharacterEditor/Private/MetaHumanWardrobeItemThumbnailRenderer.cpp
2025-05-18 13:04:45 +08:00

66 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "MetaHumanWardrobeItemThumbnailRenderer.h"
#include "MetaHumanWardrobeItem.h"
#include "ThumbnailRendering/ThumbnailManager.h"
#include "ThumbnailRendering/SceneThumbnailInfo.h"
#include "AssetDefinitionDefault.h"
#include "ObjectTools.h"
bool UMetaHumanWardrobeItemThumbnailRenderer::CanVisualizeAsset(UObject* InObject)
{
if (UMetaHumanWardrobeItem* WardrobeItem = Cast<UMetaHumanWardrobeItem>(InObject))
{
if (UObject* PrincipalAsset = WardrobeItem->PrincipalAsset.Get())
{
if (FThumbnailRenderingInfo* Info = UThumbnailManager::Get().GetRenderingInfo(PrincipalAsset))
{
if (UThumbnailRenderer* ThumbnailRenderer = Info->Renderer)
{
return ThumbnailRenderer->CanVisualizeAsset(PrincipalAsset);
}
}
}
}
else
{
ThumbnailTools::CacheEmptyThumbnail(InObject->GetFullName(), InObject->GetPackage());
}
return false;
}
void UMetaHumanWardrobeItemThumbnailRenderer::Draw(UObject* InObject, int32 InX, int32 InY, uint32 InWidth, uint32 InHeight, FRenderTarget* InRenderTarget, FCanvas* InCanvas, bool bInAdditionalViewFamily)
{
if (UMetaHumanWardrobeItem* WardrobeItem = Cast<UMetaHumanWardrobeItem>(InObject))
{
// WardrobeItem->PrincipalAsset.LoadSynchronous();
if (UObject* PrincipalAsset = WardrobeItem->PrincipalAsset.Get())
{
if (FThumbnailRenderingInfo* Info = UThumbnailManager::Get().GetRenderingInfo(PrincipalAsset))
{
if (UThumbnailRenderer* ThumbnailRenderer = Info->Renderer)
{
using namespace UE::Editor;
if (ThumbnailRenderer->CanVisualizeAsset(PrincipalAsset))
{
if (USceneThumbnailInfo* OriginalThumbnailInfo = Cast<USceneThumbnailInfo>(FindOrCreateThumbnailInfo(PrincipalAsset, USceneThumbnailInfo::StaticClass())))
{
if (USceneThumbnailInfo* WardrobeItemSceneThumbnailInfo = Cast<USceneThumbnailInfo>(FindOrCreateThumbnailInfo(WardrobeItem, USceneThumbnailInfo::StaticClass())))
{
UE::Editor::TrySetExistingThumbnailInfo(PrincipalAsset, WardrobeItemSceneThumbnailInfo);
ThumbnailRenderer->Draw(PrincipalAsset, InX, InY, InWidth, InHeight, InRenderTarget, InCanvas, bInAdditionalViewFamily);
UE::Editor::TrySetExistingThumbnailInfo(PrincipalAsset, OriginalThumbnailInfo);
}
}
else
{
ThumbnailRenderer->Draw(PrincipalAsset, InX, InY, InWidth, InHeight, InRenderTarget, InCanvas, bInAdditionalViewFamily);
}
}
}
}
}
}
}