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

            DA.DisableGapLogic();

            DB.ElementFilter filter = null;
            if (!DA.GetData("Filter", ref filter))
            {
                return;
            }

            using (var collector = new DB.FilteredElementCollector(doc))
            {
                DA.SetDataList
                (
                    "Elements",
                    collector.
                    WherePasses(ElementFilter).
                    WherePasses(filter).
                    Select(x => Types.Element.FromElement(x))
                );
            }
        }
예제 #2
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            var categoryIds = new List <DB.ElementId>();

            if (!DA.GetDataList("Categories", categoryIds))
            {
                return;
            }

            var inverted = false;

            if (!DA.GetData("Inverted", ref inverted))
            {
                return;
            }

            var ids = categoryIds.Select(x => x is null ? DB.ElementId.InvalidElementId : x).ToArray();

            if (ids.Length == 0)
            {
                var nothing = new DB.ElementFilter[] { new DB.ElementIsElementTypeFilter(true), new DB.ElementIsElementTypeFilter(false) };
                DA.SetData("Filter", new DB.LogicalAndFilter(nothing));
            }
            else
            {
                if (ids.Length == 1)
                {
                    DA.SetData("Filter", new DB.ElementCategoryFilter(ids[0], inverted));
                }
                else
                {
                    DA.SetData("Filter", new DB.ElementMulticategoryFilter(ids, inverted));
                }
            }
        }
예제 #3
0
        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 elementCollector = collector.WherePasses(ElementFilter);

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

                var elementTypes = elementCollector.Cast <DB.ElementType>();

                var familiesSet = new HashSet <string>(elementTypes.Select(x => x.FamilyName));

                var families = familiesSet.AsEnumerable().Where(x => x != string.Empty);

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

                DA.SetDataList("Families", families);
            }
        }
예제 #4
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            Autodesk.Revit.DB.ElementFilter filter = null;
            DA.GetData("Filter", ref filter);

            using (var collector = new FilteredElementCollector(Revit.ActiveDBDocument))
            {
                if (filter == null)
                {
                    DA.SetDataList
                    (
                        "Elements",
                        collector.WhereElementIsNotElementType().
                        GetElementIdIterator().
                        Select(x => Types.Element.Make(x))
                    );
                }
                else
                {
                    DA.SetDataList
                    (
                        "Elements",
                        collector.WhereElementIsNotElementType().
                        WherePasses(filter).
                        GetElementIdIterator().
                        Select(x => Types.Element.Make(x))
                    );
                }
            }
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            var levels = new List <DB.Level>();

            if (!DA.GetDataList("Levels", levels))
            {
                return;
            }

            var inverted = false;

            if (!DA.GetData("Inverted", ref inverted))
            {
                return;
            }

            if (levels.Count == 0)
            {
                var nothing = new DB.ElementFilter[] { new DB.ElementIsElementTypeFilter(true), new DB.ElementIsElementTypeFilter(false) };
                DA.SetData("Filter", new DB.LogicalAndFilter(nothing));
            }
            else if (levels.Count == 1)
            {
                DA.SetData("Filter", new DB.ElementLevelFilter(levels[0]?.Id ?? DB.ElementId.InvalidElementId, inverted));
            }
            else
            {
                var filters = levels.Select(x => new DB.ElementLevelFilter(x?.Id ?? DB.ElementId.InvalidElementId, inverted)).ToList <DB.ElementFilter>();
                DA.SetData("Filter", new DB.LogicalOrFilter(filters));
            }
        }
