Quantcast
Channel: All Revit API Forum posts
Viewing all articles
Browse latest Browse all 66692

Re: How get filter rule info?

$
0
0

Hi
I suggestyou downloadtheSDKREVIT2016,findtheaddinthat packageElementFilter\ViewFilters, isan excellent exampleforfilterscontains the following classesrevit: Autodesk.Revit.DB.FilteredElementCollector, Autodesk.Revit.DB.ParameterFilterElement, Autodesk.Revit.DB.ParameterFilterUtilities,
Autodesk.Revit.DB.ParameterFilterRuleFactory

inthe source codethissegment:

 

   private void okButton_Click(object sender, EventArgs e)
        {
            // Reserve how many Revit filters need to be updated/removed
            ICollection<String> updatedFilters = new List<String>();
            ICollection<ElementId> deleteElemIds = new List<ElementId>();
            FilteredElementCollector collector = new FilteredElementCollector(m_doc);
            ICollection<Element> oldFilters = collector.OfClass(typeof(ParameterFilterElement)).ToElements();
            //
            // Start transaction to update filters now
            Transaction tran = new Transaction(m_doc, "Update View Filter");
            tran.Start();
            try
            {
                // 1. Update existing filters
                foreach (ParameterFilterElement filter in oldFilters)
                {
                    FilterData filterData;
                    bool bExist = m_dictFilters.TryGetValue(filter.Name, out filterData);
                    if (!bExist)
                    {
                        deleteElemIds.Add(filter.Id);
                        continue;
                    }
                    //
                    // Update Filter categories and filter rules for this filter
                    ICollection<ElementId> newCatIds = filterData.GetCategoryIds();
                    if (!ListCompareUtility<ElementId>.Equals(filter.GetCategories(), newCatIds))
                    {
                        filter.SetCategories(newCatIds);
                    }
                    IList<FilterRule> newRules = new List<FilterRule>();
                    foreach (FilterRuleBuilder ruleData in filterData.RuleData)
                    {
                        newRules.Add(ruleData.AsFilterRule());
                    }
                    filter.SetRules(newRules);
                    updatedFilters.Add(filter.Name);
                }
                //
                // 2. Delete some filters
                if (deleteElemIds.Count > 0)
                    m_doc.Delete(deleteElemIds);
                //
                // 3. Create new filters(if have)
                foreach (KeyValuePair<String, FilterData> myFilter in m_dictFilters)
                {
                    // If this filter is updated, do nothing
                    if (updatedFilters.Contains(myFilter.Key))
                        continue;
                    //
                    // Create new filter now if filter not exist yet
                    IList<FilterRule> rules = new List<FilterRule>();
                    foreach (FilterRuleBuilder ruleData in myFilter.Value.RuleData)
                    {
                        rules.Add(ruleData.AsFilterRule());
                    }
                    ParameterFilterElement.Create(
                        m_doc, myFilter.Key, myFilter.Value.GetCategoryIds(), rules);
                }
                //
                // Commit change now
                tran.Commit();
            }
            catch (Exception ex)
            {
                String failMsg = String.Format("Revit filters update failed and was aborted: " + ex.ToString());
                MyMessageBox(failMsg);
                tran.RollBack();
            }
        }

 

Good Luck!


Viewing all articles
Browse latest Browse all 66692

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>