Revit开发之通过墙的位置线和柱子的位置点进行旋转

API提供了旋转方法来旋转一个或者几个元素,使用ElementTransformUtils类下的
void RotateElement(Document document, ElementId elementToRotate, Line axis, double angle);使用给定的轴线和角度对一个元素进行旋转
void RotateElements(Document document, ICollection 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(); 
}

=========【更多高级应用请关注公众号】========


===================================

你可能感兴趣的:(RevitAPI,元素编辑d)