ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Desktop.Mapping Namespace / FilterBlockDefinition Class / SelectedValues Property
Example

In This Topic
    SelectedValues Property (FilterBlockDefinition)
    In This Topic
    Gets or sets the selected values for a FilterBlock.
    Syntax
    public Dictionary<string,List<string>> SelectedValues {get; set;}
    Public Property SelectedValues As Dictionary(Of String,List(Of String))
    Remarks
    Call BuildingSceneLayer.GetAvailableFieldsAndValues to retrieve the available values for the filter block
    Example
    Create a Default Filter and Get Filter Count
    //Must be called on the MCT
    //Creates a default filter on the building scene
    //var bsl = ...;
    var filter1 = bsl.CreateDefaultFilter();
    var values = filter1.FilterBlockDefinitions[0].SelectedValues;
    //values will be a single value for the type
    //"CreatedPhase", value "New Construction"
    
    //There will be at least one filter after "CreateDefaultFilter()" call
    var filtersCount = bsl.GetFilters().Count;
    
    Create a Filter using Building Level and Category
    //Must be called on the MCT
    
    //refer to "Query Building Scene Layer for available Types and Values"
    //...
    //var bsl = ...;
    //At 2.x
    //var dict = bsl.QueryAvailableFieldsAndValues();
    
    //var dict = bsl.GetAvailableFieldsAndValues();
    //var categories = dict.SingleOrDefault(kvp => kvp.Key == "Category").Value;
    //var floors = dict.SingleOrDefault(kvp => kvp.Key == "BldgLevel").Value;
    
    //Make a new filter definition
    var fd = new FilterDefinition()
    {
      Name = "Floor and Category Filter",
      Description = "Example filter",
    };
    //Set up the values for the filter
    var filtervals = new Dictionary<string, List<string>>();
    filtervals.Add("BldgLevel", new List<string>() { floors[0] });
    var category_vals = categories.Where(v => v == "Walls" || v == "Stairs").ToList() ?? new List<string>();
    if (category_vals.Count() > 0)
    {
      filtervals.Add("Category", category_vals);
    }
    //Create a solid block (other option is "Wireframe")
    var fdef = new FilterBlockDefinition()
    {
      FilterBlockMode = Object3DRenderingMode.None,
      Title = "Solid Filter",
      SelectedValues = filtervals//Floor and Category
    };
    //Apply the block
    fd.FilterBlockDefinitions = new List<FilterBlockDefinition>() { fdef };
    //Add the filter definition to the layer
    //At 2.x - bsl.SetFilter(fd);
    bsl.UpdateFilter(fd);
    //Set it active. The ID is auto-generated
    bsl.SetActiveFilter(fd.ID);
    
    Modify BuildingSceneLayer Filter Block
    //Must be called on the MCT
    //Assuming retrieve filter ok
    //var bsl = ...;
    //var filter1 = bsl.GetFilter(...);
    
    var filterBlock = new FilterBlockDefinition();
    filterBlock.FilterBlockMode = Object3DRenderingMode.Wireframe;
            
    var selectedValues = new Dictionary<string, List<string>>();
    //We assume QueryAvailableFieldsAndValues() contains "Walls" and "Doors"
    //For 'Category'
    selectedValues["Category"] = new List<string>() { "Walls", "Doors" };
    filterBlock.SelectedValues = selectedValues;
    
    //Overwrite
    filter1.FilterBlockDefinitions = new List<FilterBlockDefinition>() { filterBlock };
    //At 2.x - bsl.SetFilter(filter1);
    bsl.UpdateFilter(filter1);
    
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also