Example #1
0
        private void RefreshLevelList(ListBox listBox)
        {
            var doc = Revit.ActiveUIDocument.Document;

            listBox.SelectedIndexChanged -= ListBox_SelectedIndexChanged;
            listBox.DisplayMember         = "DisplayName";
            listBox.Items.Clear();

            using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.Level)))
            {
                var levels = collector.Cast <DB.Level>().
                             OrderBy(x => x.GetHeight()).
                             Select(x => new Types.Level(x)).
                             ToList();

                foreach (var level in levels)
                {
                    listBox.Items.Add(level);
                }

                var selectedItems = levels.Intersect(PersistentData.OfType <Types.Level>());

                foreach (var item in selectedItems)
                {
                    listBox.SelectedItems.Add(item);
                }
            }

            listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged;
        }
        protected override void TrySolveInstance(IGH_DataAccess DA, DB.Document doc)
        {
            string name = null;

            DA.GetData("Name", ref name);

            DB.ElementFilter filter = null;
            DA.GetData("Filter", ref filter);

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var viewsCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    viewsCollector = viewsCollector.WherePasses(filter);
                }

                if (TryGetFilterStringParam(DB.BuiltInParameter.SYMBOL_NAME_PARAM, ref name, out var nameFilter))
                {
                    viewsCollector = viewsCollector.WherePasses(nameFilter);
                }

                var groupTypes = collector.Cast <DB.GroupType>();

                if (!string.IsNullOrEmpty(name))
                {
                    groupTypes = groupTypes.Where(x => x.Name.IsSymbolNameLike(name));
                }

                DA.SetDataList("GroupTypes", groupTypes);
            }
        }
Example #3
0
        private void InitializeListData()
        {
            if (null == m_wallTypeList || null == m_levelList)
            {
                throw new Exception("necessary data members don't initialize.");
            }

            RevitDB.Document document = m_commandData.Application.ActiveUIDocument.Document;
            RevitDB.FilteredElementCollector filteredElementCollector = new RevitDB.FilteredElementCollector(document);
            filteredElementCollector.OfClass(typeof(RevitDB.WallType));
            m_wallTypeList = filteredElementCollector.Cast <RevitDB.WallType>().ToList <RevitDB.WallType>();

            WallTypeComparer comparer = new WallTypeComparer();

            m_wallTypeList.Sort(comparer);

            RevitDB.FilteredElementIterator iter = (new RevitDB.FilteredElementCollector(document)).OfClass(typeof(RevitDB.Level)).GetElementIterator();
            iter.Reset();
            while (iter.MoveNext())
            {
                RevitDB.Level level = iter.Current as RevitDB.Level;
                if (null == level)
                {
                    continue;
                }
                m_levelList.Add(level);
            }
        }
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            if (!Params.TryGetData(DA, "Name", out string name))
            {
                return;
            }
            if (!Params.TryGetData(DA, "Filter", out DB.ElementFilter filter, x => x.IsValidObject))
            {
                return;
            }

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var locationsCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    locationsCollector = locationsCollector.WherePasses(filter);
                }

                var locations = collector.Cast <DB.SiteLocation>();

                if (name is object)
                {
                    locations = locations.Where(x => x.Name.IsSymbolNameLike(name));
                }

                DA.SetDataList("Site Locations", locations.Select(x => new Types.SiteLocation(x)));
            }
        }
Example #5
0
        /// <summary>
        /// Groups elements in the collector by their name
        /// </summary>
        /// <param name="collector">A Collector to search</param>
        /// <returns name="Elements">Returns a list of lists of Dynamo wrapped elements that are grouped by name</returns>
        public static List <List <DynElem> > QueryGroupByName(Collector collector)
        {
            RevitCollector rCollector = collector._ApplyFilters();

            List <List <DynElem> > dynamoElements = rCollector
                                                    .Cast <RevitDB.Element>()
                                                    .GroupBy(elem => elem.Name)
                                                    .Select(grp => grp.Select(elem => elem.ToDSType(true)).ToList())
                                                    .ToList();

            return(dynamoElements);
        }
