/* * Created by SharpDevelop. * User: jmcouffin * Date: 8/8/2016 * Time: 6:20 AM * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace RemoveExtraneousObjectStyles { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("1CB7C2D2-4B03-45DF-8509-1EC661F56462")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { } private void Module_Shutdown(object sender, EventArgs e) { } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion public void deleteDuplicateSubCategories() { Document document = this.ActiveUIDocument.Document; Transaction tr = new Transaction( document ); tr.Start( "ObjectStyles" ); string cat_name = ""; HashSet uniqueList = new HashSet(); HashSet setToDelete = new HashSet(); FilteredElementCollector collector = new FilteredElementCollector(document); ElementClassFilter filter = new ElementClassFilter(typeof(GraphicsStyle)); collector.WherePasses(filter); Categories categories = document.Settings.Categories; foreach(Element element in collector) { GraphicsStyle gs = element as GraphicsStyle; GraphicsStyleType gsType = gs.GraphicsStyleType; Category gsCategory = gs.GraphicsStyleCategory; Category gsCategoryParent = gsCategory.Parent; if(gsCategory.Name.Equals("")) { continue; } else { if(gsCategoryParent != null) { cat_name = gsCategoryParent.Name + "::Id:"+gsCategoryParent.Id.ToString() + "::" + gsCategory.Name+"::"+gsType; } else { cat_name = gsCategory.Name + "::Id:" +gsCategory.Id.ToString()+ "::"+gsType; } if(!uniqueList.Contains(cat_name) || gsType.ToString().Equals("3")) { uniqueList.Add(cat_name); } else { if(gsCategoryParent.Id != null && gsCategory.Id.IntegerValue > 0 && !gsCategory.Name.Contains("OST")) { setToDelete.Add(gsCategory.Id); } } } } List listToDelete = new List(setToDelete); if(listToDelete != null && listToDelete.Count != 0 ) { ICollection deletedIdSet = document.Delete(listToDelete); if (0 == deletedIdSet.Count) { throw new Exception("Deleting the selected elements in Revit failed."); } TaskDialog.Show("Revit",listToDelete.Count+" Object Styles have been deleted"); } else { TaskDialog.Show("Revit","No Object Styles to delete"); } tr.Commit(); } } }