public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uiDoc = commandData.Application.ActiveUIDocument; Document doc = uiDoc.Document; FilteredElementCollector collector = new FilteredElementCollector(doc);//创建元素收集器 collector = collector.OfCategory(BuiltInCategory.OST_Windows).OfClass(typeof(FamilySymbol));//QuickFilter过滤所有的墙 //FamilyInsetanceFilter找406*610mm的窗 var query = from Element in collector where Element.Name == "0406 x 0610mm" select Element; List <Autodesk.Revit.DB.Element> famSyms = query.ToList <Autodesk.Revit.DB.Element>(); ElementId symbolId = famSyms[0].Id; FamilyInstanceFilter fiFilter = new FamilyInstanceFilter(doc, symbolId); FilteredElementCollector c1 = new FilteredElementCollector(doc); ICollection <Element> found = c1.WherePasses(fiFilter).ToElements(); //LogicalOrFilter计算门窗总和 ElementCategoryFilter doorFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors); ElementCategoryFilter windowFilter = new ElementCategoryFilter(BuiltInCategory.OST_Windows); LogicalOrFilter lFilter = new LogicalOrFilter(doorFilter, windowFilter); FilteredElementCollector c3 = new FilteredElementCollector(doc); ICollection <Element> fds = c3.OfClass(typeof(FamilyInstance)).WherePasses(lFilter).ToElements(); //taskdialog输出结果 TaskDialog.Show("查找", "已找到型号为“406*610mm的窗:”" + found.Count.ToString() + "个" + "\n" + "门窗个数总和为:" + fds.Count.ToString()); return(Result.Succeeded); }
private void StoreDataOfFamilySymbol(FamilySymbol familySymbol) { try { FilteredElementCollector collector = new FilteredElementCollector(doc); FamilyInstanceFilter instFilter = new FamilyInstanceFilter(doc, familySymbol.Id); List <Element> instances = collector.WherePasses(instFilter).ToList <Element>(); if (instances.Count > 0) { foreach (Element instance in instances) { FamilyInstance fi = (FamilyInstance)instance; InstanceProperties ip = new InstanceProperties(fi); AddParameterInfo(ip.InstParameters); if (instanceDictionary.ContainsKey(ip.CategoryName)) { instanceDictionary[ip.CategoryName].Add(ip.InstanceID, ip); } else { instanceDictionary.Add(ip.CategoryName, new Dictionary <int, InstanceProperties>()); instanceDictionary[ip.CategoryName].Add(ip.InstanceID, ip); } } } } catch (Exception ex) { MessageBox.Show("Failed to collect selected Element Types: " + familySymbol.Name + " \n" + ex.Message, "ElementDataCollector Error:", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
private bool FindLocatorFamily() { var found = false; try { var collector = new FilteredElementCollector(m_doc); var symbols = collector.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_GenericModel).WhereElementIsElementType().ToElements().Cast <FamilySymbol>().ToList(); var symbolFound = from symbol in symbols where symbol.Family.Name == locationFamilyName select symbol; if (symbolFound.Any()) { var familySymbols = symbolFound.ToList(); var filters = new List <ElementFilter>(); foreach (var symbol in familySymbols) { var filter = new FamilyInstanceFilter(m_doc, symbol.Id); filters.Add(filter); } var orFilter = new LogicalOrFilter(filters); collector = new FilteredElementCollector(m_doc); instanceIds = collector.OfClass(typeof(FamilyInstance)).WherePasses(orFilter).ToElementIds().ToList(); if (instanceIds.Count > 0) { found = true; } } } catch (Exception ex) { var message = ex.Message; } return(found); }
protected internal static IList <FamilyInstance> GetProjectZones(Document doc) { FamilySymbol revitZoneSymbol = GetRevitZoneSymbol(doc); FamilyInstanceFilter val = new FamilyInstanceFilter(doc, revitZoneSymbol.get_Id()); FilteredElementCollector val2 = new FilteredElementCollector(doc).WhereElementIsNotElementType().OfCategory(-2000151).WherePasses(val); return(val2.ToElements().Cast <FamilyInstance>().ToList()); }
private static Dictionary <int /*paramId*/, ParameterInfo> GetComponentFamilyParameters(Document doc, Category category, List <ElementId> instanceIds) { Dictionary <int, ParameterInfo> paramDictionary = new Dictionary <int, ParameterInfo>(); try { FilteredElementCollector collector = new FilteredElementCollector(doc); List <FamilySymbol> familySymbols = collector.OfCategoryId(category.Id).OfClass(typeof(FamilySymbol)).ToElements().Cast <FamilySymbol>().ToList(); List <string> familyNames = new List <string>(); foreach (FamilySymbol symbol in familySymbols) { string familyName = symbol.Family.Name; if (string.IsNullOrEmpty(familyName)) { continue; } if (familyNames.Contains(familyName)) { continue; } FamilyInstanceFilter instanceFilter = new FamilyInstanceFilter(doc, symbol.Id); collector = new FilteredElementCollector(doc, instanceIds); List <FamilyInstance> instances = collector.WherePasses(instanceFilter).ToElements().Cast <FamilyInstance>().ToList(); if (instances.Count > 0) { FamilyInstance instance = instances.First(); foreach (Parameter param in instance.Parameters) { string paramName = param.Definition.Name; if (!paramDictionary.ContainsKey(param.Id.IntegerValue) && !paramName.Contains("Extensions.")) { ParameterInfo paramInfo = new ParameterInfo(param, true); paramDictionary.Add(paramInfo.ParamId.IntegerValue, paramInfo); } } foreach (Parameter param in symbol.Parameters) { string paramName = param.Definition.Name; if (!paramDictionary.ContainsKey(param.Id.IntegerValue) && !paramName.Contains("Extensions.")) { ParameterInfo paramInfo = new ParameterInfo(param, false); paramDictionary.Add(paramInfo.ParamId.IntegerValue, paramInfo); } } familyNames.Add(familyName); } } } catch (Exception ex) { MessageBox.Show("Failed to get family parameters.\n" + ex.Message, "Get Family Parameters", MessageBoxButton.OK, MessageBoxImage.Warning); } return(paramDictionary); }
/// <summary> /// 通过族类型id获得该族类型的实例 /// </summary> /// <param name="doc"></param> /// <param name="FamilySymbolId"></param> /// <returns></returns> static public ICollection <ElementId> getFamilyInsancesByFamilySymbolId(Document doc, ElementId familySymbolId) { FamilyInstanceFilter familyInstanceFilter = new FamilyInstanceFilter(doc, familySymbolId); FilteredElementCollector filteredElements = new FilteredElementCollector(doc); filteredElements = filteredElements.WherePasses(familyInstanceFilter); ICollection <ElementId> familyInsanceIds = filteredElements.ToElementIds(); return(familyInsanceIds); }
/// <summary> 返回项目文档中某族类型FamilySymbol的所有实例 </summary> /// <param name="FamilySymbol"></param> public static FilteredElementCollector Instances(this FamilySymbol FamilySymbol) { Document doc = FamilySymbol.Document; ElementId FamilySymbolId = FamilySymbol.Id; FilteredElementCollector InsancesColl = new FilteredElementCollector(doc); FamilyInstanceFilter FIFilter = new FamilyInstanceFilter(doc, FamilySymbolId); InsancesColl.WherePasses(FIFilter); return(InsancesColl); }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var uiApp = commandData.Application; var uiDoc = uiApp.ActiveUIDocument; var app = uiApp.Application; var doc = uiDoc.Document; // Start code here // Lay nhung doi tuong dang chon try { var refObject = uiDoc.Selection.PickObject(ObjectType.Element); if (refObject != null) { var elementId = refObject.ElementId; var element = doc.GetElement(elementId); var elementID = element.Id; var elementTypeId = element.GetTypeId(); var elementType = element.GetType(); var revitElementType = doc.GetElement(elementTypeId) as ElementType; var typeId = revitElementType.Id; var categoryName = element.Category.Name; if (categoryName == "Doors") { var familyInstanceFilter = new FamilyInstanceFilter(doc, elementId); //var familyInstanceFilter = new FamilyInstanceFilter(doc, elementTypeId); var collector = new FilteredElementCollector(doc); var doors = collector.WherePasses(familyInstanceFilter).ToElements(); TaskDialog.Show("Count Similar Doors", doors.Count().ToString()); return(Result.Succeeded); } TaskDialog.Show("Warning", "Please select a Doors"); return(Result.Failed); } } catch (Exception e) { message = e.Message; return(Result.Failed); } return(Result.Succeeded); }
/// <summary> /// Returns number of placed Family Instances of given Family. /// </summary> /// <param name="f">Family.</param> /// <returns></returns> private static int CountFamilyInstances(Family f) { var count = 0; var famSymbolIds = f.GetFamilySymbolIds(); if (famSymbolIds.Count == 0) { count = 0; } else { foreach (var id in famSymbolIds) { var famSymbol = (FamilySymbol)f.Document.GetElement(id); var filter = new FamilyInstanceFilter(Doc, famSymbol.Id); count = count + new FilteredElementCollector(Doc).WherePasses(filter).GetElementCount(); } } return(count); }
protected virtual void ExtractObjects(MEPComponents mepComp) { MEPId mepId = null; int num = 0; try { mepId = MEPHelper.GetId(mepComp); num = mepId.builtInCategories.Count; } catch { } for (int i = 0; i < num; ++i) { BuiltInCategory bic = mepId.builtInCategories[i]; ElementType et = mepId.elementTypes[i]; FilteredElementCollector coll = new FilteredElementCollector(_doc); FamilyInstanceFilter fif = new FamilyInstanceFilter(_doc, et.Id); _equips.AddRange(coll.OfCategory(bic).WherePasses(fif).Cast <FamilyInstance>().ToList()); } }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { try { StringBuilder sb = new StringBuilder(); Document document = commandData.Application.ActiveUIDocument.Document; //类型过滤器 快 ElementClassFilter classFilter = new ElementClassFilter(typeof(FamilyInstance)); //族实例过滤器 慢 FamilyInstanceFilter familyInstanceFilter = new FamilyInstanceFilter(document, new ElementId(1)); //内建类型过滤 ElementCategoryFilter categoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors); //逻辑过滤器,组合前两者过滤 LogicalAndFilter logicalAndFilter = new LogicalAndFilter(classFilter, categoryFilter); //过滤处理 FilteredElementCollector collector = new FilteredElementCollector(document); ICollection <ElementId> doorIds = collector.WherePasses(logicalAndFilter).ToElementIds(); foreach (var elementId in doorIds) { var element = document.GetElement(elementId); sb.AppendLine($"{element.Name}"); } //简写 var classFilteredCollector = new FilteredElementCollector(document) .OfClass(typeof(FamilyInstance)); var categoryFilteredCollector = new FilteredElementCollector(document) .OfCategory(BuiltInCategory.OST_Doors); foreach (Category category in document.Settings.Categories) { var categoryIdFilteredCollector = new FilteredElementCollector(document) .OfCategoryId(category.Id); } TaskDialog.Show("vl selected elements", "所有的实例门如下:" + sb.ToString()); } catch (Exception ex) { message = ex.Message; return(Result.Failed); } return(Result.Succeeded); }
/// <summary> /// Находит все экземпляры указанного типа /// </summary> /// <param name="doc"></param> /// <param name="typeName"></param> /// <returns></returns> public static List <Element> GetAllFamilyTypeInstances(Document doc, string typeName) { // Находит все типоразмеры семейств в текущем документе FilteredElementCollector collector = new FilteredElementCollector(doc); collector = collector.OfClass(typeof(FamilySymbol)); // Находит среди всех типоразмеров типоразмеры с заданным именем "typeName" и определяет Id первого из списка var query = from element in collector where element.Name == typeName select element; List <Element> famSyms = query.ToList <Element>(); ElementId symbolId = famSyms[0].Id; // Создает FamilyInstance фильтр по найденному FamilySymbol Id FamilyInstanceFilter filter = new FamilyInstanceFilter(doc, symbolId); // Применяет фильтр к элементам из текущего документа collector = new FilteredElementCollector(doc); List <Element> familyInstances = collector.WherePasses(filter).ToElements().ToList(); return(familyInstances); }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { //FilterElementCollect的使用 UIDocument uiDoc = commandData.Application.ActiveUIDocument; Document doc = uiDoc.Document; FilteredElementCollector collector = new FilteredElementCollector(doc); //QuickFilter过滤所有窗 collector = collector.OfCategory(BuiltInCategory.OST_Windows).OfClass(typeof(FamilySymbol)); //FamilyInstanceFilter找1200*1500mm的窗 IEnumerable <Element> query = from element in collector where element.Name == "1200*1500mm" select element; List <Element> famSyms = query.ToList <Element>(); ElementId symbolId = famSyms[1].Id; FamilyInstanceFilter fiFilter = new FamilyInstanceFilter(doc, symbolId); FilteredElementCollector c1 = new FilteredElementCollector(doc); ICollection <Element> found = c1.WherePasses(fiFilter).ToElements(); //ElementParameterFilter找到标记小于五的窗 ElementId ruleValId = new ElementId(-10010203); FilterRule fr = ParameterFilterRuleFactory.CreateLessRule(ruleValId, "5", true); ElementParameterFilter pFilter = new ElementParameterFilter(fr); FilteredElementCollector c2 = new FilteredElementCollector(doc); c2 = c2.OfCategory(BuiltInCategory.OST_Windows).WherePasses(fiFilter).WherePasses(pFilter); //LogicalOrFilter计算门窗总和 ElementCategoryFilter doorFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors); ElementCategoryFilter windowFilter = new ElementCategoryFilter(BuiltInCategory.OST_Windows); LogicalOrFilter lFilter = new LogicalOrFilter(doorFilter, windowFilter); FilteredElementCollector c3 = new FilteredElementCollector(doc); ICollection <Element> fds = c3.OfClass(typeof(FamilyInstance)).WherePasses(lFilter).ToElements(); //taskdialog输出结果 TaskDialog.Show("查找", "已找到型号为“1200*1500mm”的推拉窗" + found.Count.ToString() + "个\n其中标记小于5的有" + c2.ToList().Count.ToString() + "个\n门窗总和为:" + fds.Count.ToString()); return(Result.Succeeded); }
/// <summary> 返回项目文档中某族Family的所有实例 </summary> /// <param name="Category">此族所属的 BuiltInCategory 类别,如果不确定,就不填。</param> /// <param name="Family"></param> public static FilteredElementCollector Instances(this Family Family, BuiltInCategory Category = BuiltInCategory.INVALID) { Document doc = Family.Document; List <ElementId> SymbolsId = Family.GetFamilySymbolIds().ToList(); FilteredElementCollector Collector1 = new FilteredElementCollector(doc); if (SymbolsId.Count > 0) { // 创建过滤器 FamilyInstanceFilter Filter = new FamilyInstanceFilter(doc, SymbolsId[0]); // 执行过滤条件 if (Category != BuiltInCategory.INVALID) { Collector1 = Collector1.OfCategory(Category); } Collector1.WherePasses(Filter); } // 当族类型多于一个时,才进行相交 if (SymbolsId.Count > 1) { for (int index = 1; index <= SymbolsId.Count - 1; index++) { // 创建过滤器 FamilyInstanceFilter Filter = new FamilyInstanceFilter(doc, SymbolsId[index]); FilteredElementCollector Collector2 = new FilteredElementCollector(doc); // 执行过滤条件 if (Category != BuiltInCategory.INVALID) { Collector2 = Collector2.OfCategory(Category); } Collector2.WherePasses(Filter); // 将此FamilySymbol的实例添加到集合中 Collector1.UnionWith(Collector2); } } return(Collector1); }
private void AssertTypeAndCountWhenSelectingFromDropDown(int selectedIndex) { var slider = ViewModel.Model.AllNodes.FirstOrDefault(x => x is IntegerSlider) as IntegerSlider; var typeSelector = ViewModel.Model.AllNodes.FirstOrDefault(x => x is AllElementsInBuiltInCategory) as RevitDropDownBase; typeSelector.SelectedIndex = selectedIndex; RunCurrentModel(); var dynamoSymbol = typeSelector.GetValue(0).Data as FamilySymbol; var revitSymbol = dynamoSymbol.InternalElement; Console.WriteLine("Family type is now set to {0}", revitSymbol); var symbolFilter = new FamilyInstanceFilter( DocumentManager.Instance.CurrentDBDocument, revitSymbol.Id); var fec = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument); fec.WherePasses(symbolFilter); Assert.AreEqual(fec.ToElements().Count, slider.Value); }
private void AssertTypeAndCountWhenSelectingFromDropDown(int selectedIndex) { var slider = ViewModel.Model.CurrentWorkspace.Nodes.FirstOrDefault(x => x is IntegerSlider) as IntegerSlider; var typeSelector = ViewModel.Model.CurrentWorkspace.Nodes.FirstOrDefault(x => x is AllElementsInBuiltInCategory) as RevitDropDownBase; typeSelector.SelectedIndex = selectedIndex; RunCurrentModel(); var dynamoSymbol = typeSelector.GetValue(0, ViewModel.Model.EngineController).Data as FamilySymbol; var revitSymbol = dynamoSymbol.InternalElement; Console.WriteLine("Family type is now set to {0}", revitSymbol); var symbolFilter = new FamilyInstanceFilter( DocumentManager.Instance.CurrentDBDocument, revitSymbol.Id); var fec = new FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument); fec.WherePasses(symbolFilter); Assert.AreEqual(fec.ToElements().Count, slider.Value); }
private Dictionary <string, ParameterProperties> GetParameterProperties(Category category) { Dictionary <string, ParameterProperties> paramDictionary = new Dictionary <string, ParameterProperties>(); try { Element firstElement = null; ElementType firstTypeElement = null; FilteredElementCollector collector = new FilteredElementCollector(m_doc); List <Element> elements = collector.OfCategoryId(category.Id).WhereElementIsNotElementType().ToElements().ToList(); if (elements.Count > 0) { firstElement = elements.First(); firstTypeElement = m_doc.GetElement(firstElement.GetTypeId()) as ElementType; } else { return(paramDictionary); } List <ElementId> categoryIds = new List <ElementId>(); categoryIds.Add(category.Id); //add builtIn Parameter ICollection <ElementId> supportedParams = ParameterFilterUtilities.GetFilterableParametersInCommon(m_doc, categoryIds); foreach (ElementId eId in supportedParams) { if (eId.IntegerValue < 0) { BuiltInParameter bltParam = (BuiltInParameter)eId.IntegerValue; string paramName = LabelUtils.GetLabelFor(bltParam); if (paramName.Contains("Extensions.")) { continue; } ParameterProperties pp = null; Parameter param = firstElement.LookupParameter(paramName); if (null != param) { pp = new ParameterProperties(param); pp.IsInstance = true; pp.BltParameter = bltParam; if (!paramDictionary.ContainsKey(pp.ParameterName)) { paramDictionary.Add(pp.ParameterName, pp); } } else if (null != firstTypeElement) { param = firstTypeElement.LookupParameter(paramName); if (null != param) { pp = new ParameterProperties(param); pp.IsInstance = false; pp.BltParameter = bltParam; if (!paramDictionary.ContainsKey(pp.ParameterName)) { paramDictionary.Add(pp.ParameterName, pp); } } } } } //add project parameter if (projectParameters.ContainsKey(category.Name)) { Dictionary <string, ParameterProperties> dictionary = projectParameters[category.Name]; foreach (string paramName in dictionary.Keys) { if (paramName.Contains("Extensions.")) { continue; } ParameterProperties property = dictionary[paramName]; if (property.IsInstance && null != firstTypeElement) { Parameter param = firstElement.LookupParameter(property.ParameterName); if (null != param) { ParameterProperties pp = new ParameterProperties(param); pp.IsInstance = true; if (!paramDictionary.ContainsKey(pp.ParameterName)) { paramDictionary.Add(pp.ParameterName, pp); } } } else if (null != firstTypeElement) { Parameter param = firstTypeElement.LookupParameter(property.ParameterName); if (null != param) { ParameterProperties pp = new ParameterProperties(param); pp.IsInstance = false; if (!paramDictionary.ContainsKey(pp.ParameterName)) { paramDictionary.Add(pp.ParameterName, pp); } } } } } //add family parameter //sorting collector = new FilteredElementCollector(m_doc); ICollection <ElementId> familyInstanceIds = collector.OfCategoryId(category.Id).OfClass(typeof(FamilyInstance)).ToElementIds(); collector = new FilteredElementCollector(m_doc); List <FamilySymbol> familySymbols = collector.OfCategoryId(category.Id).OfClass(typeof(FamilySymbol)).ToElements().Cast <FamilySymbol>().ToList(); List <string> familyNames = new List <string>(); if (familyInstanceIds.Count > 0) { foreach (FamilySymbol symbol in familySymbols) { string familyName = symbol.Family.Name; if (!string.IsNullOrEmpty(familyName)) { if (!familyNames.Contains(familyName)) { FamilyInstanceFilter instanceFilter = new FamilyInstanceFilter(m_doc, symbol.Id); collector = new FilteredElementCollector(m_doc, familyInstanceIds); List <Element> familyInstances = collector.WherePasses(instanceFilter).ToElements().ToList(); if (familyInstances.Count > 0) { FamilyInstance firstFamilyInstance = familyInstances.First() as FamilyInstance; foreach (Parameter param in firstFamilyInstance.Parameters) { if (param.Id.IntegerValue > 0) { ParameterProperties pp = new ParameterProperties(param); pp.IsInstance = true; if (!paramDictionary.ContainsKey(pp.ParameterName) && !pp.ParameterName.Contains("Extensions.")) { paramDictionary.Add(pp.ParameterName, pp); } } } FamilySymbol firstFamilySymbol = firstFamilyInstance.Symbol; foreach (Parameter param in firstFamilySymbol.Parameters) { if (param.Id.IntegerValue > 0) { ParameterProperties pp = new ParameterProperties(param); pp.IsInstance = false; if (!paramDictionary.ContainsKey(pp.ParameterName) && !pp.ParameterName.Contains("Extensions.")) { paramDictionary.Add(pp.ParameterName, pp); } } } } familyNames.Add(familyName); } } } } } catch (Exception ex) { MessageBox.Show("Failed to get parameter properties.\n" + ex.Message, "Get Parameter Properties", MessageBoxButton.OK, MessageBoxImage.Warning); } return(paramDictionary); }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uidoc.Document; FamilySymbol[] symbols = CmdGeomVertices.GetFamilySymbols( doc, false); if (null == symbols) { TaskDialog.Show("Setout Points", "Setout point family not loaded, " + "so no setout points present."); return(Result.Succeeded); } // Filter for key setout points. // They are family instances with the generic // model category whose Key_Setout_Point // shared parameter is set to true. // To get the key points only, we initially set // up a parameter filter. For that, we need a // parameter definition to set up the parameter // filter. // Later, we decided to switch type when we // promote a setout point to a major or key // point, so there is no need to filter for // a parameter value at all; we can just // filter for the major setout point type // instead. //FamilySymbolFilter symbolFilter // = new FamilySymbolFilter( symbol.Family.Id ); //Element e // = new FilteredElementCollector( doc ) // .WherePasses( symbolFilter ) // .FirstElement(); //LogicalOrFilter f = new LogicalOrFilter( // new FamilyInstanceFilter( doc, symbols[0].Id ), // new FamilyInstanceFilter( doc, symbols[1].Id ) ); FamilyInstanceFilter instanceFilter = new FamilyInstanceFilter(doc, symbols[0].Id); FilteredElementCollector col = new FilteredElementCollector(doc) .OfCategory(BuiltInCategory.OST_GenericModel) .OfClass(typeof(FamilyInstance)) .WherePasses(instanceFilter); //if( null == e ) //{ // TaskDialog.Show( "Setout Points", // "No key setout point found. " ); // return Result.Succeeded; //} //Parameter shared_parameter // = e.get_Parameter( Command._parameter_key ); //ParameterValueProvider provider // = new ParameterValueProvider( // shared_parameter.Id ); //FilterNumericRuleEvaluator evaluator // = new FilterNumericEquals(); //FilterRule rule // = new FilterIntegerRule( // provider, evaluator, 1 ); //ElementFilter paramFilter // = new ElementParameterFilter( rule ); //FilteredElementCollector col // = new FilteredElementCollector( doc ) // .WherePasses( symbolFilter ) // .WherePasses( paramFilter ); Guid guid = CmdGeomVertices._parameter_point_nr; using (Transaction tx = new Transaction(doc)) { tx.Start("Renumber Setout Points"); int i = 0; string s; foreach (Element p in col) { s = _sop_prefix + (++i).ToString(); p.get_Parameter(guid).Set(s); } tx.Commit(); } return(Result.Succeeded); }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elementset) { UIDocument uiDoc = commandData.Application.ActiveUIDocument; Document doc = commandData.Application.ActiveUIDocument.Document; #region 获取项目内的标高 FilteredElementCollector levelcollector = new FilteredElementCollector(doc); ElementCategoryFilter levelfilter = new ElementCategoryFilter(BuiltInCategory.OST_Levels); levelcollector.WhereElementIsNotElementType(); levelcollector.WherePasses(levelfilter); List <Level> levellist = levelcollector.Select(e => e as Level).ToList(); #endregion #region 窗口 MyWindow mywindow = new MyWindow(); List <System.Windows.Controls.CheckBox> checkboxs = new List <System.Windows.Controls.CheckBox>(); foreach (Level level in levellist) { System.Windows.Controls.CheckBox checkbox = new System.Windows.Controls.CheckBox(); checkbox.Content = level.Name; checkbox.IsChecked = true; checkboxs.Add(checkbox); } mywindow.listbox.ItemsSource = checkboxs; if (mywindow.ShowDialog() == true) { List <string> uncheckeds = new List <string>(); foreach (System.Windows.Controls.CheckBox whoisunchecked in mywindow.listbox.ItemsSource) { if (whoisunchecked.IsChecked != true) { uncheckeds.Add(whoisunchecked.Content as string); } } for (int i = levellist.Count - 1; i >= 0; i--) { foreach (string str in uncheckeds) { if (levellist[i].Name == str) { levellist.Remove(levellist[i]); break; } } } } #endregion #region 根据类别和类型和标高处理框的图元(保留一个filters) List <ElementId> elementids = uiDoc.Selection.GetElementIds().ToList(); List <ElementFilter> filters = new List <ElementFilter>(); ElementCategoryFilter filter2 = new ElementCategoryFilter(BuiltInCategory.OST_Doors); ElementCategoryFilter filter3 = new ElementCategoryFilter(BuiltInCategory.OST_Windows); ElementCategoryFilter filter4 = new ElementCategoryFilter(BuiltInCategory.OST_GenericModel); ElementCategoryFilter filter5 = new ElementCategoryFilter(BuiltInCategory.OST_Furniture); ElementCategoryFilter filter6 = new ElementCategoryFilter(BuiltInCategory.OST_SpecialityEquipment); filters.Add(filter2); filters.Add(filter3); filters.Add(filter4); filters.Add(filter5); filters.Add(filter6); LogicalOrFilter orfilter = new LogicalOrFilter(filters); List <ElementFilter> filters2 = new List <ElementFilter>(); foreach (Level level in levellist) { ElementLevelFilter filterlevel = new ElementLevelFilter(level.Id); filters2.Add(filterlevel); } LogicalOrFilter orfilter2 = new LogicalOrFilter(filters2); #endregion foreach (ElementId elementid in elementids) { //使用过滤器过滤不需要的图元 FilteredElementCollector collector = new FilteredElementCollector(doc); collector.WherePasses(orfilter); collector.WherePasses(orfilter2); collector.WhereElementIsNotElementType(); //去掉类型,仅保留模型图元. Element element = doc.GetElement(elementid); //先判断选中的图元是不是在 常规模型\家具\窗\门\专用设备 五个类别内. Category category = element.Category; BuiltInCategory builtincategory = (BuiltInCategory)category.Id.IntegerValue; if ((builtincategory != BuiltInCategory.OST_Furniture) && (builtincategory != BuiltInCategory.OST_GenericModel) && (builtincategory != BuiltInCategory.OST_Windows) && (builtincategory != BuiltInCategory.OST_Doors) && (builtincategory != BuiltInCategory.OST_SpecialityEquipment)) { continue; } //再根据类型进行筛选. ElementId typeid = element.GetTypeId(); FamilyInstanceFilter filter7 = new FamilyInstanceFilter(doc, typeid); collector.WherePasses(filter7); //TaskDialog.Show("revit", Convert.ToString(collector.Count())); //根据XY相同 Z不同进行判断是否删除 Location location = element.Location; LocationPoint locationpoint = location as LocationPoint; List <ElementId> ids = new List <ElementId>(); XYZ point = locationpoint.Point; foreach (Element ele in collector) { if (ele.Location as LocationPoint == null) { continue; } XYZ point2 = (ele.Location as LocationPoint).Point; if (point.X == point2.X && point.Y == point2.Y && point.Z != point2.Z) { ids.Add(ele.Id); } } using (Transaction transaction = new Transaction(doc)) //删除重复图元 { transaction.Start("GroupLike"); doc.Delete(ids); transaction.Commit(); } } TaskDialog.Show("revit", "已删除处于相同XY坐标不同Z坐标的同类型图元."); return(Result.Succeeded); }