public static DirectShape CreateRoomDirectShape(Room room) { DirectShape roomShape = null; try { List <GeometryObject> geoList = new List <GeometryObject>(); var solidGeometries = from geoObj in room.ClosedShell where geoObj.GetType() == typeof(Solid) && (geoObj as Solid).Volume != 0 select geoObj; if (solidGeometries.Any()) { geoList = solidGeometries.ToList(); } ElementId categoryId = new ElementId((int)BuiltInCategory.OST_Mass); if (DirectShape.IsValidCategoryId(categoryId, room.Document)) { #if RELEASE2015 || RELEASE2016 roomShape = DirectShape.CreateElement(room.Document, categoryId, "Measure", room.UniqueId); #else roomShape = DirectShape.CreateElement(room.Document, categoryId); #endif } roomShape.SetShape(geoList); } catch (Exception ex) { string message = ex.Message; } return(roomShape); }
static void ActiveUIApplication_ViewActivated(object sender, Autodesk.Revit.UI.Events.ViewActivatedEventArgs e) { var directShapeCategories = Enum.GetValues(typeof(BuiltInCategory)).Cast <BuiltInCategory>(). Where(categoryId => DirectShape.IsValidCategoryId(new ElementId(categoryId), e.CurrentActiveView.Document)). Select(categoryId => Autodesk.Revit.DB.Category.GetCategory(e.CurrentActiveView.Document, categoryId)); foreach (var group in directShapeCategories.GroupBy(x => x.CategoryType).OrderBy(x => x.Key.ToString())) { foreach (var category in group.OrderBy(x => x.Name)) { var comboBoxMemberData = new ComboBoxMemberData(((BuiltInCategory)category.Id.IntegerValue).ToString(), category.Name) { GroupName = group.Key.ToString() }; var item = categoriesComboBox.AddItem(comboBoxMemberData); if ((BuiltInCategory)category.Id.IntegerValue == BuiltInCategory.OST_GenericModel) { categoriesComboBox.Current = item; } } } Revit.ApplicationUI.ViewActivated -= ActiveUIApplication_ViewActivated; }
public static void CreateUI(RibbonPanel ribbonPanel) { var items = ribbonPanel.AddStackedItems ( new ComboBoxData("Category"), new PulldownButtonData("cmdRhinoInside.GrasshopperPlayer", "Grasshopper Player") ); categoriesComboBox = items[0] as Autodesk.Revit.UI.ComboBox; if (categoriesComboBox != null) { categoriesComboBox.ToolTip = "Category where Grasshopper Player will place geometry."; } mruPullDownButton = items[1] as Autodesk.Revit.UI.PulldownButton; if (mruPullDownButton != null) { mruPullDownButton.ToolTip = "Loads and evals a Grasshopper definition"; mruPullDownButton.Image = ImageBuilder.LoadBitmapImage("RhinoInside.Resources.GrasshopperPlayer.png", true); mruPullDownButton.LargeImage = ImageBuilder.LoadBitmapImage("RhinoInside.Resources.GrasshopperPlayer.png"); mruPullDownButton.SetContextualHelp(new ContextualHelp(ContextualHelpType.Url, "https://github.com/mcneel/rhino.inside/blob/master/Autodesk/Revit/README.md#sample-4")); mruPullDownButton.AddPushButton(typeof(Browse), "Browse...", "Browse for a Grasshopper definition to evaluate", typeof(Availability)); } EventHandler <IdlingEventArgs> BuildDirectShapeCategoryList = null; Revit.ApplicationUI.Idling += BuildDirectShapeCategoryList = (sender, args) => { var doc = (sender as UIApplication)?.ActiveUIDocument.Document; if (doc == null) { return; } var directShapeCategories = Enum.GetValues(typeof(BuiltInCategory)).Cast <BuiltInCategory>(). Where(categoryId => DirectShape.IsValidCategoryId(new ElementId(categoryId), doc)). Select(categoryId => Autodesk.Revit.DB.Category.GetCategory(doc, categoryId)); foreach (var group in directShapeCategories.GroupBy(x => x.CategoryType).OrderBy(x => x.Key.ToString())) { foreach (var category in group.OrderBy(x => x.Name)) { var comboBoxMemberData = new ComboBoxMemberData(((BuiltInCategory)category.Id.IntegerValue).ToString(), category.Name) { GroupName = group.Key.ToString() }; var item = categoriesComboBox.AddItem(comboBoxMemberData); if ((BuiltInCategory)category.Id.IntegerValue == BuiltInCategory.OST_GenericModel) { categoriesComboBox.Current = item; } } } Revit.ApplicationUI.Idling -= BuildDirectShapeCategoryList; }; }
/// <summary> /// Returns a category id valid for DirectShape or DirestShapeType creation. /// </summary> /// <param name="doc">The document.</param> /// <param name="categoryId">The original category id.</param> /// <param name="id">The id of the creator, for warning use.</param> /// <returns>The original category id, or BuiltInCategory.OST_GenericModel, if it can't be used.</returns> static public ElementId GetDSValidCategoryId(Document doc, ElementId categoryId, int id) { if (!DirectShape.IsValidCategoryId(categoryId, doc)) { Importer.TheLog.LogWarning(id, "Creating DirectShape or DirectShapeType with disallowed category id: " + categoryId + ", reverting to Generic Models.", true); return(new ElementId(BuiltInCategory.OST_GenericModel)); } return(categoryId); }
public static void CreateUI(RibbonPanel ribbonPanel) { var items = ribbonPanel.AddStackedItems ( new ComboBoxData("Category"), NewPushButtonData <CommandGrasshopperBake, NeedsActiveDocument <Availability> >("Bake Selected") ); if (items[0] is ComboBox comboBox) { categoriesComboBox = comboBox; EventHandler <IdlingEventArgs> BuildDirectShapeCategoryList = null; Revit.ApplicationUI.Idling += BuildDirectShapeCategoryList = (sender, args) => { var doc = (sender as UIApplication).ActiveUIDocument?.Document; if (doc == null) { return; } var directShapeCategories = Enum.GetValues(typeof(BuiltInCategory)).Cast <BuiltInCategory>(). Where(categoryId => DirectShape.IsValidCategoryId(new ElementId(categoryId), doc)). Select(categoryId => Autodesk.Revit.DB.Category.GetCategory(doc, categoryId)). Where(x => x is object); foreach (var group in directShapeCategories.GroupBy(x => x.CategoryType).OrderBy(x => x.Key.ToString())) { foreach (var category in group.OrderBy(x => x.Name)) { var comboBoxMemberData = new ComboBoxMemberData(((BuiltInCategory)category.Id.IntegerValue).ToString(), category.Name) { GroupName = group.Key.ToString() }; var item = categoriesComboBox.AddItem(comboBoxMemberData); if ((BuiltInCategory)category.Id.IntegerValue == BuiltInCategory.OST_GenericModel) { categoriesComboBox.Current = item; } } } Revit.ApplicationUI.Idling -= BuildDirectShapeCategoryList; }; } if (items[1] is PushButton bakeButton) { bakeButton.ToolTip = "Bake geometry in all selected objects"; bakeButton.Image = ImageBuilder.LoadBitmapImage("RhinoInside.Resources.GH.Toolbar.Bake.png", true); bakeButton.LargeImage = ImageBuilder.LoadBitmapImage("RhinoInside.Resources.GH.Toolbar.Bake.png"); bakeButton.Visible = PlugIn.PlugInExists(PluginId, out bool _, out bool _); } }
protected override void SolveInstance(IGH_DataAccess DA) { var list = new List <Category>(); foreach (var item in Revit.ActiveDBDocument.Settings.Categories) { if (item is Category category) { if (!DirectShape.IsValidCategoryId(category.Id, Revit.ActiveDBDocument)) { continue; } list.Add(category); } } DA.SetDataList("Categories", list); }
static void BakeGeometry(Document doc, IEnumerable <GeometryObject> geometryToBake, BuiltInCategory categoryToBakeInto) { try { var geometryList = new List <GeometryObject>(); // DirectShape only accepts those types and no nulls foreach (var g in geometryToBake) { switch (g) { case Point p: geometryList.Add(p); break; case Curve c: geometryList.Add(c); break; case Solid s: geometryList.Add(s); break; case Mesh m: geometryList.Add(m); break; } } if (geometryList.Count > 0) { var category = new ElementId(categoryToBakeInto); if (!DirectShape.IsValidCategoryId(category, doc)) { category = new ElementId(BuiltInCategory.OST_GenericModel); } var ds = DirectShape.CreateElement(doc, category); ds.SetShape(geometryList); } } catch (Exception e) { Debug.Fail(e.Source, e.Message); } }
public DirectShapeCategories() { Category = "Revit"; SubCategory = "DirectShapes"; Name = "DirectShape.Categories"; NickName = "Categories"; Description = "Provide a picker of a valid DirectShape category"; ListItems.Clear(); var categories = new List <Category>(); foreach (var item in Revit.ActiveDBDocument.Settings.Categories) { if (item is Category category) { if (!DirectShape.IsValidCategoryId(category.Id, Revit.ActiveDBDocument)) { continue; } categories.Add(category); } } categories = categories.OrderBy(c => c.Name).ToList(); var genericModel = Autodesk.Revit.DB.Category.GetCategory(Revit.ActiveDBDocument, BuiltInCategory.OST_GenericModel); foreach (var category in categories) { ListItems.Add(new GH_ValueListItem(category.Name, category.Id.IntegerValue.ToString())); if (category.Id.IntegerValue == (int)BuiltInCategory.OST_GenericModel) { SelectItem(ListItems.Count - 1); } } }
void CommitInstance ( Document doc, IGH_DataAccess DA, int Iteration, IEnumerable <IGH_GeometricGoo> geometries, Autodesk.Revit.DB.Category category, string name ) { var element = PreviousElement(doc, Iteration); if (!element?.Pinned ?? false) { ReplaceElement(doc, DA, Iteration, element); } else { try { var shape = new List <GeometryObject>(); if (geometries != null) { if (category == null || !DirectShape.IsValidCategoryId(category.Id, doc)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, string.Format("Parameter '{0}' is not valid for DirectShape.", Params.Input[1].Name)); category = Autodesk.Revit.DB.Category.GetCategory(doc, BuiltInCategory.OST_GenericModel); } foreach (var geometry in geometries.Select((x) => AsGeometryBase(x)).ToHost()) { // DirectShape only accepts those types and no nulls foreach (var g in geometry.SelectMany(g => g.ToDirectShapeGeometry())) { switch (g) { case Point p: shape.Add(p); break; case Curve c: shape.Add(c); break; case Solid s: shape.Add(s); break; case Mesh m: shape.Add(m); break; } } } } if (element?.Category.Id != category.Id) { element = null; } var ds = element as DirectShape ?? CopyParametersFrom(DirectShape.CreateElement(doc, category.Id), element); ds.SetShape(shape); ds.Name = name ?? string.Empty; element = ds; ReplaceElement(doc, DA, Iteration, element); } catch (Exception e) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message); ReplaceElement(doc, DA, Iteration, null); } } }
public DirectShapeCategories() { Category = "Revit"; SubCategory = "Build"; Name = "DirectShape.Categories"; NickName = "Categories"; Description = "Provides a picker of a valid DirectShape category"; ListItems.Clear(); var ActiveDBDocument = Revit.ActiveDBDocument; if (ActiveDBDocument == null) { return; } var genericModel = Autodesk.Revit.DB.Category.GetCategory(ActiveDBDocument, BuiltInCategory.OST_GenericModel); var directShapeCategories = ActiveDBDocument.Settings.Categories.Cast <Category>().Where((x) => DirectShape.IsValidCategoryId(x.Id, ActiveDBDocument)); foreach (var group in directShapeCategories.GroupBy((x) => x.CategoryType).OrderBy((x) => x.Key)) { foreach (var category in group.OrderBy(x => x.Name)) { ListItems.Add(new GH_ValueListItem(category.Name, category.Id.IntegerValue.ToString())); if (category.Id.IntegerValue == (int)BuiltInCategory.OST_GenericModel) { SelectItem(ListItems.Count - 1); } } } }
void CommitInstance ( Document doc, IGH_DataAccess DA, int Iteration, IEnumerable <Rhino.Geometry.GeometryBase> geometries, Autodesk.Revit.DB.Category category, string name ) { var element = PreviousElement(doc, Iteration); try { if (element?.Pinned ?? true) { if (geometries != null) { if (category == null || !DirectShape.IsValidCategoryId(category.Id, doc)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, string.Format("Parameter '{0}' is not valid for DirectShape.", Params.Input[1].Name)); category = Autodesk.Revit.DB.Category.GetCategory(doc, BuiltInCategory.OST_GenericModel); } foreach (var geometry in geometries.ToHost()) { var shape = new List <GeometryObject>(geometry.Count); // DirectShape only accepts those types and no nulls foreach (var g in geometry) { switch (g) { case Point p: shape.Add(p); break; case Curve c: shape.Add(c); break; case Solid s: shape.Add(s); break; case Mesh m: shape.Add(m); break; } } if (shape.Count > 0) { var ds = Autodesk.Revit.DB.DirectShape.CreateElement(doc, category.Id); ds.SetShape(shape); ds.Name = name ?? string.Empty; element = ds; } } } } } catch (Exception e) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message); } finally { ReplaceElement(doc, DA, Iteration, element); } }