// 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; class UParameterizeMeshOperatorFactory; UCLASS() class MESHMODELINGTOOLSEDITORONLY_API UParameterizeMeshToolBuilder : public USingleSelectionMeshEditingToolBuilder { GENERATED_BODY() public: virtual USingleSelectionMeshEditingTool* CreateNewTool(const FToolBuilderState& SceneState) const override; virtual bool CanBuildTool(const FToolBuilderState& SceneState) const override; }; /** * 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 IInteractiveToolManageGeometrySelectionAPI { 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; // IInteractiveToolManageGeometrySelectionAPI -- this tool won't update external geometry selection or change selection-relevant mesh IDs virtual bool IsInputSelectionValidOnOutput() override { return true; } 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; UPROPERTY() TObjectPtr Factory; TSharedPtr InputMesh; void OnMethodTypeChanged(); void OnPreviewMeshUpdated(); };