d1742647821 发表于 2023-12-26 09:15:56

CAD坐标转为屏幕坐标

本帖最后由 d1742647821 于 2023-12-26 09:37 编辑


public static void TEST()
{
    var doc = Acap.DocumentManager.MdiActiveDocument;
    var ed = doc.Editor;
    var r1 = ed.GetPoint("\n选择点");
    if (r1.Status != PromptStatus.OK)
      return;
    var wcsPoint = r1.Value.TransformBy(ed.CurrentUserCoordinateSystem);

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

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

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


public static extern bool ClientToScreen(IntPtr hWnd, ref System.Drawing.Point pt);

CAD坐标转为屏幕坐标

yaojing38 发表于 2023-12-26 09:36:12

支持,,。。。。

Bao_lai 发表于 2023-12-26 12:14:40

这个可以理解为wcs转到ucs坐标么?

d1742647821 发表于 2023-12-26 14:22:52

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

完全不是一回事

你有种再说一遍 发表于 2023-12-26 16:42:36

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

guohq 发表于 2023-12-27 15:50:01

var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;   

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

d1742647821 发表于 2023-12-27 17:47:49

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

这个96哪里来的?显示比例不一样,DPI设 ...
不用动它,这一步就是为了计算比例,100的时候是96,所以除以96就可以计算出这个比例值

nijiea123 发表于 2024-2-2 13:15:31

太给力了 不错呀

舒三 发表于 2024-5-21 12:52:08

没必要搞这么复杂
要获得屏幕坐标很简单
    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:00

注册一个事件这就是最原始的屏幕坐标没必在在CAD里面转一圈出来
页: [1] 2
查看完整版本: CAD坐标转为屏幕坐标