Ejemplo n.º 1
0
        private void comboBoxRevitFamilies_SelectedIndexChanged(object sender, EventArgs e)
        {
            NLogger.LogText("Enter comboBoxRevitFamilies_SelectedIndexChanged");

            RevitFamily selectedFamily = (RevitFamily)comboBoxRevitFamilies.SelectedItem;

            if (selectedFamily != null)
            {
                //  Reset other elements depending from the selection
                offsitePanelHandler.FillGrid(dgElements, null);
                offsitePanelHandler.FillGrid(dgParamsMapping, null);
                offsitePanelHandler.FillGrid(dgInvRevMapping, null);
                txtInventorTemplatesPath.Text = "";
                offsitePanelHandler.ResetRevitInventorMappingInternalStructure();
                ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled = false;

                //  Extract Revit family from revit document, based on selected xml configured element
                NLogger.LogText($"Revit family selected: {selectedFamily.Name}");

                RevitFamTypes = offsitePanelHandler.GetRevitFamilyTypesInActiveDocument(selectedFamily);

                NLogger.LogText($"Retrieved: {RevitFamTypes.Count()} family types");

                //  populate filtering drowdown lists
                var dataSource = offsitePanelHandler.GetListFamilyTypeSource(RevitFamTypes, selectedFamily);

                this.comboBoxRevitFamilyTypes.SelectedIndexChanged -= new EventHandler(comboBoxRevitFamilyTypes_SelectedIndexChanged);
                offsitePanelHandler.FillComboRevitFamTypes(comboBoxRevitFamilyTypes, dataSource, "FamilyTypeName");
                this.comboBoxRevitFamilyTypes.SelectedIndexChanged += new EventHandler(comboBoxRevitFamilyTypes_SelectedIndexChanged);
            }

            NLogger.LogText("Exit comboBoxRevitFamilies_SelectedIndexChanged");
        }
Ejemplo n.º 2
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            RevitFamily cat = new RevitFamily();

            DA.GetData <RevitFamily>("RevitFamily", ref cat);
            DA.SetDataList("Types", cat.Types);
        }
        //  Retrieve Revit family types in Active document
        public IList <Element> GetRevitFamilyTypesInActiveDocument(RevitFamily famType)
        {
            NLogger.LogText("Entered GetRevitFamiliesInActiveDocument");

            IList <Element> genModElements = null;

            try
            {
                Type RevitFamType = Type.GetType(famType.Type);

                var genModelTypeCollector = new FilteredElementCollector(doc);
                genModelTypeCollector.OfClass(RevitFamType);

                if (!string.IsNullOrEmpty(famType.Category))
                {
                    BuiltInCategory RevitFamilyCategory = (BuiltInCategory)Enum.Parse(typeof(BuiltInCategory), famType.Category, true);
                    genModelTypeCollector.OfCategory(RevitFamilyCategory);
                }
                genModElements = genModelTypeCollector.ToElements();
            }
            catch (Exception ex)
            {
                NLogger.LogError(ex);
                NLogger.LogText("Exit GetRevitFamiliesInActiveDocument with error");

                throw (ex);
            }

            NLogger.LogText($"Extracted {genModElements.Count()} Families from Revit document");

            NLogger.LogText("Exit GetRevitFamiliesInActiveDocument");

            return(genModElements);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Get Revit Families from the active Document
        /// </summary>
        public static RevitFamilyCollection GetFamilies(this Document document)
        {
            // create a new family collection
            Grevit.Types.RevitFamilyCollection familyCollection = new Grevit.Types.RevitFamilyCollection();

            // set up a new category List
            familyCollection.Categories = new List <Grevit.Types.RevitCategory>();

            // Get all WallTypes and add them to the system family category
            #region WallTypes

            FilteredElementCollector collector = new FilteredElementCollector(document).OfClass(typeof(WallType));

            RevitCategory systemFamilies = new RevitCategory()
            {
                Name     = "System Families",
                Families = new List <RevitFamily>()
            };

            RevitFamily wallTypes = new RevitFamily()
            {
                Name  = "Walls",
                Types = new List <string>()
            };

            foreach (WallType wallType in collector.ToElements())
            {
                wallTypes.Types.Add(wallType.Name);
            }

            systemFamilies.Families.Add(wallTypes);
            familyCollection.Categories.Add(systemFamilies);

            #endregion

            // Get all Family Instances and add them to the Grevit Family collection
            #region familyInstances

            FilteredElementCollector familyInstanceCollector = new FilteredElementCollector(document).OfClass(typeof(FamilySymbol));

            foreach (Autodesk.Revit.DB.FamilySymbol familySymbol in familyInstanceCollector.ToElements())
            {
                RevitFamily   family   = null;
                RevitCategory category = null;

                // Check if category already exists
                foreach (RevitCategory revitCategory in familyCollection.Categories)
                {
                    if (revitCategory.Name == familySymbol.Category.Name)
                    {
                        category = revitCategory;
                    }
                }

                // Otherwise create a new category
                if (category == null)
                {
                    category = new RevitCategory()
                    {
                        Name     = familySymbol.Category.Name,
                        Families = new List <RevitFamily>()
                    };

                    familyCollection.Categories.Add(category);
                }

                // Check if Family already exists
                foreach (RevitFamily revitFamily in category.Families)
                {
                    if (revitFamily.Name == familySymbol.FamilyName)
                    {
                        family = revitFamily;
                    }
                }

                // Otherwise create a new one
                if (family == null)
                {
                    family = new RevitFamily()
                    {
                        Name  = familySymbol.FamilyName,
                        Types = new List <string>()
                    };

                    category.Families.Add(family);
                }

                family.Types.Add(familySymbol.Name);
            }

            #endregion

            return(familyCollection);
        }