예제 #7
0
        protected void RegisterInputParams(GH_InputParamManager manager, MethodInfo methodInfo)
        {
            var elementFilterClasses = new List <Type>();

            foreach (var parameter in methodInfo.GetParameters())
            {
                if (parameter.Position < 2)
                {
                    continue;
                }

                if (parameter.IsOut || parameter.ParameterType.IsByRef)
                {
                    throw new NotImplementedException();
                }

                var parameterType = GetParameterType(parameter, out var access, out var optional);
                var nickname      = parameter.Name.First().ToString().ToUpperInvariant();
                var name          = nickname + parameter.Name.Substring(1);

                foreach (var nickNameAttribte in parameter.GetCustomAttributes(typeof(NickNameAttribute), false).Cast <NickNameAttribute>())
                {
                    nickname = nickNameAttribte.NickName;
                }

                var description = string.Empty;
                foreach (var descriptionAttribute in parameter.GetCustomAttributes(typeof(DescriptionAttribute), false).Cast <DescriptionAttribute>())
                {
                    description = (description.Length > 0) ? $"{description}\r\n{descriptionAttribute.Description}" : descriptionAttribute.Description;
                }

                var param = manager[manager.AddParameter(CreateParam(parameterType), name, nickname, description, access)];

                param.Optional = optional;

                if (parameterType.IsEnum && param is Param_Integer integerParam)
                {
                    foreach (var e in Enum.GetValues(parameterType))
                    {
                        integerParam.AddNamedValue(Enum.GetName(parameterType, e), (int)e);
                    }
                }
                else if (parameterType == typeof(Autodesk.Revit.DB.Element) || parameterType.IsSubclassOf(typeof(Autodesk.Revit.DB.Element)))
                {
                    elementFilterClasses.Add(parameterType);
                }
                else if (parameterType == typeof(Autodesk.Revit.DB.Category))
                {
                    elementFilterClasses.Add(typeof(Autodesk.Revit.DB.Element));
                }
            }

            if (elementFilterClasses.Count > 0 && !elementFilterClasses.Contains(typeof(Autodesk.Revit.DB.Element)))
            {
                elementFilter = (elementFilterClasses.Count == 1) ?
                                (DB.ElementFilter) new Autodesk.Revit.DB.ElementClassFilter(elementFilterClasses[0]) :
                                (DB.ElementFilter) new Autodesk.Revit.DB.LogicalOrFilter(elementFilterClasses.Select(x => new Autodesk.Revit.DB.ElementClassFilter(x)).ToArray());
            }
        }
예제 #8
0
        protected override void TrySolveInstance(IGH_DataAccess DA, DB.Document doc)
        {
            var categoryId = default(DB.ElementId);

            DA.GetData("Category", ref categoryId);

            string familyName = null;

            DA.GetData("Family Name", ref familyName);

            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 elementCollector = collector.WherePasses(ElementFilter);

                if (categoryId is object)
                {
                    elementCollector.OfCategoryId(categoryId);
                }

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

                if (TryGetFilterStringParam(DB.BuiltInParameter.SYMBOL_FAMILY_NAME_PARAM, ref familyName, out var familyNameFilter))
                {
                    elementCollector = elementCollector.WherePasses(familyNameFilter);
                }

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

                var elementTypes = elementCollector.Cast <DB.ElementType>();

                if (familyName is object)
                {
                    elementTypes = elementTypes.Where(x => x.FamilyName.IsSymbolNameLike(familyName));
                }

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

                DA.SetDataList("Types", elementTypes.Select(x => new Types.ElementType(x)));
            }
        }
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            var categoryId = default(DB.ElementId);

            DA.GetData("Category", ref categoryId);

            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 elementCollector = collector.WherePasses(ElementFilter);

                if (categoryId is object)
                {
                    elementCollector.OfCategoryId(categoryId);
                }

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

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

                var familiesSet = new HashSet <DB.ElementType>(elementCollector.Cast <DB.ElementType>(), new FamilyNameComparer());

                var families =
                    (
                        name is null ?
                        familiesSet :
                        familiesSet.Where(x => x.FamilyName.IsSymbolNameLike(name))
                    ).ToList();

                DA.SetDataList("Families", families.Select(x => x.FamilyName));
            }
        }
예제 #10
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            DB.Element element = null;
            if (!DA.GetData("Element", ref element))
            {
                return;
            }

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

            var elements = element.GetDependentElements(filter);

            DA.SetDataList("Elements", elements.Where(x => x != element.Id).Select(x => Types.Element.FromElementId(element.Document, x)));
        }
예제 #11
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);
            }
        }
예제 #12
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            if (!Parameters.Document.GetDataOrDefault(this, DA, "Document", out var doc))
            {
                return;
            }

            var elevation = Rhino.Geometry.Interval.Unset;

            DA.GetData("Elevation", ref elevation);

            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 levelsCollector = collector.WherePasses(ElementFilter);

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

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

                if (elevation.IsValid && TryGetFilterDoubleParam(DB.BuiltInParameter.LEVEL_ELEV, elevation.Mid / Revit.ModelUnits, Revit.VertexTolerance + (elevation.Length * 0.5 / Revit.ModelUnits), out var elevationFilter))
                {
                    levelsCollector = levelsCollector.WherePasses(elevationFilter);
                }

                var levels = levelsCollector.Cast <DB.Level>();

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

                DA.SetDataList("Levels", levels);
            }
        }
