添加 Source/FLESHEditor/Public/VisceraNodeObject.h

This commit is contained in:
2025-04-21 18:37:57 +08:00
parent f177912c5e
commit 1ab7109cc5

View File

@@ -0,0 +1,113 @@
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "VisceraNodeObject.generated.h"
// Forward declarations
struct FVisceraNodeItem;
/**
* Object representing a viscera node for property editing
*/
UCLASS()
class FLESHEDITOR_API UVisceraNodeObject : public UObject
{
GENERATED_BODY()
public:
UVisceraNodeObject();
// Initialize from a node item
void InitFromNodeItem(TSharedPtr<FVisceraNodeItem> InNodeItem);
// Apply changes back to the node item
void ApplyToNodeItem(TSharedPtr<FVisceraNodeItem> InNodeItem);
// Node type
UPROPERTY(VisibleAnywhere, Category = "Node")
FString NodeType;
// Node name
UPROPERTY(EditAnywhere, Category = "Node")
FName NodeName;
// Display name
UPROPERTY(EditAnywhere, Category = "Node")
FString DisplayName;
// SoftBody properties
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides))
bool bEnableSimulation;
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "10.0"))
float GravityStrength;
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1000.0"))
float MinFrameSpeed;
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1000.0"))
float MaxFrameSpeed;
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0"))
float ExternalFrameLerp;
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0"))
float InitialGPUInfluence;
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "0.0", ClampMax = "0.1"))
float SubstepTime;
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides, ClampMin = "1", ClampMax = "10"))
int32 SolverIterations;
UPROPERTY(EditAnywhere, Category = "SoftBody", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides))
bool bRecomputeNormals;
// Anchor properties
UPROPERTY(EditAnywhere, Category = "Anchor", meta = (EditCondition = "NodeType == \"Anchor\"", EditConditionHides))
FVector AnchorLocation;
UPROPERTY(EditAnywhere, Category = "Anchor", meta = (EditCondition = "NodeType == \"Anchor\"", EditConditionHides, ClampMin = "0.1", ClampMax = "100.0"))
float AnchorRadius;
UPROPERTY(EditAnywhere, Category = "Anchor", meta = (EditCondition = "NodeType == \"Anchor\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0"))
float AnchorStiffness;
UPROPERTY(EditAnywhere, Category = "Anchor", meta = (EditCondition = "NodeType == \"Anchor\"", EditConditionHides))
FName AnchorBoneName;
// LineChain properties
UPROPERTY(EditAnywhere, Category = "LineChain", meta = (EditCondition = "NodeType == \"LineChain\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0"))
float LineChainStiffness;
UPROPERTY(EditAnywhere, Category = "LineChain", meta = (EditCondition = "NodeType == \"LineChain\"", EditConditionHides, ClampMin = "0.1", ClampMax = "10.0"))
float LineChainThickness;
UPROPERTY(EditAnywhere, Category = "LineChain", meta = (EditCondition = "NodeType == \"LineChain\"", EditConditionHides))
TArray<FVector> LineChainPoints;
// Tetra properties
UPROPERTY(EditAnywhere, Category = "Tetra", meta = (EditCondition = "NodeType == \"Tetra\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0"))
float TetraStiffness;
UPROPERTY(EditAnywhere, Category = "Tetra", meta = (EditCondition = "NodeType == \"Tetra\"", EditConditionHides))
TArray<FVector> TetraPoints;
// Plane properties
UPROPERTY(EditAnywhere, Category = "Plane", meta = (EditCondition = "NodeType == \"Plane\"", EditConditionHides))
FVector PlaneLocation;
UPROPERTY(EditAnywhere, Category = "Plane", meta = (EditCondition = "NodeType == \"Plane\"", EditConditionHides))
FVector PlaneNormal;
UPROPERTY(EditAnywhere, Category = "Plane", meta = (EditCondition = "NodeType == \"Plane\"", EditConditionHides, ClampMin = "0.0", ClampMax = "1.0"))
float PlaneStiffness;
// Cutting properties
UPROPERTY(EditAnywhere, Category = "Cutting", meta = (EditCondition = "NodeType == \"SoftBody\"", EditConditionHides))
bool bEnableMultiLayerCutting;
UPROPERTY(EditAnywhere, Category = "Cutting", meta = (EditCondition = "NodeType == \"SoftBody\" && bEnableMultiLayerCutting", EditConditionHides))
ECapMeshMethod CapMethod;
};