Files
06-Note/Revit-API/ElementFilter.md

222 lines
9.8 KiB
Markdown
Raw Permalink Normal View History

2023-06-20 09:22:53 +08:00
## Filter
### ElementIsElementTypeFilter
- 获得所有ElementType对象的过滤器
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 获得所有ElementType对象的过滤器
ElementIsElementTypeFilter filter = new ElementIsElementTypeFilter();
col.WherePasses(filter);
// 获得名字为幕墙的ElementType 使用的是LINQ表达式
var types = from element in col
where element.Name == "幕墙"
select element;
ElementType type = types.First() as ElementType;
TaskDialog.Show("test", type.Name);
### FilteredElementCollector
- 获得所有OwnerViewId 为传入视图ID的Element
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 获得所有OwnerViewId 为传入视图ID的Element
ElementOwnerViewFilter filter = new ElementOwnerViewFilter(doc.ActiveView.Id);
col.WherePasses(filter);
foreach(Element element in col)
{
TaskDialog.Show("test", element.Name);
}
### ElementIsCurveDrivenFilter
- 获得所有Location 为LocationCurve的Element
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 获得所有Location 为LocationCurve的Element
ElementIsCurveDrivenFilter filter = new ElementIsCurveDrivenFilter();
col.WherePasses(filter);
foreach(Element element in col)
{
TaskDialog.Show("test", element.Name);
}
### ElementStructuralTypeFilter
- 给定枚举参数StructuralType 根据传入的参数获得对应的结构类型Element
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 给定枚举参数StructuralType 根据传入的参数获得对应的结构类型Element
ElementStructuralTypeFilter filter = new ElementStructuralTypeFilter(StructuralType.Column);
col.WherePasses(filter);
foreach(Element element in col)
{
TaskDialog.Show("test", element.Name);
}
### ElementWorksetFilter
- 获得所有该工作集的对象
- Document doc = commandData.Application.ActiveUIDocument.Document;
Selection sel = commandData.Application.ActiveUIDocument.Selection;
FilteredElementCollector col = new FilteredElementCollector(doc);
if (doc.IsWorkshared)
{
// 选择一个Eelment
Reference r = sel.PickObject(ObjectType.Element);
Transaction tr = new Transaction(doc, "test");
tr.Start();
// 创建工作集
Workset workset = Workset.Create(doc, "feast");
// 将选择的Element对象添加到创建的工作集当中
Element element = doc.GetElement(r);
element.get_Parameter(BuiltInParameter.ELEM_PARTITION_PARAM).Set(workset.Id.IntegerValue);
tr.Commit();
// 获得所有该工作集的对象
ElementWorksetFilter filter = new ElementWorksetFilter(workset.Id);
col.WherePasses(filter);
foreach(Element e in col)
{
TaskDialog.Show("test", element.Name);
}
}
else
{
TaskDialog.Show("test", "未开始工作共享");
}
### FamilySymbolFilter
- 该过滤器获得传入Family的所有symbol
- Document doc = commandData.Application.ActiveUIDocument.Document;
Selection sel = commandData.Application.ActiveUIDocument.Selection;
FilteredElementCollector col = new FilteredElementCollector(doc);
col.OfClass(typeof(Family));
// 获得默认的第一个Family作为FamilySymbolFilter的参数该过滤器获得传入Family的所有symbol
FamilySymbolFilter filter = new FamilySymbolFilter(col.FirstElementId());
foreach(Element element in col)
{
TaskDialog.Show("test", element.Name);
}
### ExclusionFilter
- 传入参数为ElementID的容器过滤器会选择除了传入的ElementId以外的所有Element
- Document doc = commandData.Application.ActiveUIDocument.Document;
Selection sel = commandData.Application.ActiveUIDocument.Selection;
Reference r = sel.PickObject(ObjectType.Element);
FilteredElementCollector col = new FilteredElementCollector(doc);
// 传入参数为ElementID的容器过滤器会选择除了传入的ElementId以外的所有Element
ExclusionFilter filter = new ExclusionFilter(new List<ElementId>() { doc.GetElement(r).Id});
//因为Element很多我加了个Class过滤器只输出FamilyInstance作为对象所以选择时也请选择FamilyInstance
col.WherePasses(filter).OfClass(typeof(FamilyInstance));
foreach(Element e in col)
{
TaskDialog.Show("test", e.Name);
}
### BoundingBoxIntersectsFilter
- 传入参数为OutLine, 获取BoundingBox与给定轮廓相交的Element
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 过滤器功能为获取OutLine中的Element所以手动在OutLine中创建一段风管
Transaction tr = new Transaction(doc, "test");
tr.Start();
doc.Create.NewDuct(new XYZ(5, 0, 5), new XYZ(5, 5, 5), doc.GetElement(doc.GetDefaultElementTypeId(ElementTypeGroup.DuctType)) as DuctType);
tr.Commit();
// 传入参数为OutLine, 获取BoundingBox与给定轮廓相交的Element
// 每一个Element都会有一个BoundingBox可通过LookUp查看
BoundingBoxIntersectsFilter filter = new BoundingBoxIntersectsFilter(new Outline(new XYZ(0, 0, 0), new XYZ(10, 10, 10)));
col.WherePasses(filter);
foreach(Element e in col)
{
TaskDialog.Show("test", e.Name);
}
### BoundingBoxIsInsideFilter
- 传入参数为OutLine, 获取BoundingBox在给定轮廓内的Element
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 过滤器功能为获取OutLine中的Element所以手动在OutLine中创建一段风管
Transaction tr = new Transaction(doc, "test");
tr.Start();
doc.Create.NewDuct(new XYZ(5, 0, 5), new XYZ(5, 5, 5), doc.GetElement(doc.GetDefaultElementTypeId(ElementTypeGroup.DuctType)) as DuctType);
tr.Commit();
// 传入参数为OutLine, 获取BoundingBox在给定轮廓内的Element
// 每一个Element都会有一个BoundingBox可通过LookUp查看
BoundingBoxIsInsideFilter filter = new BoundingBoxIsInsideFilter(new Outline(new XYZ(0, 0, 0), new XYZ(10, 10, 10)));
col.WherePasses(filter);
foreach(Element e in col)
{
TaskDialog.Show("test", e.Name);
}
### BoundingBoxContainsPointFilter
- 传入参数为XYZ, 获取BoundingBox包含给定XYZ的元素
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 过滤器功能为获取BoundingBox包含给定XYZ的元素所以手动在XYZ上创建一段风管
Transaction tr = new Transaction(doc, "test");
tr.Start();
doc.Create.NewDuct(new XYZ(5, 0, 5), new XYZ(5, 5, 5), doc.GetElement(doc.GetDefaultElementTypeId(ElementTypeGroup.DuctType)) as DuctType);
tr.Commit();
// 传入参数为XYZ, 获取BoundingBox包含给定XYZ的元素
// 每一个Element都会有一个BoundingBox可通过LookUp查看
BoundingBoxContainsPointFilter filter = new BoundingBoxContainsPointFilter(new XYZ(5,5,5));
col.WherePasses(filter);
foreach(Element e in col)
{
TaskDialog.Show("test", e.Name);
}
### FamilyInstanceFilter
- 获得所有给定FamilySymbol的FamilyInstance, 例子中的id为FamilySymbol的ID
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 获得所有给定FamilySymbol的FamilyInstance, 例子中的id为FamilySymbol的ID
int id = 2480730;
FamilySymbol symbol = doc.GetElement(new ElementId(id)) as FamilySymbol;
FamilyInstanceFilter filter = new FamilyInstanceFilter(doc, symbol.Id);
col.WherePasses(filter);
foreach(Element e in col)
{
TaskDialog.Show("test", e.Name);
}
### ElementLevelFilter
- 获得所有LevelId为指定Id的Element
- Document doc = commandData.Application.ActiveUIDocument.Document;
FilteredElementCollector col = new FilteredElementCollector(doc);
// 获得所有LevelId为指定Id的Element
ElementLevelFilter filter = new ElementLevelFilter(doc.ActiveView.GenLevel.Id);
col.WherePasses(filter);
foreach(Element element in col)
{
TaskDialog.Show("test", element.Name);
}
### ElementParameterFilter
- 根据指定的属性值过滤Element, API文档有例子
### *******