[求助]求教如何实现CAD图形的批量打印
求教如何实现CAD图形的批量打印,我是新手,请说的详细点,谢谢 <p>CAD自带的发布命令就可以,而且很好用</p><p>打印dwf,直接打印都可以</p> <p><strong>求教如何实现CAD图形的批量打印</strong></p><p><strong></strong></p><p><strong></strong></p><p><strong>很多人都有类似的经验了</strong></p> <p>批量打印有以下几种方式吧:</p><p>1。不同文件相同打印模式。如南方测绘中生成的分幅图形文件。</p><p>2。不同文件不同打印模式。根据每个文件自身的打印样式打印。CAD自带的批量打印。</p><p>3。本图形文件中的不同图形区域的相同打印。如纬地道路的断面图等。</p><p>4。本图形文件中的各布局空间的不同打印。</p><p>不同的批打要求,有不同的处理方法。</p> <p>很快的,全自动,还可按页码数顺序打印。</p> ;bplotone 批量打印<br/>;creprint 定义打印区<br/>;(delprint) 删除打印区<br/>;bplotlin 图框打印<br/>;;; 保存原有系统变量,设置程序运行时的系统变量<br/>(Defun cmd1 ()<br/>(Setq cho (Getvar "Cmdecho")<br/>osm (Getvar "Osmode")<br/>)<br/>(Setvar "Cmdecho" 0)<br/>(Setvar "osmode" 0)<br/>)<br/><br/><br/><br/>;;; 恢复原有系统变量<br/>(Defun cmd2 ()<br/>(Setvar "Cmdecho" cho)<br/>(Setvar "Osmode" osm)<br/>(Terpri)<br/>(Princ)<br/>)<br/><br/>(vl-load-com)<br/><br/>(defun getbound1( / ent i obj plist pta ptb ss)<br/>(setq ss (ssget "x" (list (cons 8 "print") )))<br/>(setq i -1)<br/>(setq plist (LIST) ) <br/> (while (setq ent (ssname ss (setq i (1+ i))))<br/> (setq obj (vlax-ename->vla-object ent))<br/> (vla-GetBoundingBox obj 'pta 'ptb)<br/> (setq plist (append plist (LIST (list (vlax-safearray->list pta) (vlax-safearray->list ptb)))))<br/> );end while <br/> plist<br/>);end defun<br/> <br/>;取得图元的外形最小点与最大点<br/>(defun getbound( / ent obj pta ptb)<br/>(setvar "osmode" 0)<br/> (if (setq ent (car (entsel "\n选择图框:")))<br/> (progn<br/> (setq obj (vlax-ename->vla-object ent))<br/> (vla-GetBoundingBox obj 'pta 'ptb)<br/> (list (vlax-safearray->list pta) (vlax-safearray->list ptb) )<br/> )<br/> );end if<br/>);end defun<br/><br/>;批量打印<br/>(defun c:bplotlin( / a an n p1 p2 plist px py)<br/>(cmd1)<br/>(setq n (getint "\n请输入份数:"))<br/>(if (= n nil)<br/> (setq n 1)<br/>)<br/>(setq plist (getbound))<br/>(setq p1 (nth 0 plist))<br/>(setq p2 (nth 1 plist))<br/>(setq px (- (car p2) (car p1)) )<br/>(setq py (-(cadr p2) (cadr p1)))<br/>(if (> px py)<br/> (setq an "L")<br/> (setq an "P")<br/> )<br/>;(setq p1 (getpoint "\n左下点:"))<br/>;(setq p2 (getpoint "\n右上点:"))<br/>(setq a (strcase (getstring "\nA4/A3:")))<br/>(if (= a nil)<br/> (setq a "A3")<br/>)<br/>(repeat n<br/>(command "-plot" "y" "模型" "\\\\JH-05\\HP LaserJet 5100 PCL 6" a "M" an "N" "W" p1 p2 "F" "1.75,0.00" "y" "monochrome.ctb" "y" "w" "N" "n" "Y")<br/>)<br/>(cmd2)<br/>(princ)<br/>)<br/><br/>;批量打印,可为矩形,可为图块<br/>(defun c:bplotone( / a an n p1 p2 plist px py)<br/>(cmd1)<br/>(setq n (getint "\n请输入份数:"))<br/>(if (= n nil)<br/> (setq n 1)<br/>)<br/>(setq a (strcase (getstring "\nA4/A3:")))<br/>(if (= a nil)<br/> (setq a "A3")<br/>)<br/>(setq plist (getbound1))<br/>(setq i 0)<br/>(repeat (length plist)<br/> (setq plotlist (nth i plist))<br/> (setq p1 (nth 0 plotlist))<br/> (setq p2 (nth 1 plotlist))<br/> (setq px (- (car p2) (car p1)) )<br/> (setq py (-(cadr p2) (cadr p1)))<br/> (if (> px py)<br/> (setq an "L")<br/> (setq an "P")<br/> )<br/> (repeat n<br/> (command "-plot" "y" "模型" "\\\\JH-05\\HP LaserJet 5100 PCL 6" a "M" an "N" "W" p1 p2 "F" "1.75,0.00" "y" "monochrome.ctb" "y" "w" "N" "n" "Y")<br/> );end repeat<br/> (setq i (1+ i))<br/> );end repeat<br/>(cmd2)<br/>(princ)<br/>)<br/>;定义打印矩形<br/>(defun C:creprint( / p1 p2 )<br/>(cmd1)<br/>(setq p1 (polar (getpoint "\n左上点:") (* pi 0.75) 50))<br/>(setq p2 (polar (getcorner p1 "\n右下点:")(* pi -0.25) 50) )<br/>(command "-layer" "m" "print" "p" "n" "print" "" )<br/>(command "rectang" p1 p2)<br/>(cmd2)<br/>)<br/>;删除打印矩形<br/>(defun delprint()<br/>(command ".erase" (ssget "x" (list (cons 8 "print"))))<br/>) <p>个人认为,在单文件,不使用布局的情况下,通过把图框定义为属性块,在这个属性块加入打印所需的扩展数据,最后通过过滤指定图框实现打印较好,不过缺点是,事先已把图框准备好了。</p> 不同的人可能做方法不同,我觉得批量打印的话,先判断打印框是否为PL线,然后判断打印框是否为某个LAYER,按照一定的条件自动批量打印,至于CAD内带的批量打印主要是针对布局空间的, 学习 <a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=57165&replyID=43570&skin=1"><font color="#000000" size="+0">CAD自带的发布命令就可以,而且很好用...</font></a>
页:
[1]
2