本帖最后由 TiStars 于 2018-1-18 10:12 编辑
我狗尾续貂一下:
- 如果在模型空间打印,且需要选定范围,根据我自己的经验,选定的坐标不能直接设置给SetPlotWindowArea ,否则打印出来的都是空白,需要按照这里说的作一下转换。
----------------------------------------------------------------
- // Gets the current view
- ViewTableRecord acView = acDoc.Editor.GetCurrentView();
- Extents3d eExtents = new Extents3d(new Point3d(0, 0, 0), new Point3d(630, 445.5, 0));
- // Translates WCS coordinates to DCS
- Matrix3d matWCS2DCS;
- matWCS2DCS = Matrix3d.PlaneToWorld(acView.ViewDirection);
- matWCS2DCS = Matrix3d.Displacement(acView.Target - Point3d.Origin) * matWCS2DCS;
- matWCS2DCS = Matrix3d.Rotation(-acView.ViewTwist,
- acView.ViewDirection,
- acView.Target) * matWCS2DCS;
- // Tranforms the extents to DCS
- matWCS2DCS = matWCS2DCS.Inverse();
- eExtents.TransformBy(matWCS2DCS);
- // Defines the area to output
- acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Window);
- acPlSetVdr.SetPlotWindowArea(acPlSet, new Extents2d(eExtents.MinPoint.X, eExtents.MinPoint.Y,
- eExtents.MaxPoint.X, eExtents.MaxPoint.Y));
------------------------------------------------
而且,按照上述操作进行Extents3d转换时,要注意第一个参数的坐标值要小于第二个参数的坐标值。
不过我只知其然而不知其所以然,请高手帮忙解释一下,谢谢。
- 另外还想起来一个,如果把后台打印设为前台,则会大大提高打印速度。
- //保存App的原参数
- short bgPlot =(short)Application.GetSystemVariable("BACKGROUNDPLOT");
- //设定为前台打印,加快打印速度
- Application.SetSystemVariable("BACKGROUNDPLOT", 0);
- 刚刚又遇到一个问题,看了楼主的这一条解决了,不过我没有RefreshLists就可以获取到图纸列表。
2)GetCanonicalMediaNameList 读取打印机的图纸列表。一般在读取图纸列表之前,我们先使用SetPlotConfigurationName设置打印机,图纸大小设置为null,然后调用RefreshLists刷新图纸列表,然后再进行读取。
|