UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
EdGraphPin.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "UObject/Object.h"
8#include "UObject/ObjectPtr.h"
9#include "Misc/Guid.h"
10#include "UObject/Class.h"
12#include "Templates/Casts.h"
13#include "EdGraph/EdGraphNode.h"
14#include "EdGraphPin.generated.h"
15
16class UEdGraphPin;
17enum class EPinResolveType : uint8;
18
20{
21 Before,
22 After,
23};
24
25USTRUCT()
27{
29
30
34 UPROPERTY()
35 TObjectPtr<UObject> MemberParent;
36
38 UPROPERTY()
39 FName MemberName;
40
42 UPROPERTY()
43 FGuid MemberGuid;
44
45 FSimpleMemberReference() : MemberParent(nullptr) {}
46
47 void Reset()
48 {
49 operator=(FSimpleMemberReference());
50 }
51
53 {
54 return (MemberParent == Other.MemberParent)
55 && (MemberName == Other.MemberName)
56 && (MemberGuid == Other.MemberGuid);
57 }
58
59 /* For backwards compatibility (when MemberParent used to exclusively be a class) */
61 {
62 return Cast<UClass>(MemberParent);
63 }
64};
65
67{
68 Ar << Data.MemberParent;
69 Ar << Data.MemberName;
70 Ar << Data.MemberGuid;
71 return Ar;
72}
73
75USTRUCT(BlueprintType)
77{
79
80
81 UPROPERTY()
82 FName PinCategory;
83
85 UPROPERTY()
86 FName PinSubCategory;
87
89 UPROPERTY()
90 TWeakObjectPtr<UObject> PinSubCategoryObject;
91
93 UPROPERTY()
94 FSimpleMemberReference PinSubCategoryMemberReference;
95
97 UPROPERTY()
99
100 UPROPERTY()
101 EPinContainerType ContainerType;
102
103private:
105 UPROPERTY()
106 uint8 bIsArray_DEPRECATED:1;
107
108public:
110 UPROPERTY()
111 uint8 bIsReference:1;
112
114 UPROPERTY()
115 uint8 bIsConst:1;
116
118 UPROPERTY()
119 uint8 bIsWeakPointer:1;
120
122 UPROPERTY()
123 uint8 bIsUObjectWrapper:1;
124
126 UPROPERTY()
127 uint8 bSerializeAsSinglePrecisionFloat:1;
128
129 inline bool IsContainer() const { return (ContainerType != EPinContainerType::None); }
130 inline bool IsArray() const { return (ContainerType == EPinContainerType::Array); }
131 inline bool IsSet() const { return (ContainerType == EPinContainerType::Set); }
132 inline bool IsMap() const { return (ContainerType == EPinContainerType::Map); }
133
134public:
136 : PinSubCategoryObject(nullptr)
137 , ContainerType(EPinContainerType::None)
138 , bIsArray_DEPRECATED(false)
139 , bIsReference(false)
140 , bIsConst(false)
141 , bIsWeakPointer(false)
142 , bIsUObjectWrapper(false)
143 , bSerializeAsSinglePrecisionFloat(false)
144 {
145 }
146
148 : PinCategory(InPinCategory)
149 , PinSubCategory(InPinSubCategory)
150 , PinSubCategoryObject(InPinSubCategoryObject)
151 , PinValueType(InValueTerminalType)
152 , ContainerType(InPinContainerType)
153 , bIsArray_DEPRECATED(false)
154 , bIsReference(bInIsReference)
155 , bIsConst(false)
156 , bIsWeakPointer(false)
157 , bIsUObjectWrapper(false)
158 , bSerializeAsSinglePrecisionFloat(false)
159 {
160 }
161
162 bool operator == ( const FEdGraphPinType& Other ) const
163 {
164 return (PinCategory == Other.PinCategory)
165 && (PinSubCategory == Other.PinSubCategory)
166 && (PinSubCategoryObject == Other.PinSubCategoryObject)
167 && (PinValueType == Other.PinValueType)
168 && (ContainerType == Other.ContainerType)
169 && (bIsReference == Other.bIsReference)
170 && (bIsWeakPointer == Other.bIsWeakPointer)
171 && (PinSubCategoryMemberReference == Other.PinSubCategoryMemberReference)
172 && (bIsConst == Other.bIsConst);
173 }
174 bool operator != ( const FEdGraphPinType& Other ) const
175 {
176 return !(*this == Other);
177 }
178
180 {
181 PinCategory = NAME_None;
182 PinSubCategory = NAME_None;
183 PinSubCategoryObject = nullptr;
184 PinValueType = FEdGraphTerminalType();
185 PinSubCategoryMemberReference.Reset();
186 ContainerType = EPinContainerType::None;
187 bIsReference = false;
188 bIsWeakPointer = false;
189 bIsUObjectWrapper = false;
190 bSerializeAsSinglePrecisionFloat = false;
191 bIsConst = false;
192 }
193
194 ENGINE_API bool Serialize(FArchive& Ar);
195 ENGINE_API void PostSerialize(const FArchive& Ar);
196#if WITH_EDITORONLY_DATA
198#endif
199
200 static ENGINE_API FEdGraphPinType GetPinTypeForTerminalType( const FEdGraphTerminalType& TerminalType );
201 static ENGINE_API FEdGraphPinType GetTerminalTypeForContainer( const FEdGraphPinType& ContainerType );
202
203 static EPinContainerType ToPinContainerType(const bool bInIsArray, const bool bInIsSet, const bool bInIsMap)
204 {
206
207 if (bInIsArray)
208 {
209 check(!bInIsSet && !bInIsMap);
210 ContainerType = EPinContainerType::Array;
211 }
212 else if (bInIsSet)
213 {
214 check(!bInIsMap);
215 ContainerType = EPinContainerType::Set;
216 }
217 else if (bInIsMap)
218 {
219 ContainerType = EPinContainerType::Map;
220 }
221
222 return ContainerType;
223 }
224
225};
226
227template<>
237
238UENUM()
240{
241 BPST_Original UMETA(DisplayName="Circles, Grid, Diamond"),
242 BPST_VariantA UMETA(DisplayName="Directional Circles")
243};
244
245USTRUCT()
247{
249
250
253 FEdGraphPinReference(const UEdGraphPin* InPin) : OwningNode(nullptr) { SetPin(InPin); }
254
256 ENGINE_API void SetPin(const UEdGraphPin* NewPin);
257
259 ENGINE_API UEdGraphPin* Get() const;
260
262 {
263 return GetTypeHash(EdGraphPinReference.PinId);
264 }
265
267 {
268 return PinId == Other.PinId && OwningNode == Other.OwningNode;
269 }
270
271private:
273 UPROPERTY()
275
277 UPROPERTY()
278 FGuid PinId;
279};
280
281#if WITH_EDITORONLY_DATA
283{
284 UEdGraphPin* ParentPin = nullptr;
285 UEdGraphPin* ChildPin = nullptr;
286
287 friend auto operator<=>(const FSnappedEdGraphPin&, const FSnappedEdGraphPin&) = default;
288};
289#endif
290
291enum class EPinResolveType : uint8;
292
294{
295 friend struct FEdGraphPinReference;
296private:
299
300
301public:
304
307
310
313
314#if WITH_EDITORONLY_DATA
316 // ONLY PUT BITFIELD PROPERTIES AFTER THIS TO ENSURE GOOD MEMORY ALIGNMENT
318
320 uint8 bHidden:1;
321
324
327
330
333
336
339
342
348
349 bool ShouldSavePinIfOrphaned() const { return bSavePinIfOrphaned; }
351
352private:
355
356public:
359
360private:
363
366public:
367#endif // WITH_EDITORONLY_DATA
368
372#if WITH_EDITORONLY_DATA
374
376 FString DeprecationMessage;
377#endif
378
380 FString PinToolTip;
381
384
387
390
393
396
399
402
405
408
409#if WITH_EDITORONLY_DATA
411 FGuid PersistentGuid;
412#endif
413
414public:
415
418
421
422#if WITH_EDITORONLY_DATA
425 ENGINE_API bool IsSnapped() const;
426 ENGINE_API bool IsSnappedParentOf(const UEdGraphNode* Node) const;
431#endif
432
435
437 ENGINE_API void BreakAllPinLinks(bool bNotifyNodes = false, bool bAlwaysMarkDirty = true);
438
439private:
440 enum class ETransferPersistentDataMode : uint8
441 {
442 Move,
443 Copy
444 };
445
446 template<class T>
447 static void TransferPersistentDataFromOldPin(UEdGraphPin& DestPin, T& SourcePin, const ETransferPersistentDataMode TransferMode);
448
449public:
456
463
466
468 inline class UEdGraphNode* GetOwningNode() const { check(OwningNode); return OwningNode; }
469 inline class UEdGraphNode* GetOwningNodeUnchecked() const { return OwningNode; }
470
472 ENGINE_API const class UEdGraphSchema* GetSchema() const;
473
475 ENGINE_API bool HasAnyConnections() const;
476
482
484 void SafeSetHidden(bool bIsHidden)
485 {
486#if WITH_EDITORONLY_DATA
487 if (SubPins.Num() == 0)
488 {
489 bHidden = bIsHidden;
490 }
491#endif // WITH_EDITORONLY_DATA
492 }
493
498 ENGINE_API FString GetDefaultAsString() const;
499
504
507
510
511#if WITH_EDITORONLY_DATA
513 ENGINE_API FText GetDisplayName() const;
514#endif // WITH_EDITORONLY_DATA
515
523 const FString GetLinkInfoString( const FString& InFunctionName, const FString& InInfoData, const UEdGraphPin* InToPin ) const;
524
527 {
528 DefaultValue.Empty();
529 DefaultObject = nullptr;
531 }
532
535 {
536 check(LinkedTo.Num() == 0);
537
539
542#if WITH_EDITORONLY_DATA
544 DeprecationMessage.Reset();
545#endif // WITH_EDITORONLY_DATA
548
549#if WITH_EDITORONLY_DATA
550 bHidden = false;
551 bNotConnectable = false;
554 bDeprecated = false;
555 bOrphanedPin = false;
556 bSavePinIfOrphaned = true;
557 bAllowFriendlyName = true;
558#endif // WITH_EDITORONLY_DATA
559 }
560
562 void AddStructReferencedObjects(class FReferenceCollector& Collector);
563
566#if WITH_EDITORONLY_DATA
567 static void DeclarePinCustomVersions(FArchive& Ar);
568#endif
569
571 ENGINE_API bool Modify(bool bAlwaysMarkDirty = true);
572
575
578
580 inline bool WasTrashed() const { return bWasTrashed; }
581
585
587 ENGINE_API bool ExportTextItem(FString& ValueStr, int32 PortFlags) const;
588 ENGINE_API bool ImportTextItem(const TCHAR*& Buffer, int32 PortFlags, class UObject* Parent, FOutputDevice* ErrorText);
589
590 const FString GetName() const { return PinName.ToString(); }
591 const FName GetFName() const { return PinName; }
593 bool IsPendingKill() const { return bWasTrashed; }
595
597 ENGINE_API static void ShutdownVerification();
598
599 ENGINE_API static void Purge();
600
602 ~UEdGraphPin();
603
606
607 ENGINE_API static bool AreOrphanPinsEnabled();
608
610private:
612 UEdGraphPin(UEdGraphNode* InOwningNode, const FGuid& PinGuid);
613
615 void InitFromDeprecatedPin(class UEdGraphPin_Deprecated* DeprecatedPin);
616
618 void DestroyImpl(bool bClearLinks);
619
620 bool Serialize(FArchive& Ar);
621
622 // Helper functions
623 static void ConvertConnectedGhostNodesToRealNodes(UEdGraphNode* InNode, bool bAlwaysMarkDirty = true);
624 static void ResolveReferencesToPin(UEdGraphPin* Pin, bool bStrictValidation = true);
625 static void SerializePinArray(FArchive& Ar, TArray<UEdGraphPin*>& ArrayRef, UEdGraphPin* RequestingPin, EPinResolveType ResolveType);
626 static bool SerializePin(FArchive& Ar, UEdGraphPin*& PinRef, int32 ArrayIdx, UEdGraphPin* RequestingPin, EPinResolveType ResolveType, TArray<UEdGraphPin*>& OldPins);
627 static FString ExportText_PinReference(const UEdGraphPin* Pin);
628 static FString ExportText_PinArray(const TArray<UEdGraphPin*>& PinArray);
629 static bool ImportText_PinArray(const TCHAR*& Buffer, TArray<UEdGraphPin*>& ArrayRef, UEdGraphPin* RequestingPin, EPinResolveType ResolveType);
630
631#if WITH_EDITORONLY_DATA
632 static FString bHasSnappedChildName;
633 static FString bHasSnappedParentName;
634#endif
635};
636
637UCLASS(MinimalAPI)
639{
641
642
643 UPROPERTY()
644 FString PinName;
645
646#if WITH_EDITORONLY_DATA
648 UPROPERTY()
650#endif
651
653 UPROPERTY()
654 FString PinToolTip;
655
657 UPROPERTY()
659
661 UPROPERTY()
662 struct FEdGraphPinType PinType;
663
665 UPROPERTY()
666 FString DefaultValue;
667
669 UPROPERTY()
670 FString AutogeneratedDefaultValue;
671
673 UPROPERTY()
674 TObjectPtr<class UObject> DefaultObject;
675
677 UPROPERTY()
678 FText DefaultTextValue;
679
681 UPROPERTY()
683
685 UPROPERTY()
687
689 UPROPERTY()
691
693 UPROPERTY()
695
696#if WITH_EDITORONLY_DATA
698 UPROPERTY()
699 uint32 bHidden:1;
700
702 UPROPERTY()
704
706 UPROPERTY()
708
710 UPROPERTY()
712
714 UPROPERTY()
716
720
722 UPROPERTY()
723 FGuid PersistentGuid;
724#endif // WITH_EDITORONLY_DATA
725
726public:
727 // UObject interface
728 virtual bool IsSafeForRootSet() const override { return false; }
729 // End UObject interface
730
732 void FixupDefaultValue();
733};
734
735
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EEdGraphPinDirection
Definition EdGraphNode.h:98
@ EGPD_Input
Definition EdGraphNode.h:99
@ EGPD_Output
Definition EdGraphNode.h:100
EPinContainerType
Definition EdGraphNode.h:124
EPinResolveType
Definition EdGraphPin.cpp:411
@ ReferencePassThroughConnection
FArchive & operator<<(FArchive &Ar, FSimpleMemberReference &Data)
Definition EdGraphPin.h:66
EBlueprintPinStyleType
Definition EdGraphPin.h:240
@ UMETA
Definition EdGraphPin.h:241
EPinInsertPosition
Definition EdGraphPin.h:20
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
EPropertyObjectReferenceType
Definition ObjectMacros.h:533
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
void Move(T &A, typename TMoveSupportTraits< T >::Copy B)
Definition UnrealTemplate.h:24
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition NameTypes.h:617
CORE_API FString ToString() const
Definition UnrealNames.cpp:3537
Definition OutputDevice.h:133
Definition UObjectGlobals.h:2492
Definition Text.h:385
static CORE_API const FText & GetEmpty()
Definition Text.cpp:252
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition EnumAsByte.h:22
Definition Class.h:3793
Definition EdGraphNode.h:289
Definition EdGraphPin.h:639
virtual bool IsSafeForRootSet() const override
Definition EdGraphPin.h:728
Definition EdGraphPin.h:294
void ResetToDefaults()
Definition EdGraphPin.h:534
static ENGINE_API UEdGraphPin * CreatePinFromDeprecatedPin(class UEdGraphPin_Deprecated *DeprecatedPin)
Definition EdGraphPin.cpp:1038
ENGINE_API FText GetDefaultAsText() const
Definition EdGraphPin.cpp:913
ENGINE_API const class UEdGraphSchema * GetSchema() const
Definition EdGraphPin.cpp:858
UEdGraphPin * ReferencePassThroughConnection
Definition EdGraphPin.h:407
void ResetDefaultValue()
Definition EdGraphPin.h:526
uint8 bWasTrashed
Definition EdGraphPin.h:370
void SafeSetHidden(bool bIsHidden)
Definition EdGraphPin.h:484
FString AutogeneratedDefaultValue
Definition EdGraphPin.h:389
FString PinToolTip
Definition EdGraphPin.h:380
static ENGINE_API void ResolveAllPinReferences()
Definition EdGraphPin.cpp:1631
ENGINE_API void MarkAsGarbage()
Definition EdGraphPin.cpp:1562
static void SerializeAsOwningNode(FArchive &Ar, TArray< UEdGraphPin * > &ArrayRef)
Definition EdGraphPin.cpp:993
static EEdGraphPinDirection GetComplementaryDirection(EEdGraphPinDirection InDirection)
Definition EdGraphPin.h:478
TArray< UEdGraphPin * > SubPins
Definition EdGraphPin.h:401
ENGINE_API void SetOwningNode(UEdGraphNode *NewOwningNode)
Definition EdGraphPin.cpp:1009
FName PinName
Definition EdGraphPin.h:306
ENGINE_API void AssignByRefPassThroughConnection(UEdGraphPin *InTargetPin)
Definition EdGraphPin.cpp:824
const FString GetLinkInfoString(const FString &InFunctionName, const FString &InInfoData, const UEdGraphPin *InToPin) const
Definition EdGraphPin.cpp:964
static ENGINE_API bool AreOrphanPinsEnabled()
Definition EdGraphPin.cpp:2428
void AddStructReferencedObjects(class FReferenceCollector &Collector)
Definition EdGraphPin.cpp:981
ENGINE_API bool ExportTextItem(FString &ValueStr, int32 PortFlags) const
Definition EdGraphPin.cpp:1077
class UEdGraphNode * GetOwningNodeUnchecked() const
Definition EdGraphPin.h:469
static ENGINE_API void SanitizePinsPostUndoRedo()
Definition EdGraphPin.cpp:2433
static ENGINE_API void ShutdownVerification()
Definition EdGraphPin.cpp:1570
ENGINE_API bool DoesDefaultValueMatchAutogenerated() const
Definition EdGraphPin.cpp:930
ENGINE_API FEdGraphTerminalType GetPrimaryTerminalType() const
Definition EdGraphPin.cpp:1557
ENGINE_API bool ImportTextItem(const TCHAR *&Buffer, int32 PortFlags, class UObject *Parent, FOutputDevice *ErrorText)
Definition EdGraphPin.cpp:1265
UEdGraphPin * ParentPin
Definition EdGraphPin.h:404
FText DefaultTextValue
Definition EdGraphPin.h:395
TArray< UEdGraphPin * > LinkedTo
Definition EdGraphPin.h:398
ENGINE_API void BreakAllPinLinks(bool bNotifyNodes=false, bool bAlwaysMarkDirty=true)
Definition EdGraphPin.cpp:705
~UEdGraphPin()
Definition EdGraphPin.cpp:1624
TEnumAsByte< enum EEdGraphPinDirection > Direction
Definition EdGraphPin.h:312
ENGINE_API void MakeLinkTo(UEdGraphPin *ToPin, bool bAlwaysMarkDirty=true)
Definition EdGraphPin.cpp:514
const FString GetName() const
Definition EdGraphPin.h:590
static ENGINE_API void Purge()
Definition EdGraphPin.cpp:1575
static ENGINE_API UEdGraphPin * CreatePin(UEdGraphNode *InOwningNode)
Definition EdGraphPin.cpp:507
bool WasTrashed() const
Definition EdGraphPin.h:580
class UEdGraphNode * GetOwningNode() const
Definition EdGraphPin.h:468
UEdGraphNode * GetOuter() const
Definition EdGraphPin.h:592
ENGINE_API bool Modify(bool bAlwaysMarkDirty=true)
Definition EdGraphPin.cpp:998
TObjectPtr< class UObject > DefaultObject
Definition EdGraphPin.h:392
ENGINE_API void BreakLinkTo(UEdGraphPin *ToPin, bool bAlwaysMarkDirty=true)
Definition EdGraphPin.cpp:661
ENGINE_API void MovePersistentDataFromOldPin(UEdGraphPin &SourcePin)
Definition EdGraphPin.cpp:810
FString DefaultValue
Definition EdGraphPin.h:386
ENGINE_API void CopyPersistentDataFromOldPin(const UEdGraphPin &SourcePin)
Definition EdGraphPin.cpp:819
const FName GetFName() const
Definition EdGraphPin.h:591
bool IsPendingKill() const
Definition EdGraphPin.h:593
ENGINE_API bool HasAnyConnections() const
Definition EdGraphPin.cpp:868
int32 SourceIndex
Definition EdGraphPin.h:309
FGuid PinId
Definition EdGraphPin.h:303
ENGINE_API bool IsDefaultAsStringEmpty() const
Definition EdGraphPin.cpp:908
FEdGraphPinType PinType
Definition EdGraphPin.h:383
ENGINE_API FString GetDefaultAsString() const
Definition EdGraphPin.cpp:890
static ENGINE_API UEdGraphPin * FindPinCreatedFromDeprecatedPin(class UEdGraphPin_Deprecated *DeprecatedPin)
Definition EdGraphPin.cpp:1054
Definition EdGraphSchema.h:737
Definition Object.h:95
@ false
Definition radaudio_common.h:23
Definition EdGraphPin.h:247
friend uint32 GetTypeHash(const FEdGraphPinReference &EdGraphPinReference)
Definition EdGraphPin.h:261
FEdGraphPinReference(UEdGraphPin *InPin)
Definition EdGraphPin.h:252
FEdGraphPinReference(const UEdGraphPin *InPin)
Definition EdGraphPin.h:253
bool operator==(const FEdGraphPinReference &Other) const
Definition EdGraphPin.h:266
Definition EdGraphPin.h:77
FEdGraphPinType()
Definition EdGraphPin.h:135
FEdGraphPinType(FName InPinCategory, FName InPinSubCategory, UObject *InPinSubCategoryObject, EPinContainerType InPinContainerType, bool bInIsReference, const FEdGraphTerminalType &InValueTerminalType)
Definition EdGraphPin.h:147
void ResetToDefaults()
Definition EdGraphPin.h:179
bool IsSet() const
Definition EdGraphPin.h:131
bool IsMap() const
Definition EdGraphPin.h:132
static EPinContainerType ToPinContainerType(const bool bInIsArray, const bool bInIsSet, const bool bInIsMap)
Definition EdGraphPin.h:203
bool IsArray() const
Definition EdGraphPin.h:130
Definition EdGraphNode.h:38
Definition Guid.h:109
Definition EdGraphPin.h:27
void Reset()
Definition EdGraphPin.h:47
bool operator==(const FSimpleMemberReference &Other) const
Definition EdGraphPin.h:52
UClass * GetMemberParentClass() const
Definition EdGraphPin.h:60
Definition ObjectPtr.h:488
Definition StructOpsTypeTraits.h:11
@ WithSerializer
Definition StructOpsTypeTraits.h:23
@ WithPostSerialize
Definition StructOpsTypeTraits.h:25
static constexpr EPropertyObjectReferenceType WithSerializerObjectReferences
Definition StructOpsTypeTraits.h:41
Definition StructOpsTypeTraits.h:46
Definition WeakObjectPtrTemplates.h:25