Example #6
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            var filePath = string.Empty;

            if (!DA.GetData("Path", ref filePath))
            {
                return;
            }

            var overrideFamily = false;

            if (!DA.GetData("Override Family", ref overrideFamily))
            {
                return;
            }

            var overrideParameters = false;

            if (!DA.GetData("Override Parameters", ref overrideParameters))
            {
                return;
            }

            using (var transaction = NewTransaction(doc))
            {
                transaction.Start(Name);

                if (doc.LoadFamily(filePath, new FamilyLoadOptions(overrideFamily, overrideParameters), out var family))
                {
                    CommitTransaction(doc, transaction);
                }
                else
                {
                    var name = Path.GetFileNameWithoutExtension(filePath);
                    using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.Family)))
                        family = collector.Cast <DB.Family>().Where(x => x.Name == name).FirstOrDefault();

                    if (family is object && overrideFamily == false)
                    {
                        AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, $"Family '{name}' already loaded!");
                    }
                }

                DA.SetData("Family", family);
            }
        }
Example #7
0
        /// <summary>
        /// Searches the Collector for elements whose Name does not contain the string.
        /// </summary>
        /// <param name="collector">A Collector to search</param>
        /// <param name="name">Name of the elements to find.</param>
        /// <returns name="Elements">Returns a list of Dynamo wrapped elements that matches the query</returns>
        public static IList <DynElem> QueryNameDoesNotContain(Collector collector, string name)
        {
            RevitCollector rCollector = collector._ApplyFilters();

            IList <DynElem> dynamoElements = rCollector
                                             .Cast <RevitDB.Element>()
                                             .Where(elem => !elem.Name.Contains(name))
                                             .Select(elem =>
            {
                return(elem.ToDSType(true));
            })
                                             .ToList();

            return(dynamoElements);
        }
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            var viewFamily = DB.ViewFamily.Invalid;

            DA.GetData("Family", ref viewFamily);

            string name = null;

            DA.GetData("Name", ref name);

            var filter = default(DB.ElementFilter);

            DA.GetData("Filter", ref filter);

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var elementCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    elementCollector = elementCollector.WherePasses(filter);
                }

                if (TryGetFilterStringParam(DB.BuiltInParameter.SYMBOL_NAME_PARAM, ref name, out var nameFilter))
                {
                    elementCollector = elementCollector.WherePasses(nameFilter);
                }

                var elements = collector.Cast <DB.ViewFamilyType>();

                if (viewFamily != DB.ViewFamily.Invalid)
                {
                    elements = elements.Where(x => x.ViewFamily == viewFamily);
                }

                if (!string.IsNullOrEmpty(name))
                {
                    elements = elements.Where(x => x.Name.IsSymbolNameLike(name));
                }

                DA.SetDataList("Types", elements);
            }
        }
Example #9
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            string @class = null;

            DA.GetData("Class", ref @class);

            string name = null;

            DA.GetData("Name", ref name);

            DB.ElementFilter filter = null;
            DA.GetData("Filter", ref filter);

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var materialsCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    materialsCollector = materialsCollector.WherePasses(filter);
                }

                if (TryGetFilterStringParam(DB.BuiltInParameter.MATERIAL_NAME, ref name, out var nameFilter))
                {
                    materialsCollector = materialsCollector.WherePasses(nameFilter);
                }

                var materials = collector.Cast <DB.Material>();

                if (!string.IsNullOrEmpty(@class))
                {
                    materials = materials.Where(x => x.MaterialClass.IsSymbolNameLike(@class));
                }

                if (!string.IsNullOrEmpty(name))
                {
                    materials = materials.Where(x => x.Name.IsSymbolNameLike(name));
                }

                DA.SetDataList("Materials", materials);
            }
        }
