乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 107|回复: 7

plt打印输出文件空白

[复制链接]

9

主题

26

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2015-9-14 11:13:00 | 显示全部楼层 |阅读模式
最近遇到plt打印输出文件空白的情况,将设计内容复制到新建的文件后,再打印就正常了。
不知道大家有没有遇到过这种情况,帮忙指教一二,谢谢!
同时,如果知道复制功能会复制哪些内容,也麻烦说一下,这样我就好针对问题查看两个文件的区别,然后找到问题。
比如复制的内容包括:图纸内选择的图元、图层、文字样式
回复

使用道具 举报

9

主题

26

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2015-9-15 08:47:00 | 显示全部楼层
  1.         public static bool AcDbPlotPlt(Extents2d PlotExtent, string sPlotDeviceName, string sSheetStyleName
  2.             , string sPlotMediaName, string sPlotPath, PlotRotation pRotation, double dPlotScale)
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             doc.LockDocument();
  6.             Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("BACKGROUNDPLOT", 0);
  7.             Editor ed = doc.Editor;
  8.             Database db = doc.Database;
  9.             Transaction tr = db.TransactionManager.StartTransaction();
  10.             using (tr)
  11.             {
  12.                 // We'll be plotting the current layout 绘制当前布局
  13.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
  14.                 Layout acLayout = (Layout)tr.GetObject(btr.LayoutId, OpenMode.ForRead);
  15.                 //lo.PlotPlotStyles = false;
  16.                 // We need a PlotInfo object linked to the layout 初始化PlotInfo的对象并与布局关联
  17.                 PlotInfo acPlInfo = new PlotInfo();
  18.                 acPlInfo.Layout = btr.LayoutId;
  19.                 PlotSettings acPlSet = new PlotSettings(acLayout.ModelType); //modeltype 区分布局空间,模型空间
  20.                 acPlSet.CopyFrom(acLayout);
  21.                 //如果是布局空间,直接默认打印样式为1:1
  22.                 if (!acLayout.ModelType)
  23.                     dPlotScale = 1;
  24.                 // The PlotSettingsValidator helps create a valid PlotSettings object
  25.                 PlotSettingsValidator psv = PlotSettingsValidator.Current;
  26.                 //设置打印样式
  27.                 if (!string.IsNullOrEmpty(sSheetStyleName))
  28.                 {
  29.                     acPlSet.PlotPlotStyles = true;
  30.                     acPlSet.PrintLineweights = true;
  31.                     //lo.CurrentStyleSheet = sSheetStyleName;
  32.                     psv.SetCurrentStyleSheet(acPlSet, sSheetStyleName);
  33.                 }
  34.                 //设置打印方向
  35.                 psv.SetPlotRotation(acPlSet, pRotation);
  36.                 psv.SetPlotConfigurationName(acPlSet, sPlotDeviceName, sPlotMediaName);
  37.                 //设置打印尺寸
  38.                 //设置图纸单位
  39.                 psv.SetPlotPaperUnits(acPlSet, PlotPaperUnit.Millimeters);
  40.                 #region>
  41.                 psv.SetUseStandardScale(acPlSet, true);
  42.                 if (dPlotScale == 1)
  43.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To1);
  44.                 else if (dPlotScale == 2)
  45.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To2);
  46.                 else if (dPlotScale == 4)
  47.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To4);
  48.                 else if (dPlotScale == 8)
  49.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To8);
  50.                 else if (dPlotScale == 10)
  51.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To10);
  52.                 else if (dPlotScale == 16)
  53.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To16);
  54.                 else if (dPlotScale == 20)
  55.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To20);
  56.                 else if (dPlotScale == 30)
  57.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To30);
  58.                 else if (dPlotScale == 40)
  59.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To40);
  60.                 else if (dPlotScale == 50)
  61.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To50);
  62.                 else if (dPlotScale == 100)
  63.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale1To100);
  64.                 else if (dPlotScale == 0.5)
  65.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale2To1);
  66.                 else if (dPlotScale == 0.25)
  67.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale4To1);
  68.                 else if (dPlotScale == 0.125)
  69.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale8To1);
  70.                 else if (dPlotScale == 0.1)
  71.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale10To1);
  72.                 else if (dPlotScale == 0.01)
  73.                     psv.SetStdScaleType(acPlSet, StdScaleType.StdScale100To1);
  74.                 else if (dPlotScale == 0)
  75.                     psv.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit);
  76.                 else
  77.                 {
  78.                     psv.SetUseStandardScale(acPlSet, false);
  79.                     CustomScale plotScale = new CustomScale(1, dPlotScale);
  80.                     psv.SetCustomPrintScale(acPlSet, plotScale);
  81.                 }
  82.                 #endregion
  83.                 //设置打印的范围,中心和比例
  84.                 psv.SetPlotWindowArea(acPlSet, PlotExtent);
  85.                 // 设置自定义打印偏移
  86.                 psv.SetPlotOrigin(acPlSet, new Point2d(0, 0));
  87.                 psv.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Window);
  88.                 acPlInfo.OverrideSettings = acPlSet;
  89.                 // Validate the plot info
  90.                 PlotInfoValidator acPlInfoVdr = new PlotInfoValidator();
  91.                 acPlInfoVdr.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
  92.                 acPlInfoVdr.Validate(acPlInfo);
  93.                 // Check to see if a plot is already in progress
  94.                 if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
  95.                 {
  96.                     using (PlotEngine acPlEng = PlotFactory.CreatePublishEngine())
  97.                     {
  98.                         // Track the plot progress with a Progress dialog
  99.                         PlotProgressDialog acPlProgDlg = new PlotProgressDialog(false,
  100.                                                                                 1,
  101.                                                                                 true);
  102.                         using (acPlProgDlg)
  103.                         {
  104.                             // Define the status messages to display when plotting starts
  105.                             acPlProgDlg.set_PlotMsgString(PlotMessageIndex.DialogTitle,
  106.                                                           "Plot Progress");
  107.                             acPlProgDlg.set_PlotMsgString(PlotMessageIndex.CancelJobButtonMessage,
  108.                                                           "Cancel Job");
  109.                             acPlProgDlg.set_PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage,
  110.                                                           "Cancel Sheet");
  111.                             acPlProgDlg.set_PlotMsgString(PlotMessageIndex.SheetSetProgressCaption,
  112.                                                           "Sheet Set Progress");
  113.                             acPlProgDlg.set_PlotMsgString(PlotMessageIndex.SheetProgressCaption,
  114.                                                           "Sheet Progress");
  115.                             // Set the plot progress range
  116.                             acPlProgDlg.LowerPlotProgressRange = 0;
  117.                             acPlProgDlg.UpperPlotProgressRange = 100;
  118.                             acPlProgDlg.PlotProgressPos = 0;
  119.                             // Display the Progress dialog
  120.                             acPlProgDlg.OnBeginPlot();
  121.                             acPlProgDlg.IsVisible = true;
  122.                             // Start to plot the layout
  123.                             acPlEng.BeginPlot(acPlProgDlg, null);
  124.                             // Define the plot output
  125.                             acPlEng.BeginDocument(acPlInfo,
  126.                                                   doc.Name, null, 1, true, sPlotPath);
  127.                             // Display information about the current plot
  128.                             acPlProgDlg.set_PlotMsgString(PlotMessageIndex.Status,
  129.                                                           "Plotting: " + doc.Name + " - " +
  130.                                                           acLayout.LayoutName);
  131.                             // Set the sheet progress range
  132.                             acPlProgDlg.OnBeginSheet();
  133.                             acPlProgDlg.LowerSheetProgressRange = 0;
  134.                             acPlProgDlg.UpperSheetProgressRange = 100;
  135.                             acPlProgDlg.SheetProgressPos = 0;
  136.                             // Plot the first sheet/layout
  137.                             PlotPageInfo acPlPageInfo = new PlotPageInfo();
  138.                             acPlEng.BeginPage(acPlPageInfo, acPlInfo, true, null);
  139.                             acPlEng.BeginGenerateGraphics(null);
  140.                             acPlEng.EndGenerateGraphics(null);
  141.                             // Finish plotting the sheet/layout
  142.                             acPlEng.EndPage(null);
  143.                             acPlProgDlg.SheetProgressPos = 100;
  144.                             acPlProgDlg.OnEndSheet();
  145.                             // Finish plotting the document
  146.                             acPlEng.EndDocument(null);
  147.                             // Finish the plot
  148.                             acPlProgDlg.PlotProgressPos = 100;
  149.                             acPlProgDlg.OnEndPlot();
  150.                             acPlEng.EndPlot(null);
  151.                         }
  152.                     }
  153.                 }
  154.             }
  155.             return true;
  156.         }
回复

使用道具 举报

9

主题

26

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2015-9-15 08:49:00 | 显示全部楼层
这个是需要打印的文件,谢谢各位大侠了!
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:b5osziznxt4.dwg 
下载次数:0  文件大小:133.36 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]



回复

使用道具 举报

0

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
2
发表于 2015-10-1 21:49:00 | 显示全部楼层

问题终于解决,根据当前视图的目标坐标进行一下变换就行了。
回复

使用道具 举报

9

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2015-11-17 17:06:00 | 显示全部楼层

我也遇到类似问题,请教下如何变换?
回复

使用道具 举报

0

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
2
发表于 2015-11-21 09:27:00 | 显示全部楼层

对于视图方向与Z轴平行的情况,先
Point3d ptTarget = Application.GetSystemVariable("TARGET");
然后将打印范围的X和Y分别减去ptTarget的X和Y值即可。
回复

使用道具 举报

9

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2015-11-21 17:09:00 | 显示全部楼层

非常感谢!周一上班去试试
回复

使用道具 举报

3

主题

58

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2017-12-6 14:38:00 | 显示全部楼层
6楼的方法正确,我用该方法解决问题了,多谢!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 05:12 , Processed in 0.157355 second(s), 73 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表