API提供了旋转方法来旋转一个或者几个元素,使用ElementTransformUtils类下的
void RotateElement(Document document, ElementId elementToRotate, Line axis, double angle);使用给定的轴线和角度对一个元素进行旋转
void RotateElements(Document document, ICollection<ElementId> elementsToRotate, Line axis, double angle);使用给定的轴线和角度对元素进行旋转
void RotateElement(Document document, ElementId elementToRotate, Line axis, double angle);使用给定的轴线和角度对一个元素进行旋转
void RotateElements(Document document, ICollection<ElementId> elementsToRotate, Line axis, double angle);使用给定的轴线和角度对元素进行旋转
在旋转方法中,旋转角度是用弧度计量。
正值是围绕轴线做逆时针的旋转,负值是做顺时针旋转。
使用RotateElement和RotateElements方法对元素进行旋转时,
需要注意下面几点
:
①
当旋转一个元素时,旋转轴应该是有限线段,如果是无限线作为旋转轴线,会导致旋
转失败。
②
旋转轴一般要求与元素LocationCurve所在的平面垂直,否则很可能会导致旋转失败。
代码片段3-19获取了一堵墙,并创建了一条和墙位置线垂直的旋转轴,然后对这堵墙 进行了逆时针60°的旋转。
如果一个元素的Location 可以向下转型为LocationCurve或者LocationPoint,那么就可以直接旋转元素对应的曲线或者点。
如何通过墙的位置线和柱子的位置点对它们分别进行旋转,可以参考以下代码:
Document projectDoc = ActiveUIDocument.Document;
using(Transaction tran = new Transaction(projectDoc, "Rotate the wall and the column."))
{
tran.Start();
Wall wall = projectDoc.GetElement(new ElementId(184163)) as Wall;
XYZ aa = XYZ.Zero;
XYZ cc = XYZ.Zero;
// 通过元素的位置线来旋转元素
LocationCurve curve = wall.Location as LocationCurve;
if (null != curve)
{
Curve line = curve.Curve;
aa = line.GetEndPoint(0);
cc = new XYZ(aa.X, aa.Y, aa.Z + 10);
Line axis = Line.CreateBound(aa, cc);
curve.Rotate(axis, Math.PI / 2.0);
}
FamilyInstance column = projectDoc.GetElement(new ElementId(184150)) as FamilyInstance;
// 通过元素的位置点来旋转元素
LocationPoint point = column.Location as LocationPoint;
if (null != point)
{
aa = point.Point;
cc = new XYZ(aa.X, aa.Y, aa.Z + 10);
Line axis = Line.CreateBound(aa, cc);
point.Rotate(axis, Math.PI / 3.0);
}
tran.Commit();
}
=========【
更多高级应用请关注公众号
】========
===================================
版权声明:本文为bbkxw001原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。