用C#進行AutoCAD開發PDF打印機,會遇到打印位置偏差的情況,通過查詢資料,這些因為坐標系不同的原因,畫圖使用的是UCS坐標,打印使用的是DCS坐標。
根據查對資料,有三種解決方法:
第一種:參考http://bbs.mjtd.com/thread-169479-1-1.html,對於視圖方向與Z軸平行的情況,先Point3d ptTarget = Application.GetSystemVariable("TARGET");然后將打印范圍的X和Y分別減去ptTarget的X和Y值即可。
第二種:參考https://www.jixie5.com/jiaocheng/476.html,在圖紙中將TARGET恢復成默認值:0,0,0。
第三種:參考https://www.cnblogs.com/suncoolcat/p/3395455.html,利用ObjectARX 中有acedTrans()函數,進行坐標轉換。該參考文章中,使用的CAD版本為CAD2014前的,對應CAD2014后的,調用方法改為:
[DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedTrans")] private static extern int acedTrans(double[] point, IntPtr fromResbuf, IntPtr toResbuf, int displacement, double[] result);
其它方法不變。
第四種:不應用com庫,直接用Autodesk.AutoCAD.Internal.UcsToDisplay 函數將UCS轉換成DCS 坐標打印圖紙