Example #10
0
        private void RefreshViewsList(ListBox listBox, DB.ViewType viewType)
        {
            var doc           = Revit.ActiveUIDocument.Document;
            var selectedIndex = -1;

            try
            {
                listBox.SelectedIndexChanged -= ListBox_SelectedIndexChanged;
                listBox.Items.Clear();

                var current = default(Types.View);
                if (SourceCount == 0 && PersistentDataCount == 1)
                {
                    if (PersistentData.get_FirstItem(true) is Types.View firstValue)
                    {
                        current = firstValue.Duplicate() as Types.View;
                    }
                }

                using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.View)))
                {
                    var views = collector.
                                Cast <DB.View>().
                                Where(x => viewType == DB.ViewType.Undefined || x.ViewType == viewType);

                    foreach (var view in views)
                    {
                        var tag   = new Types.View(view);
                        int index = listBox.Items.Add(tag.EmitProxy());
                        if (tag.UniqueID == current?.UniqueID)
                        {
                            selectedIndex = index;
                        }
                    }
                }
            }
            finally
            {
                listBox.SelectedIndex         = selectedIndex;
                listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged;
            }
        }
Example #11
0
        private void RefreshMaterialsList(ListBox listBox, string materialClass)
        {
            var doc           = Revit.ActiveUIDocument.Document;
            var selectedIndex = -1;

            try
            {
                listBox.SelectedIndexChanged -= ListBox_SelectedIndexChanged;
                listBox.Items.Clear();

                var current = default(Types.Material);
                if (SourceCount == 0 && PersistentDataCount == 1)
                {
                    if (PersistentData.get_FirstItem(true) is Types.Material firstValue)
                    {
                        current = firstValue.Duplicate() as Types.Material;
                    }
                }

                using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.Material)))
                {
                    var materials = collector.
                                    Cast <DB.Material>().
                                    Where(x => string.IsNullOrEmpty(materialClass) || x.MaterialClass == materialClass);

                    foreach (var material in materials)
                    {
                        var tag   = new Types.Material(material);
                        int index = listBox.Items.Add(tag.EmitProxy());
                        if (tag.UniqueID == current?.UniqueID)
                        {
                            selectedIndex = index;
                        }
                    }
                }
            }
            finally
            {
                listBox.SelectedIndex         = selectedIndex;
                listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged;
            }
        }
Example #12
0
        static DB.ElementId MapMaterial(DB.Document project, DB.Document family, DB.ElementId materialId, bool createIfNotExist = false)
        {
            if (project.GetElement(materialId) is DB.Material material)
            {
                using (var collector = new DB.FilteredElementCollector(family).OfClass(typeof(DB.Material)))
                {
                    if (collector.Cast <DB.Material>().Where(x => x.Name == material.Name).FirstOrDefault() is DB.Material familyMaterial)
                    {
                        return(familyMaterial.Id);
                    }
                }

                if (createIfNotExist)
                {
                    return(DB.Material.Create(family, material.Name));
                }
            }

            return(DB.ElementId.InvalidElementId);
        }
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            if (!Params.TryGetData(DA, "Name", out string name))
            {
                return;
            }
            if (!Params.TryGetData(DA, "Filter", out DB.ElementFilter filter, x => x.IsValidObject))
            {
                return;
            }

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var optionsCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    optionsCollector = optionsCollector.WherePasses(filter);
                }

                if (name is object && TryGetFilterStringParam(DB.BuiltInParameter.OPTION_SET_NAME, ref name, out var nameFilter))
                {
                    optionsCollector = optionsCollector.WherePasses(nameFilter);
                }

                var options = collector.Cast <DB.Element>();

                if (name is object)
                {
                    options = options.Where(x => x.get_Parameter(DB.BuiltInParameter.OPTION_SET_NAME).AsString().IsSymbolNameLike(name));
                }

                DA.SetDataList("Design Option Sets", options.Select(x => new Types.DesignOptionSet(x)));
            }
        }
