HAxis sos

This commit is contained in:
guus
2018-08-11 16:46:35 +02:00
commit 510654f8a1
480 changed files with 54126 additions and 0 deletions

View File

@@ -0,0 +1,128 @@
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#include "PolishBuildingsPrivatePCH.h"
#include "BuildingsProxyTool.h"
#include "SBuildingsProxyDialog.h"
#include "MeshUtilities.h"
#include "ContentBrowserModule.h"
#include "AssetRegistryModule.h"
#include "Engine/StaticMeshActor.h"
#include "Engine/StaticMesh.h"
#include "Engine/Selection.h"
#define LOCTEXT_NAMESPACE "BuildingsProxyTool"
TSharedRef<SWidget> FBuildingsProxyTool::GetWidget()
{
return SNew(SBuildingsProxyDialog, this);
}
FText FBuildingsProxyTool::GetTooltipText() const
{
return LOCTEXT("BuildingsProxyToolTooltip", "Harvest geometry from selected actors and merge them into single mesh.");
}
FString FBuildingsProxyTool::GetDefaultPackageName() const
{
FString PackageName;
USelection* SelectedActors = GEditor->GetSelectedActors();
// Iterate through selected actors and find first static mesh asset
// Use this static mesh path as destination package name for a merged mesh
for (FSelectionIterator Iter(*SelectedActors); Iter; ++Iter)
{
AActor* Actor = Cast<AActor>(*Iter);
if (Actor)
{
TInlineComponentArray<UStaticMeshComponent*> SMComponets;
Actor->GetComponents<UStaticMeshComponent>(SMComponets);
for (UStaticMeshComponent* Component : SMComponets)
{
if (Component->StaticMesh)
{
PackageName = FPackageName::GetLongPackagePath(Component->StaticMesh->GetOutermost()->GetName());
PackageName += FString(TEXT("/PROXY_")) + Component->StaticMesh->GetName();
break;
}
}
}
if (!PackageName.IsEmpty())
{
break;
}
}
if (PackageName.IsEmpty())
{
PackageName = FPackageName::FilenameToLongPackageName(FPaths::GameContentDir() + TEXT("PROXY"));
PackageName = MakeUniqueObjectName(NULL, UPackage::StaticClass(), *PackageName).ToString();
}
return PackageName;
}
bool FBuildingsProxyTool::RunMerge(const FString& PackageName)
{
TArray<AActor*> Actors;
TArray<UObject*> AssetsToSync;
//Get the module for the proxy mesh utilities
IMeshUtilities& MeshUtilities = FModuleManager::Get().LoadModuleChecked<IMeshUtilities>("MeshUtilities");
USelection* SelectedActors = GEditor->GetSelectedActors();
for (FSelectionIterator Iter(*SelectedActors); Iter; ++Iter)
{
AActor* Actor = Cast<AActor>(*Iter);
if (Actor)
{
Actors.Add(Actor);
}
}
if (Actors.Num())
{
GWarn->BeginSlowTask(LOCTEXT("BuildingsProxy_CreatingProxy", "Creating Mesh Proxy"), true);
GEditor->BeginTransaction(LOCTEXT("BuildingsProxy_Create", "Creating Mesh Proxy"));
FVector ProxyLocation = FVector::ZeroVector;
FCreateProxyDelegate ProxyDelegate;
ProxyDelegate.BindLambda(
[]( const FGuid Guid, TArray<UObject*>& InAssetsToSync )
{
//Update the asset registry that a new static mash and material has been created
if ( InAssetsToSync.Num() )
{
FAssetRegistryModule& AssetRegistry = FModuleManager::Get().LoadModuleChecked<FAssetRegistryModule>( "AssetRegistry" );
int32 AssetCount = InAssetsToSync.Num();
for ( int32 AssetIndex = 0; AssetIndex < AssetCount; AssetIndex++ )
{
AssetRegistry.AssetCreated( InAssetsToSync[AssetIndex] );
GEditor->BroadcastObjectReimported( InAssetsToSync[AssetIndex] );
}
//Also notify the content browser that the new assets exists
FContentBrowserModule& ContentBrowserModule = FModuleManager::Get().LoadModuleChecked<FContentBrowserModule>( "ContentBrowser" );
ContentBrowserModule.Get().SyncBrowserToAssets( InAssetsToSync, true );
}
} );
FGuid JobGuid = FGuid::NewGuid();
MeshUtilities.CreateProxyMesh( Actors, ProxySettings, NULL, PackageName, JobGuid, ProxyDelegate );
GEditor->EndTransaction();
GWarn->EndSlowTask();
}
return true;
}
#undef LOCTEXT_NAMESPACE

