点在进行坐标变换时,常用到OfPoint与Inverse.OfPoint两种方法,我们来看下有什么区别吧。
1.如图为世界坐标系,存在两个点A(1,0,0)与B(10,0,0)
2.当我们以以点B为新的坐标原点,X、Y、Z轴方向均不变的情况下,看下一A变换到B的OfPoint与Inverse.OfPoint
3.代码如下:
class Test : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
XYZ x0 = new XYZ(1, 0, 0);
XYZ x1 = new XYZ(10, 0, 0);
Transform t1= Transform.Identity;
t1.BasisX = XYZ.BasisX;
t1.BasisY = XYZ.BasisY;
t1.BasisZ = XYZ.BasisZ;
t1.Origin = x1;
XYZ xt0= t1.OfPoint(x0);
XYZ xt00 = t1.Inverse.OfPoint(x0);
XYZ xt1 = t1.OfPoint(x1);
XYZ xt11 = t1.Inverse.OfPoint(x1);
TaskDialog.Show("123", $"{xt0}");
TaskDialog.Show("123", $"{xt00}");
TaskDialog.Show("123", $"{xt1}");
TaskDialog.Show("123", $"{xt11}");
return Result.Succeeded;
}
}
4.打印结果 发现很容易理解AB 经过transform后的OfPoint,即A'(11,0,0),B'(20,0,0),是原坐标系0点变为B点,在此坐标系下的AB两点。注意与Inverse.OfPoint的区别
5.而经过transform后的Inverse.OfPoint则为A''(-9,0,0)与B''(0,0,0)这是因为逆变换是AB两点不动,在新坐标系下的原AB两点坐标。