Example #14
0
        public void GetFamilyInstancesByName()
        {
            var model = ViewModel.Model;

            string samplePath = Path.Combine(workingDirectory, @".\Family\GetFamilyInstancesByName.dyn");
            string testPath   = Path.GetFullPath(samplePath);

            ViewModel.OpenCommand.Execute(testPath);

            RunCurrentModel();

            //get the number of loaded families in document:
            var fec = new Autodesk.Revit.DB.FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument);

            fec.OfClass(typeof(Autodesk.Revit.DB.Family));

            // obtain the family type with the provided name
            var families = fec.Cast <Autodesk.Revit.DB.Family>();
            var oldcount = families.Count();

            //find the node
            var node = this.Model.CurrentWorkspace.Nodes.Where(currentNode => currentNode.Name == "Family.ByName").FirstOrDefault();

            Assert.IsNotNull(node);
            //now delete the node
            model.CurrentWorkspace.RemoveAndDisposeNode(node);

            //get the number of loaded families in document after removing the family.byname node from the graph:
            var fec2 = new Autodesk.Revit.DB.FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument);

            fec2.OfClass(typeof(Autodesk.Revit.DB.Family));

            // obtain the family type with the provided name
            var families2 = fec2.Cast <Autodesk.Revit.DB.Family>();
            var newcount  = families.Count();

            //now assert the families count is the same.
            Assert.AreEqual(oldcount, newcount);
        }
Example #15
0
        private void RefreshPatternList(ListBox listBox, DB.FillPatternTarget?patternTarget)
        {
            var doc = Revit.ActiveUIDocument.Document;

            listBox.SelectedIndexChanged -= ListBox_SelectedIndexChanged;
            listBox.Items.Clear();

            using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.FillPatternElement)))
            {
                var patterns = collector.
                               Cast <DB.FillPatternElement>().
                               Where(x => !patternTarget.HasValue || x.GetFillPattern().Target == patternTarget);

                listBox.DisplayMember = "DisplayName";
                foreach (var pattern in patterns)
                {
                    listBox.Items.Add(new Types.FillPatternElement(pattern));
                }
            }

            listBox.SelectedIndex         = listBox.Items.OfType <Types.FillPatternElement>().IndexOf(Current, 0).FirstOr(-1);
            listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged;
        }
Example #16
0
        private void RefreshMaterialsList(ListBox listBox, string materialClass)
        {
            var doc = Revit.ActiveUIDocument.Document;

            listBox.SelectedIndexChanged -= ListBox_SelectedIndexChanged;
            listBox.Items.Clear();

            using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.Material)))
            {
                var materials = collector.
                                Cast <DB.Material>().
                                Where(x => string.IsNullOrEmpty(materialClass) || x.MaterialClass == materialClass);

                listBox.DisplayMember = "DisplayName";
                foreach (var material in materials)
                {
                    listBox.Items.Add(new Types.Material(material));
                }
            }

            listBox.SelectedIndex         = listBox.Items.OfType <Types.Material>().IndexOf(Current, 0).FirstOr(-1);
            listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged;
        }
Example #17
0
        protected override void TrySolveInstance(IGH_DataAccess DA, DB.Document doc)
        {
            string @class = null;

            DA.GetData("Class", ref @class);

            string name = null;

            DA.GetData("Name", ref name);

            DB.ElementFilter filter = null;
            DA.GetData("Filter", ref filter);

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var viewsCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    viewsCollector = viewsCollector.WherePasses(filter);
                }

                var materials = collector.Cast <DB.Material>();

                if (!string.IsNullOrEmpty(@class))
                {
                    materials = materials.Where(x => x.MaterialClass.IsSymbolNameLike(@class));
                }

                if (!string.IsNullOrEmpty(name))
                {
                    materials = materials.Where(x => x.Name.IsSymbolNameLike(name));
                }

                DA.SetDataList("Materials", materials);
            }
        }
