DTransform3d Rotation(DVector3d axis, Angle angle);这个函数只有一个旋转轴和角度,旋转基点是怎么考虑的呢?
应该是全局原点。
Answer Verified By: tom ma
也就是要先从基点平移至原点,再旋转,再从原点平移至基点?
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。以此旋转即可。
执行该代码前图形:
执行后图形:
谢谢符老师!