// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "BaseTools/SingleSelectionMeshEditingTool.h" #include "DynamicMesh/DynamicMesh3.h" #include "MeshOpPreviewHelpers.h" #include "Properties/MeshMaterialProperties.h" #include "Properties/MeshUVChannelProperties.h" #include "PropertySets/PolygroupLayersProperties.h" #include "Drawing/UVLayoutPreview.h" #include "ParameterizeMeshTool.generated.h" // Forward declarations class UDynamicMeshComponent; class UMaterialInterface; class UMaterialInstanceDynamic; class UParameterizeMeshToolProperties; class UParameterizeMeshToolUVAtlasProperties; class UParameterizeMeshToolXAtlasProperties; class UParameterizeMeshToolPatchBuilderProperties; UCLASS() class MESHMODELINGTOOLSEDITORONLY_API UParameterizeMeshToolBuilder : public USingleSelectionMeshEditingToolBuilder { GENERATED_BODY() public: virtual USingleSelectionMeshEditingTool* CreateNewTool(const FToolBuilderState& SceneState) const override; }; UCLASS() class MESHMODELINGTOOLSEDITORONLY_API UParameterizeMeshToolPatchBuilderGroupLayerProperties : public UPolygroupLayersProperties { GENERATED_BODY() public: UPROPERTY(EditAnywhere, Category = "PolyGroup Layer", meta = (DisplayName = "Constrain to PolyGroups")) bool bConstrainToPolygroups = false; }; /** * UParameterizeMeshTool automatically decomposes the input mesh into charts, solves for UVs, * and then packs the resulting charts */ UCLASS() class MESHMODELINGTOOLSEDITORONLY_API UParameterizeMeshTool : public USingleSelectionMeshEditingTool, public UE::Geometry::IDynamicMeshOperatorFactory { GENERATED_BODY() public: virtual void Setup() override; virtual void OnShutdown(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; virtual void OnPropertyModified(UObject* PropertySet, FProperty* Property) override; // IDynamicMeshOperatorFactory API virtual TUniquePtr MakeNewOperator() override; protected: UPROPERTY() TObjectPtr UVChannelProperties = nullptr; UPROPERTY() TObjectPtr Settings = nullptr; UPROPERTY() TObjectPtr UVAtlasProperties = nullptr; UPROPERTY() TObjectPtr XAtlasProperties = nullptr; UPROPERTY() TObjectPtr PatchBuilderProperties = nullptr; UPROPERTY() TObjectPtr PolygroupLayerProperties = nullptr; UPROPERTY() TObjectPtr MaterialSettings = nullptr; UPROPERTY() bool bCreateUVLayoutViewOnSetup = true; UPROPERTY() TObjectPtr UVLayoutView = nullptr; UPROPERTY() TObjectPtr Preview = nullptr; TSharedPtr InputMesh; void OnMethodTypeChanged(); void OnPreviewMeshUpdated(); };