[MSCE C#] 旋转变换

DTransform3d Rotation(DVector3d axis, Angle angle);这个函数只有一个旋转轴和角度,旋转基点是怎么考虑的呢?

Parents Reply Children
  • SDK中提供有绕固定点旋转来构造变换矩阵的方法。如DTransform3d.FromMatrixAndFixedPoint,其中的参数FixedPoint可以指定为旋转点。

    下面的示例实现了绕着中心点旋转一个GroupHole元素。

    public static void RotateAroundItsCenter(string unparsed)
            {
                DgnModel myModel = Session.Instance.GetActiveDgnModel();
                Element myElem = myModel.FindElementById((ElementId)1800L);
    
                DMatrix3d matrix = DMatrix3d.Rotation(2, Angle.FromDegrees(45));  //0--X Axis, 1--Y Axis, 2--Z Axis
                DPoint3d fixedPt = DPoint3d.FromXY(25075600.0, 14355700.0);
                DTransform3d trans = DTransform3d.FromMatrixAndFixedPoint(matrix, fixedPt);
                TransformInfo transInfo = new TransformInfo(trans);
                myElem.ApplyTransform(transInfo);
                myElem.ReplaceInModel(myElem);
            }

    首先构造一个绕Z轴旋转45度的一个旋转矩阵matrix,然后设定旋转中心点为fixedPt。调用DTransform3d.FromMatrixAndFixedPoint构造出一个旋转矩阵trans。以此旋转即可。

    执行该代码前图形:

    执行后图形: