逐月飞鸿 发表于 2011-11-5 09:26:59

布局的批量打印程序-很好用,但还缺一点点

本帖最后由 逐月飞鸿 于 2011-11-5 09:43 编辑

;;;把所有布局出图;;;;;;程序设计:lfs;hnrbi;;;2011.11.04;;---------------;;;
(defun C:bj (/ N PLO_LAYOUTS PLO_LAYOUTL)
(command "_.layout" "delete" "Layout1")
;del掉原来大师多余的布局
; -取得注册表中默认打印机--------------------------------------------------------
(defun defultprint (/ device)
    (substr (setq device
   (vl-registry-read
       "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
       "Device"
   ) ;_ 结束vl-registry-read
   ) ;_ 结束setq
   1
   (vl-string-search "," device)
    ) ;_ 结束substr
) ;_ 结束defun
; ==取得注册表中默认打印机end========================================================
(command ".ucs" "W")
(command "setvar" "dimzin" "0")
(command "setvar" "DYNMODE" "0")
(setq myprint (defultprint))
(setq ctb_type "monochrome.ctb")
(command "osnap" "off")
(vl-load-com) ;==================================

;取得打印纸张打印
(setq papersc (getstring "\n出图大小A3/A4:<A3>"))
(setq scale "unknow")
(if (or (= papersc "") (= papersc "3"))
    (setq scale 1)
    (setq scale 0.707)
) ;_ 结束if
(if (or (= papersc "") (= papersc "3"))
    (setq paper "A3")
    (setq paper "A4")
) ;_ 结束if
(setq printtype (getstring "\n打印全部布局/当前布局:<A>"))
(setq printt "unknow")
(setq PLO_LAYOUTS (LAYOUTLIST))
(setq PLO_LAYOUTSL (length PLO_LAYOUTS))
(setq N 0)
(if (or (= printtype "") (= printtype "A") (= printtype "a"))
      ((repeat PLO_LAYOUTSL
      (command ".plot"
      "y"
      (nth N PLO_LAYOUTS)
      myprint
      paper
      "M"
      "L"
      ""
      "L"
      scale
      ""
;;;输入打印偏移 (x,y) <0.00,0.00>:
      "Y"
      ctb_type
      ""
      ""
      ""
      ""
      ""
      ""
      ""
      ) ;_ 结束command
      (setq N (1+ N))
    ) );_ 结束repeat)
    (打印当前布局语句,抽空再完善)
) ;_ 结束if
; ==============================================================================
(princ)
) ;_ 结束defun

上面是昨天抽空改写的一段批量打印布局的程序;很好用,自动完成了页面设置和打印机的自动获取;
但是,美中不足的地方:
1.用lisp怎样获取当前的布局名称,并且只打印当前布局的语句,请高人给指点一下;
2.对于layout1不打印,现在采取的是删除的办法,这个感觉不是很好,采用什么方法不删除,但是确不打印layout1?
就是说,只有一个layout1名称的布局时候,就不打印了,但是也不删除layout1?
请lisp高人给完善一下,先谢!
3.有没有办法实现,打开的文档都执行一下这个命令?就是说输入bj后,打开的文档都打印布局?




lohas1118 发表于 2011-11-5 13:49:15

不错,值得学习

cushi 发表于 2011-11-5 14:50:16

获取当前的布局名称:(getvar "ctab")
个人认为布局的批量打印适用性很低,远不如在模型空间中的批量打印有用。出几张图就不用编程了,直接用CAD的打印命令好了。

wade320 发表于 2011-11-5 20:53:55

布局CAD就自带有打印程序,但是不支持一个布局中有很多图的情况。但写程序来打印还是很有用的,值得学习

逐月飞鸿 发表于 2011-11-7 08:26:16

能不能有大侠给完善一下?获取当前的布局名称:(getvar "ctab")
个人认为布局的批量打印适用性很低,远不如在模型空间中的批量打印有用。出几张图就不用编程了,直接用CAD的打印命令好了。
这个改怎么继续?

逐月飞鸿 发表于 2011-11-8 08:35:07

人呢?请高人指点

millermin 发表于 2011-12-29 05:04:57

批量布局打印的效果应该是:不打开文件,自动打印当前路径里所有文件的所有布局。前提是每个文件的布局及打印格式全部设置好的,平时cad下手工打印也仅仅是 布局---ctrl p---回车就能出图。至于份数我觉得不重要。再运行程序也不难。因为99%的工作都自动化了。
这样的程序其实意义很大。可以一次性出整套图纸。我正在做个程序。希望多给建议。

kwok 发表于 2011-12-29 09:40:10

还真很少用布局打印,...
支持..

xotoo 发表于 2011-12-29 12:14:51

建议用图纸集

悟透社会 发表于 2013-9-22 21:56:53

谁有模型空间的批量打印程序呀!
页: [1]
查看完整版本: 布局的批量打印程序-很好用,但还缺一点点