在帮助文件中。
开发人员手册—在三维空间中工作—转换坐标。

- [FONT=courier new]
- 转换坐标
- TranslateCoordinates 方法可以将点或位移从一个坐标系转换到另一个坐标系。称为 OriginalPoint 的点参数可以被解释为三维点或三维位移矢量。此参数由 Boolean 参数 Disp 来区分。如果 Disp 参数设置为 TRUE,OriginalPoint 参数将被视为位移矢量;否则视为点。还有两个参数用于确定 OriginalPoint 来自哪个坐标系以及要转换到哪个坐标系。可以在 From 和 To 参数中指定以下 AutoCAD 坐标系:
- WCS
- 世界坐标系 - 参照坐标系。所有其他坐标系都相对于 WCS 定义,该坐标系恒定不变。相对于 WCS 测量的值可以稳定地转换到其他坐标系中。除非另行指定,ActiveX 方法和特性传入和传出的所有点都以 WCS 表示。
- UCS
- 用户坐标系 - 工作坐标系。用户可以指定 UCS 以方便执行绘图任务。所有传递到 AutoCAD 命令的点,包括从 AutoLISP 例程以及外部函数返回的点,都是当前 UCS 中的点(除非用户于命令提示中在点之前加上了 *)。如果希望应用程序以 WCS、OCS 或 DCS 向 AutoCAD 命令发送坐标,必须先调用 TranslateCoordinates 方法,将这些坐标转换为 UCS。
- OCS
- 对象坐标系 - 由 Polyline 和 LightweightPolyline 对象的某些方法和特性指定的点值以此坐标系表示(相对于对象)。根据对象的用途,这些点通常会转换为 WCS、当前 UCS 或当前 DCS。相对地,WCS、UCS 或 DCS 中的点在使用相同的特性写入数据库之前,必须将其转换为 OCS。关于采用此坐标系的方法和特性,请参见 AutoCAD ActiveX and VBA Reference Guide。
- 将坐标转换到 OCS 或从 OCS 转换坐标时,必须在 TranslateCoordinates 函数的最后一个参数中输入 OCS 的法线。
- DCS
- 显示坐标系 - 在显示对象之前将对象转换到的坐标系。DCS 的原点是存储在 AutoCAD 系统变量 TARGET 中的点,Z 轴是观察方向。也就是说,某个视口始终是其 DCS 的一个平面视图。这些坐标可用于确定显示给 AutoCAD 用户的画面的位置。
- PSDCS
- 图纸空间 DCS - 此坐标系只能与当前活动的模型空间视口的 DCS 互相转换。这种转换实质上是一种二维转换,其中的 X 和 Y 坐标在 Disp 参数设置为 FALSE 时,始终要进行缩放和偏移。Z 坐标也要缩放,但并不转换。因此,它可用于确定两个坐标系之间的缩放比例。PSDCS 只能转换到当前的模型空间视口中。如果 from 参数等于 PSDCS,则 to 参数必须等于 DCS,反之亦然。
- 代码示例
- 创建新的 UCS,将其激活,并将一个点的坐标转换为 UCS 坐标
- 下面的子例程将创建新的 UCS,并将其设置为图形的活动 UCS。然后要求用户在图形中拾取一点,并返回该点的 WCS 和 UCS 坐标。
- Sub Ch8_NewUCS()
- ' 定义所需的变量
- Dim ucsObj As AcadUCS
- Dim origin(0 To 2) As Double
- Dim xAxisPnt(0 To 2) As Double
- Dim yAxisPnt(0 To 2) As Double
- ' 定义 UCS 点
- origin(0) = 4: origin(1) = 5: origin(2) = 3
- xAxisPnt(0) = 5: xAxisPnt(1) = 5: xAxisPnt(2) = 3
- yAxisPnt(0) = 4: yAxisPnt(1) = 6: yAxisPnt(2) = 3
-
- ' 将 UCS 添加到
- ' UserCoordinatesSystems 集合
- Set ucsObj = ThisDrawing.UserCoordinateSystems. _
- Add(origin, xAxisPnt, yAxisPnt, "New_UCS")
- ' 显示 UCS 图标
- ThisDrawing.ActiveViewport.UCSIconAtOrigin = True
- ThisDrawing.ActiveViewport.UCSIconOn = True
-
- ' 使新的 UCS 成为活动的 UCS
- ThisDrawing.ActiveUCS = ucsObj
- MsgBox "The current UCS is : " & ThisDrawing.ActiveUCS.Name _
- & vbCrLf & " Pick a point in the drawing."
-
- ' 找出某一点的 WCS 和 UCS 坐标
- Dim WCSPnt As Variant
- Dim UCSPnt As Variant
-
- WCSPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ")
- UCSPnt = ThisDrawing.Utility.TranslateCoordinates _
- (WCSPnt, acWorld, acUCS, False)
-
- MsgBox "The WCS coordinates are: " & WCSPnt(0) & ", " _
- & WCSPnt(1) & ", " & WCSPnt(2) & vbCrLf & _
- "The UCS coordinates are: " & UCSPnt(0) & ", " _
- & UCSPnt(1) & ", " & UCSPnt(2)
- End Sub
- [/FONT]
|