UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
InterchangePipelineBase.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Map.h"
8#include "CoreMinimal.h"
9#include "HAL/Platform.h"
13#include "Misc/OptionalFwd.h"
16#include "UObject/NameTypes.h"
17#include "UObject/Object.h"
19#include "UObject/ObjectPtr.h"
22#include "Widgets/SWindow.h"
23
24#include "InterchangePipelineBase.generated.h"
25
26class FText;
27class UClass;
31struct FFrame;
32
33UENUM(BlueprintType)
41
42UENUM()
44{
45 None, //Default pipeline instance we refer in the project settings pipeline stack. This context should allow editing of the properties states
54 AssetCustomMorphTargetImport, //Import the content has a combine static mesh so we can add a custom morph target to a skeletal mesh
56};
57
58USTRUCT()
60{
62
63 UPROPERTY()
65
66 UPROPERTY()
67 TObjectPtr<UClass> ImportObjectType = nullptr;
68
69 UPROPERTY()
70 TObjectPtr<UObject> ReimportAsset = nullptr;
71
72 UPROPERTY()
73 TObjectPtr<const UInterchangeBaseNodeContainer> BaseNodeContainer = nullptr;
74
76};
77
78USTRUCT(BlueprintType)
80{
82
83
84 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Property States")
85 bool bVisible = true;
86
88};
89
90USTRUCT(BlueprintType)
92{
94
95
96 bool IsPropertyLocked() const
97 {
98 return bLocked;
99 }
100
102 {
103 bLocked = bLockValue;
104 }
105
108 {
109 return bPreDialogReset;
110 }
111
113 {
114 bPreDialogReset = bPreDialogResetValue;
115 }
116
117
120 {
121 return BasicLayoutStates.bVisible;
122 }
123
125 bool IsPropertyVisible(const bool bIsReimportContext, const bool bIsShowEssentials) const
126 {
127 bool bVisible = bIsReimportContext ? ReimportStates.bVisible : ImportStates.bVisible;
128 if (bVisible)
129 {
130 bVisible = bIsShowEssentials ? BasicLayoutStates.bVisible : true;
131 }
132 return bVisible;
133 }
134
136 {
137 ImportStates.bVisible = bVisibleValue;
138 }
139
141 {
142 ReimportStates.bVisible = bVisibleValue;
143 }
144
146 {
147 BasicLayoutStates.bVisible = bVisibleValue;
148 }
149
151 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Property States")
152 bool bLocked = false;
153
155 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Property States")
156 bool bPreDialogReset = false;
157
159 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Context Properties States")
161
163 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Context Properties States")
165
167 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Context Properties States")
169
171};
172
181
183{
184public:
188
190
192
197
198 FVector2D GetMinimumSize(float ApplicationScale) const
199 {
200 return ComputeDesiredSize(ApplicationScale);
201 }
202protected:
204};
205
215UCLASS(BlueprintType, Blueprintable, editinlinenew, Abstract, MinimalAPI)
217{
219
220public:
221
236 UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interchange | Pipeline")
237 INTERCHANGECORE_API FString ScriptedGetPipelineDisplayName() const;
239 FString ScriptedGetPipelineDisplayName_Implementation() const
240 {
241 //By default we call the virtual GetPipelineDisplayName
242 return GetPipelineDisplayName();
243 }
244
251 UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interchange | Pipeline")
252 INTERCHANGECORE_API void ScriptedExecutePipeline(UInterchangeBaseNodeContainer* BaseNodeContainer, const TArray<UInterchangeSourceData*>& SourceDatas, const FString& ContentBasePath);
254 void ScriptedExecutePipeline_Implementation(UInterchangeBaseNodeContainer* BaseNodeContainer, const TArray<UInterchangeSourceData*>& SourceDatas, const FString& ContentBasePath)
255 {
256 //By default we call the virtual import pipeline execution
257 ExecutePipeline(BaseNodeContainer, SourceDatas, ContentBasePath);
258 }
259
264 UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interchange | Pipeline")
265 INTERCHANGECORE_API void ScriptedExecutePostFactoryPipeline(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& FactoryNodeKey, UObject* CreatedAsset, bool bIsAReimport);
267 void ScriptedExecutePostFactoryPipeline_Implementation(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& FactoryNodeKey, UObject* CreatedAsset, bool bIsAReimport)
268 {
269 //By default we call the virtual import pipeline execution
270 ExecutePostFactoryPipeline(BaseNodeContainer, FactoryNodeKey, CreatedAsset, bIsAReimport);
271 }
278 UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interchange | Pipeline")
279 INTERCHANGECORE_API void ScriptedExecutePostImportPipeline(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& FactoryNodeKey, UObject* CreatedAsset, bool bIsAReimport);
281 void ScriptedExecutePostImportPipeline_Implementation(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& FactoryNodeKey, UObject* CreatedAsset, bool bIsAReimport)
282 {
283 //By default we call the virtual import pipeline execution
284 ExecutePostImportPipeline(BaseNodeContainer, FactoryNodeKey, CreatedAsset, bIsAReimport);
285 }
286
292 UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interchange | Pipeline")
293 INTERCHANGECORE_API void ScriptedExecutePostBroadcastPipeline(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& FactoryNodeKey, UObject* CreatedAsset, bool bIsAReimport);
295 void ScriptedExecutePostBroadcastPipeline_Implementation(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& FactoryNodeKey, UObject* CreatedAsset, bool bIsAReimport)
296 {
297 //By default we call the virtual import pipeline execution
298 ExecutePostBroadcastPipeline(BaseNodeContainer, FactoryNodeKey, CreatedAsset, bIsAReimport);
299 }
300
305 UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = "Interchange | Pipeline")
306 INTERCHANGECORE_API void ScriptedExecuteExportPipeline(UInterchangeBaseNodeContainer* BaseNodeContainer);
307
309 void ScriptedExecuteExportPipeline_Implementation(UInterchangeBaseNodeContainer* BaseNodeContainer)
310 {
311 ExecuteExportPipeline(BaseNodeContainer);
312 }
313
314 UE_DEPRECATED(5.4, "This function will be remove, call CanExecuteOnAnyThread function")
315 bool ScriptedCanExecuteOnAnyThread(EInterchangePipelineTask PipelineTask)
316 {
317 return CanExecuteOnAnyThread(PipelineTask);
318 }
319
327 {
328 return true;
329 }
330
335 UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interchange | Pipeline")
336 INTERCHANGECORE_API void ScriptedSetReimportSourceIndex(UClass* ReimportObjectClass, const int32 SourceFileIndex);
337
339 void ScriptedSetReimportSourceIndex_Implementation(UClass* ReimportObjectClass, const int32 SourceFileIndex)
340 {
341 SetReimportSourceIndex(ReimportObjectClass, SourceFileIndex);
342 }
343
351 virtual bool IsScripted()
352 {
353 return true;
354 }
355
356 INTERCHANGECORE_API static FString GetDefaultConfigFileName();
357
358 INTERCHANGECORE_API void LoadSettings(const FName PipelineStackName, bool bResetPreDialog = false);
359
360 INTERCHANGECORE_API void SaveSettings(const FName PipelineStackName);
361
369 INTERCHANGECORE_API virtual void AdjustSettingsForContext(const FInterchangePipelineContextParams& ContextParams);
370 INTERCHANGECORE_API virtual void AdjustSettingsFromCache();
371
373 INTERCHANGECORE_API void TransferAdjustSettings(const UInterchangePipelineBase* SourcePipeline);
374
376 {
377 bIsShowEssentials = bShowEssentialsModeValue;
378 }
379
380 /*
381 * Set to true if this pipeline is from a re-import or an override pipelines stack
382 */
384 {
385 bFromReimportOrOverride = bInFromReimportOrOverride;
386 }
387
388 /*
389 * Return true if the pipeline was created for a re-import or an override pipelines stack
390 */
392 {
393 return bFromReimportOrOverride;
394 }
395
400
406 {
407 return true;
408 }
409
410#if WITH_EDITOR
416 {
417 //The base class function do not have anything to filter
418 }
419
424 virtual bool IsPropertyChangeNeedRefresh(const FPropertyChangedEvent& PropertyChangedEvent) const
425 {
426 return false;
427 }
428
430 UFUNCTION(BlueprintCallable, Category = "Interchange | Pipeline")
432 {
433 return;
434 }
435
436#endif //WITH_EDITOR
437
443 {
444 //The base class function do not have any conflict
445 ConflictInfos.Empty();
446 return ConflictInfos;
447 }
448
450 {
451 return;
452 }
453
457 template <typename T>
458 T* AddMessage() const
459 {
460 check(Results != nullptr);
461 T* Item = Results->Add<T>();
462 return Item;
463 }
464
466 {
467 check(Results != nullptr);
468 Results->Add(Item);
469 }
470
475
479 INTERCHANGECORE_API const FInterchangePipelinePropertyStates* GetPropertyStates(const FName PropertyPath) const;
480
485
489 UFUNCTION(BlueprintCallable, Category = "Interchange | Pipeline")
490 INTERCHANGECORE_API bool DoesPropertyStatesExist(const FName PropertyPath) const;
491
495 UFUNCTION(BlueprintCallable, Category = "Interchange | Pipeline")
497
501 static INTERCHANGECORE_API FName GetPropertiesStatesPropertyName();
502
503 static INTERCHANGECORE_API FName GetResultsPropertyName();
504
505 bool CanEditPropertiesStates() { return bAllowPropertyStatesEdition; }
506
507 UFUNCTION(BlueprintCallable, Category = "Interchange | Pipeline")
508 bool IsReimportContext() { return bIsReimportContext; }
509
510 bool IsShowEssentials() { return bIsShowEssentials; }
511
512#if WITH_EDITOR
513 /*
514 * FName or FString properties can have a dynamic set of possible values. When displaying
515 * a pipeline property in the property editor, this function will be call for all FString and FName
516 * properties and will generate a combo box with the PossibleValues if the function return true.
517 */
519 {
520 return false;
521 }
522#endif //WITH_EDITOR
523
524 /*
525 * Return true if the pipeline is not a sub-pipeline. Standalone pipelines can have some extra properties.
526 * The customize detail of the pipeline will call this function to show or hide those properties.
527 * The pipeline itself can call the function to know whether a property must be used.
528 * Example: the override asset name property.
529 */
531 {
532 return this == GetMostPipelineOuter();
533 };
534
535 /*
536 * Update/reset the TWeakObjectPtrs to point to their original TObjectPtr.
537 * Works based on Variable naming.
538 */
539 INTERCHANGECORE_API void UpdateWeakObjectPtrs();
540
542 INTERCHANGECORE_API virtual void PostDuplicate(bool bDuplicateForPIE) override;
543 INTERCHANGECORE_API virtual void Serialize(FArchive& Ar) override;
546 /*
547 * If this returns true, this pipeline will be saved in the asset import data.
548 * We will reuse this pipeline when reimporting the asset.
549 * If false, it's probably a debug helper pipeline that we do not want to save into assets.
550 */
551 UFUNCTION(BlueprintCallable, Category = "Interchange | Pipeline")
552 virtual bool SupportReimport() const { return true; }
553
554 /*
555 * The Unreal import system has an option to force a name if we import only one main asset (one texture, one mesh or one animation).
556 * The generic asset pipeline uses this information to behave as expected.
557 */
558 UPROPERTY()
559 FString DestinationName;
560
561 /*
562 * The content path where asset should be created.
563 */
564 UPROPERTY()
565 FString ContentImportPath;
566
567#if WITH_EDITORONLY_DATA
572 UPROPERTY()
574#endif
575
576 INTERCHANGECORE_API UInterchangePipelineBase* GetMostPipelineOuter() const;
577
578protected:
579
580 INTERCHANGECORE_API virtual FString GetPipelineDisplayName() const;
581
582 virtual void ExecutePipeline(UInterchangeBaseNodeContainer* BaseNodeContainer, const TArray<UInterchangeSourceData*>& SourceDatas, const FString& ContentBasePath)
583 {
584 }
585
591 virtual void ExecutePostFactoryPipeline(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& NodeKey, UObject* CreatedAsset, bool bIsAReimport)
592 {
593 }
594
599 virtual void ExecutePostImportPipeline(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& NodeKey, UObject* CreatedAsset, bool bIsAReimport)
600 {
601 }
602
607 virtual void ExecutePostBroadcastPipeline(const UInterchangeBaseNodeContainer* BaseNodeContainer, const FString& NodeKey, UObject* CreatedAsset, bool bIsAReimport)
608 {
609 }
610
614
617 {
618 }
619
621
622 INTERCHANGECORE_API void SaveSettingsInternal(const FName PipelineStackName, const FString& ConfigFilename);
623
624#if WITH_EDITOR
629#endif //WITH_EDITOR
630
639 bool bAllowPropertyStatesEdition = true;
640
648 bool bIsReimportContext = false;
649
657 bool bIsShowEssentials = false;
658
659 /*
660 * If true, this pipeline was create to re-import an asset or override the project settings pipelines.
661 * That kind of pipeline will not be treat like project settings pipeline in the UI. PredialogCleanup will not be called.
662 */
663 UPROPERTY()
664 bool bFromReimportOrOverride = false;
665
666 UPROPERTY()
668
673 UPROPERTY()
675
678
681
683};
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
#define SLATE_END_ARGS()
Definition DeclarativeSyntaxSupport.h:116
#define SLATE_ARGUMENT(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:208
return true
Definition ExternalRpcRegistry.cpp:601
EInterchangePipelineTask
Definition InterchangePipelineBase.h:35
EInterchangePipelineContext
Definition InterchangePipelineBase.h:44
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
Definition NameTypes.h:617
Definition Text.h:385
Definition PropertyPath.Build.cs:6
Definition SCompoundWidget.h:22
virtual SLATECORE_API FVector2D ComputeDesiredSize(float) const override
Definition SCompoundWidget.cpp:59
Definition InterchangePipelineBase.h:183
FVector2D GetMinimumSize(float ApplicationScale) const
Definition InterchangePipelineBase.h:198
SLATE_BEGIN_ARGS(SInterchangeBaseConflictWidget)
Definition InterchangePipelineBase.h:185
virtual void SetWidgetWindow(TSharedPtr< SWindow > InWidgetWindow)
Definition InterchangePipelineBase.h:193
TSharedPtr< SWindow > WidgetWindow
Definition InterchangePipelineBase.h:203
Definition SWindow.h:243
Definition Array.h:670
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition Class.h:3793
Definition InterchangeBaseNodeContainer.h:39
Definition InterchangePipelineBase.h:217
virtual bool IsScripted()
Definition InterchangePipelineBase.h:351
virtual void ExecutePostBroadcastPipeline(const UInterchangeBaseNodeContainer *BaseNodeContainer, const FString &NodeKey, UObject *CreatedAsset, bool bIsAReimport)
Definition InterchangePipelineBase.h:607
virtual void ShowConflictDialog(const FGuid &ConflictUniqueId)
Definition InterchangePipelineBase.h:449
void AddMessage(UInterchangeResult *Item) const
Definition InterchangePipelineBase.h:465
void SetFromReimportOrOverride(bool bInFromReimportOrOverride)
Definition InterchangePipelineBase.h:383
virtual bool CanExecuteOnAnyThread(EInterchangePipelineTask PipelineTask)
Definition InterchangePipelineBase.h:326
virtual void ExecuteExportPipeline(UInterchangeBaseNodeContainer *BaseNodeContainer)
Definition InterchangePipelineBase.h:616
virtual void ExecutePostFactoryPipeline(const UInterchangeBaseNodeContainer *BaseNodeContainer, const FString &NodeKey, UObject *CreatedAsset, bool bIsAReimport)
Definition InterchangePipelineBase.h:591
bool IsStandAlonePipeline() const
Definition InterchangePipelineBase.h:530
bool IsFromReimportOrOverride() const
Definition InterchangePipelineBase.h:391
T * AddMessage() const
Definition InterchangePipelineBase.h:458
bool IsShowEssentials()
Definition InterchangePipelineBase.h:510
virtual void SetReimportSourceIndex(UClass *ReimportObjectClass, const int32 SourceFileIndex)
Definition InterchangePipelineBase.h:611
virtual bool IsSettingsAreValid(TOptional< FText > &OutInvalidReason) const
Definition InterchangePipelineBase.h:405
virtual TArray< FInterchangeConflictInfo > GetConflictInfos(UObject *ReimportObject, UInterchangeBaseNodeContainer *InBaseNodeContainer, UInterchangeSourceData *SourceData)
Definition InterchangePipelineBase.h:442
virtual void PreDialogCleanup(const FName PipelineStackName)
Definition InterchangePipelineBase.h:399
virtual void ExecutePostImportPipeline(const UInterchangeBaseNodeContainer *BaseNodeContainer, const FString &NodeKey, UObject *CreatedAsset, bool bIsAReimport)
Definition InterchangePipelineBase.h:599
void SetShowEssentialsMode(bool bShowEssentialsModeValue)
Definition InterchangePipelineBase.h:375
void SetResultsContainer(UInterchangeResultsContainer *InResults)
Definition InterchangePipelineBase.h:471
virtual void ExecutePipeline(UInterchangeBaseNodeContainer *BaseNodeContainer, const TArray< UInterchangeSourceData * > &SourceDatas, const FString &ContentBasePath)
Definition InterchangePipelineBase.h:582
Definition InterchangeResult.h:33
Definition InterchangeResultsContainer.h:21
Definition InterchangeSourceData.h:23
Definition Object.h:95
@ false
Definition radaudio_common.h:23
Definition Stack.h:114
Definition Guid.h:109
Definition InterchangePipelineBase.h:174
FGuid UniqueId
Definition InterchangePipelineBase.h:177
FString DisplayName
Definition InterchangePipelineBase.h:175
TSet< UClass * > AffectedAssetClasses
Definition InterchangePipelineBase.h:179
FString Description
Definition InterchangePipelineBase.h:176
Definition InterchangePipelineBase.h:60
Definition InterchangePipelineBase.h:80
Definition InterchangePipelineBase.h:92
bool IsPropertyPreDialogReset() const
Definition InterchangePipelineBase.h:107
bool IsPropertyVisibleInShowEssentials() const
Definition InterchangePipelineBase.h:119
bool IsPropertyVisible(const bool bIsReimportContext, const bool bIsShowEssentials) const
Definition InterchangePipelineBase.h:125
void SetPropertyShowEssentialsVisibility(const bool bVisibleValue)
Definition InterchangePipelineBase.h:145
void SetPropertyPreDialogReset(const bool bPreDialogResetValue)
Definition InterchangePipelineBase.h:112
void SetPropertyImportVisibility(const bool bVisibleValue)
Definition InterchangePipelineBase.h:135
void SetPropertyReimportVisibility(const bool bVisibleValue)
Definition InterchangePipelineBase.h:140
void SetPropertyLocked(const bool bLockValue)
Definition InterchangePipelineBase.h:101
Definition UnrealType.h:6865
Definition SoftObjectPath.h:56
Definition ObjectPtr.h:488
Definition Optional.h:131