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