今天在进行几何运算时,偶然发现在UCS非世界坐标系的时候运算结果不正确
这与我以往的认知出现了冲突,我个人的经验,只有在用户交互的时候(如GetPoint,GetEntity),才用得到UCS。
当一个图元已经从id拿到,转化为Entity时,从该图元属性上取出的属性应该为均为世界坐标系。
经过我的排查后发现,Line的Delta属性居然在不同的UCS下取值不同。我原以为Delta属性就是起点到终点的向量。
这里我写了一个最小化测试Demo
var line1 = new Line(Point3d.Origin,new Point3d(100,0,0));
line1.Delta.Print();
line1.StartPoint.GetVectorTo(line1.EndPoint).Print();
其中print函数是Editor.WriteMessage(); 输出到命令行。 此代码在UCS为世界坐标系时输出是这样的。
(100, 100, 0) (100, 100, 0)
当修改了UCS坐标系后输出为
(88.538559, -46.485733, 0) (100, 100, 0)
由此可见,“从图元上取得的属性值均为世界坐标系”,此说法虽然大部分情况正确,但未必完全正确。
在取方向时,尽量使用line.StartPoint.GetVectorTo(Line.EndPoint)
评论