700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > revit二次开发之选择过滤器

revit二次开发之选择过滤器

时间:2022-05-11 21:44:55

相关推荐

revit二次开发之选择过滤器

获取当前视图中,一楼所有的窗

namespace RevitStudy {// 获取一层的所有窗户 [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class GetAllWindowsOnLevelOne : IExternalCommand {public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements) {UIApplication uiApp = commandData.Application; Autodesk.Revit.ApplicationServices.Application app = uiApp.Application; UIDocument uiDoc = uiApp.ActiveUIDocument; Document doc = uiDoc.Document; //构建一层的选择集 FilteredElementCollector collectorLevel = new FilteredElementCollector(doc); ICollection<Element> levels = collectorLevel.OfClass(typeof(Level)).ToElements(); var query = from element in collectorLevel where element.Name == "标高 1" select element;// Linq query List<Element> level1 = query.ToList<Element>(); if(level1.Count < 1) {MessageBox.Show("<标高 1>不存在!"); return Result.Failed; } ElementId levelId = level1[0].Id; ElementLevelFilter level1Filter = new ElementLevelFilter(levelId); //构建窗户的选择集 ElementClassFilter classFilter = new ElementClassFilter(typeof(FamilyInstance)); ElementCategoryFilter catFilter = new ElementCategoryFilter(BuiltInCategory.OST_Windows); LogicalAndFilter windowFilter = new LogicalAndFilter(classFilter, catFilter); // 合并选择集 LogicalAndFilter logicalFilter = new LogicalAndFilter(windowFilter, level1Filter); FilteredElementCollector collectorWindow = new FilteredElementCollector(doc); collectorWindow.WherePasses(logicalFilter); IList<Element> listElemWindow = collectorWindow.ToElements(); string strMessage = string.Format("建筑一层共有{0}个窗户!", listElemWindow.Count); MessageBox.Show(strMessage); return Result.Succeeded; } } }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。