找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 767|回复: 0

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

[复制链接]
发表于 2020-8-29 18:05:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
简易的多文件批量打印
1.预先设置好页面设置ps1
2.按照ps1打印打开的几个dwg文件
问题是,程序只能打印当前的dwg文件,求网友查错。

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

(defun objs-lst        (objs)
  (setq obj-lst nil)
  (vlax-for obj objs (setq obj-lst (cons obj obj-lst)))
  (reverse obj-lst)
)

(defun getblock_name-yf        (str var)
  (princ str)
  (if (and (/= var nil) (/= var ""))
    (progn (princ "<") (princ var) (princ ">"))
  )
  (princ ":")
  (if (setq in (entsel ""))
    (setq var (cdr (assoc 2 (entget (car in)))))
    (eval var)
  )
)


;;;获取打印文件存储位置
(defun qf_getfolder (msg / winshell shfolder path catchit)
  (vl-load-com)
  (setq winshell (vlax-create-object "Shell.Application"))
  (setq shfolder (vlax-invoke-method winshell 'browseforfolder 0 msg 1))
  (setq
    catchit (vl-catch-all-apply
              '(lambda ()
                 (setq shfolder (vlax-get-property shfolder 'self))
                 (setq path (vlax-get-property shfolder 'path))
               )
            )
  )
  (if (vl-catch-all-error-p catchit)
    nil
    path
  )
)

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

(defun dwj-plot
                (path doc layout plotcfg drawingframe-blkname)
;;;根据图框块名过滤出某个布局中的图框
  (setq drawingframe_lst nil)
  (vlax-for block (vla-get-block layout)
    (if        (and (= (vla-get-objectname block) "AcDbBlockReference")
             (= (vla-get-name block) drawingframe-blkname)
        )
      (setq drawingframe_lst (cons block drawingframe_lst))
    )
  )

  (setq llurs nil)
  (foreach obj drawingframe_lst
    (setq llur (ax:getboundingbox2 obj))
    (setq ll (reverse (cdr (reverse (car llur)))))
    (setq ur (reverse (cdr (reverse (cadr llur)))))
;;;    获取属性变量
    (setq var (vla-getattributes obj))
;;;    属性变量转为属性表
    (setq attr-lst (vlax-safearray->list (vlax-variant-value var)))
;;;    根据属性标签,寻找属性文字
    (foreach attr attr-lst
      (setq tagstring (vla-get-tagstring attr))
      (cond
        ((= tagstring "图号")
         (setq tuhao (vla-get-textstring attr))
        )
        ((= tagstring "图纸名称")
         (setq tuming (vla-get-textstring attr))
        )
        ((= tagstring "图纸名称1")
         (setq tuming1 (vla-get-textstring attr))
        )
        (t t)
      )
    )
    (setq filename (strcat tuhao "_" tuming tuming1))
    (setq llur (list ll ur filename))
    (setq llurs (cons llur llurs))
  )

  (setq llurs (sxzy llurs 10))

  (foreach x llurs
    (setq ll (car x))
    (setq ur (cadr x))
    (setq filename (last x))
;;;设置打印范围
    (vla-setwindowtoplot
      plotcfg
      (ax:2dpoint ll)
      (ax:2dpoint ur)
    )
;;;指定页面设置为当前
    (vla-copyfrom layout plotcfg)
;;;获取当前页面设置
    (setq plot (vla-get-plot doc))
;;;打印
    (vla-plottofile
      plot
      (strcat path "\\" filename)
    )
  )
)


(defun c:mp ()
  (vl-load-com)
  (load "_lib-yf.lsp")
  (princ
    "\nmp-批量打印-多文件,预设页面设置,打开的文件都将被打印"
  )
  (setq old (getvar "OSMODE"))
  (setvar "OSMODE" 0)
;;;cad  
  (setq app (vlax-get-acad-object))
;;;文档
  (setq docs (vla-get-documents app))
;;;当前文档
  (setq *doc* (vla-get-activedocument app))
;;;当前布局  
;;;  (setq *lay* (vla-get-activelayout *doc*))
;;;页面设置
  (setq *plotcfgs* (vla-get-plotconfigurations *doc*))
  (setq tmp2 (nth 2 (objs-lst *plotcfgs*)))
;;;页面设置名表
  (setq pagesetup_name-lst nil)
  (vlax-for *plotcfg* *plotcfgs*
    (setq pagesetup_name (vla-get-name *plotcfg*))
    (setq modeltype (vla-get-modeltype *plotcfg*))
    (setq pagesetup_name-lst (cons pagesetup_name pagesetup_name-lst))
  )
  (setq pagesetup_name-lst (reverse pagesetup_name-lst))
  (setq index 1)
  (setq tmp nil)
  (foreach x pagesetup_name-lst
    (setq tmp (cons (itoa index) tmp))
    (setq tmp (cons "->" tmp))
    (setq tmp (cons x tmp))
    (setq tmp (cons ";" tmp))
    (setq index (+ 1 index))
  )
  (setq tmp (reverse tmp))
  (setq string (apply 'strcat tmp))
  (setq string (strcat "\n选择页面设置名称<" string ">"))
  (setq index2 (getint-yf string index2))
;;;页面设置名称
  (setq pagesetup_name (nth (- index2 1) pagesetup_name-lst))
;;;页面设置,用户要用的
  (setq *plotcfg* (vla-item *plotcfgs* pagesetup_name))

  (setq *windowtitle* (vla-get-windowtitle *doc*))
  (vlax-for doc        docs
;;;;;;当前文档的页面设置复制到其他文档
    (if        (/= (strcase (vla-get-windowtitle doc))
            (strcase *windowtitle*)
        )
      (progn
;;;        在其他文档创建页面设置名为pagesetup_name的页面设置
        (setq plotcfg (vla-add
                        (vla-get-plotconfigurations doc)
                        pagesetup_name
                        :vlax-false
                      )
        )
;;;将*plotcfg*复制进plotcfg
        (vla-copyfrom plotcfg *plotcfg*)
        (vlax-for layout (vla-get-layouts doc)
          (if (/= (vla-get-name layout) "Model")
            (vla-copyfrom
              layout
              plotcfg
            )
          )
        )
      )
    )
  )

  (setq        drawingframe-blkname
         (getblock_name-yf
           "\n选择图框,获取图框块名"
           drawingframe-blkname
         )
  )
  (princ drawingframe-blkname)

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

  (vlax-for doc        docs
    (setq doc doc)
    (setq plotcfgs (vla-get-plotconfigurations doc))
    (setq plotcfg (vla-item plotcfgs pagesetup_name))
;;;    (vla-put-activedocument app doc)
;;;    (vla-activate doc)
    (vlax-for layout (vla-get-layouts doc)
      (setq name (vla-get-name layout))
      (if (/= name "Model")
        (dwj-plot path doc layout plotcfg drawingframe-blkname)
      )
    )
  )

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

  (princ)
)



mp-批量打印-多文件-预设页面设置-20.LSP

5.77 KB, 下载次数: 19, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 19:58 , Processed in 0.287726 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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