war32 发表于 2018-12-5 17:30:00

利用opecdcl的非模态对话框进行多文件批量处理(多图打印)

本帖最后由 war32 于 2018-12-5 17:36 编辑


[*]利用odcl的非模态对话框,对dwg文件进行批量打印,打印全部采用vla的函数进行,非模态对话框运行时不能采用command命令,打印的通用函数见http://bbs.mjtd.com/thread-176453-1-1.html
[*]
[*]
[*];打印pdf
[*](defun c:dwgpichuli/Form1/plotpdf#OnClicked (/ acaddoc activedoc doc en end fenshu i listname lujing maxp minp shuxingbiaotilan tufu)
[*](setq acaddoc (vla-get-documents (vlax-get-acad-object)))
[*](setq activedoc (vla-get-activedocument (vlax-get-acad-object)))
[*](while (/= (dcl-ListView-GetCount dwgpichuli/Form1/ListView1) 0) ;当列表框内文件数量不为0时,依次打开文件
[*]    (progn
[*]      (setq doc (vla-open acaddoc(dcl-ListView-GetItemText dwgpichuli/Form1/ListView1 0 0)))
[*]      ;转至多图打印函数
[*]      (setq *filename* (getvar "dwgname"))
[*]      (dayinpeizhi) ;读取打印配置的自定义文件,包含打印机设置和纸张设置信息等
[*]
[*]      (setq en (ssget"X" '((0 . "INSERT")(410 . "Model")(2 . "A3,A4,A2,A1")))) ;选取块名为A3、A2、A4、A1的块用以判断图框
[*]      (setq i 0)
[*]      (repeat (sslength en)
[*]      (setq end (ssname en i))
[*]      (vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp)
[*]      (setq minp (vlax-safearray->list minp)
[*]          maxp (vlax-safearray->list maxp))
[*]      ;判断纵向横向,l为横向,p为横向
[*]      (setq p1 minp)
[*]      (setq p2 maxp)
[*]      (setq x1 (car p1) y1 (cadr p1) x2 (car p2) y2 (cadr p2))
[*]      (setq x (abs (- x1 x2)) y (abs (- y1 y2)) )
[*]      (if (> y x) (setq st "p") (setq st "l"))
[*]
[*]      (setq fenshu (dcl_control_gettext dwgpichuli_Form1_TextBox1))
[*]      (gm-dayin dayinjipdf tufu p1 p2"y" fenshu lujing T "n")
[*]      (setq i (1+ i))
[*]      )
[*]
[*]      (vla-close doc :vlax-false)
[*]      (dcl-ListView-DeleteItem dwgpichuli/Form1/ListView1 0) ;删除列表中已打印的文件
[*]    )
[*])
[*])

李钊伟2012 发表于 2020-4-13 12:37:49

本帖最后由 李钊伟2012 于 2020-4-13 16:19 编辑

感觉不错,有机会试试看

陈伟 发表于 2021-9-24 22:34:37

建议可以按属性识别图幅来自动完成批量打印(最好是动态属性块图框),这样做批打软件时就变得简单了,不知道可有QQ群进行交流
页: [1]
查看完整版本: 利用opecdcl的非模态对话框进行多文件批量处理(多图打印)