/// <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"); } }