Autodesk.Revit.DB.RepeatingReferenceSource
是Revit API中的一个类,用于表示重复元素的集合,比如阵列、轨迹绘制的元素等。
重复元素集合可以用于一次性定义多个相同属性的元素,减少了用户的工作量,提高了工作效率。
References
:重复元素的参考(Reference
)集合。Count
:重复元素的数量。GetTransform(int index)
:获取指定索引处重复元素的变换矩阵。GetReference(int index)
:获取指定索引处重复元素的参考(Reference
)。Equals(object obj)
:判断两个 RepeatingReferenceSource
是否相等。下面是一个使用 Autodesk.Revit.DB.RepeatingReferenceSource
的示例代码:
// 定义一个圆形阵列
int count = 5;
XYZ center = new XYZ(0, 0, 0);
XYZ normal = new XYZ(0, 0, 1);
XYZ radiusVec = new XYZ(1, 0, 0);
ElementId typeId = new ElementId(BuiltInCategory.OST_GenericModel);
FamilyInstance fi = null;
using (Transaction txn = new Transaction(doc))
{
txn.Start("Create Circular Array");
// 创建一个中心点为(0, 0, 0),法向量为(0, 0, 1),半径为1的圆形
Curve curve = Arc.Create(center, 1, 0, Math.PI * 2, normal, radiusVec);
// 定义圆形阵列图案
CurveArray curveArray = new CurveArray();
for (int i = 0; i < count; i++)
{
XYZ vector = radiusVec.RotateBy(2 * Math.PI / count * i, normal).Multiply(1);
Transform transform = Transform.CreateTranslation(vector);
curveArray.Append(curve.CreateTransformed(transform));
}
// 创建重复元素集合
List<Transform> transforms = new List<Transform>();
for (int i = 0; i < count; i++)
{
double angle = 2 * Math.PI / count * i;
XYZ vector = radiusVec.Clone().RotateBy(angle, normal).Multiply(1);
transforms.Add(Transform.CreateRotationAtPoint(normal, angle, center));
}
RepeatingReferenceSource repeatingReference = RepeatingReferenceSource.Create(curveArray, transforms);
// 创建圆形阵列
fi = doc.Create.NewFamilyInstance(curve.GetEndPoint(0), typeId, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
fi.SetRotation(new XYZ(0, 0, 1), Math.PI / count);
fi.SetRepeater(repeatingReference);
txn.Commit();
}
在上面的代码中,我们使用 RepeatingReferenceSource.Create()
方法创建了一个由 CurveArray
和 Transform
组成的重复元素集合,然后将其通过 SetRepeater()
方法应用到元素上,从而实现了圆形阵列的效果。
Autodesk.Revit.DB.RepeatingReferenceSource
类是Revit API中十分实用的一个类,它可以帮助开发者更方便地创建重复元素,提高了开发效率。开发者可以根据自己的需求灵活运用这个类来实现不同的功能。