View File

@@ -0,0 +1,25 @@
// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "IPolishBuildingsTool.h"
/**
* Mesh Proxy Tool
*/
class FBuildingsProxyTool : public IPolishBuildingsTool
{
friend class SBuildingsProxyDialog;
public:
// IMergeActorsTool interface
virtual TSharedRef<SWidget> GetWidget() override;
virtual FName GetIconName() const override { return "PolishBuildings.BuildingsProxyTool"; }
virtual FText GetTooltipText() const override;
virtual FString GetDefaultPackageName() const override;
virtual bool RunMerge(const FString& PackageName) override;
private:
FMeshProxySettings ProxySettings;
};

View File

@@ -0,0 +1,614 @@
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "PolishBuildingsPrivatePCH.h"
#include "SBuildingsProxyDialog.h"
#include "Dialogs/DlgPickAssetPath.h"
#include "SNumericEntryBox.h"
#include "STextComboBox.h"
#include "BuildingsProxyTool/BuildingsProxyTool.h"
#define LOCTEXT_NAMESPACE "SBuildingsProxyDialog"
void SBuildingsProxyDialog::Construct(const FArguments& InArgs, FBuildingsProxyTool* InTool)
{
Tool = InTool;
check(Tool != nullptr);
CuttingPlaneOptions.Add(MakeShareable(new FString(TEXT("+X"))));
CuttingPlaneOptions.Add(MakeShareable(new FString(TEXT("+Y"))));
CuttingPlaneOptions.Add(MakeShareable(new FString(TEXT("+Z"))));
CuttingPlaneOptions.Add(MakeShareable(new FString(TEXT("-X"))));
CuttingPlaneOptions.Add(MakeShareable(new FString(TEXT("-Y"))));
CuttingPlaneOptions.Add(MakeShareable(new FString(TEXT("-Z"))));
TextureResolutionOptions.Add(MakeShareable(new FString(TEXT("64"))));
TextureResolutionOptions.Add(MakeShareable(new FString(TEXT("128"))));
TextureResolutionOptions.Add(MakeShareable(new FString(TEXT("256"))));
TextureResolutionOptions.Add(MakeShareable(new FString(TEXT("512"))));
TextureResolutionOptions.Add(MakeShareable(new FString(TEXT("1024"))));
TextureResolutionOptions.Add(MakeShareable(new FString(TEXT("2048"))));
CreateLayout();
}
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
void SBuildingsProxyDialog::CreateLayout()
{
int32 TextureResEntryIndex = FindTextureResolutionEntryIndex( Tool->ProxySettings.MaterialSettings.TextureSize.X );
int32 LightMapResEntryIndex = FindTextureResolutionEntryIndex( Tool->ProxySettings.LightMapResolution );
TextureResEntryIndex = FMath::Max( TextureResEntryIndex, 0 );
LightMapResEntryIndex = FMath::Max( LightMapResEntryIndex, 0 );
this->ChildSlot
[
SNew(SVerticalBox)
+SVerticalBox::Slot()
.AutoHeight()
.HAlign(HAlign_Center)
.VAlign(VAlign_Center)
.Padding(10)
[
// Simplygon logo
SNew(SImage)
.Image(FEditorStyle::GetBrush("BuildingsProxy.SimplygonLogo"))
]
+SVerticalBox::Slot()
.AutoHeight()
[
SNew(SBorder)
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
[
// Proxy options
SNew(SVerticalBox)
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.FillWidth(0.5f)
.VAlign(VAlign_Center)
[
SNew(STextBlock)
.Text(LOCTEXT("OnScreenSizeLabel", "On Screen Size (pixels)"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.ToolTipText( GetPropertyToolTipText( GET_MEMBER_NAME_CHECKED( FMeshProxySettings, ScreenSize ) ) )
]
+ SHorizontalBox::Slot()
.FillWidth(0.5f)
.HAlign(HAlign_Left)
.VAlign(VAlign_Center)
[
SNew(SBox)
.HAlign(HAlign_Fill)
.MinDesiredWidth(100.0f)
.MaxDesiredWidth(100.0f)
[
SNew(SNumericEntryBox<int32>)
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.MinValue(40)
.MaxValue(1200)
.MinSliderValue(40)
.MaxSliderValue(1200)
.AllowSpin(true)
.Value(this, &SBuildingsProxyDialog::GetScreenSize)
.OnValueChanged(this, &SBuildingsProxyDialog::ScreenSizeChanged)
]
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.FillWidth(0.5f)
.VAlign(VAlign_Center)
[
SNew(STextBlock)
.Text(LOCTEXT("MergeDistanceLabel", "Merge Distance (pixels)"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.ToolTipText( GetPropertyToolTipText( GET_MEMBER_NAME_CHECKED( FMeshProxySettings, MergeDistance ) ) )
]
+ SHorizontalBox::Slot()
.FillWidth(0.5f)
.HAlign(HAlign_Left)
.VAlign(VAlign_Center)
[
SNew(SBox)
.HAlign(HAlign_Fill)
.MinDesiredWidth(100.0f)
.MaxDesiredWidth(100.0f)
[
SNew(SNumericEntryBox<int32>)
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.MinValue(0)
.MaxValue(300)
.MinSliderValue(0)
.MaxSliderValue(300)
.AllowSpin(true)
.Value(this, &SBuildingsProxyDialog::GetMergeDistance)
.OnValueChanged(this, &SBuildingsProxyDialog::MergeDistanceChanged)
]
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.FillWidth(0.5f)
.VAlign(VAlign_Center)
[
SNew(STextBlock)
.Text(LOCTEXT("TextureResolutionLabel", "Texture Resolution"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
]
+ SHorizontalBox::Slot()
.FillWidth(0.5f)
.HAlign(HAlign_Left)
.VAlign(VAlign_Center)
[
SNew(STextComboBox)
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.OptionsSource(&TextureResolutionOptions)
.InitiallySelectedItem( TextureResolutionOptions[TextureResEntryIndex] )
.OnSelectionChanged(this, &SBuildingsProxyDialog::SetTextureResolution)
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew( SHorizontalBox )
+ SHorizontalBox::Slot()
.FillWidth( 0.5f )
.VAlign( VAlign_Center )
[
SNew(STextBlock)
.Text( LOCTEXT( "LightMapResolutionLabel", "LightMap Resolution" ) )
.Font( FEditorStyle::GetFontStyle( "StandardDialog.SmallFont" ) )
.ToolTipText( GetPropertyToolTipText( GET_MEMBER_NAME_CHECKED( FMeshProxySettings, LightMapResolution ) ) )
]
+ SHorizontalBox::Slot()
.FillWidth( 0.5f )
.HAlign( HAlign_Left )
.VAlign( VAlign_Center )
[
SNew( STextComboBox )
.Font( FEditorStyle::GetFontStyle( "StandardDialog.SmallFont" ) )
.OptionsSource( &TextureResolutionOptions )
.InitiallySelectedItem( TextureResolutionOptions[LightMapResEntryIndex] )
.OnSelectionChanged( this, &SBuildingsProxyDialog::SetLightMapResolution )
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.FillWidth(0.5f)
.VAlign(VAlign_Center)
.Padding(0.0, 0.0, 3.0, 0.0)
[
SNew( STextBlock )
.Text( LOCTEXT( "HardAngleLabel", "Hard Edge Angle" ) )
.Font( FEditorStyle::GetFontStyle( "StandardDialog.SmallFont" ) )
.ToolTipText( GetPropertyToolTipText( GET_MEMBER_NAME_CHECKED( FMeshProxySettings, HardAngleThreshold ) ) )
]
+SHorizontalBox::Slot()
.FillWidth(0.5f)
.HAlign(HAlign_Left)
.VAlign(VAlign_Center)
[
SNew(SBox)
.HAlign(HAlign_Fill)
.MinDesiredWidth(100.0f)
.MaxDesiredWidth(100.0f)
[
SNew(SNumericEntryBox<float>)
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.MinValue(0.f)
.MaxValue(180.f)
.MinSliderValue(0.f)
.MaxSliderValue(180.f)
.AllowSpin(true)
.Value(this, &SBuildingsProxyDialog::GetHardAngleThreshold)
.OnValueChanged(this, &SBuildingsProxyDialog::HardAngleThresholdChanged)
.IsEnabled(this, &SBuildingsProxyDialog::HardAngleThresholdEnabled)
]
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SCheckBox)
.Type(ESlateCheckBoxType::CheckBox)
.IsChecked( this, &SBuildingsProxyDialog::GetRecalculateNormals )
.OnCheckStateChanged( this, &SBuildingsProxyDialog::SetRecalculateNormals )
.Content()
[
SNew( STextBlock )
.Text( LOCTEXT( "RecalcNormalsLabel", "Recalculate Normals" ) )
.Font( FEditorStyle::GetFontStyle( "StandardDialog.SmallFont" ) )
.ToolTipText( GetPropertyToolTipText( GET_MEMBER_NAME_CHECKED( FMeshProxySettings, bRecalculateNormals ) ) )
]
]
+ SVerticalBox::Slot()
.AutoHeight()
.Padding( FEditorStyle::GetMargin( "StandardDialog.ContentPadding" ) )
[
SNew( SCheckBox )
.Type( ESlateCheckBoxType::CheckBox )
.IsChecked(this, &SBuildingsProxyDialog::GetUseClippingPlane)
.OnCheckStateChanged(this, &SBuildingsProxyDialog::SetUseClippingPlane)
.Content()
[
SNew(STextBlock)
.Text(LOCTEXT("ClippingPlaneLabel", "Use Clipping Plane"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.VAlign(VAlign_Center)
.FillWidth(0.5f)
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SBox)
.MinDesiredWidth(30)
[
SNullWidget::NullWidget
]
]
+SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Left)
[
SNew(STextBlock)
.IsEnabled(this, &SBuildingsProxyDialog::UseClippingPlaneEnabled)
.Text(LOCTEXT("ClippingAxisLabel", "Clipping Axis"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.ToolTipText( GetPropertyToolTipText( GET_MEMBER_NAME_CHECKED( FMeshProxySettings, AxisIndex ) ) )
]
]
+SHorizontalBox::Slot()
.FillWidth(0.5f)
.HAlign(HAlign_Left)
.VAlign(VAlign_Center)
.Padding(8.0, 0.0, 8.0, 0.0)
[
SNew(STextComboBox)
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.OptionsSource(&CuttingPlaneOptions)
.InitiallySelectedItem(CuttingPlaneOptions[0])
.OnSelectionChanged(this, &SBuildingsProxyDialog::SetClippingAxis)
.IsEnabled(this, &SBuildingsProxyDialog::UseClippingPlaneEnabled)
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.FillWidth(0.5f)
.VAlign(VAlign_Center)
.Padding(0.0, 0.0, 3.0, 0.0)
[
SNew(SHorizontalBox)
+SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SBox)
.MinDesiredWidth(30)
[
SNullWidget::NullWidget
]
]
+SHorizontalBox::Slot()
.HAlign(HAlign_Left)
.AutoWidth()
[
SNew(STextBlock)
.Text(LOCTEXT("PlaneLevelLabel", "Plane level"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.IsEnabled(this, &SBuildingsProxyDialog::UseClippingPlaneEnabled)
.ToolTipText( GetPropertyToolTipText( GET_MEMBER_NAME_CHECKED( FMeshProxySettings, ClippingLevel ) ) )
]
]
+SHorizontalBox::Slot()
.FillWidth(0.5f)
.HAlign(HAlign_Left)
[
SNew(SBox)
.HAlign(HAlign_Fill)
.MinDesiredWidth(100.0f)
.MaxDesiredWidth(100.0f)
[
SNew(SNumericEntryBox<float>)
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
.Value(this, &SBuildingsProxyDialog::GetClippingLevel)
.OnValueChanged(this, &SBuildingsProxyDialog::ClippingLevelChanged)
.IsEnabled(this, &SBuildingsProxyDialog::UseClippingPlaneEnabled)
]
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SCheckBox)
.Type(ESlateCheckBoxType::CheckBox)
.IsChecked(this, &SBuildingsProxyDialog::GetExportNormalMap)
.OnCheckStateChanged(this, &SBuildingsProxyDialog::SetExportNormalMap)
.Content()
[
SNew(STextBlock)
.Text(LOCTEXT("ExportNormalMapLabel", "Export Normal Map"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SCheckBox)
.Type(ESlateCheckBoxType::CheckBox)
.IsChecked(this, &SBuildingsProxyDialog::GetExportMetallicMap)
.OnCheckStateChanged(this, &SBuildingsProxyDialog::SetExportMetallicMap)
.Content()
[
SNew(STextBlock)
.Text(LOCTEXT("ExportMetallicMapLabel", "Export Metallic Map"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SCheckBox)
.Type(ESlateCheckBoxType::CheckBox)
.IsChecked(this, &SBuildingsProxyDialog::GetExportRoughnessMap)
.OnCheckStateChanged(this, &SBuildingsProxyDialog::SetExportRoughnessMap)
.Content()
[
SNew(STextBlock)
.Text(LOCTEXT("ExportRoughnessMapLabel", "Export Roughness Map"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
]
]
+SVerticalBox::Slot()
.AutoHeight()
.Padding(FEditorStyle::GetMargin("StandardDialog.ContentPadding"))
[
SNew(SCheckBox)
.Type(ESlateCheckBoxType::CheckBox)
.IsChecked(this, &SBuildingsProxyDialog::GetExportSpecularMap)
.OnCheckStateChanged(this, &SBuildingsProxyDialog::SetExportSpecularMap)
.Content()
[
SNew(STextBlock)
.Text(LOCTEXT("ExportSpecularMapLabel", "Export Specular Map"))
.Font(FEditorStyle::GetFontStyle("StandardDialog.SmallFont"))
]
]
]
]
];
}
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
int32 SBuildingsProxyDialog::FindTextureResolutionEntryIndex( int32 InResolution ) const
{
FString ResolutionStr = TTypeToString<int32>::ToString( InResolution );
int32 Result = TextureResolutionOptions.IndexOfByPredicate( [&]( const TSharedPtr<FString>& Entry )
{
return ( ResolutionStr == *Entry );
} );
return Result;
}
FText SBuildingsProxyDialog::GetPropertyToolTipText( const FName& PropertyName ) const
{
UProperty* Property = FMeshProxySettings::StaticStruct()->FindPropertyByName( PropertyName );
if ( Property )
{
return Property->GetToolTipText();
}
return FText::GetEmpty();
}
//Screen size
TOptional<int32> SBuildingsProxyDialog::GetScreenSize() const
{
return Tool->ProxySettings.ScreenSize;
}
void SBuildingsProxyDialog::ScreenSizeChanged(int32 NewValue)
{
Tool->ProxySettings.ScreenSize = NewValue;
}
//Recalculate normals
ECheckBoxState SBuildingsProxyDialog::GetRecalculateNormals() const
{
return Tool->ProxySettings.bRecalculateNormals ? ECheckBoxState::Checked: ECheckBoxState::Unchecked;
}
void SBuildingsProxyDialog::SetRecalculateNormals(ECheckBoxState NewValue)
{
Tool->ProxySettings.bRecalculateNormals = (NewValue == ECheckBoxState::Checked);
}
//Hard Angle Threshold
bool SBuildingsProxyDialog::HardAngleThresholdEnabled() const
{
if(Tool->ProxySettings.bRecalculateNormals)
{
return true;
}
return false;
}
TOptional<float> SBuildingsProxyDialog::GetHardAngleThreshold() const
{
return Tool->ProxySettings.HardAngleThreshold;
}
void SBuildingsProxyDialog::HardAngleThresholdChanged(float NewValue)
{
Tool->ProxySettings.HardAngleThreshold = NewValue;
}
//Merge Distance
TOptional<int32> SBuildingsProxyDialog::GetMergeDistance() const
{
return Tool->ProxySettings.MergeDistance;
}
void SBuildingsProxyDialog::MergeDistanceChanged(int32 NewValue)
{
Tool->ProxySettings.MergeDistance = NewValue;
}
//Clipping Plane
ECheckBoxState SBuildingsProxyDialog::GetUseClippingPlane() const
{
return Tool->ProxySettings.bUseClippingPlane ? ECheckBoxState::Checked: ECheckBoxState::Unchecked;
}
void SBuildingsProxyDialog::SetUseClippingPlane(ECheckBoxState NewValue)
{
Tool->ProxySettings.bUseClippingPlane = (NewValue == ECheckBoxState::Checked);
}
bool SBuildingsProxyDialog::UseClippingPlaneEnabled() const
{
if(Tool->ProxySettings.bUseClippingPlane)
{
return true;
}
return false;
}
void SBuildingsProxyDialog::SetClippingAxis(TSharedPtr<FString> NewSelection, ESelectInfo::Type SelectInfo )
{
//This is a ugly hack, but it solves the problem for now
int32 AxisIndex = CuttingPlaneOptions.Find(NewSelection);
//FMessageDialog::Debugf(*FString::Printf(TEXT("%d"), AxisIndex ));
if(AxisIndex < 3)
{
Tool->ProxySettings.bPlaneNegativeHalfspace = false;
Tool->ProxySettings.AxisIndex = AxisIndex;
return;
}
else
{
Tool->ProxySettings.bPlaneNegativeHalfspace = true;
Tool->ProxySettings.AxisIndex = AxisIndex - 3;
return;
}
}
TOptional<float> SBuildingsProxyDialog::GetClippingLevel() const
{
return Tool->ProxySettings.ClippingLevel;
}
void SBuildingsProxyDialog::ClippingLevelChanged(float NewValue)
{
Tool->ProxySettings.ClippingLevel = NewValue;
}
//Texture Resolution
void SBuildingsProxyDialog::SetTextureResolution(TSharedPtr<FString> NewSelection, ESelectInfo::Type SelectInfo)
{
int32 Resolution = 512;
TTypeFromString<int32>::FromString(Resolution, **NewSelection);
FIntPoint TextureSize(Resolution, Resolution);
Tool->ProxySettings.MaterialSettings.TextureSize = TextureSize;
}
void SBuildingsProxyDialog::SetLightMapResolution( TSharedPtr<FString> NewSelection, ESelectInfo::Type SelectInfo )
{
int32 Resolution = 256;
TTypeFromString<int32>::FromString( Resolution, **NewSelection );
Tool->ProxySettings.LightMapResolution = Resolution;
}
ECheckBoxState SBuildingsProxyDialog::GetExportNormalMap() const
{
return Tool->ProxySettings.MaterialSettings.bNormalMap ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
}
void SBuildingsProxyDialog::SetExportNormalMap(ECheckBoxState NewValue)
{
Tool->ProxySettings.MaterialSettings.bNormalMap = ( NewValue == ECheckBoxState::Checked );
}
ECheckBoxState SBuildingsProxyDialog::GetExportMetallicMap() const
{
return Tool->ProxySettings.MaterialSettings.bMetallicMap ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
}
void SBuildingsProxyDialog::SetExportMetallicMap(ECheckBoxState NewValue)
{
Tool->ProxySettings.MaterialSettings.bMetallicMap = ( NewValue == ECheckBoxState::Checked );
}
ECheckBoxState SBuildingsProxyDialog::GetExportRoughnessMap() const
{
return Tool->ProxySettings.MaterialSettings.bRoughnessMap ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
}
void SBuildingsProxyDialog::SetExportRoughnessMap(ECheckBoxState NewValue)
{
Tool->ProxySettings.MaterialSettings.bRoughnessMap = ( NewValue == ECheckBoxState::Checked );
}
ECheckBoxState SBuildingsProxyDialog::GetExportSpecularMap() const
{
return Tool->ProxySettings.MaterialSettings.bSpecularMap ? ECheckBoxState::Checked : ECheckBoxState::Unchecked;
}
void SBuildingsProxyDialog::SetExportSpecularMap(ECheckBoxState NewValue)
{
Tool->ProxySettings.MaterialSettings.bSpecularMap = ( NewValue == ECheckBoxState::Checked );
}
#undef LOCTEXT_NAMESPACE

View File

@@ -0,0 +1,75 @@
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#pragma once
class FBuildingsProxyTool;
/*-----------------------------------------------------------------------------
SBuildingsProxyDialog
-----------------------------------------------------------------------------*/
class SBuildingsProxyDialog : public SCompoundWidget
{
public:
SLATE_BEGIN_ARGS(SBuildingsProxyDialog)
{
}
SLATE_END_ARGS()
public:
/** SWidget functions */
void Construct(const FArguments& InArgs, FBuildingsProxyTool* InTool);
protected:
/** ScreenSize accessors */
TOptional<int32> GetScreenSize() const;
void ScreenSizeChanged(int32 NewValue); //used with editable text block (Simplygon)
/** Recalculate Normals accessors */
ECheckBoxState GetRecalculateNormals() const;
void SetRecalculateNormals(ECheckBoxState NewValue);
/** Hard Angle Threshold accessors */
TOptional<float> GetHardAngleThreshold() const;
bool HardAngleThresholdEnabled() const;
void HardAngleThresholdChanged(float NewValue);
/** Hole filling accessors */
TOptional<int32> GetMergeDistance() const;
void MergeDistanceChanged(int32 NewValue);
/** Clipping Plane accessors */
ECheckBoxState GetUseClippingPlane() const;
void SetUseClippingPlane(ECheckBoxState NewValue);
bool UseClippingPlaneEnabled() const;
void SetClippingAxis(TSharedPtr<FString> NewSelection, ESelectInfo::Type SelectInfo);
TOptional<float> GetClippingLevel() const;
void ClippingLevelChanged(float NewValue);
/** TextureResolution accessors */
void SetTextureResolution(TSharedPtr<FString> NewSelection, ESelectInfo::Type SelectInfo);
void SetLightMapResolution( TSharedPtr<FString> NewSelection, ESelectInfo::Type SelectInfo );
/** Export material properties acessors **/
ECheckBoxState GetExportNormalMap() const;
void SetExportNormalMap(ECheckBoxState NewValue);
ECheckBoxState GetExportMetallicMap() const;
void SetExportMetallicMap(ECheckBoxState NewValue);
ECheckBoxState GetExportRoughnessMap() const;
void SetExportRoughnessMap(ECheckBoxState NewValue);
ECheckBoxState GetExportSpecularMap() const;
void SetExportSpecularMap(ECheckBoxState NewValue);
private:
/** Creates the geometry mode controls */
void CreateLayout();
int32 FindTextureResolutionEntryIndex( int32 InResolution ) const;
FText GetPropertyToolTipText( const FName& PropertyName ) const;
private:
FBuildingsProxyTool* Tool;
TArray< TSharedPtr<FString> > CuttingPlaneOptions;
TArray< TSharedPtr<FString> > TextureResolutionOptions;
};