Example #1
0
        /// <summary>
        /// Doors related rooms: update doors' geometry according to its To/From room information.
        /// </summary>
        /// <param name="creFilter">One element filter utility object.</param>
        /// <param name="doc">Revit project.</param>
        /// <param name="onlyUpdateSelect">
        /// true means only update selected doors' information else false.
        /// </param>
        public static void UpdateDoorsGeometry(Document doc, bool onlyUpdateSelect)
        {
            IEnumerator iter;
             int doorCount = 0;

             if (onlyUpdateSelect) // update doors in select elements
             {
            UIDocument newUIdoc = new UIDocument(doc);
            iter = newUIdoc.Selection.Elements.GetEnumerator();
             }
             else // update all doors in current Revit document
             {
             ElementClassFilter familyInstanceFilter = new ElementClassFilter(typeof(FamilyInstance));
             ElementCategoryFilter doorsCategoryfilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
             LogicalAndFilter doorInstancesFilter = new LogicalAndFilter(familyInstanceFilter, doorsCategoryfilter);
             iter = new FilteredElementCollector(doc).WherePasses(doorInstancesFilter).GetElementIterator();
             }

             iter.Reset();
             while (iter.MoveNext())
             {
            // find door instance
            FamilyInstance door = iter.Current as FamilyInstance;

            if (onlyUpdateSelect)
            {
               if (null == door)
               {
                  continue;
               }

               if (null == door.Category)
               {
                  continue;
               }

               if (!door.Category.Name.Equals("Doors"))
               {
                  continue;
               }
            }

            // find one door.
            doorCount++;

            // update one door.
            UpdateFromToRoomofOneDoor(door, true);
            doc.Regenerate();
             }

             if (onlyUpdateSelect)
             {
            System.Windows.Forms.MessageBox.Show("Updated all selected doors (" + doorCount +
                                                 " doors).\r\n (Selection may include miscellaneous elements.)",
                                                 "Door Swing");
             }
             else
             {
            System.Windows.Forms.MessageBox.Show("Updated all doors of this project (" +
                                                 doorCount + " doors).", "Door Swing");
             }
        }