Files
UnrealEngineUWP/Engine/Plugins/Editor/MeshEditor/Source/PolygonModeling/AssignMaterial.cpp
jerome delattre 9dcdc6c566 #ROBOMERGE-AUTHOR: jerome.delattre
Copying //Tasks/UE4/Release-4.20-EnterpriseLateFeatures to Release-4.20 (//UE4/Release-4.20)
#rb simon.tourangeau
#jira UE-59798, UE-58919, UE-59480

#ROBOMERGE-SOURCE: CL 4119095 in //UE4/Release-4.20/...
#ROBOMERGE-BOT: RELEASE (Release-4.20 -> Release-Staging-4.20)

[CL 4119100 by jerome delattre in Staging-4.20 branch]
2018-06-07 18:49:50 -04:00

59 lines
2.0 KiB
C++

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "AssignMaterial.h"
#include "ContentBrowserModule.h"
#include "EditableMesh.h"
#include "Framework/Commands/UICommandInfo.h"
#include "IContentBrowserSingleton.h"
#include "IMeshEditorModeUIContract.h"
#include "MeshEditorUtilities.h"
#include "ScopedTransaction.h"
#define LOCTEXT_NAMESPACE "MeshEditorMode"
void UAssignMaterialCommand::RegisterUICommand( FBindingContext* BindingContext )
{
UI_COMMAND_EXT( BindingContext, /* Out */ UICommandInfo, "AssignMaterial", "Assign Material", "Assigns the highlighted material in the Content Browser to the currently selected polygons.", EUserInterfaceActionType::Button, FInputChord( EKeys::M ) );
}
void UAssignMaterialCommand::Execute( IMeshEditorModeEditingContract& MeshEditorMode )
{
IContentBrowserSingleton& ContentBrowser = FModuleManager::LoadModuleChecked<FContentBrowserModule>( "ContentBrowser" ).Get();
static TArray<FAssetData> SelectedAssets;
ContentBrowser.GetSelectedAssets( SelectedAssets );
UMaterialInterface* SelectedMaterial = FAssetData::GetFirstAsset<UMaterialInterface>( SelectedAssets );
if ( MeshEditorMode.GetActiveAction() != NAME_None )
{
return;
}
static TMap< UEditableMesh*, TArray<FMeshElement> > MeshesAndPolygons;
MeshEditorMode.GetSelectedMeshesAndPolygons( /* Out */ MeshesAndPolygons );
if ( MeshesAndPolygons.Num() == 0 )
{
return;
}
const FScopedTransaction Transaction( LOCTEXT( "UndoAssignMaterialToPolygon", "Assign Material to Polygon" ) );
MeshEditorMode.CommitSelectedMeshes();
// Refresh selection (committing may have created a new mesh instance)
MeshEditorMode.GetSelectedMeshesAndPolygons( /* Out */ MeshesAndPolygons );
for( const auto& MeshAndPolygons : MeshesAndPolygons )
{
UEditableMesh* EditableMesh = MeshAndPolygons.Key;
FMeshEditorUtilities::AssignMaterialToPolygons( SelectedMaterial, EditableMesh, MeshAndPolygons.Value );
MeshEditorMode.TrackUndo( EditableMesh, EditableMesh->MakeUndo() );
}
}
#undef LOCTEXT_NAMESPACE