Revit开发中,当使用FilteredElementCollector
类时,如果未对集合器应用任何过滤器就尝试提取或迭代元素,会抛出 Autodesk.Revit.Exceptions.
InvalidOperationException: The collector does not have a filter applied
异常。这是因为FilteredElementCollector
类需要至少一个过滤器来限定它收集的元素范围。
要修复这个问题,你需要确保在创建FilteredElementCollector
对象后立即应用一个过滤器。
以下是示例代码,确保在提取或迭代元素之前正确应用了过滤器:
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Linq;
public void DeleteAllDimensionsInView(UIDocument uidoc)
{
Document doc = uidoc.Document;
View activeView = doc.ActiveView;
// 获取当前视图中的所有尺寸标注元素
FilteredElementCollector collector = new FilteredElementCollector(doc, activeView.Id)
.OfClass(typeof(Dimension));
// 筛选出所有的尺寸标注元素
var dimensions = collector.Cast<Dimension>().ToList();
// 检查是否存在尺寸标注
if (dimensions == null || dimensions.Count == 0)
{
TaskDialog.Show("提示", "当前视图中没有尺寸标注");
return;
}
// 启动事务
using (Transaction trans = new Transaction(doc, "Delete All Dimensions in View"))
{
trans.Start();
// 删除所有的尺寸标注元素
foreach (var dimension in dimensions)
{
doc.Delete(dimension.Id);
}
trans.Commit();
}
TaskDialog.Show("提示", "所有尺寸标注已删除");
}