2021-06-08 03:51:23 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#include "TransferMeshTool.h"
|
|
|
|
|
#include "ComponentSourceInterfaces.h"
|
|
|
|
|
#include "InteractiveToolManager.h"
|
|
|
|
|
#include "ToolTargetManager.h"
|
|
|
|
|
#include "ToolBuilderUtil.h"
|
|
|
|
|
#include "ToolSetupUtil.h"
|
|
|
|
|
#include "ModelingToolTargetUtil.h"
|
|
|
|
|
|
|
|
|
|
using namespace UE::Geometry;
|
|
|
|
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "UTransferMeshTool"
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* ToolBuilder
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
bool UTransferMeshToolBuilder::CanBuildTool(const FToolBuilderState& SceneState) const
|
|
|
|
|
{
|
|
|
|
|
return SceneState.TargetManager->CountSelectedAndTargetable(SceneState, GetTargetRequirements()) == 2;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-23 09:42:40 -05:00
|
|
|
UMultiSelectionMeshEditingTool* UTransferMeshToolBuilder::CreateNewTool(const FToolBuilderState& SceneState) const
|
2021-06-08 03:51:23 -04:00
|
|
|
{
|
2021-11-23 09:42:40 -05:00
|
|
|
return NewObject<UTransferMeshTool>(SceneState.ToolManager);
|
2021-06-08 03:51:23 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Tool
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
void UTransferMeshTool::Setup()
|
|
|
|
|
{
|
|
|
|
|
UInteractiveTool::Setup();
|
|
|
|
|
|
|
|
|
|
BasicProperties = NewObject<UTransferMeshToolProperties>(this);
|
|
|
|
|
BasicProperties->RestoreProperties(this);
|
|
|
|
|
AddToolPropertySource(BasicProperties);
|
|
|
|
|
|
|
|
|
|
SetToolDisplayName(LOCTEXT("ToolName", "Transfer"));
|
|
|
|
|
GetToolManager()->DisplayMessage(
|
2021-06-23 22:14:55 -04:00
|
|
|
LOCTEXT("OnStartTool", "Copy Mesh from Source object to Target object"),
|
2021-06-08 03:51:23 -04:00
|
|
|
EToolMessageLevel::UserNotification);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool UTransferMeshTool::CanAccept() const
|
|
|
|
|
{
|
|
|
|
|
return Super::CanAccept();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UTransferMeshTool::Shutdown(EToolShutdownType ShutdownType)
|
|
|
|
|
{
|
|
|
|
|
BasicProperties->SaveProperties(this);
|
|
|
|
|
|
|
|
|
|
if (ShutdownType == EToolShutdownType::Accept)
|
|
|
|
|
{
|
|
|
|
|
GetToolManager()->BeginUndoTransaction(LOCTEXT("TransferMeshToolTransactionName", "Transfer Mesh"));
|
|
|
|
|
|
|
|
|
|
const FMeshDescription* SourceMesh = UE::ToolTarget::GetMeshDescription(Targets[0]);
|
|
|
|
|
|
|
|
|
|
FComponentMaterialSet Materials = UE::ToolTarget::GetMaterialSet(Targets[0]);
|
|
|
|
|
const FComponentMaterialSet* TransferMaterials = (BasicProperties->bTransferMaterials) ? &Materials : nullptr;
|
|
|
|
|
|
|
|
|
|
if (ensure(SourceMesh))
|
|
|
|
|
{
|
|
|
|
|
UE::ToolTarget::CommitMeshDescriptionUpdate(Targets[1], SourceMesh, TransferMaterials);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GetToolManager()->EndUndoTransaction();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE
|