获取当前视图中,一楼所有的窗
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;
}
}
}