Files
UnrealEngine/Engine/Plugins/Experimental/GeometryCollectionPlugin/Source/GeometryCollectionNodes/Public/Dataflow/GeometryCollectionEditNodes.h
2025-05-18 13:04:45 +08:00

146 lines
4.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Dataflow/DataflowEngine.h"
#include "GeometryCollection/ManagedArrayCollection.h"
#include "Dataflow/DataflowSelection.h"
#include "GeometryCollectionEditNodes.generated.h"
#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_5
namespace Dataflow = UE::Dataflow;
#else
namespace UE_DEPRECATED(5.5, "Use UE::Dataflow instead.") Dataflow {}
#endif
class FGeometryCollection;
/**
*
* Deletes selected bones from Collection. Empty clusters will be eliminated
*
*/
USTRUCT(meta = (DataflowGeometryCollection))
struct FPruneInCollectionDataflowNode : public FDataflowNode
{
GENERATED_USTRUCT_BODY()
DATAFLOW_NODE_DEFINE_INTERNAL(FPruneInCollectionDataflowNode, "PruneInCollection", "GeometryCollection|Edit", "")
DATAFLOW_NODE_RENDER_TYPE("SurfaceRender", FGeometryCollection::StaticType(), "Collection")
public:
/** Fractured GeometryCollection to prune */
UPROPERTY(meta = (DataflowInput, DataflowOutput, DataflowPassthrough = "Collection", DataflowIntrinsic))
FManagedArrayCollection Collection;
/** Transform selection for pruning */
UPROPERTY(meta = (DataflowInput, DisplayName = "TransformSelection", DataflowIntrinsic))
FDataflowTransformSelection TransformSelection;
FPruneInCollectionDataflowNode(const UE::Dataflow::FNodeParameters& InParam, FGuid InGuid = FGuid::NewGuid())
: FDataflowNode(InParam, InGuid)
{
RegisterInputConnection(&Collection);
RegisterInputConnection(&TransformSelection);
RegisterOutputConnection(&Collection, &Collection);
}
virtual void Evaluate(UE::Dataflow::FContext& Context, const FDataflowOutput* Out) const override;
};
UENUM(BlueprintType)
enum class EVisibiltyOptionsEnum : uint8
{
Dataflow_VisibilityOptions_Visible UMETA(DisplayName = "Visible"),
Dataflow_VisibilityOptions_Invisible UMETA(DisplayName = "Hidden"),
//~~~
//256th entry
Dataflow_Max UMETA(Hidden)
};
/**
*
* Sets all selected bone's visibilty to Visible/Hidden
*
*/
USTRUCT(meta = (DataflowGeometryCollection))
struct FSetVisibilityInCollectionDataflowNode : public FDataflowNode
{
GENERATED_USTRUCT_BODY()
DATAFLOW_NODE_DEFINE_INTERNAL(FSetVisibilityInCollectionDataflowNode, "SetVisibilityInCollection", "GeometryCollection|Edit", "")
DATAFLOW_NODE_RENDER_TYPE("SurfaceRender", FGeometryCollection::StaticType(), "Collection")
public:
/** What to set the visibility of the selected bones */
UPROPERTY(EditAnywhere, Category = "Visibility");
EVisibiltyOptionsEnum Visibility = EVisibiltyOptionsEnum::Dataflow_VisibilityOptions_Invisible;
/** Fractured GeometryCollection to set visibility */
UPROPERTY(meta = (DataflowInput, DataflowOutput, DataflowPassthrough = "Collection", DataflowIntrinsic))
FManagedArrayCollection Collection;
/** Transform selection for setting visibility */
UPROPERTY(meta = (DataflowInput, DataflowIntrinsic))
FDataflowTransformSelection TransformSelection;
/** Face selection for setting visibility */
UPROPERTY(meta = (DataflowInput, DataflowIntrinsic))
FDataflowFaceSelection FaceSelection;
FSetVisibilityInCollectionDataflowNode(const UE::Dataflow::FNodeParameters& InParam, FGuid InGuid = FGuid::NewGuid())
: FDataflowNode(InParam, InGuid)
{
RegisterInputConnection(&Collection);
RegisterInputConnection(&TransformSelection);
RegisterInputConnection(&FaceSelection);
RegisterOutputConnection(&Collection, &Collection);
}
virtual void Evaluate(UE::Dataflow::FContext& Context, const FDataflowOutput* Out) const override;
};
/**
*
* Merges selected bones into a single bone
*
*/
USTRUCT(meta = (DataflowGeometryCollection))
struct FMergeInCollectionDataflowNode : public FDataflowNode
{
GENERATED_USTRUCT_BODY()
DATAFLOW_NODE_DEFINE_INTERNAL(FMergeInCollectionDataflowNode, "MergeInCollection", "GeometryCollection|Edit", "")
DATAFLOW_NODE_RENDER_TYPE("SurfaceRender", FGeometryCollection::StaticType(), "Collection")
public:
/** Fractured GeometryCollection to merge */
UPROPERTY(meta = (DataflowInput, DataflowOutput, DataflowPassthrough = "Collection", DataflowIntrinsic))
FManagedArrayCollection Collection;
/** Transform selection for merging */
UPROPERTY(meta = (DataflowInput, DisplayName = "TransformSelection", DataflowIntrinsic))
FDataflowTransformSelection TransformSelection;
FMergeInCollectionDataflowNode(const UE::Dataflow::FNodeParameters& InParam, FGuid InGuid = FGuid::NewGuid())
: FDataflowNode(InParam, InGuid)
{
RegisterInputConnection(&Collection);
RegisterInputConnection(&TransformSelection);
RegisterOutputConnection(&Collection, &Collection);
}
virtual void Evaluate(UE::Dataflow::FContext& Context, const FDataflowOutput* Out) const override;
};
namespace UE::Dataflow
{
void GeometryCollectionEditNodes();
}