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;
}
}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
