本帖最后由 d1742647821 于 2023-12-26 09:37 编辑
复制代码
CAD坐标转为屏幕坐标网友答: 没必要搞这么复杂
要获得屏幕坐标很简单
private void Application_PreTranslateMessage(object sender, PreTranslateMessageEventArgs e)
{
MousePoint.X = e.Message.pt_x;
MousePoint.Y = e.Message.pt_y;
}网友答:
那如果是在图元上获取的点呢,你的使用场景太少了,如果只是为了获取鼠标当前坐标那Cursor.Position岂不是更简单网友答:
不用动它,这一步就是为了计算比例,100的时候是96,所以除以96就可以计算出这个比例值网友答: 支持,,。。。。
网友答: 这个可以理解为wcs转到ucs坐标么?网友答:
完全不是一回事网友答: 逆转呢?快点快点,ifox的填充边界事件上面缺少这个测试网友答: var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;
这个96哪里来的?显示比例不一样,DPI设置不一样呢?
网友答: 太给力了 不错呀网友答: 注册一个事件 这就是最原始的屏幕坐标 没必在在CAD里面转一圈出来
- [CommandMethod(nameof(TEST))]
- 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);
- }
-
- [DllImport("user32.dll")]
- 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里面转一圈出来