明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1281|回复: 7

[源码] 简易的多文件批量打印,程序只能打印当前的dwg文件,求网友查错。

[复制链接]
发表于 2020-8-29 17:58 | 显示全部楼层 |阅读模式
简易的多文件批量打印
1.预先设置好页面设置ps1
2.按照ps1打印打开的几个dwg文件
问题是,程序只能打印当前的dwg文件,求网友查错。

  1. (defun ax:2dpoint (pt)
  2.   (vlax-make-variant
  3.     (vlax-safearray-fill
  4.       (vlax-make-safearray vlax-vbdouble '(0 . 1))
  5.       (list (car pt) (cadr pt))
  6.     )
  7.   )
  8. )

  9. (defun objs-lst  (objs)
  10.   (setq obj-lst nil)
  11.   (vlax-for obj objs (setq obj-lst (cons obj obj-lst)))
  12.   (reverse obj-lst)
  13. )

  14. (defun getblock_name-yf  (str var)
  15.   (princ str)
  16.   (if (and (/= var nil) (/= var ""))
  17.     (progn (princ "<") (princ var) (princ ">"))
  18.   )
  19.   (princ ":")
  20.   (if (setq in (entsel ""))
  21.     (setq var (cdr (assoc 2 (entget (car in)))))
  22.     (eval var)
  23.   )
  24. )


  25. ;;;获取打印文件存储位置
  26. (defun qf_getfolder (msg / winshell shfolder path catchit)
  27.   (vl-load-com)
  28.   (setq winshell (vlax-create-object "Shell.Application"))
  29.   (setq shfolder (vlax-invoke-method winshell 'browseforfolder 0 msg 1))
  30.   (setq
  31.     catchit (vl-catch-all-apply
  32.         '(lambda ()
  33.      (setq shfolder (vlax-get-property shfolder 'self))
  34.      (setq path (vlax-get-property shfolder 'path))
  35.          )
  36.       )
  37.   )
  38.   (if (vl-catch-all-error-p catchit)
  39.     nil
  40.     path
  41.   )
  42. )

  43. ;;;边界函数AX:GETBOUNDINGBOX (ENT)
  44. (defun ax:getboundingbox2 (obj)
  45.   (vla-getboundingbox obj 'll 'ur)
  46.   (mapcar 'vlax-safearray->list (list ll ur))
  47. )

  48. (defun dwj-plot
  49.     (path doc layout plotcfg drawingframe-blkname)
  50. ;;;根据图框块名过滤出某个布局中的图框
  51.   (setq drawingframe_lst nil)
  52.   (vlax-for block (vla-get-block layout)
  53.     (if  (and (= (vla-get-objectname block) "AcDbBlockReference")
  54.        (= (vla-get-name block) drawingframe-blkname)
  55.   )
  56.       (setq drawingframe_lst (cons block drawingframe_lst))
  57.     )
  58.   )

  59.   (setq llurs nil)
  60.   (foreach obj drawingframe_lst
  61.     (setq llur (ax:getboundingbox2 obj))
  62.     (setq ll (reverse (cdr (reverse (car llur)))))
  63.     (setq ur (reverse (cdr (reverse (cadr llur)))))
  64. ;;;    获取属性变量
  65.     (setq var (vla-getattributes obj))
  66. ;;;    属性变量转为属性表
  67.     (setq attr-lst (vlax-safearray->list (vlax-variant-value var)))
  68. ;;;    根据属性标签,寻找属性文字
  69.     (foreach attr attr-lst
  70.       (setq tagstring (vla-get-tagstring attr))
  71.       (cond
  72.   ((= tagstring "图号")
  73.    (setq tuhao (vla-get-textstring attr))
  74.   )
  75.   ((= tagstring "图纸名称")
  76.    (setq tuming (vla-get-textstring attr))
  77.   )
  78.   ((= tagstring "图纸名称1")
  79.    (setq tuming1 (vla-get-textstring attr))
  80.   )
  81.   (t t)
  82.       )
  83.     )
  84.     (setq filename (strcat tuhao "_" tuming tuming1))
  85.     (setq llur (list ll ur filename))
  86.     (setq llurs (cons llur llurs))
  87.   )

  88.   (setq llurs (sxzy llurs 10))

  89.   (foreach x llurs
  90.     (setq ll (car x))
  91.     (setq ur (cadr x))
  92.     (setq filename (last x))
  93. ;;;设置打印范围
  94.     (vla-setwindowtoplot
  95.       plotcfg
  96.       (ax:2dpoint ll)
  97.       (ax:2dpoint ur)
  98.     )
  99. ;;;指定页面设置为当前
  100.     (vla-copyfrom layout plotcfg)
  101. ;;;获取当前页面设置
  102.     (setq plot (vla-get-plot doc))
  103. ;;;打印
  104.     (vla-plottofile
  105.       plot
  106.       (strcat path "\" filename)
  107.     )
  108.   )
  109. )


  110. (defun c:mp ()
  111.   (vl-load-com)
  112.   (load "_lib-yf.lsp")
  113.   (princ
  114.     "\nmp-批量打印-多文件,预设页面设置,打开的文件都将被打印"
  115.   )
  116.   (setq old (getvar "OSMODE"))
  117.   (setvar "OSMODE" 0)
  118. ;;;cad  
  119.   (setq app (vlax-get-acad-object))
  120. ;;;文档
  121.   (setq docs (vla-get-documents app))
  122. ;;;当前文档
  123.   (setq *doc* (vla-get-activedocument app))
  124. ;;;当前布局  
  125. ;;;  (setq *lay* (vla-get-activelayout *doc*))
  126. ;;;页面设置
  127.   (setq *plotcfgs* (vla-get-plotconfigurations *doc*))
  128.   (setq tmp2 (nth 2 (objs-lst *plotcfgs*)))
  129. ;;;页面设置名表
  130.   (setq pagesetup_name-lst nil)
  131.   (vlax-for *plotcfg* *plotcfgs*
  132.     (setq pagesetup_name (vla-get-name *plotcfg*))
  133.     (setq modeltype (vla-get-modeltype *plotcfg*))
  134.     (setq pagesetup_name-lst (cons pagesetup_name pagesetup_name-lst))
  135.   )
  136.   (setq pagesetup_name-lst (reverse pagesetup_name-lst))
  137.   (setq index 1)
  138.   (setq tmp nil)
  139.   (foreach x pagesetup_name-lst
  140.     (setq tmp (cons (itoa index) tmp))
  141.     (setq tmp (cons "->" tmp))
  142.     (setq tmp (cons x tmp))
  143.     (setq tmp (cons ";" tmp))
  144.     (setq index (+ 1 index))
  145.   )
  146.   (setq tmp (reverse tmp))
  147.   (setq string (apply 'strcat tmp))
  148.   (setq string (strcat "\n选择页面设置名称<" string ">"))
  149.   (setq index2 (getint-yf string index2))
  150. ;;;页面设置名称
  151.   (setq pagesetup_name (nth (- index2 1) pagesetup_name-lst))
  152. ;;;页面设置,用户要用的
  153.   (setq *plotcfg* (vla-item *plotcfgs* pagesetup_name))

  154.   (setq *windowtitle* (vla-get-windowtitle *doc*))
  155.   (vlax-for doc  docs
  156. ;;;;;;当前文档的页面设置复制到其他文档
  157.     (if  (/= (strcase (vla-get-windowtitle doc))
  158.       (strcase *windowtitle*)
  159.   )
  160.       (progn
  161. ;;;  在其他文档创建页面设置名为pagesetup_name的页面设置
  162.   (setq plotcfg (vla-add
  163.       (vla-get-plotconfigurations doc)
  164.       pagesetup_name
  165.       :vlax-false
  166.           )
  167.   )
  168. ;;;将*plotcfg*复制进plotcfg
  169.   (vla-copyfrom plotcfg *plotcfg*)
  170.   (vlax-for layout (vla-get-layouts doc)
  171.     (if (/= (vla-get-name layout) "Model")
  172.       (vla-copyfrom
  173.         layout
  174.         plotcfg
  175.       )
  176.     )
  177.   )
  178.       )
  179.     )
  180.   )

  181.   (setq  drawingframe-blkname
  182.    (getblock_name-yf
  183.      "\n选择图框,获取图框块名"
  184.      drawingframe-blkname
  185.    )
  186.   )
  187.   (princ drawingframe-blkname)

  188.   (setq path (qf_getfolder "选择打印文件保存位置"))

  189.   (vlax-for doc  docs
  190.     (setq doc doc)
  191.     (setq plotcfgs (vla-get-plotconfigurations doc))
  192.     (setq plotcfg (vla-item plotcfgs pagesetup_name))
  193. ;;;    (vla-put-activedocument app doc)
  194. ;;;    (vla-activate doc)
  195.     (vlax-for layout (vla-get-layouts doc)
  196.       (setq name (vla-get-name layout))
  197.       (if (/= name "Model")
  198.   (dwj-plot path doc layout plotcfg drawingframe-blkname)
  199.       )
  200.     )
  201.   )

  202. ;;;  (setq docs (vla-get-documents (vlax-get-acad-object)))  
  203. ;;;  (setq doc (vla-item docs 0))
  204. ;;;  (setq plotcfgs (vla-get-plotconfigurations doc))
  205. ;;;  (setq plotcfg (vla-item plotcfgs "yf-dwg to pdf-A2"))
  206. ;;;  (setq layout (vla-get-activelayout doc))  
  207. ;;;  (dwj-plot path doc layout plotcfg drawingframe-blkname)

  208.   (princ)
  209. )




本帖子中包含更多资源

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

x
发表于 2020-8-30 12:20 | 显示全部楼层
大佬,提示有个啥没得
 楼主| 发表于 2020-8-30 16:56 来自手机 | 显示全部楼层
zj20190405 发表于 2020-8-30 12:20
大佬,提示有个啥没得

需要大佬纠错
发表于 2020-8-30 21:32 | 显示全部楼层
论坛有其他打印程序
发表于 2020-8-31 08:49 | 显示全部楼层
http://bbs.mjtd.com/thread-110079-1-1.html
这是我的一个文件夹下的多文件打印。
lisp中好象不能激活其它文件。
 楼主| 发表于 2020-8-31 10:54 来自手机 | 显示全部楼层
nxchenjk 发表于 2020-8-31 08:49
http://bbs.mjtd.com/thread-110079-1-1.html
这是我的一个文件夹下的多文件打印。
lisp中好象不能激活其 ...

您用的是命令行模式,我想用vla模式
 楼主| 发表于 2020-9-1 15:08 | 显示全部楼层
zj20190405 发表于 2020-8-30 12:20
大佬,提示有个啥没得

您是说您那里可以正常打印?
发表于 2021-9-23 15:52 | 显示全部楼层
本帖最后由 陈伟 于 2021-9-23 15:57 编辑

批打成功了没有??lib-yf.lsp  文件没有,都无法测试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 08:32 , Processed in 0.304348 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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