예제 #13
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            Autodesk.Revit.DB.ElementFilter filter = null;
            if (!DA.GetData("Filter", ref filter))
            {
                return;
            }

            using (var collector = new FilteredElementCollector(Revit.ActiveDBDocument))
            {
                DA.SetDataList
                (
                    "Elements",
                    collector.WhereElementIsNotElementType().
                    //WherePasses(new Autodesk.Revit.DB.ElementClassFilter(typeof(Autodesk.Revit.DB.ParameterElement), true)).
                    WherePasses(filter).
                    Select(x => Types.Element.Make(x))
                );
            }
        }
예제 #14
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            DA.DisableGapLogic();

            Autodesk.Revit.DB.ElementFilter filter = null;
            if (!DA.GetData("Filter", ref filter))
            {
                return;
            }

            using (var collector = new FilteredElementCollector(Revit.ActiveDBDocument))
            {
                DA.SetDataList
                (
                    "Elements",
                    collector.
                    WherePasses(ElementFilter).
                    WherePasses(filter).
                    Select(x => Types.Element.Make(x))
                );
            }
        }
예제 #15
0
        static DB.ElementFilter ElementCategoriesFilter(DB.Document doc, DB.ElementId[] ids)
        {
            var list = new List <DB.ElementFilter>();

            if (ids.Length == 1)
            {
                list.Add(new DB.ElementCategoryFilter(ids[0]));
            }
            else if (ids.Length > 1)
            {
                list.Add(new DB.ElementMulticategoryFilter(ids));
            }

            if (doc.IsFamilyDocument)
            {
                foreach (var id in ids)
                {
                    using (var provider = new DB.ParameterValueProvider(new DB.ElementId(DB.BuiltInParameter.FAMILY_ELEM_SUBCATEGORY)))
                        using (var evaluator = new DB.FilterNumericEquals())
                            using (var rule = new DB.FilterElementIdRule(provider, evaluator, id))
                                list.Add(new DB.ElementParameterFilter(rule));
                }
            }

            if (list.Count == 0)
            {
                var nothing = new DB.ElementFilter[] { new DB.ElementIsElementTypeFilter(true), new DB.ElementIsElementTypeFilter(false) };
                return(new DB.LogicalAndFilter(nothing));
            }
            else if (list.Count == 1)
            {
                return(list[0]);
            }
            else
            {
                return(new DB.LogicalOrFilter(list));
            }
        }
예제 #16
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            Autodesk.Revit.DB.ElementFilter filter = null;
            DA.GetData("Filter", ref filter);

            string familyName = null;

            DA.GetData("FamilyName", ref familyName);

            string name = null;

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

            using (var collector = new FilteredElementCollector(Revit.ActiveDBDocument))
            {
                var elementCollector = collector.WhereElementIsElementType();

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

                var elementTypes = elementCollector.Cast <ElementType>();

                if (familyName != null)
                {
                    elementTypes = elementTypes.Where(x => x.FamilyName == familyName);
                }

                if (name != null)
                {
                    elementTypes = elementTypes.Where(x => x.Name == name);
                }

                DA.SetDataList("ElementTypes", elementTypes.Select(x => new Types.ElementType(x)));
            }
        }
예제 #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);
            }
        }
예제 #18
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            DB.ElementFilter filter = null;
            DA.GetData("Filter", ref filter);

            string familyName = null;

            DA.GetData("FamilyName", ref familyName);

            string name = null;

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

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

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

                var elementTypes = elementCollector.Cast <DB.ElementType>();

                if (familyName is object)
                {
                    elementTypes = elementTypes.Where(x => x.FamilyName.IsSymbolNameLike(familyName));
                }

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

                DA.SetDataList("ElementTypes", elementTypes.Select(x => new Types.ElementType(x)));
            }
        }
예제 #19
0
        protected override void TrySolveInstance(IGH_DataAccess DA, DB.Document doc)
        {
            var elevation = Rhino.Geometry.Interval.Unset;

            DA.GetData("Elevation", ref elevation);

            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 levelsCollector = collector.WherePasses(ElementFilter);

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

                var levels = levelsCollector.Cast <DB.Level>();

                if (elevation.IsValid)
                {
                    levels = levels.Where(x => elevation.IncludesParameter(x.Elevation));
                }

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

                DA.SetDataList("Levels", levels);
            }
        }
예제 #20
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);
            }
        }
