You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#rb ryan.schmidt jimmy.andrews #jira none #rnx #preflight 605a54c0e8944a0001585162 [CL 15799514 by lonnie li in ue5-main branch]
130 lines
3.6 KiB
C++
130 lines
3.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "UObject/NoExportTypes.h"
|
|
#include "SingleSelectionTool.h"
|
|
#include "InteractiveToolBuilder.h"
|
|
#include "DynamicMesh3.h"
|
|
#include "FindPolygonsAlgorithm.h"
|
|
#include "PreviewMesh.h"
|
|
#include "ModelingOperators.h"
|
|
#include "MeshOpPreviewHelpers.h"
|
|
#include "BaseTools/SingleSelectionMeshEditingTool.h"
|
|
#include "ConvertToPolygonsTool.generated.h"
|
|
|
|
// predeclaration
|
|
class UConvertToPolygonsTool;
|
|
class FConvertToPolygonsOp;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
UCLASS()
|
|
class MESHMODELINGTOOLS_API UConvertToPolygonsToolBuilder : public USingleSelectionMeshEditingToolBuilder
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
virtual USingleSelectionMeshEditingTool* CreateNewTool(const FToolBuilderState & SceneState) const override;
|
|
};
|
|
|
|
|
|
|
|
|
|
UENUM()
|
|
enum class EConvertToPolygonsMode
|
|
{
|
|
/** Convert based on Angle Tolerance between Face Normals */
|
|
FaceNormalDeviation UMETA(DisplayName = "Face Normal Deviation"),
|
|
/** Create PolyGroups based on UV Islands */
|
|
FromUVIslands UMETA(DisplayName = "From UV Islands"),
|
|
/** Create Polygroups based on Connected Triangles */
|
|
FromConnectedTris UMETA(DisplayName = "From Connected Tris")
|
|
};
|
|
|
|
|
|
|
|
UCLASS()
|
|
class MESHMODELINGTOOLS_API UConvertToPolygonsToolProperties : public UInteractiveToolPropertySet
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
/** Strategy to use to group triangles */
|
|
UPROPERTY(EditAnywhere, Category = PolyGroups)
|
|
EConvertToPolygonsMode ConversionMode = EConvertToPolygonsMode::FaceNormalDeviation;
|
|
|
|
/** Tolerance for planarity */
|
|
UPROPERTY(EditAnywhere, Category = PolyGroups, meta = (UIMin = "0.001", UIMax = "20.0", ClampMin = "0.0", ClampMax = "90.0", EditCondition = "ConversionMode == EConvertToPolygonsMode::FaceNormalDeviation", EditConditionHides))
|
|
float AngleTolerance = 0.1f;
|
|
|
|
/** If true, normals are recomputed per-group, with hard edges at group boundaries */
|
|
UPROPERTY(EditAnywhere, Category = PolyGroups, meta = (EditCondition = "ConversionMode == EConvertToPolygonsMode::FaceNormalDeviation", EditConditionHides))
|
|
bool bCalculateNormals = true;
|
|
|
|
/** Display each group with a different auto-generated color */
|
|
UPROPERTY(EditAnywhere, Category = Display)
|
|
bool bShowGroupColors = true;
|
|
};
|
|
|
|
UCLASS()
|
|
class MESHMODELINGTOOLS_API UConvertToPolygonsOperatorFactory : public UObject, public UE::Geometry::IDynamicMeshOperatorFactory
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
// IDynamicMeshOperatorFactory API
|
|
virtual TUniquePtr<UE::Geometry::FDynamicMeshOperator> MakeNewOperator() override;
|
|
|
|
UPROPERTY()
|
|
UConvertToPolygonsTool* ConvertToPolygonsTool; // back pointer
|
|
};
|
|
|
|
/**
|
|
*
|
|
*/
|
|
UCLASS()
|
|
class MESHMODELINGTOOLS_API UConvertToPolygonsTool : public USingleSelectionMeshEditingTool
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UConvertToPolygonsTool();
|
|
|
|
virtual void Setup() override;
|
|
virtual void Shutdown(EToolShutdownType ShutdownType) override;
|
|
|
|
virtual void Render(IToolsContextRenderAPI* RenderAPI) override;
|
|
virtual void OnTick(float DeltaTime) override;
|
|
|
|
virtual bool HasCancel() const override { return true; }
|
|
virtual bool HasAccept() const override { return true; }
|
|
virtual bool CanAccept() const override;
|
|
|
|
// update parameters in ConvertToPolygonsOp based on current Settings
|
|
void UpdateOpParameters(FConvertToPolygonsOp& ConvertToPolygonsOp) const;
|
|
|
|
protected:
|
|
|
|
void OnSettingsModified();
|
|
|
|
protected:
|
|
UPROPERTY()
|
|
UConvertToPolygonsToolProperties* Settings;
|
|
|
|
UPROPERTY()
|
|
UMeshOpPreviewWithBackgroundCompute* PreviewWithBackgroundCompute = nullptr;
|
|
|
|
protected:
|
|
TSharedPtr<UE::Geometry::FDynamicMesh3, ESPMode::ThreadSafe> OriginalDynamicMesh;
|
|
|
|
// for visualization
|
|
TArray<int> PolygonEdges;
|
|
|
|
void UpdateVisualization();
|
|
void GenerateAsset(const FDynamicMeshOpResult& Result);
|
|
|
|
};
|