Example #18
0
        private void RefreshPatternList(ListBox listBox)
        {
            var doc = Revit.ActiveUIDocument.Document;

            listBox.SelectedIndexChanged -= ListBox_SelectedIndexChanged;
            listBox.Items.Clear();

            using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.LinePatternElement)))
            {
                var patterns = collector.
                               Cast <DB.LinePatternElement>();

                listBox.DisplayMember = "DisplayName";

                listBox.Items.Add(new Types.LinePatternElement(doc, new DB.ElementId((int)DBX.BuiltInLinePattern.Solid)));
                foreach (var pattern in patterns)
                {
                    listBox.Items.Add(new Types.LinePatternElement(pattern));
                }
            }

            listBox.SelectedIndex         = listBox.Items.OfType <Types.LinePatternElement>().IndexOf(Current, 0).FirstOr(-1);
            listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged;
        }
Example #19
0
        protected override void TrySolveInstance(IGH_DataAccess DA, DB.Document doc)
        {
            var wallKind = DB.WallKind.Unknown;

            DA.GetData("Family", ref wallKind);

            string name = null;

            DA.GetData("Name", ref name);

            var  wallFunction   = DB.WallFunction.Interior;
            bool filterFunction = DA.GetData("Function", ref wallFunction);

            var width = Rhino.Geometry.Interval.Unset;

            DA.GetData("Width", ref width);

            var filter = default(DB.ElementFilter);

            DA.GetData("Filter", ref filter);

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var elementCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    elementCollector = elementCollector.WherePasses(filter);
                }

                if (TryGetFilterStringParam(DB.BuiltInParameter.SYMBOL_NAME_PARAM, ref name, out var nameFilter))
                {
                    elementCollector = elementCollector.WherePasses(nameFilter);
                }

                if (filterFunction)
                {
                    if (TryGetFilterIntegerParam(DB.BuiltInParameter.FUNCTION_PARAM, (int)wallFunction, out var functionFilter))
                    {
                        elementCollector = elementCollector.WherePasses(functionFilter);
                    }
                }

                // DB.BuiltInParameter.WALL_ATTR_WIDTH_PARAM only works with Basic wall types
                if (width.IsValid && wallKind == DB.WallKind.Basic && TryGetFilterDoubleParam(DB.BuiltInParameter.WALL_ATTR_WIDTH_PARAM, width.Mid / Revit.ModelUnits, Revit.VertexTolerance + (width.Length * 0.5 / Revit.ModelUnits), out var widthFilter))
                {
                    elementCollector = elementCollector.WherePasses(widthFilter);
                }

                var elements = collector.Cast <DB.WallType>();

                if (wallKind != DB.WallKind.Unknown)
                {
                    elements = elements.Where(x => x.Kind == wallKind);
                }

                if (!string.IsNullOrEmpty(name))
                {
                    elements = elements.Where(x => x.Name.IsSymbolNameLike(name));
                }

                if (width.IsValid && wallKind != DB.WallKind.Basic)
                {
                    elements = elements.Where(x => width.IncludesParameter(x.Width * Revit.ModelUnits));
                }

                DA.SetDataList("WallTypes", elements);
            }
        }
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            var  viewDiscipline     = default(DB.ViewDiscipline);
            var  _Discipline_       = Params.IndexOfInputParam("Discipline");
            bool nofilterDiscipline = (!DA.GetData(_Discipline_, ref viewDiscipline) && Params.Input[_Discipline_].Sources.Count == 0);

            var viewFamily = DB.ViewFamily.Invalid;

            DA.GetData("Family", ref viewFamily);

            string name = null;

            DA.GetData("Name", ref name);

            var  Template         = default(DB.View);
            var  _Template_       = Params.IndexOfInputParam("Template");
            bool nofilterTemplate = (!DA.GetData(_Template_, ref Template) && Params.Input[_Template_].DataType == GH_ParamData.@void);

            bool IsTemplate         = false;
            var  _IsTemplate_       = Params.IndexOfInputParam("Is Template");
            bool nofilterIsTemplate = (!DA.GetData(_IsTemplate_, ref IsTemplate) && Params.Input[_IsTemplate_].DataType == GH_ParamData.@void);

            bool IsAssembly         = false;
            var  _IsAssembly_       = Params.IndexOfInputParam("Is Assembly");
            bool nofilterIsAssembly = (!DA.GetData(_IsAssembly_, ref IsAssembly) && Params.Input[_IsAssembly_].DataType == GH_ParamData.@void);

            bool IsPrintable         = false;
            var  _IsPrintable_       = Params.IndexOfInputParam("Is Printable");
            bool nofilterIsPrintable = (!DA.GetData(_IsPrintable_, ref IsPrintable) && Params.Input[_IsPrintable_].DataType == GH_ParamData.@void);

            DB.ElementFilter filter = null;
            DA.GetData("Filter", ref filter);

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var viewsCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    viewsCollector = viewsCollector.WherePasses(filter);
                }

                if (!nofilterDiscipline && TryGetFilterIntegerParam(DB.BuiltInParameter.VIEW_DISCIPLINE, (int)viewDiscipline, out var viewDisciplineFilter))
                {
                    viewsCollector = viewsCollector.WherePasses(viewDisciplineFilter);
                }

                if (TryGetFilterStringParam(DB.BuiltInParameter.VIEW_NAME, ref name, out var viewNameFilter))
                {
                    viewsCollector = viewsCollector.WherePasses(viewNameFilter);
                }

                if (!nofilterTemplate && TryGetFilterElementIdParam(DB.BuiltInParameter.VIEW_TEMPLATE, Template?.Id ?? DB.ElementId.InvalidElementId, out var templateFilter))
                {
                    viewsCollector = viewsCollector.WherePasses(templateFilter);
                }

                var views = collector.Cast <DB.View>();

                if (!nofilterIsTemplate)
                {
                    views = views.Where((x) => x.IsTemplate == IsTemplate);
                }

                if (!nofilterIsAssembly)
                {
                    views = views.Where((x) => x.IsAssemblyView == IsAssembly);
                }

                if (!nofilterIsPrintable)
                {
                    views = views.Where((x) => x.CanBePrinted == IsPrintable);
                }

                if (viewFamily != DB.ViewFamily.Invalid)
                {
                    views = views.Where((x) => (x.Document.GetElement(x.GetTypeId()) as DB.ViewFamilyType).ViewFamily == viewFamily);
                }

                if (name is object)
                {
                    views = views.Where(x => x.Name.IsSymbolNameLike(name));
                }

                DA.SetDataList("Views", views);
            }
        }