예제 #21
0
        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);
            }
        }
        internal static bool TryGetFilterStringParam(DB.BuiltInParameter paramId, ref string pattern, out DB.ElementFilter filter)
        {
            if (pattern is string subPattern)
            {
                var inverted = false;
                var method   = Operator.CompareMethodFromPattern(ref subPattern, ref inverted);
                if (Operator.CompareMethod.Nothing < method && method < Operator.CompareMethod.Wildcard)
                {
                    var evaluator = default(DB.FilterStringRuleEvaluator);
                    switch (method)
                    {
                    case Operator.CompareMethod.Equals: evaluator = new DB.FilterStringEquals(); break;

                    case Operator.CompareMethod.StartsWith: evaluator = new DB.FilterStringBeginsWith(); break;

                    case Operator.CompareMethod.EndsWith: evaluator = new DB.FilterStringEndsWith(); break;

                    case Operator.CompareMethod.Contains: evaluator = new DB.FilterStringContains(); break;
                    }

                    var rule = new DB.FilterStringRule
                               (
                        new DB.ParameterValueProvider(new DB.ElementId(paramId)),
                        evaluator,
                        subPattern,
                        true
                               );

                    filter  = new DB.ElementParameterFilter(rule, inverted);
                    pattern = default;
                    return(true);
                }
            }

            filter = default;
            return(false);
        }
예제 #23
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            var view = default(Types.View);

            if (!DA.GetData("View", ref view) || view?.IsValid != true)
            {
                return;
            }

            var Categories         = new List <Types.Category>();
            var _Categories_       = Params.IndexOfInputParam("Categories");
            var noFilterCategories = Params.Input[_Categories_].DataType == GH_ParamData.@void;

            if (!noFilterCategories)
            {
                DA.GetDataList(_Categories_, Categories);
            }

            var filter = default(DB.ElementFilter);

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

            using (var collector = new DB.FilteredElementCollector(view.Document, view.Id))
            {
                var elementCollector = collector.WherePasses(ElementFilter);

                var ids = Categories.
                          Where(x => x.IsValid && x.Document.Equals(view.Document)).
                          Select(x => x.Id).ToArray();

                if (noFilterCategories)
                {
                    elementCollector = elementCollector.WherePasses(new DB.ElementCategoryFilter(DB.BuiltInCategory.INVALID, true));
                }
                else if (ids.Length == 0)
                {
                    var nothing = new DB.ElementFilter[] { new DB.ElementIsElementTypeFilter(true), new DB.ElementIsElementTypeFilter(false) };
                    elementCollector = elementCollector.WherePasses(new DB.LogicalAndFilter(nothing));
                }
                else if (ids.Length == 1)
                {
                    elementCollector = elementCollector.WherePasses(new DB.ElementCategoryFilter(ids[0]));
                }
                else
                {
                    elementCollector = elementCollector.WherePasses(new DB.ElementMulticategoryFilter(ids));
                }

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

                DA.SetDataList
                (
                    "Elements",
                    elementCollector.
                    Where(x => Types.GraphicalElement.IsValidElement(x)).
                    Select(x => Types.Element.FromElement(x))
                );
            }
        }
