本帖最后由 d1742647821 于 2023-12-26 09:37 编辑
  1. [CommandMethod(nameof(TEST))]
  2. public static void TEST()
  3. {
  4.     var doc = Acap.DocumentManager.MdiActiveDocument;
  5.     var ed = doc.Editor;
  6.     var r1 = ed.GetPoint("\n选择点");
  7.     if (r1.Status != PromptStatus.OK)
  8.         return;
  9.     var wcsPoint = r1.Value.TransformBy(ed.CurrentUserCoordinateSystem);

  10.     var hWnd = doc.Window.Handle;
  11.     var vp = (short)Acap.GetSystemVariable("CVPORT");
  12.     System.Windows.Point wdPt = ed.PointToScreen(wcsPoint, vp);
  13.     var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;

  14.     var drawingPt = new System.Drawing.Point(Convert.ToInt32(wdPt.X * scale),Convert.ToInt32(wdPt.Y * scale));
  15.     ClientToScreen(hWnd, ref drawingPt);

  16.     Env.Editor.WriteMessage(drawingPt.X + "-" + drawingPt.Y);
  17. }

  18. [DllImport("user32.dll")]
  19. public static extern bool ClientToScreen(IntPtr hWnd, ref System.Drawing.Point pt);
复制代码

CAD坐标转为屏幕坐标

网友答: 没必要搞这么复杂  
要获得屏幕坐标很简单
    private void Application_PreTranslateMessage(object sender, PreTranslateMessageEventArgs e)
    {
        MousePoint.X = e.Message.pt_x;
        MousePoint.Y = e.Message.pt_y;
    }

网友答:
舒三 发表于 2024-5-21 12:54
注册一个事件  这就是最原始的屏幕坐标  没必在在CAD里面转一圈出来

那如果是在图元上获取的点呢,你的使用场景太少了,如果只是为了获取鼠标当前坐标那Cursor.Position岂不是更简单

网友答:
guohq 发表于 2023-12-27 15:50
var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;   

这个96哪里来的?显示比例不一样,DPI设 ...

不用动它,这一步就是为了计算比例,100的时候是96,所以除以96就可以计算出这个比例值

网友答: 支持,,。。。。


网友答: 这个可以理解为wcs转到ucs坐标么?

网友答:
Bao_lai 发表于 2023-12-26 12:14
这个可以理解为wcs转到ucs坐标么?

完全不是一回事

网友答: 逆转呢?快点快点,ifox的填充边界事件上面缺少这个测试

网友答: var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;   

这个96哪里来的?显示比例不一样,DPI设置不一样呢?


网友答: 太给力了 不错呀

网友答: 注册一个事件  这就是最原始的屏幕坐标  没必在在CAD里面转一圈出来
  • 上一篇:如何获取块的基点坐标和边界坐标?
  • 下一篇:没有了