Autodesk.Revit.DB.LeaderArrayIterator
是Revit API中的一种对象,用于遍历LeaderArray
对象中的所有线性对象。LeaderArray
对象是一种由多条线构成的虚拟线段,尤其在标记应用中非常常见(如标记用箭头等)。使用LeaderArrayIterator
可以轻松地访问集合的每个元素。
public LeaderArrayIterator(LeaderArray leaderArray)
创建一个新的LeaderArrayIterator
实例,该实例可用于遍历给定的LeaderArray
对象。 该构造函数要求传递一个LeaderArray
对象,用于遍历线性对象集合。
Current
public GeometryObject Current { get; }
获取当前遍历的LeaderArray
对象中的线性对象。返回值为GeometryObject
,需要进行类型转换才能获取具体类型的线性对象。
Dispose
public void Dispose()
释放由LeaderArrayIterator
对象占用的所有资源。建议在使用完LeaderArrayIterator
对象之后手动调用Dispose
方法。
MoveNext
public bool MoveNext()
将迭代器移至集合的下一个元素。如果当前遍历的元素是最后一个元素,则返回false。如果成功移动到下一个元素,则返回true。
以下示例演示如何使用LeaderArrayIterator
迭代并修改给定LeaderArray
对象中的所有线性对象。
// 获取当前活动视图中选中的第一个 LeaderArray 对象
var element = doc.GetElement(uidoc.Selection.GetElementIds().First());
var leaderArray = element.GetGeometryObjectFromReference(uidoc.Selection.PickObject(ObjectType.Element, "请选中 LeaderArray")).GetLeaderArray();
// 使用 LeaderArrayIterator 迭代所有 GeometryObject 对象
using (var iterator = new LeaderArrayIterator(leaderArray))
{
while (iterator.MoveNext())
{
// 获取当前 GeometryObject,并进行类型判断
var geometry = iterator.Current;
if (geometry is Line line)
{
// 修改线段的端点位置
line.StartPoint = new XYZ(0, 0, 0);
line.EndPoint = new XYZ(10, 20, 0);
}
}
}
// 提交事务,并关闭事务文本
t.Commit();
TaskDialog.Show("Succeed", "Successfully modified all the linear objects in the LeaderArray.");
LeaderArrayIterator
对象是一种用于访问 LeaderArray
对象中的所有线性对象的迭代器,因此,该对象的实例化需要传递一个LeaderArray
对象参数。LeaderArrayIterator
对象实现了IDisposable
接口,因此在使用完毕后需要手动释放LeaderArrayIterator
对象占用的资源。