- UID
- 33731
- 积分
- 1055
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-3-6
- 最后登录
- 1970-1-1
|
发表于 2007-8-23 13:59:17
|
显示全部楼层
语法
(trans pt from to [disp])
功能及参数
此函数可以将一个点的坐标值 (或一个位移量) 从某一坐标系统转换到另一个坐标系统。pt参数个含有三个实型数的串列, 可以解释成一个 3D 的点或一个 3D 的位移 (向量)。from 这个参数是一个代码 (Code), 代表 pt 所在的坐标系统, 而 to 这个参数也是一个代码, 代表 pt 所想要转换到的坐标系统 。disp 参数是可有可无的, 假如此参数存在而且其值并非 nil, 则 pt 所代表的就是一个 3D 的位移而不是一个点。下列所述的任何一个代码均可为 from 和 to 的参数。
● 下表所列出的是坐标系统整型数码:
码
坐标系统
0
通用坐标系统 (WCS)
1
用户坐标系统 (UCS)
2
显示:目前视区的 DCS (当使用码0或码1时)。目前模型空间视区的 DCS(当使用码3时)
3
图纸空间 DCS (只能在使用码2时使用)
● 一些函数, 例如: entnext、entlast、entsel、nentsel和 ssname 函数所返回的图元名。如果您是使用这一方式, 则可让您将一点转换到一个特殊图元的图元坐标系统(Entity Coordinate System, ESC)上, 或是从 ESC 转换到另一种坐标系统(对某些图元而言, ECS 和 WCS 是一样的, 所以对这些图元作 ECS 和 WCS 之间的转换并没有意义)上。
● 一个 3D 的凸出向量(Extrusion Vector), 它是个含有三个实型数值的表。这是某一坐标系统和一个图元的 ECS之间互相转换的另一种方法。然而, 对 ECS 和 WCS 相同的图元来说, 这种转换并没有作用。trans 将会返回 to 参数所在坐标系统的 3D 点(或位移) 坐标值。
例如, 已知 UCS 是绕着 WCS 的 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)
下列所述是 trans 所适用的坐标系统, 在此我们同时说明如何使用这些坐标系统:
WCS:通用坐标系统。这是一个参考 (reference) 坐标系统。其他所有的坐标系统全都是相对于此一坐标系统来定义的。WCS 也是惟一不改变的坐标系统。它的主要用途是在相对于 WCS 所测量得到的值都可以很正确的转换到其他的坐标系统上。
UCS:用户坐标系统是一个工作 (working) 坐标系统, 它是由用户自行设定的坐标系统, 以便使绘图编辑的工作更容易。所有输入的点(包括 AutoLISP表达式所返回的点, 但不包括前面有*记号的点), 全都视为相对于这一坐标系统。所以, 如果您想要在 AutoCAD 命令中使用 WCS、ECS 或 DCS 的坐标值您就必须先使用 trans, 将它们转换成 UCS 的坐标值。
ECS:图元坐标系统。由 entget 函数所返回的点坐标值即是相对于这一坐标系统所测量得到的, 这样的点几乎没有什么用处, 除非将这些点转换到适当的坐标系统上。
DCS:显示坐标系统 (Display Coordinate System)。此系统即为图片在显示前所转换的坐标系统, 此坐标系统的原点为标的(TARGET) 点, 而Z 轴为观测方向。所以, 在 DCS 上永远是平面视图。也就是说, 在视区上, DCS 的 Y 轴向上, 而 X 轴向右。它可以用来决定这些图元在屏幕上给用户看起来是什么样子。当整型数代码 from 和to为 2 和 3 时, 2 表示目前模型空间的视区将使用DCS, 而3表示图纸空间使用DCS(请引用下面 PSDCS)。当代码 2 与其他任何运算元一起使用时, 则不管它是模型空间或图纸空间, 都会假定为目前空间的 DCS, 同时另一点也在目前空间中。
PSDCS:图纸空间显示坐标系统 (Paper Space Display Coor dinate System)。这只能用来在图纸空间 DCS 和活动的模型空间视区的 DCS 之间进行点的转换。基本上这是一种 2D 的转换, 其中 X 和 Y 坐标总是按比例来决定的, 同时如果 disp 参数没有指定或值为nil 时没有差距。但是 Z 坐标都是以比例来决定的, 并没有经过平移, 因此您可以用来决定两个显示坐标系统之间的比例因数 。除了两个 DCS 之间的转换之外, 将不会在两个空间之间进行转换。
例如, 假设您想要画一条线, 它的起始点正是一串文字的插入点, 那么在不使用 Osnap 的情况下, 您可以将此文字图素的插入点从文字图元的 ECS 转换到 UCS, 如下所示:
(trans text-insert-point text-ename 1)
然后将结果输入到 From point:"的提示语句后。相反的, 在输入点坐标值到 entmod 时, 您必须先将点 (或位移)坐标值转换成所想要的 ECS 坐标值。例如, 您想要在UCS 上移动一个圆, 而所要移动的位移量是 1、2、3, 那么在不使用 MOVE 命令的情况下, 您必须将此位移的 UCS 转换到此圆的 ECS, 如下所示:
(trans '(1 2 3) 1 circle-ename)
然后, 您再将结果的位移量加到此圆的中心点上即可。
例如, 假设某个用户输入一点, 他想要知道现在屏幕上某一条线的两个端点到底是哪一个端点看起来比较靠近用户输入的那一点, 那么首先请您将用户输入的那一点从 UCS 转换到 DCS 上:
(trans user-point 1 2)
然后, 将那条线的两个端点从 UCS 转换到 DCS 上:
(trans endpoint line-ename 2)
从上述所得到的答案, 您就可以分别计算从用户输入的点到两个端点间的距离(Z 坐标值可忽略), 如此您就可决定哪一个端点看起来比较靠近了。trans 也可以转换 2D 点。为了达到这个目的, AutoLISP会将 Z 坐标填上一个适当的值。这个填入的 Z 坐标值是由 from 的坐标系统以及您是将此输入的 2D 点当做是一个点还是一个位移来转换, 两者共同决定的。这个填入的 Z坐标值, 如下表所示:
从
点
位移
WCS
0.0
0.0
UCS
目前高度
0.0
ECS
0.0
0.0
DCS
投影到目前的绘图平面(UCS XY 平面+目前高度)
0.0
PSDCS
投影到目前的绘图平面(UCS XY 平面+目前高度)
0.0 |
|