明经通道 AutoLISP 函数  
trans
 

将一个点(或位移量)从一个坐标系转换成另一个坐标系

(trans pt from to [disp])   

参数

pt

三维实数列表,既可以被解释成一个三维点,又可以被解释成一个三维位移(矢量)。

from

整数代码、图元名或三维拉伸矢量,指定 pt 的坐标系。整数代码可以为如下值:

0 世界坐标系(WCS)

1 用户坐标系(当前 UCS)

2 与代码 0 或代码 1 一起使用时,表示当前视口的显示坐标系 (DCS)。与代码 3 一起使用时,表示当前模型空间视口的 DCS。

3 图纸空间 DCS(仅用于代码 2)

to

整数代码、图元名或三维拉伸矢量,指定返回点的坐标系。有效的整数代码取值请参见 from 参数。

disp

如果存在且不为 nil,则将 pt 作为三维位移而不是三维点看待。

如果 from 或 to 参数是图元名,它必须是由 entnext、entlast、entsel、nentsel 和 ssname 等函数返回的图元名。这样就可以将某个特定对象的对象坐标系 (OCS) 中的点来回进行转换(对于某些对象,OCS 等价于 WCS,对这些对象,OCS 和 WCS 之间的转换是空操作)。使用三维拉伸矢量(三个实数组成的一个表)是来回转换对象 OCS 的另一种方法。但是,对于 OCS 等价于 WCS 的那些对象,这种转换也不做任何操作。

返回值

由参数 to 指定的坐标系表示的一个三维点(或位移)。

示例

在下面的样例中,UCS 绕世界坐标系的 Z 轴旋转 90 度:

命令: (trans '(1.0 2.0 3.0) 0 1)

(2.0 -1.0 3.0)

命令: (trans '(1.0 2.0 3.0) 1 0)

(-2.0 1.0 3.0)

关于坐标系的详细信息,请参见 Visual LISP 开发人员手册中的坐标系转换。

例如,要在不使用对象捕捉的情况下,从一行文本的插入点画一条直线,需要将文本对象的插入点从文本对象的 OCS 转换到 UCS:

(trans text-insert-pointtext-ename 1)

然后就可以将结果传给“起点:”提示。

相反地,将点值送到 entmod 函数中去之前,必须将该点(或位移)值转换成用该对象的 OCS 表示。例如,如果要将圆相对 UCS 偏移 (1,2,3)(不使用 MOVE 命令),就需要将该偏移量从 UCS 转换成圆的 OCS:

(trans '(1 2 3) 1 circle-ename)

然后就可以将结果偏移量加到圆的圆心上去。

例如,如果用户输入了一个点,且想要找出一条直线的哪一个端点看起来离该点更近,就先得将用户输入的点从 UCS 转换到 DCS:

(trans user-point 1 2)

然后再将直线的每一个端点从 OCS 转换到 DCS:

(trans endpoint line-ename 2)

这样就可以计算出用户输入的点与直线每一个端点间的距离(忽略 Z 坐标),从而确定哪一个端点看起来距用户输入的点更近。

trans 函数也可以转换二维点,这需要通过给 Z 坐标赋一个适当的值来实现。所使用的 Z 分量取决于所指定的 from 坐标系,以及该值是作为一个点还是作为一个位移。如果是作为一个位移,那么其 Z 值总是为 0.0;如果是作为一个点,那么其 Z 值由下表确定。

转换二维点时的 Z 坐标值

From

填入的 Z 坐标值

WCS

0.0

UCS

当前标高

OCS

0.0

DCS

投影到当前构造平面(UCS XY 平面 + 当前标高)

PSDCS

投影到当前构造平面(UCS XY 平面 + 当前标高)

明经通道 版权所有 未经许可 不得传播

 评论