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)) ); } }
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)); } } }
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); } }
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)) ); } } }
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); } }
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)); } }
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()); } }
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)); } }
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))); }
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); } }
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); } }
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)) ); } }
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)) ); } }
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)); } }
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))); } }
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); } }
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))); } }
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); } }
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; } 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); }
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)) ); } }
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); }
/// <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); }
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}")); } }