明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 220|回复: 10

[提问] 打印问题,相同的dwg,一个dwg正常,另外dwg错误,已上传dwg和代码

[复制链接]
发表于 前天 10:01 | 显示全部楼层 |阅读模式
本帖最后由 DCMZ 于 2025-3-10 10:58 编辑

两个完全相同的dwg,“01_正常.dwg”和"02_错误.dwg",我的打印程序(已上传附件),通过选择左下角和右上角的点进行打印。

但是02.dwg打印出来是白的,然后,我选中02.dwg里面所有内容,新建一个空白01.dwg,将图元全部粘贴过来。然后在01.dwg里面同样的操作,打印就正常了。
麻烦大家帮忙看下原因呢,下面是代码,也可见附件。
另外,我初步分析原因,错误的那个dwg可能藏有私货,打开时,会有下图中的提示,并且,两个dwg大小不同。


(defun C:Dprint()
        ;基本参数设置
        (progn
                (setq PlotDevice "pdfFactory Pro");打印机名称
                (setq PlotStyle "monochrome.ctb");打印样式
                (setq Acad (vlax-get-acad-object))
                (setq ActDoc (vla-get-Activedocument Acad))
                (setq Ms (vla-get-Modelspace ActDoc))
                (setq Plot (vla-get-plot ActDoc))
                (setq Layout (vla-get-activelayout ActDoc))
        )
        
        ;打印
        (progn
                (setq Pt1 (getpoint "\n拾取坐下点坐标:"));左下点坐标
                (setq Pt2 (getpoint "\n拾取坐右上坐标:"));右上点坐标
                ;开始窗口打印
                (vla-put-ConfigName Layout PlotDevice);设置打印机名称,这一步必须在前面,否则后面无法运行
                (vla-SetWindowToPlot Layout (2DPoint Pt1) (2DPoint Pt2))
                (vla-put-plottype Layout acWindow);打印范围设置为窗口
                (vla-put-plotrotation Layout ac0degrees)
                (vla-put-centerplot Layout :vlax-true);自动居中
                (vla-put-PlotRotation Layout 1);打印方向设置为横向
                (vla-setcustomscale Layout 1 1);设置比例
                (vla-put-CanonicalMediaName Layout "A3")
                (vla-put-StyleSheet Layout PlotStyle)
                (vla-put-paperunits Layout acMillimeters);设置单位为mm
                (vla-put-NumberofCopies Plot 1)
                (setvar "backgroundplot" 0);设置为前台打印
                (vla-plotToDevice Plot)
        )

)

(defun 2DPoint (pt)
        (vlax-make-variant
                (vlax-safearray-fill
                        (vlax-make-safearray vlax-vbdouble '(0 . 1))
                        (list (car pt) (cadr pt))
                )
        )
)






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 前天 11:32 | 显示全部楼层
  1. (defun C:Dprint()
  2.         ;基本参数设置
  3.         (progn
  4.                 (defun 2DPoint (pt)
  5.                         (vlax-make-variant
  6.                                 (vlax-safearray-fill
  7.                                         (vlax-make-safearray vlax-vbdouble '(0 . 1))
  8.                                         (list (car pt) (cadr pt))
  9.                                 )
  10.                         )
  11.                 )
  12.                 (setq PlotDevice "pdfFactory Pro");打印机名称
  13.                 (setq PlotStyle "monochrome.ctb");打印样式
  14.                 (setq Acad (vlax-get-acad-object))
  15.                 (setq ActDoc (vla-get-Activedocument Acad))
  16.                 (setq Ms (vla-get-Modelspace ActDoc))
  17.                 (setq Plot (vla-get-plot ActDoc))
  18.                 (setq Layout (vla-get-activelayout ActDoc))
  19.         )
  20.        
  21.         ;打印
  22.         (progn
  23.                 (setq p1 (getpoint "\n拾取坐下点坐标:"))
  24.                 (setq Pt1 (trans p1 1 0));左下点坐标
  25.                 (setq p2 (getcorner p1 "\n拾取坐右上坐标:"))
  26.                 (setq Pt2 (trans p2 1 0));右上点坐标
  27.                 ;开始窗口打印
  28.                 (vla-put-ConfigName Layout PlotDevice);设置打印机名称,这一步必须在前面,否则后面无法运行
  29.                 (vla-SetWindowToPlot Layout (2DPoint Pt1) (2DPoint Pt2))
  30.                 (vla-put-plottype Layout acWindow);打印范围设置为窗口
  31.                 (vla-put-plotrotation Layout ac0degrees)
  32.                 (vla-put-centerplot Layout :vlax-true);自动居中
  33.                 (vla-put-PlotRotation Layout 1);打印方向设置为横向
  34.                 (vla-setcustomscale Layout 1 1);设置比例
  35.                 (vla-put-CanonicalMediaName Layout "A3")
  36.                 ;布满图纸
  37.                 (vla-put-UseStandardScale Layout :vlax-true);启用标准比例
  38.                 (vla-put-StandardScale Layout acScaleToFit);自动调整比例
  39.                 (vla-put-StyleSheet Layout PlotStyle)
  40.                 (vla-put-paperunits Layout acMillimeters);设置单位为mm
  41.                 (vla-put-NumberofCopies Plot 1)
  42.                 (setvar "backgroundplot" 0);设置为前台打印
  43.                 (vla-plotToDevice Plot)
  44.         )
  45. )
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 09:10 | 显示全部楼层

大神,我按你代码试了,还是白的
回复 支持 反对

使用道具 举报

发表于 5 小时前 | 显示全部楼层
DCMZ 发表于 2025-3-9 09:10
大神,我按你代码试了,还是白的

是的,这个图纸上模型空间上画的任何图纸,用这段代码打印,都是空白。不清楚什么原因。
回复 支持 反对

使用道具 举报

 楼主| 发表于 4 小时前 | 显示全部楼层
顶起来,等着大神大显身手。
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层
参考下秋枫大佬源码里面这段代码修改下你的程序

(setq target (getvar "target"))

回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
本帖最后由 黄翔 于 2025-3-10 13:45 编辑

代码修复.                     

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层
把拾取pt1和pt2坐标这样改一下就可以了
  1. (while (not (setq Pt1 (getpoint "\n拾取第一角坐标:"))));左下点坐标
  2.                 (while (not (setq Pt2 (GETCORNER pt1 "\n拾取第二角坐标:"))));右上点坐标
  3.                 (setq pt1 (mapcar '- pt1 (getvar "target"))
  4.                       pt2 (mapcar '- pt2 (getvar "target"))
  5.                 )
回复 支持 反对

使用道具 举报

 楼主| 发表于 半小时前 | 显示全部楼层
ludaweb 发表于 2025-3-10 12:15
参考下秋枫大佬源码里面这段代码修改下你的程序

(setq target (getvar "target"))

搞定了,谢谢大神
回复 支持 反对

使用道具 举报

 楼主| 发表于 半小时前 | 显示全部楼层
lijiao 发表于 2025-3-10 13:38
把拾取pt1和pt2坐标这样改一下就可以了

终于可以了,感谢大神
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-3-10 15:35 , Processed in 0.184447 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表