以下是我尝试的,将鼠标依次定位到直线的两个端点,由于像素是整数,因而会形成误差。

- [FONT=courier new]
- '将像素转换成ACAD的当前图形单位。
- Function PixelsToAcadUnit(ByVal Pixels As Integer) As Double
- Dim ViewSize As Double
- ViewSize = acadDoc.GetVariable("VIEWSIZE")
- Dim ScreenSize As Variant
- ScreenSize = acadDoc.GetVariable("SCREENSIZE")
- PixelsToAcadUnit = Pixels * ViewSize / ScreenSize(1)
- End Function
- '将ACAD的当前图形单位转换成像素。
- Function AcadUnitToPixels(ByVal AcadUnit As Double) As Double
- Dim ViewSize As Double
- ViewSize = acadDoc.GetVariable("VIEWSIZE")
- Dim ScreenSize As Variant
- ScreenSize = acadDoc.GetVariable("SCREENSIZE")
- AcadUnitToPixels = AcadUnit * ScreenSize(1) / ViewSize
- End Function
- '将ACAD中的某一点坐标转换到屏幕上的某一像素位置。
- Private Function AcadCoordToPixels(ByVal AcadCoord As Variant) As POINTAPI
- Dim ViewCtr As Variant
- ViewCtr = acadDoc.GetVariable("VIEWCTR")
- Dim ScreenSize As Variant
- ScreenSize = acadDoc.GetVariable("SCREENSIZE")
- Dim p As POINTAPI
- Debug.Print AcadUnitToPixels(AcadCoord(0) - ViewCtr(0))
- p.X = Round(ScreenSize(0) / 2 + AcadUnitToPixels(AcadCoord(0) - ViewCtr(0)), 0)
- p.Y = Round(ScreenSize(1) / 2 - AcadUnitToPixels(AcadCoord(1) - ViewCtr(1)), 0)
- Dim lRet As Long
- lRet = ClientToScreen(acadDoc.hWnd, p)
- AcadCoordToPixels = p
- End Function
- Option Explicit
- Private Type POINTAPI
- X As Long
- Y As Long
- End Type
- Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
- Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
- Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
- Dim acadApp As AcadApplication
- Dim acadDoc As AcadDocument
- Sub test()
- Set acadApp = GetObject(, "AutoCAD.Application")
- acadApp.Visible = True
- Set acadDoc = acadApp.ActiveDocument
- AppActivate acadApp.Caption
- Dim p1 As POINTAPI
- p1 = AcadCoordToPixels(acadDoc.ModelSpace(0).StartPoint)
- Dim p2 As POINTAPI
- p2 = AcadCoordToPixels(acadDoc.ModelSpace(0).EndPoint)
- Sleep 1000
- SetCursorPos p1.X, p1.Y
- Sleep 1000
- SetCursorPos p2.X, p2.Y
- End Sub
- [/FONT]
|