Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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;
            };
        }
Esempio n. 4
0
        /// <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 _);
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        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);
                }
            }
        }
Esempio n. 9
0
        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);
                }
            }
        }
Esempio n. 10
0
        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);
                    }
                }
            }
        }
Esempio n. 11
0
        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);
            }
        }