Example #21
0
        protected override void TrySolveInstance(IGH_DataAccess DA, DB.Document doc)
        {
            var  viewDiscipline     = default(DB.ViewDiscipline);
            var  _Discipline_       = Params.IndexOfInputParam("Discipline");
            bool nofilterDiscipline = (!DA.GetData(_Discipline_, ref viewDiscipline) && Params.Input[_Discipline_].Sources.Count == 0);

            var viewType = DB.ViewType.Undefined;

            DA.GetData("Type", ref viewType);

            string name = null;

            DA.GetData("Name", ref name);

            var  Template         = default(DB.View);
            var  _Template_       = Params.IndexOfInputParam("Template");
            bool nofilterTemplate = (!DA.GetData(_Template_, ref Template) && Params.Input[_Template_].DataType == GH_ParamData.@void);

            bool IsTemplate         = false;
            var  _IsTemplate_       = Params.IndexOfInputParam("IsTemplate");
            bool nofilterIsTemplate = (!DA.GetData(_IsTemplate_, ref IsTemplate) && Params.Input[_IsTemplate_].DataType == GH_ParamData.@void);

            bool IsAssembly         = false;
            var  _IsAssembly_       = Params.IndexOfInputParam("IsAssembly");
            bool nofilterIsAssembly = (!DA.GetData(_IsAssembly_, ref IsAssembly) && Params.Input[_IsAssembly_].DataType == GH_ParamData.@void);

            bool IsPrintable         = false;
            var  _IsPrintable_       = Params.IndexOfInputParam("IsPrintable");
            bool nofilterIsPrintable = (!DA.GetData(_IsPrintable_, ref IsPrintable) && Params.Input[_IsPrintable_].DataType == GH_ParamData.@void);

            DB.ElementFilter filter = null;
            DA.GetData("Filter", ref filter);

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var viewsCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    viewsCollector = viewsCollector.WherePasses(filter);
                }

                var views = collector.Cast <DB.View>();

                if (!nofilterDiscipline)
                {
                    views = views.Where((x) =>
                    {
                        try { return(x.Discipline == viewDiscipline); }
                        catch (Autodesk.Revit.Exceptions.InvalidOperationException) { return(false); }
                    });
                }

                if (!nofilterTemplate)
                {
                    views = views.Where((x) => x.ViewTemplateId.IntegerValue == Template.Id.IntegerValue);
                }

                if (!nofilterIsTemplate)
                {
                    views = views.Where((x) => x.IsTemplate == IsTemplate);
                }

                if (!nofilterIsAssembly)
                {
                    views = views.Where((x) => x.IsAssemblyView == IsAssembly);
                }

                if (!nofilterIsPrintable)
                {
                    views = views.Where((x) => x.CanBePrinted == IsPrintable);
                }

                if (viewType != DB.ViewType.Undefined)
                {
                    views = views.Where((x) => x.ViewType == viewType);
                }

                if (!string.IsNullOrEmpty(name))
                {
                    views = views.Where(x => x.Name.IsSymbolNameLike(name));
                }

                DA.SetDataList("Views", views);
            }
        }
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            if (!Params.TryGetData(DA, "Design Option Set", out Types.DesignOptionSet set, x => x.IsValid))
            {
                return;
            }
            if (!Params.TryGetData(DA, "Name", out string name))
            {
                return;
            }
            if (!Params.TryGetData(DA, "Primary", out bool?primary))
            {
                return;
            }
            if (!Params.TryGetData(DA, "Filter", out DB.ElementFilter filter, x => x.IsValidObject))
            {
                return;
            }

            if (!(set?.Document is null || doc.Equals(set.Document)))
            {
                throw new System.ArgumentException("Wrong Document.", "Design Option Set");
            }

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                var optionsCollector = collector.WherePasses(ElementFilter);

                if (filter is object)
                {
                    optionsCollector = optionsCollector.WherePasses(filter);
                }

                if (set is object && TryGetFilterElementIdParam(DB.BuiltInParameter.OPTION_SET_ID, set.Id, out var optionSetFilter))
                {
                    optionsCollector = optionsCollector.WherePasses(optionSetFilter);
                }

                if (name is object && TryGetFilterStringParam(DB.BuiltInParameter.OPTION_NAME, ref name, out var nameFilter))
                {
                    optionsCollector = optionsCollector.WherePasses(nameFilter);
                }

                var options = collector.Cast <DB.DesignOption>();

                if (primary.HasValue)
                {
                    options = options.Where(x => x.IsPrimary == primary.Value);
                }

                if (name is object)
                {
                    options = options.Where(x => x.get_Parameter(DB.BuiltInParameter.OPTION_NAME).AsString().IsSymbolNameLike(name));
                }

                if
                (
                    (set is null || set.Id == DB.ElementId.InvalidElementId) &&
                    (name is null || name == "Main Model") &&
                    primary != false
                )
                {
                    options = Enumerable.Repeat(default(DB.DesignOption), 1).Concat(options);
                }

                DA.SetDataList("Design Options", options.Select(x => new Types.DesignOption(x)));
            }
        }