예제 #24
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var points = new List <Rhino.Geometry.Point3d>();

            if (!DA.GetDataList("Points", points))
            {
                return;
            }

            var tolerance = 0.0;

            if (!DA.GetData("Tolerance", ref tolerance))
            {
                return;
            }

            var boundingBox = true;

            if (!DA.GetData("BoundingBox", ref boundingBox))
            {
                return;
            }

            var strict = true;

            if (!DA.GetData("Strict", ref strict))
            {
                return;
            }

            var inverted = false;

            if (!DA.GetData("Inverted", ref inverted))
            {
                return;
            }

            var scaleFactor = 1.0 / Revit.ModelUnits;

            var targets = new List <Rhino.Geometry.Box>();

            Autodesk.Revit.DB.ElementFilter filter = null;

            if (boundingBox)
            {
                var pointsBBox = new Rhino.Geometry.BoundingBox(points);
                {
                    var box = new Rhino.Geometry.Box(pointsBBox);
                    box.Inflate(tolerance);
                    targets.Add(box);
                }

                pointsBBox = pointsBBox.ChangeUnits(scaleFactor);
                var outline = new Autodesk.Revit.DB.Outline(pointsBBox.Min.ToHost(), pointsBBox.Max.ToHost());

                if (strict)
                {
                    filter = new Autodesk.Revit.DB.BoundingBoxIsInsideFilter(outline, tolerance * scaleFactor, inverted);
                }
                else
                {
                    filter = new Autodesk.Revit.DB.BoundingBoxIntersectsFilter(outline, tolerance * scaleFactor, inverted);
                }
            }
            else
            {
                var filters = points.Select <Rhino.Geometry.Point3d, Autodesk.Revit.DB.ElementFilter>
                                  (x =>
                {
                    var pointsBBox = new Rhino.Geometry.BoundingBox(x, x);
                    {
                        var box = new Rhino.Geometry.Box(pointsBBox);
                        box.Inflate(tolerance);
                        targets.Add(box);
                    }

                    x = x.ChangeUnits(scaleFactor);

                    if (strict)
                    {
                        var outline = new Autodesk.Revit.DB.Outline(x.ToHost(), x.ToHost());
                        return(new Autodesk.Revit.DB.BoundingBoxIsInsideFilter(outline, tolerance * scaleFactor, inverted));
                    }
                    else
                    {
                        return(new Autodesk.Revit.DB.BoundingBoxContainsPointFilter(x.ToHost(), tolerance * scaleFactor, inverted));
                    }
                });

                var filterList = filters.ToArray();
                filter = filterList.Length == 1 ?
                         filterList[0] :
                         new Autodesk.Revit.DB.LogicalOrFilter(filterList);
            }

            DA.SetData("Filter", filter);
            DA.SetDataList("Target", targets);
        }
        protected static bool TryGetFilterIntegerParam(DB.BuiltInParameter paramId, int pattern, out DB.ElementFilter filter)
        {
            var rule = new DB.FilterIntegerRule
                       (
                new DB.ParameterValueProvider(new DB.ElementId(paramId)),
                new DB.FilterNumericEquals(),
                pattern
                       );

            filter = new DB.ElementParameterFilter(rule, false);
            return(true);
        }
        protected static bool TryGetFilterLengthParam(DB.BuiltInParameter paramId, double pattern, out DB.ElementFilter filter)
        {
            var rule = new DB.FilterDoubleRule
                       (
                new DB.ParameterValueProvider(new DB.ElementId(paramId)),
                new DB.FilterNumericEquals(),
                pattern,
                Revit.VertexTolerance
                       );

            filter = new DB.ElementParameterFilter(rule, false);
            return(true);
        }
예제 #27
0
 /// <summary>
 /// Tests whether a ElementFilter is inverted or not.
 /// </summary>
 /// <param name="filter">A ElementFilter.</param>
 /// <returns>Returns true if inverted, false if not inverted.</returns>
 public static bool FilterIsInverted(revitDB.ElementFilter filter)
 {
     return(filter.Inverted);
 }
예제 #28
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            var classNames = new List <string>();

            if (!DA.GetDataList("Classes", classNames))
            {
                return;
            }

            var filters = new List <DB.ElementFilter>();
            var classes = new HashSet <string>(classNames);

            if (classes.Remove("Autodesk.Revit.DB.Area"))
            {
                filters.Add(new DB.AreaFilter());
            }
            if (classes.Remove("Autodesk.Revit.DB.AreaTag"))
            {
                filters.Add(new DB.AreaTagFilter());
            }
            if (classes.Remove("Autodesk.Revit.DB.Architecture.Room"))
            {
                filters.Add(new DB.Architecture.RoomFilter());
            }
            if (classes.Remove("Autodesk.Revit.DB.Architecture.RoomTag"))
            {
                filters.Add(new DB.Architecture.RoomTagFilter());
            }

            try
            {
                var types = classes.Select(x => Type.GetType($"{x},RevitAPI", true)).ToList();

                if (types.Count > 0)
                {
                    if (types.Count == 1)
                    {
                        filters.Add(new DB.ElementClassFilter(types[0]));
                    }
                    else
                    {
                        filters.Add(new DB.ElementMulticlassFilter(types));
                    }
                }

                if (filters.Count == 0)
                {
                    var nothing = new DB.ElementFilter[] { new DB.ElementIsElementTypeFilter(true), new DB.ElementIsElementTypeFilter(false) };
                    DA.SetData("Filter", new DB.LogicalAndFilter(nothing));
                }
                else if (filters.Count == 1)
                {
                    DA.SetData("Filter", filters[0]);
                }
                else
                {
                    DA.SetData("Filter", new DB.LogicalOrFilter(filters));
                }
            }
            catch (System.TypeLoadException e)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message);
            }
            catch (Autodesk.Revit.Exceptions.ArgumentException e)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message.Replace(". ", $".{Environment.NewLine}"));
            }
        }