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坐标转为屏幕坐标 支持,,。。。。
这个可以理解为wcs转到ucs坐标么? Bao_lai 发表于 2023-12-26 12:14
这个可以理解为wcs转到ucs坐标么?
完全不是一回事 逆转呢?快点快点,ifox的填充边界事件上面缺少这个测试 var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;
这个96哪里来的?显示比例不一样,DPI设置不一样呢?
guohq 发表于 2023-12-27 15:50
var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;
这个96哪里来的?显示比例不一样,DPI设 ...
不用动它,这一步就是为了计算比例,100的时候是96,所以除以96就可以计算出这个比例值 太给力了 不错呀 没必要搞这么复杂
要获得屏幕坐标很简单
private void Application_PreTranslateMessage(object sender, PreTranslateMessageEventArgs e)
{
MousePoint.X = e.Message.pt_x;
MousePoint.Y = e.Message.pt_y;
} 注册一个事件这就是最原始的屏幕坐标没必在在CAD里面转一圈出来
页:
[1]
2