Files
UnrealEngineUWP/Engine/Plugins/Runtime/MeshModelingToolset/Source/ModelingComponents/Public/Changes/DynamicMeshChangeTarget.h
michael balzer a49c74b915 MeshModelingToolset: Move ModelingOperators and ModelingOperatorsEditorOnly modules out of experimental plugin
#jira UETOOL-3823
#rb lonnie.li
#preflight 617b1aea5794a500014f544a

#ROBOMERGE-AUTHOR: michael.balzer
#ROBOMERGE-SOURCE: CL 17972239 in //UE5/Release-5.0/... via CL 17972248
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v885-17909292)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17972256 by michael balzer in ue5-release-engine-test branch]
2021-10-28 19:47:45 -04:00

63 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Changes/MeshChange.h"
#include "Changes/MeshReplacementChange.h"
#include "DynamicMeshChangeTarget.generated.h"
PREDECLARE_USE_GEOMETRY_CLASS(FDynamicMesh3);
/**
* Bare bones wrapper of FDynamicMesh3 that supports MeshReplacementChange-based updates. Shares the mesh ptr with the MeshReplacementChange objects, so it must not be changed directly
* TODO: also support other MeshChange objects (by making a copy of the mesh when applying these changes)
*/
UCLASS(Transient)
class MODELINGCOMPONENTS_API UDynamicMeshReplacementChangeTarget : public UObject, public IMeshReplacementCommandChangeTarget
{
GENERATED_BODY()
protected:
TSharedPtr<const FDynamicMesh3, ESPMode::ThreadSafe> Mesh;
public:
UDynamicMeshReplacementChangeTarget() = default;
UDynamicMeshReplacementChangeTarget(TSharedPtr<const FDynamicMesh3, ESPMode::ThreadSafe> Mesh) : Mesh(Mesh)
{}
virtual ~UDynamicMeshReplacementChangeTarget() = default;
/**
* Apply/Revert a general mesh change to the internal mesh (implements IMeshReplacementCommandChangeTarget)
*/
virtual void ApplyChange(const FMeshReplacementChange* Change, bool bRevert) override;
virtual void SetMesh(TSharedPtr<const FDynamicMesh3, ESPMode::ThreadSafe> MeshIn)
{
Mesh = MeshIn;
}
const TSharedPtr<const FDynamicMesh3, ESPMode::ThreadSafe>& GetMesh() const
{
return Mesh;
}
/**
* Update the mesh and return a corresponding FChange
* Does not emit the change.
* Does not fire OnMeshChanged.
*/
TUniquePtr<FMeshReplacementChange> ReplaceMesh(const TSharedPtr<const FDynamicMesh3, ESPMode::ThreadSafe>& UpdateMesh);
/**
* This delegate fires when a FCommandChange is applied to this component, so that
* parent objects know the mesh has changed.
*/
FSimpleMulticastDelegate OnMeshChanged;
};