明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10904|回复: 17

如何实时动态取得CAD下光标的位置?

  [复制链接]
发表于 2006-8-27 21:46:00 | 显示全部楼层 |阅读模式
如何实时动态取得CAD下光标的位置?
此功能有没有人知道是什么命令?(VBA,VB.net,C#,或读CAD系统参数都可以)
请知道的朋友告诉我。谢了!!!
发表于 2006-10-18 23:46:00 | 显示全部楼层
  1.         private static Point3d m_MousePoint = new Point3d(0, 0, 0);//保存当前鼠标位置
  2.         [CommandMethod("mtest")]
  3.         public void test()
  4.         {
  5.             Editor m_ed = Application.DocumentManager.MdiActiveDocument.Editor;
  6.             m_ed.PointFilter+=new PointFilterEventHandler(m_GetMousePoint);
  7.             PromptPointOptions  m_pko = new PromptPointOptions("\n按左键退出...");
  8.             PromptPointResult m_ppr = m_ed.GetPoint(m_pko);
  9.             if (m_ppr.Status == PromptStatus.OK)
  10.             {
  11.                 m_ed.PointFilter -= new PointFilterEventHandler(m_GetMousePoint);
  12.             }
  13.         }
  14.         //动态获取鼠标位置
  15.         void m_GetMousePoint(object sender, PointFilterEventArgs e)
  16.         {
  17.             //throw new System.Exception("The method or operation is not implemented.");
  18.             m_MousePoint = e.Context.ComputedPoint;
  19.             Editor m_ed = Application.DocumentManager.MdiActiveDocument.Editor;
  20.             m_ed.WriteMessage("\n当前鼠标位置:" + m_MousePoint + "\t按下鼠标左键退出...");
  21.         }

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2006-8-29 19:35:00 | 显示全部楼层

或有这个函数也可以。

将屏幕点转化为CAD下的点。

VB开发CAD2007有这个函数,但我用的CAD2006没有。请问大家有没有别的函数可以实现?

如CAD2007开发用的函数:ed.pointtoworld(new point(e.x,e.y))

 楼主| 发表于 2006-8-31 22:02:00 | 显示全部楼层
用API函数此问题已解决。谢谢才鸟兄。
 楼主| 发表于 2006-9-10 22:30:00 | 显示全部楼层

Public Class ArxApi
    <System.Runtime.InteropServices.DllImport("acad.exe", CallingConvention:=CallingConvention.Cdecl, entrypoint:="?acedCoordFromPixelToWorld@@YAHHVCPoint@@QAN@Z")> _
    Public Shared Function acedCoordFromPixelToWorld(ByVal viewportNumber As Integer, ByVal pixel As System.Drawing.Point, ByRef point As Point3d) As Boolean
        '''
        '''
    End Function

    '''
    <System.Runtime.InteropServices.DllImport("acad.exe", CallingConvention:=CallingConvention.Cdecl, entrypoint:="?acedCoordFromWorldToPixel@@YAHHQBNAAVCPoint@@@Z")> _
    Public Shared Function acedCoordFromWorldToPixel(ByVal viewportNumber As Integer, ByVal worldPt As Point3d, ByRef pixel As System.Drawing.Point) As Boolean
        '''
        '''
    End Function

    '''
End Class

发表于 2006-11-6 14:46:00 | 显示全部楼层
屏幕点是怎么得到的?
 楼主| 发表于 2006-11-7 10:41:00 | 显示全部楼层

mouseup 事件中得到

发表于 2007-4-20 14:22:00 | 显示全部楼层
可以用吗?
发表于 2007-5-6 17:20:00 | 显示全部楼层
本帖最后由 作者 于 2007-5-6 17:23:51 编辑

Imports Autodesk.AutoCAD.Runtime

Imports Autodesk.AutoCAD.Geometry

Imports Autodesk.AutoCAD.EditorInput

Public Class Class1

   Private MousePoint As Point3d = New Point3d(0, 0, 0) '保存当前鼠标位置

    <CommandMethod("mtest")> _

       Public  Sub test()

        Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor

        AddHandler ed.PointFilter, AddressOf GetMousePoint

        Dim pro As PromptPointOptions = New PromptPointOptions("按左键退出...")

        ed.GetPoint(pro)

        RemoveHandler ed.PointFilter, AddressOf GetMousePoint

    End Sub

    ''动态获取鼠标位置  

    Private Sub GetMousePoint(ByVal sender As Object, ByVal e As PointFilterEventArgs)

        MousePoint = e.Context.ComputedPoint

        Dim m_ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor

        m_ed.WriteMessage("当前鼠标位置:  " + vbLf + "X=" + MousePoint.X.ToString + vbLf + "Y=" + MousePoint.X.ToString + vbLf + "Z=" + MousePoint.Z.ToString + vbLf)

    End Sub

End Class

 楼主| 发表于 2007-6-9 00:54:00 | 显示全部楼层
好样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 14:52 , Processed in 0.439208 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表