FilterMode
FilterMode
#Overview
name: FilterMode
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 54
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of FilterMode is to control how filtering is applied to a set of items or data. It is typically used in various subsystems of Unreal Engine to determine which items should be included or excluded based on certain criteria. Here’s a breakdown of its usage and implications:
-
The FilterMode variable is used across different Unreal Engine subsystems, including asset management, animation, and networking.
-
It is primarily used in the Asset Registry, Animation, and World Partition systems.
-
The value of this variable is usually set through configuration settings or programmatically within the specific systems that use it.
-
FilterMode often interacts with other variables such as filter criteria, asset data, or specific system parameters to determine the final set of included or excluded items.
-
Developers should be aware that changing the FilterMode can significantly affect the behavior of the system it’s used in. For example, in asset management, it can change which assets are visible or processable.
-
Best practices when using this variable include:
- Clearly documenting the chosen FilterMode and its implications
- Ensuring consistency across related systems if multiple systems use filtering
- Testing thoroughly when changing FilterMode to ensure desired behavior
- Using enum values for FilterMode rather than raw integers for better code readability
-
FilterMode is often implemented as an enum, with common values including:
- Inclusive/Exclusive (or Allow/Disallow)
- All/None
- Specific filtering modes (e.g., FilterRootNodesOnly, FilterAllNodes)
-
In some cases, FilterMode is used in combination with other filtering parameters to create complex filtering logic.
-
The exact behavior and available modes can vary depending on the specific system or module using the FilterMode.
When working with FilterMode, it’s crucial to understand the context in which it’s being used and the specific implications of each mode for that particular system or module.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEngine.ini:1472, section: [Core.VirtualizationModule]
- INI Section:
Core.VirtualizationModule
- Raw value:
OptOut
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserServer/Source/MultiUserServer/Private/Widgets/Clients/Logging/Filter/ConcertFrontendLogFilter_Size.cpp:17
Scope (from outer to inner):
file
namespace UE::MultiUserServer
function bool FConcertLogFilter_Size::PassesFilter
Source code excerpt:
// The filter's default value is to show everything 0 <= x so it will show sync events as well.
const uint32 ComparisionSizeInBytes = FUnitConversion::Convert(SizeInBytes, DataUnit, EUnit::Bytes);
switch (FilterMode)
{
case ESizeFilterMode::LessThanOrEqual:
return ComparisionSizeInBytes >= static_cast<uint32>(InItem.Log.CustomPayloadUncompressedByteSize);
case ESizeFilterMode::BiggerThanOrEqual:
return ComparisionSizeInBytes <= static_cast<uint32>(InItem.Log.CustomPayloadUncompressedByteSize);
default:
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserServer/Source/MultiUserServer/Private/Widgets/Clients/Logging/Filter/ConcertFrontendLogFilter_Size.cpp:31
Scope (from outer to inner):
file
namespace UE::MultiUserServer
function void FConcertLogFilter_Size::SetOperator
Source code excerpt:
void FConcertLogFilter_Size::SetOperator(ESizeFilterMode Operator)
{
if (FilterMode != Operator)
{
FilterMode = Operator;
OnChanged().Broadcast();
}
}
void FConcertLogFilter_Size::SetSizeInBytes(uint32 NewSizeInBytes)
{
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserServer/Source/MultiUserServer/Private/Widgets/Clients/Logging/Filter/ConcertFrontendLogFilter_Size.h:33
Scope (from outer to inner):
file
namespace UE::MultiUserServer
class class FConcertLogFilter_Size : public IFilter<const FConcertLogEntry&>
function ESizeFilterMode GetOperator
Source code excerpt:
void SetDataUnit(EUnit NewUnit);
ESizeFilterMode GetOperator() const { return FilterMode; }
uint32 GetSizeInBytes() const { return SizeInBytes; }
EUnit GetDataUnit() const { return DataUnit; }
TSet<EUnit> GetAllowedUnits() const { return { EUnit::Bytes, EUnit::Kilobytes, EUnit::Megabytes }; }
private:
ESizeFilterMode FilterMode = ESizeFilterMode::BiggerThanOrEqual;
uint32 SizeInBytes = 0;
EUnit DataUnit = EUnit::Bytes;
FChangedEvent ChangedEvent;
};
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserServer/Source/MultiUserServer/Private/Widgets/Clients/Logging/Filter/ConcertFrontendLogFilter_Time.cpp:11
Scope (from outer to inner):
file
namespace UE::MultiUserServer
function FConcertLogFilter_Time::FConcertLogFilter_Time
Source code excerpt:
namespace UE::MultiUserServer
{
FConcertLogFilter_Time::FConcertLogFilter_Time(ETimeFilter FilterMode)
: FilterMode(FilterMode)
// Make the filter allow everything by default
, Time(MakeResetTime())
{}
void FConcertLogFilter_Time::ResetToInfiniteTime()
{
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserServer/Source/MultiUserServer/Private/Widgets/Clients/Logging/Filter/ConcertFrontendLogFilter_Time.cpp:24
Scope (from outer to inner):
file
namespace UE::MultiUserServer
function FDateTime FConcertLogFilter_Time::MakeResetTime
Source code excerpt:
FDateTime FConcertLogFilter_Time::MakeResetTime() const
{
return FilterMode == ETimeFilter::AllowAfter ? FDateTime() : FDateTime::MaxValue();
}
bool FConcertLogFilter_Time::PassesFilter(const FConcertLogEntry& InItem) const
{
switch (FilterMode)
{
case ETimeFilter::AllowAfter: return InItem.Log.Timestamp >= Time;
case ETimeFilter::AllowBefore: return InItem.Log.Timestamp <= Time;
default:
checkNoEntry();
return true;
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserServer/Source/MultiUserServer/Private/Widgets/Clients/Logging/Filter/ConcertFrontendLogFilter_Time.cpp:41
Scope (from outer to inner):
file
namespace UE::MultiUserServer
function void FConcertLogFilter_Time::SetFilterMode
Source code excerpt:
void FConcertLogFilter_Time::SetFilterMode(ETimeFilter InFilterMode)
{
if (FilterMode != InFilterMode)
{
FilterMode = InFilterMode;
OnChanged().Broadcast();
}
}
void FConcertLogFilter_Time::SetTime(const FDateTime& InTime)
{
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertApp/MultiUserServer/Source/MultiUserServer/Private/Widgets/Clients/Logging/Filter/ConcertFrontendLogFilter_Time.h:21
Scope (from outer to inner):
file
namespace UE::MultiUserServer
class class FConcertLogFilter_Time : public IFilter<const FConcertLogEntry&>
Source code excerpt:
public:
FConcertLogFilter_Time(ETimeFilter FilterMode);
void ResetToInfiniteTime();
//~ Begin FConcertLogFilter Interface
virtual bool PassesFilter(const FConcertLogEntry& InItem) const override;
virtual FChangedEvent& OnChanged() override { return ChangedEvent; }
//~ End FConcertLogFilter Interfac
ETimeFilter GetFilterMode() const { return FilterMode; }
FDateTime GetTime() const { return Time; }
void SetFilterMode(ETimeFilter InFilterMode);
void SetTime(const FDateTime& InTime);
private:
ETimeFilter FilterMode;
FDateTime Time;
FChangedEvent ChangedEvent;
FDateTime MakeResetTime() const;
};
#Loc: <Workspace>/Engine/Plugins/Enterprise/DataprepEditor/Source/DataprepLibraries/Private/DataprepFilterLibrary.cpp:25
Scope (from outer to inner):
file
function TArray< UObject* > UDataprepFilterLibrary::FilterBySize
Source code excerpt:
}
TArray< UObject* > UDataprepFilterLibrary::FilterBySize(const TArray< UObject* >& TargetArray, EDataprepSizeSource SizeSource, EDataprepSizeFilterMode FilterMode, float Threshold)
{
TArray< UObject* > Result;
auto ConditionnalAdd = [=, &Result](float RefValue, UObject* Object) -> void
{
if ( (RefValue <= Threshold && FilterMode == EDataprepSizeFilterMode::SmallerThan)
|| (RefValue >= Threshold && FilterMode == EDataprepSizeFilterMode::BiggerThan) )
{
Result.Add(Object);
}
};
switch (SizeSource)
#Loc: <Workspace>/Engine/Plugins/Enterprise/DataprepEditor/Source/DataprepLibraries/Private/DataprepFilterLibrary.h:50
Scope (from outer to inner):
file
class class UDataprepFilterLibrary : public UBlueprintFunctionLibrary
Source code excerpt:
* @param TargetArray Array of Actors or StaticMeshes to filter. The array will not change.
* @param SizeSource The reference dimension
* @param FilterMode How to compare the object size with the threshold
* @param Threshold Limit value
* @return The filtered list.
*/
UFUNCTION(BlueprintPure, Category = "Dataprep | Filter", meta = (DeterminesOutputType = "TargetArray"))
static TArray< UObject* > FilterBySize( const TArray< UObject* >& TargetArray, EDataprepSizeSource SizeSource, EDataprepSizeFilterMode FilterMode, float Threshold);
/**
* Filter the array based on a tag.
* @param TargetArray Array of Actors to filter. The array will not change.
* @param Tag The tag to filter with.
* @return The filtered list.
*/
UFUNCTION(BlueprintPure, Category = "Dataprep | Filter", meta = (DeterminesOutputType = "TargetArray"))
#Loc: <Workspace>/Engine/Plugins/Experimental/Avalanche/Source/AvalancheOutliner/Private/Filters/AvaOutlinerItemTypeFilter.cpp:14
Scope (from outer to inner):
file
function FAvaOutlinerItemTypeFilterData::FAvaOutlinerItemTypeFilterData
Source code excerpt:
, EClassFlags InRestrictedClassFlags)
: FilterClasses(InFilterClasses)
, FilterMode(InMode)
, TooltipText(InTooltipText)
, bUseOverrideIcon(false)
, IconBrush(InIconBrush)
, RequiredClassFlags(InRequiredClassFlags)
, RestrictedClassFlags(InRestrictedClassFlags)
{
#Loc: <Workspace>/Engine/Plugins/Experimental/Avalanche/Source/AvalancheOutliner/Private/Filters/AvaOutlinerItemTypeFilter.cpp:79
Scope (from outer to inner):
file
function EAvaOutlinerTypeFilterMode FAvaOutlinerItemTypeFilterData::GetFilterMode
Source code excerpt:
EAvaOutlinerTypeFilterMode FAvaOutlinerItemTypeFilterData::GetFilterMode() const
{
return FilterMode;
}
void FAvaOutlinerItemTypeFilterData::SetOverrideIconColor(FSlateColor InNewIconColor)
{
OverrideIcon.TintColor = InNewIconColor;
}
#Loc: <Workspace>/Engine/Plugins/Experimental/Avalanche/Source/AvalancheOutliner/Private/Filters/AvaOutlinerItemTypeFilter.cpp:137
Scope (from outer to inner):
file
function bool FAvaOutlinerItemTypeFilter::PassesFilter
Source code excerpt:
};
const EAvaOutlinerTypeFilterMode FilterMode = FilterData.GetFilterMode();
if (EnumHasAnyFlags(FilterMode, EAvaOutlinerTypeFilterMode::MatchesType))
{
if (ItemPassesFilter(InItem))
{
return true;
}
}
if (EnumHasAnyFlags(FilterMode, EAvaOutlinerTypeFilterMode::ContainerOfType))
{
TArray<FAvaOutlinerItemPtr> RemainingItems = InItem.GetChildren();
while (!RemainingItems.IsEmpty())
{
FAvaOutlinerItemPtr Item = RemainingItems.Pop();
#Loc: <Workspace>/Engine/Plugins/Experimental/Avalanche/Source/AvalancheOutliner/Public/Filters/AvaOutlinerItemTypeFilter.h:59
Scope: file
Source code excerpt:
UPROPERTY(EditAnywhere, Category = "Filter")
EAvaOutlinerTypeFilterMode FilterMode = EAvaOutlinerTypeFilterMode::MatchesType;
UPROPERTY(EditAnywhere, Category = "Filter|Advanced")
FText FilterText;
UPROPERTY(EditAnywhere, Category = "Filter")
FText TooltipText;
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/Niagara/Private/NDISkeletalMesh_VertexSampling.cpp:423
Scope (from outer to inner):
file
function void UNiagaraDataInterfaceSkeletalMesh::RandomFilteredVertex
Source code excerpt:
FSkeletalMeshAccessorHelper MeshAccessor;
MeshAccessor.Init<FilterMode, TIntegralConstant<ENDISkelMesh_AreaWeightingMode, ENDISkelMesh_AreaWeightingMode::None>>(InstData);
if (MeshAccessor.IsLODAccessible())
{
for (int32 i = 0; i < Context.GetNumInstances(); ++i)
{
RandHelper.GetAndAdvance();
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/ViewModels/Stack/NiagaraStackObject.cpp:34
Scope (from outer to inner):
file
function void UNiagaraStackObject::Initialize
Source code excerpt:
OwningNiagaraNode = InOwningNiagaraNode;
bIsRefreshingDataInterfaceErrors = false;
FilterMode = EDetailNodeFilterMode::FilterRootNodesOnly;
MessageLogGuid = GetSystemViewModel()->GetMessageLogGuid();
FNiagaraMessageManager::Get()->SubscribeToAssetMessagesByObject(
FText::FromString("StackObject")
, MessageLogGuid
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/ViewModels/Stack/NiagaraStackObject.cpp:70
Scope (from outer to inner):
file
function void UNiagaraStackObject::SetOnFilterDetailNodes
Source code excerpt:
{
OnFilterDetailNodesDelegate = InOnFilterDetailNodes;
FilterMode = InFilterMode;
}
void UNiagaraStackObject::RegisterInstancedCustomPropertyLayout(UStruct* Class, FOnGetDetailCustomizationInstance DetailLayoutDelegate)
{
checkf(PropertyRowGenerator.IsValid() == false, TEXT("Can not add additional customizations after children have been refreshed."));
RegisteredClassCustomizations.Add({ Class, DetailLayoutDelegate });
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/ViewModels/Stack/NiagaraStackObject.cpp:395
Scope (from outer to inner):
file
function void UNiagaraStackObject::RefreshChildrenInternal
Source code excerpt:
ChildRow->Initialize(CreateDefaultChildRequiredData(), RootTreeNode, bIsTopLevel, bHideTopLevelCategories, GetOwnerStackItemEditorDataKey(), GetOwnerStackItemEditorDataKey(), OwningNiagaraNode);
ChildRow->SetOwnerGuid(ObjectGuid);
if (OnFilterDetailNodesDelegate.IsBound() && FilterMode == EDetailNodeFilterMode::FilterAllNodes)
{
ChildRow->SetOnFilterDetailNodes(OnFilterDetailNodesDelegate);
}
}
NewChildren.Add(ChildRow);
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/Widgets/AssetBrowser/NiagaraMenuFilters.cpp:28
Scope (from outer to inner):
file
function FText FNiagaraAssetBrowserMainFilter::GetDisplayName
Source code excerpt:
FText FNiagaraAssetBrowserMainFilter::GetDisplayName() const
{
if(FilterMode == EFilterMode::All)
{
return LOCTEXT("NiagaraMainFilterLabel_All", "All");
}
else if(FilterMode == EFilterMode::NiagaraAssetTag)
{
return FText::FromString(AssetTagDefinition.AssetTag.ToString());
}
else if(FilterMode == EFilterMode::NiagaraAssetTagDefinitionsAsset)
{
return AssetTagDefinitionsAsset->GetDisplayName();
}
else if(FilterMode == EFilterMode::Recent)
{
return LOCTEXT("NiagaraMainFilterLabel_Recent", "Recent");
}
else if(FilterMode == EFilterMode::Custom)
{
return CustomDisplayName;
}
return FText::FromString("Unknown Name");
}
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/Widgets/AssetBrowser/SNiagaraAssetBrowser.cpp:135
Scope (from outer to inner):
file
function FARFilter SNiagaraAssetBrowser::GetCurrentBackendFilter
Source code excerpt:
for(const TSharedRef<FNiagaraAssetBrowserMainFilter>& MainFilter : MainFilterSelector->GetSelectedItems())
{
if(MainFilter->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::NiagaraAssetTag)
{
AssetTagSelectorFilter.TagsAndValues.Add(FName(MainFilter->AssetTagDefinition.GetGuidAsString()), TOptional<FString>());
}
}
Filter.Append(AssetTagSelectorFilter);
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/Widgets/AssetBrowser/SNiagaraAssetBrowser.cpp:173
Scope (from outer to inner):
file
function bool SNiagaraAssetBrowser::ShouldFilterAsset
Source code excerpt:
for(const TSharedRef<FNiagaraAssetBrowserMainFilter>& MainFilter : MainFilterSelector->GetSelectedItems())
{
if(MainFilter->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::All)
{
return false;
}
else if(MainFilter->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::Recent)
{
return MainFilter->IsAssetRecent(AssetData) == false;
}
else if(MainFilter->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::NiagaraAssetTag)
{
return MainFilter->DoesAssetHaveTag(AssetData) == false;
}
else if(MainFilter->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::NiagaraAssetTagDefinitionsAsset)
{
return MainFilter->DoesAssetHaveAnyTagFromTagDefinitionsAsset(AssetData) == false;
}
else if(MainFilter->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::Custom)
{
return MainFilter->CustomShouldFilterAsset.Execute(AssetData);
}
}
return false;
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/Widgets/AssetBrowser/SNiagaraAssetBrowser.cpp:216
Scope (from outer to inner):
file
function void SNiagaraAssetBrowser::PopulateFiltersSlot
lambda-function
Source code excerpt:
TSharedRef<FNiagaraAssetBrowserMainFilter>* AllFilter = AssetBrowserMainFilters.FindByPredicate([](const TSharedRef<FNiagaraAssetBrowserMainFilter>& MainFilterCandidate)
{
return MainFilterCandidate->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::All;
});
if(AllFilter)
{
MainFilterSelector->SetSelection(*AllFilter);
MainFilterSelector->SetItemExpansion(*AllFilter, true);
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/Widgets/AssetBrowser/SNiagaraAssetBrowser.cpp:455
Scope: file
Source code excerpt:
// ];
//
// if(MainFilter.FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::NiagaraAssetTag)
// {
// Widget->SetToolTipText(MainFilter.AssetTagDefinition.Description);
// }
//
// return Widget;
// }
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/Widgets/AssetBrowser/SNiagaraAssetBrowser.cpp:492
Scope (from outer to inner):
file
function TSharedRef<ITableRow> SNiagaraAssetBrowser::GenerateWidgetRowForMainFilter
Source code excerpt:
];
if(MainFilter->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::NiagaraAssetTag)
{
Widget->SetToolTipText(MainFilter->AssetTagDefinition.Description);
}
if(MainFilter->FilterMode == FNiagaraAssetBrowserMainFilter::EFilterMode::NiagaraAssetTagDefinitionsAsset)
{
Widget->SetToolTipText(MainFilter->AssetTagDefinitionsAsset->GetDescription());
}
return SNew(STableRow<TSharedRef<FNiagaraAssetBrowserMainFilter>>, OwningTable)
[
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Public/ViewModels/Stack/NiagaraStackObject.h:61
Scope (from outer to inner):
file
class class UNiagaraStackObject : public UNiagaraStackItemContent, public FNotifyHook
Source code excerpt:
};
NIAGARAEDITOR_API void SetOnFilterDetailNodes(FNiagaraStackObjectShared::FOnFilterDetailNodes InOnFilterDetailNodes, EDetailNodeFilterMode FilterMode = EDetailNodeFilterMode::FilterRootNodesOnly);
NIAGARAEDITOR_API void RegisterInstancedCustomPropertyLayout(UStruct* Class, FOnGetDetailCustomizationInstance DetailLayoutDelegate);
NIAGARAEDITOR_API void RegisterInstancedCustomPropertyTypeLayout(FName PropertyTypeName, FOnGetPropertyTypeCustomizationInstance PropertyTypeLayoutDelegate, TSharedPtr<IPropertyTypeIdentifier> Identifier = nullptr);
NIAGARAEDITOR_API UObject* GetObject() const { return WeakObject.Get(); }
NIAGARAEDITOR_API TSharedPtr<FStructOnScope> GetDisplayedStruct() const { return DisplayedStruct; }
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Public/ViewModels/Stack/NiagaraStackObject.h:122
Scope (from outer to inner):
file
class class UNiagaraStackObject : public UNiagaraStackItemContent, public FNotifyHook
Source code excerpt:
UNiagaraNode* OwningNiagaraNode;
FNiagaraStackObjectShared::FOnFilterDetailNodes OnFilterDetailNodesDelegate;
EDetailNodeFilterMode FilterMode;
TArray<FRegisteredClassCustomization> RegisteredClassCustomizations;
TArray<FRegisteredPropertyCustomization> RegisteredPropertyCustomizations;
TSharedPtr<IPropertyRowGenerator> PropertyRowGenerator;
bool bIsRefreshingDataInterfaceErrors;
/** An optional object guid that can be provided to identify the object this stack entry represents. This can be used for summary view purposes and is also given to the child property rows. */
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Public/Widgets/AssetBrowser/NiagaraMenuFilters.h:52
Scope (from outer to inner):
file
function FNiagaraAssetBrowserMainFilter
Source code excerpt:
};
FNiagaraAssetBrowserMainFilter(EFilterMode InFilterMode) : FilterMode(InFilterMode) {}
EFilterMode FilterMode;
TArray<TSharedRef<FNiagaraAssetBrowserMainFilter>> ChildFilters;
// If in mode Asset Tag, this is the tag to filter against
FNiagaraAssetTagDefinition AssetTagDefinition;
// If in mode Asset Tag Definitions Asset, this is the asset to filter against (should include all assets that match any tag within the asset)
TObjectPtr<const UNiagaraAssetTagDefinitions> AssetTagDefinitionsAsset;
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Public/Widgets/AssetBrowser/NiagaraMenuFilters.h:82
Scope (from outer to inner):
file
function bool operator==
Source code excerpt:
bool operator==(const FNiagaraAssetBrowserMainFilter& Other) const
{
if(FilterMode != Other.FilterMode)
{
return false;
}
if(FilterMode == EFilterMode::NiagaraAssetTag)
{
return AssetTagDefinition == Other.AssetTagDefinition;
}
if(FilterMode == EFilterMode::NiagaraAssetTagDefinitionsAsset)
{
return AssetTagDefinitionsAsset == Other.AssetTagDefinitionsAsset;
}
if(CustomGuid.IsValid())
{
#Loc: <Workspace>/Engine/Plugins/PCG/Source/PCG/Private/Elements/PCGDeleteAttributesElement.cpp:121
Scope (from outer to inner):
file
function bool FPCGDeleteAttributesElement::ExecuteInternal
Source code excerpt:
const bool bAddAttributesFromParent = (Settings->Operation == EPCGAttributeFilterOperation::DeleteSelectedAttributes);
const EPCGMetadataFilterMode FilterMode = bAddAttributesFromParent ? EPCGMetadataFilterMode::ExcludeAttributes : EPCGMetadataFilterMode::IncludeAttributes;
TSet<FName> AttributesToFilter;
const TArray<FString> FilterAttributes = PCGHelpers::GetStringArrayFromCommaSeparatedString(Settings->SelectedAttributes);
for (const FString& FilterAttribute : FilterAttributes)
{
AttributesToFilter.Add(FName(*FilterAttribute));
#Loc: <Workspace>/Engine/Plugins/PCG/Source/PCG/Private/Elements/PCGDeleteAttributesElement.cpp:146
Scope (from outer to inner):
file
function bool FPCGDeleteAttributesElement::ExecuteInternal
Source code excerpt:
UPCGSpatialData* NewSpatialData = InputSpatialData->DuplicateData(/*bInitializeFromThisData=*/false);
Metadata = NewSpatialData->Metadata;
NewSpatialData->Metadata->InitializeWithAttributeFilter(ParentMetadata, AttributesToFilter, FilterMode);
// No need to inherit metadata since we already initialized it.
NewSpatialData->InitializeFromData(InputSpatialData, /*InMetadataParentOverride=*/ nullptr, /*bInheritMetadata=*/ false);
OutputData = NewSpatialData;
}
#Loc: <Workspace>/Engine/Plugins/PCG/Source/PCG/Private/Elements/PCGDeleteAttributesElement.cpp:159
Scope (from outer to inner):
file
function bool FPCGDeleteAttributesElement::ExecuteInternal
Source code excerpt:
UPCGParamData* NewParamData = NewObject<UPCGParamData>();
Metadata = NewParamData->Metadata;
Metadata->InitializeAsCopyWithAttributeFilter(ParentMetadata, AttributesToFilter, FilterMode);
OutputData = NewParamData;
}
else
{
PCGE_LOG(Error, GraphAndLog, LOCTEXT("InvalidInputData", "Invalid data as input. Only Spatial and Attribute Set data are supported."));
#Loc: <Workspace>/Engine/Source/Developer/TraceInsights/Private/Insights/NetworkingProfiler/Widgets/SNetStatsCountersView.cpp:553
Scope (from outer to inner):
file
function TSharedRef<SWidget> SNetStatsCountersView::TreeViewHeaderRow_GenerateColumnMenu
Source code excerpt:
//if (Column.CanBeFiltered())
//{
// MenuBuilder.BeginSection("FilterMode", LOCTEXT("ContextMenu_Header_Misc_Filter_FilterMode", "Filter Mode"));
// bIsMenuVisible = true;
// MenuBuilder.EndSection();
//}
}
/*
#Loc: <Workspace>/Engine/Source/Developer/Virtualization/Private/VirtualizationManager.h:63
Scope: file
Source code excerpt:
*
* [Core.VirtualizationModule]
* FilterMode=OptIn/OptOut The general mode to be applied to all packages. With 'OptIn' packages will
* not be virtualized unless their path is included via VirtualizationFilterSettings.
* With 'OptOut' all packages will be virtualized unless excluded via
* VirtualizationFilterSettings [Default=OptOut]
* FilterMapContent=True/False When true any payload stored in a .umap or _BuildData.uasset file will be
* excluded from virtualization [Default=true]
*
* PackagePath Setup:
*
* In addition to the default filtering mode set above, payloads stored in packages can be filtered based on the
* package path. This allows a package to be including in the virtualization process or excluded from it.
*
* Note that these paths will be stored in the ini files under the Saved directory. To remove a path make sure to
* use the - syntax to remove the entry from the array, rather than removing the line itself. Otherwise it will
* persist until the saved config file has been reset.
*
* [/Script/Virtualization.VirtualizationFilterSettings]
* +ExcludePackagePaths="/MountPoint/PathToExclude/" Excludes any package found under '/MountPoint/PathToExclude/' from the virtualization process
* +ExcludePackagePaths="/MountPoint/PathTo/ThePackageToExclude" Excludes the specific package '/MountPoint/PathTo/ThePackageToExclude' from the virtualization process
* +IncludePackagePaths="/MountPoint/PathToInclude/" Includes any package found under '/MountPoint/PathToInclude/' in the virtualization process
* +IncludePackagePaths="/MountPoint/PathTo/ThePackageToInclude" Includes the specific package '/MountPoint/PathTo/ThePackageToInclude' in the virtualization process
*/
/*
* FVirtualizationManager
*
* Ini file setup:
*
* EnablePayloadVirtualization [bool]: When true the virtualization process will be enabled (usually when a package is submitted
to revision control. [Default=true]
* EnableCacheOnPull [bool]: When true payloads will be pushed to cached storage after being pulled from persistent
* storage. [Default=true]
* EnableCacheOnPush [bool]: When true payloads will be pushed to cached storage right before being pushed to persistent
* storage. [Default=true]
* MinPayloadLength [int64]: The minimum length (in bytes) that a payload must reach before it can be considered for
* virtualization. Use this to strike a balance between disk space and the number of smaller
payloads in your project being virtualized. [Default=0]
* BackendGraph [string]: The name of the backend graph to use. The default graph has no backends and effectively
disables the system. It is expected that a project will define the graph that it wants
and then set this option [Default=ContentVirtualizationBackendGraph_None]
* VirtualizationProcessTag [string]: The tag to be applied to any set of packages that have had the virtualization process run
* on them. Typically this means appending the tag to the description of a changelist of
* packages. This value can be set to an empty string. [Default="#virtualized"]
* AllowSubmitIfVirtualizationFailed [bool]: Revision control submits that trigger the virtualization system can either allow or block
* the submit if the virtualization process fails based on this value. True will allow a
* submit with an error to continue and false will block the submit. Note that by error we mean
#Loc: <Workspace>/Engine/Source/Developer/Virtualization/Private/VirtualizationManager.h:262
Scope (from outer to inner):
file
namespace UE::Virtualization
class class FVirtualizationManager final : public IVirtualizationSystem
Source code excerpt:
* that might have been set in UVirtualizationFilterSettings.
* If the path does not match any pattern set in UVirtualizationFilterSettings then use the default
* FilterMode to determine if the payload should be virtualized or not.
*
* @param PackagePath The path of the package to check. This can be empty which would indicate that
* a payload is not owned by a specific package.
* @return True if the package should be virtualized and false if the package path is
* excluded by the projects current filter set up.
*/
bool ShouldVirtualizePackage(const FPackagePath& PackagePath) const;
/**
* Determines if a package should be virtualized or not based on the given content.
* If the context can be turned into a package path then ::ShouldVirtualizePackage
* will be used instead.
* If the context is not a package path then we use the default FilterMode to determine
* if the payload should be virtualized or not.
*
* @return True if the context should be virtualized and false if not.
*/
bool ShouldVirtualize(const FString& Context) const;
/** Determines if the default filtering behavior is to virtualize a payload or not */
bool ShouldVirtualizeAsDefault() const;
/** Returns if the process will attempt to retry a failed pull when the process is unattended mode */
bool ShouldRetryWhenUnattended() const;
void BroadcastEvent(TConstArrayView<FPullRequest> Ids, ENotification Event);
#Loc: <Workspace>/Engine/Source/Editor/BlueprintGraph/Classes/EdGraphSchema_K2.h:885
Scope (from outer to inner):
file
class class UEdGraphSchema_K2 : public UEdGraphSchema
Source code excerpt:
/** Can this variable be accessed by kismet code */
static bool CanUserKismetAccessVariable(const FProperty* Property, const UClass* InClass, EDelegateFilterMode FilterMode);
/** Can this function be overridden by kismet (either placed as event or new function graph created) */
static bool CanKismetOverrideFunction(const UFunction* Function);
/** returns friendly signature name if possible or Removes any mangling to get the unmangled signature name of the function */
static FText GetFriendlySignatureName(const UFunction* Function);
#Loc: <Workspace>/Engine/Source/Editor/BlueprintGraph/Private/EdGraphSchema_K2.cpp:1146
Scope (from outer to inner):
file
function bool UEdGraphSchema_K2::CanUserKismetAccessVariable
Source code excerpt:
bool UEdGraphSchema_K2::CanUserKismetAccessVariable(const FProperty* Property, const UClass* InClass, EDelegateFilterMode FilterMode)
{
const bool bIsDelegate = Property->IsA(FMulticastDelegateProperty::StaticClass());
const bool bIsAccessible = Property->HasAllPropertyFlags(CPF_BlueprintVisible);
const bool bIsAssignableOrCallable = Property->HasAnyPropertyFlags(CPF_BlueprintAssignable | CPF_BlueprintCallable);
const bool bPassesDelegateFilter = (bIsAccessible && !bIsDelegate && (FilterMode != MustBeDelegate)) ||
(bIsAssignableOrCallable && bIsDelegate && (FilterMode != CannotBeDelegate));
const bool bHidden = FObjectEditorUtils::IsVariableCategoryHiddenFromClass(Property, InClass);
return !Property->HasAnyPropertyFlags(CPF_Parm) && bPassesDelegateFilter && !bHidden;
}
#Loc: <Workspace>/Engine/Source/Editor/WorldPartitionEditor/Private/WorldPartition/Filter/WorldPartitionActorFilterHierarchy.cpp:22
Scope (from outer to inner):
file
function void FWorldPartitionActorFilterHierarchy::CreateItems
Source code excerpt:
void FWorldPartitionActorFilterHierarchy::CreateItems(TArray<FSceneOutlinerTreeItemPtr>& OutItems) const
{
FWorldPartitionActorFilterMode* FilterMode = static_cast<FWorldPartitionActorFilterMode*>(Mode);
check(FilterMode);
const FWorldPartitionActorFilter* Filter = FilterMode->GetFilter();
check(Filter);
if (FSceneOutlinerTreeItemPtr FilterTreeItem = Mode->CreateItemFor<FWorldPartitionActorFilterItem>(FWorldPartitionActorFilterItem::FTreeItemData(Filter), true))
{
OutItems.Add(FilterTreeItem);
CreateChildren(FilterTreeItem, OutItems, true);
}
#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/AssetRegistry.cpp:3301
Scope (from outer to inner):
file
namespace UE::AssetRegistry::Utils
function bool RunAssetThroughFilter
Source code excerpt:
{
bool RunAssetThroughFilter(const FAssetData& AssetData, const FARCompiledFilter& Filter, const EFilterMode FilterMode)
{
const bool bPassFilterValue = FilterMode == EFilterMode::Inclusive;
if (Filter.IsEmpty())
{
return bPassFilterValue;
}
const bool bFilterResult = RunAssetThroughFilter_Unchecked(AssetData, Filter, bPassFilterValue);
#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/AssetRegistry.cpp:3378
Scope (from outer to inner):
file
namespace UE::AssetRegistry::Utils
function void RunAssetsThroughFilter
Source code excerpt:
}
void RunAssetsThroughFilter(TArray<FAssetData>& AssetDataList, const FARCompiledFilter& CompiledFilter, const EFilterMode FilterMode)
{
if (!IsFilterValid(CompiledFilter))
{
return;
}
const int32 OriginalArrayCount = AssetDataList.Num();
const bool bPassFilterValue = FilterMode == EFilterMode::Inclusive;
AssetDataList.RemoveAll([&CompiledFilter, bPassFilterValue](const FAssetData& AssetData)
{
const bool bFilterResult = RunAssetThroughFilter_Unchecked(AssetData, CompiledFilter, bPassFilterValue);
return bFilterResult != bPassFilterValue;
});
#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/AssetRegistryImpl.h:599
Scope (from outer to inner):
file
namespace UE::AssetRegistry
namespace Utils
Source code excerpt:
bool IsFilterValid(const FARCompiledFilter& Filter);
/** Report whether the given AssetData passes/fails the given filter */
bool RunAssetThroughFilter(const FAssetData& AssetData, const FARCompiledFilter& Filter, const EFilterMode FilterMode);
/** Helper for RunAssetThroughFilter and RunAssetsThroughFilter that skips validity check */
bool RunAssetThroughFilter_Unchecked(const FAssetData& AssetData, const FARCompiledFilter& Filter, const bool bPassFilterValue);
/**
* Given an array of asset data, trim the items that fail the filter based on the inclusion/exclusion mode used.
* - In inclusive mode it will remove all assets that fail the filter, and in exclusive mode it will remove all assets that pass the filter.
* - If the filter is empty, then the array will be untouched.
*/
void RunAssetsThroughFilter(TArray<FAssetData>& AssetDataList, const FARCompiledFilter& Filter, const EFilterMode FilterMode);
/** This will always read the ini, public version may return cache */
void InitializeSerializationOptionsFromIni(FAssetRegistrySerializationOptions& Options, const FString& PlatformIniName,
ESerializationTarget Target = ESerializationTarget::ForGame);
/** Gets the current availability of an asset, primarily for streaming install purposes. */
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/BoneContainer.cpp:269
Scope (from outer to inner):
file
function void FBoneContainer::CacheRequiredAnimCurves
Source code excerpt:
CurveFilter.Empty();
CurveFilter.SetFilterMode(InCurveFilterSettings.FilterMode);
CurveFlags.Empty();
if (USkeleton* Skeleton = AssetSkeleton.GetEvenIfUnreachable())
{
// Copy filter curves.
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/BoneContainer.cpp:282
Scope (from outer to inner):
file
function void FBoneContainer::CacheRequiredAnimCurves
Source code excerpt:
}
if (InCurveFilterSettings.FilterMode != UE::Anim::ECurveFilterMode::DisallowAll)
{
// Apply curve metadata, LOD and linked bones filtering
Skeleton->ForEachCurveMetaData([this, &InCurveFilterSettings, &FilterCurves](const FName& InCurveName, const FCurveMetaData& InMetaData)
{
bool bBeingUsed = true;
UE::Anim::ECurveElementFlags Flags = UE::Anim::ECurveElementFlags::None;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Components/SkeletalMeshComponent.cpp:4636
Scope (from outer to inner):
file
function UE::Anim::FCurveFilterSettings USkeletalMeshComponent::GetCurveFilterSettings
Source code excerpt:
if(FilteredAnimCurves.Num() > 0)
{
CurveFilterSettings.FilterMode = bFilteredAnimCurvesIsAllowList ? UE::Anim::ECurveFilterMode::AllowOnlyFiltered : UE::Anim::ECurveFilterMode::DisallowFiltered;
CurveFilterSettings.FilterCurves = &FilteredAnimCurves;
}
else
{
CurveFilterSettings.FilterMode = UE::Anim::ECurveFilterMode::DisallowFiltered; // This applies LOD-based and bone-linked filtering
}
}
else
{
CurveFilterSettings.FilterMode = UE::Anim::ECurveFilterMode::DisallowAll;
}
if(InLODOverride != INDEX_NONE)
{
CurveFilterSettings.LODIndex = InLODOverride;
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveFilter.h:20
Scope (from outer to inner):
file
namespace UE::Anim
Source code excerpt:
// Curve is explicitly disallowed (i.e. not processed at a particular LOD, bone linkage etc.).
// This is used in combination with the FilterMode of the filter.
Disallowed = 0x01,
// Curve is allowed/disallowed.
// This is used in combination with the FilterMode of the filter for allow/deny lists of curves.
Filtered = 0x02,
};
ENUM_CLASS_FLAGS(ECurveFilterFlags);
// The various ways curves can be filtered
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveFilter.h:73
Scope (from outer to inner):
file
namespace UE::Anim
function void Empty
Source code excerpt:
{
Super::Empty();
FilterMode = ECurveFilterMode::None;
}
bool IsEmpty() const
{
return FilterMode == ECurveFilterMode::None || (FilterMode == ECurveFilterMode::DisallowFiltered && Elements.Num() == 0);
}
void Add(FName InName, ECurveFilterFlags InFlags = ECurveFilterFlags::Filtered)
{
Elements.Emplace(InName, InFlags);
bSorted = false;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveFilter.h:112
Scope (from outer to inner):
file
namespace UE::Anim
function void SetFilterMode
Source code excerpt:
void SetFilterMode(ECurveFilterMode InFilterMode)
{
FilterMode = InFilterMode;
}
private:
// The filtering mode
ECurveFilterMode FilterMode = ECurveFilterMode::None;
};
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveUtils.h:42
Scope (from outer to inner):
file
namespace UE::Anim
function static void BuildSortedFiltered
Source code excerpt:
{
// Early out if we are filtering all curves
if(InFilter.FilterMode == ECurveFilterMode::DisallowAll)
{
OutCurve.Empty();
return;
}
InFilter.SortElementsIfRequired();
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveUtils.h:77
Scope (from outer to inner):
file
namespace UE::Anim
function static void BuildSortedFiltered
Source code excerpt:
for( ; ElementIndex0 < NumElements0; ++ElementIndex0)
{
if(ElementPassesFilter(InFilter.FilterMode, ECurveFilterFlags::None))
{
OutCurve.Elements.Emplace(InNamePredicate(ElementIndex0), InValuePredicate(ElementIndex0));
}
}
break;
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveUtils.h:100
Scope (from outer to inner):
file
namespace UE::Anim
function static void BuildSortedFiltered
Source code excerpt:
{
// Elements match, check filter & write to curve
if(ElementPassesFilter(InFilter.FilterMode, Element1->Flags))
{
OutCurve.Elements.Emplace(CurveName, InValuePredicate(ElementIndex0));
}
++ElementIndex0;
++ElementIndex1;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveUtils.h:111
Scope (from outer to inner):
file
namespace UE::Anim
function static void BuildSortedFiltered
Source code excerpt:
{
// Element exists only in user data
if(ElementPassesFilter(InFilter.FilterMode, ECurveFilterFlags::None))
{
OutCurve.Elements.Emplace(CurveName, InValuePredicate(ElementIndex0));
}
++ElementIndex0;
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveUtils.h:335
Scope (from outer to inner):
file
namespace UE::Anim
function static void Filter
Source code excerpt:
CURVE_PROFILE_CYCLE_COUNTER(FCurveUtils_Filter);
switch(InFilter.FilterMode)
{
case ECurveFilterMode::None:
// No filtering, early out
return;
case ECurveFilterMode::DisallowAll:
// Filtering all curves, so just clear curve
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveUtils.h:379
Scope (from outer to inner):
file
function static void Filter
Source code excerpt:
while(ElementIndex0 < NumElements0)
{
if(!ElementPassesFilter(InFilter.FilterMode, ECurveFilterFlags::None))
{
InOutCurve.Elements.RemoveAt(ElementIndex0, 1, EAllowShrinking::No);
NumElements0 = InOutCurve.Num();
}
else
{
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveUtils.h:403
Scope (from outer to inner):
file
namespace UE::Anim
function static void Filter
Source code excerpt:
{
// Elements match so check filter flags to see if it should be removed from curve
if(!ElementPassesFilter(InFilter.FilterMode, Element1->Flags))
{
InOutCurve.Elements.RemoveAt(ElementIndex0, 1, EAllowShrinking::No);
NumElements0 = InOutCurve.Num();
++ElementIndex1;
}
else
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Animation/AnimCurveUtils.h:418
Scope (from outer to inner):
file
namespace UE::Anim
function static void Filter
Source code excerpt:
{
// Element exists only in curve, check filter
if(!ElementPassesFilter(InFilter.FilterMode, ECurveFilterFlags::None))
{
InOutCurve.Elements.RemoveAt(ElementIndex0, 1, EAllowShrinking::No);
NumElements0 = InOutCurve.Num();
}
else
{
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/BoneContainer.h:76
Scope (from outer to inner):
file
namespace UE::Anim
function FCurveFilterSettings
Source code excerpt:
FCurveFilterSettings(UE::Anim::ECurveFilterMode InFilterMode = UE::Anim::ECurveFilterMode::DisallowFiltered, const TArray<FName>* InFilterCurves = nullptr, int32 InLODIndex = 0)
: FilterCurves(InFilterCurves)
, FilterMode(InFilterMode)
, LODIndex(InLODIndex)
{}
// Filter curves. Application of these curves is dependent on FilterMode
const TArray<FName>* FilterCurves = nullptr;
// Filtering mode - allows curves to be disable entirely or allow/deny-listed
UE::Anim::ECurveFilterMode FilterMode = UE::Anim::ECurveFilterMode::DisallowFiltered;
// LOD index
int32 LODIndex = 0;
};
}