明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5766|回复: 11

[求助]求教如何实现CAD图形的批量打印

  [复制链接]
发表于 2007-1-4 17:51:00 | 显示全部楼层 |阅读模式
求教如何实现CAD图形的批量打印,我是新手,请说的详细点,谢谢
发表于 2007-1-4 19:14:00 | 显示全部楼层

CAD自带的发布命令就可以,而且很好用

打印dwf,直接打印都可以

发表于 2007-1-27 20:43:00 | 显示全部楼层

求教如何实现CAD图形的批量打印

很多人都有类似的经验了

发表于 2007-1-29 23:13:00 | 显示全部楼层

批量打印有以下几种方式吧:

1。不同文件相同打印模式。如南方测绘中生成的分幅图形文件。

2。不同文件不同打印模式。根据每个文件自身的打印样式打印。CAD自带的批量打印。

3。本图形文件中的不同图形区域的相同打印。如纬地道路的断面图等。

4。本图形文件中的各布局空间的不同打印。

不同的批打要求,有不同的处理方法。

发表于 2007-9-11 23:00:00 | 显示全部楼层

很快的,全自动,还可按页码数顺序打印。

发表于 2007-9-12 13:50:00 | 显示全部楼层
;bplotone 批量打印
;creprint 定义打印区
;(delprint) 删除打印区
;bplotlin 图框打印
;;; 保存原有系统变量,设置程序运行时的系统变量
(Defun cmd1 ()
(Setq cho (Getvar "Cmdecho")
osm (Getvar "Osmode")
)
(Setvar "Cmdecho" 0)
(Setvar "osmode" 0)
)



;;; 恢复原有系统变量
(Defun cmd2 ()
(Setvar "Cmdecho" cho)
(Setvar "Osmode" osm)
(Terpri)
(Princ)
)

(vl-load-com)

(defun getbound1( / ent i obj plist pta ptb ss)
(setq ss (ssget "x" (list (cons 8 "print") )))
(setq i  -1)
(setq plist (LIST) )
 (while (setq ent (ssname ss (setq i (1+ i))))
     (setq obj (vlax-ename->vla-object ent))
      (vla-GetBoundingBox obj 'pta 'ptb)
      (setq plist (append plist (LIST (list (vlax-safearray->list pta) (vlax-safearray->list ptb)))))
 );end while
 plist
);end defun
 
;取得图元的外形最小点与最大点
(defun getbound( / ent obj pta ptb)
(setvar "osmode" 0)
  (if (setq ent (car (entsel "\n选择图框:")))
    (progn
      (setq obj (vlax-ename->vla-object ent))
      (vla-GetBoundingBox obj 'pta 'ptb)
      (list (vlax-safearray->list pta) (vlax-safearray->list ptb) )
    )
  );end if
);end defun

;批量打印
(defun c:bplotlin( / a an n p1 p2 plist px py)
(cmd1)
(setq n (getint "\n请输入份数[1]:"))
(if (= n nil)
   (setq n 1)
)
(setq plist (getbound))
(setq p1 (nth 0 plist))
(setq p2 (nth 1 plist))
(setq px  (- (car p2) (car p1)) )
(setq py (-(cadr p2) (cadr p1)))
(if (> px py)
  (setq an "L")
  (setq an "P")
  )
;(setq p1 (getpoint "\n左下点:"))
;(setq p2 (getpoint "\n右上点:"))
(setq a (strcase (getstring "\nA4/A3[A3]:")))
(if (= a nil)
   (setq a "A3")
)
(repeat n
(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")
)
(cmd2)
(princ)
)

;批量打印,可为矩形,可为图块
(defun c:bplotone( / a an n p1 p2 plist px py)
(cmd1)
(setq n (getint "\n请输入份数[1]:"))
(if (= n nil)
   (setq n 1)
)
(setq a (strcase (getstring "\nA4/A3[A3]:")))
(if (= a nil)
   (setq a "A3")
)
(setq plist (getbound1))
(setq i 0)
(repeat (length plist)
  (setq plotlist (nth i plist))
  (setq p1 (nth 0 plotlist))
  (setq p2 (nth 1 plotlist))
  (setq px  (- (car p2) (car p1)) )
  (setq py (-(cadr p2) (cadr p1)))
  (if (> px py)
    (setq an "L")
    (setq an "P")
   )
   (repeat n
     (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")
    );end repeat
   (setq i (1+ i))
 );end repeat
(cmd2)
(princ)
)
;定义打印矩形
(defun C:creprint( / p1 p2 )
(cmd1)
(setq p1 (polar (getpoint "\n左上点:") (* pi 0.75) 50))
(setq p2 (polar (getcorner p1 "\n右下点:")(* pi -0.25) 50) )
(command "-layer" "m" "print" "p" "n" "print" "" )
(command "rectang" p1 p2)
(cmd2)
)
;删除打印矩形
(defun delprint()
(command ".erase" (ssget "x" (list (cons 8 "print"))))
)

点评

试了一下,好像步骤较多啊!可以优化下吗  发表于 2015-7-23 08:46
发表于 2007-9-19 14:09:00 | 显示全部楼层

个人认为,在单文件,不使用布局的情况下,通过把图框定义为属性块,在这个属性块加入打印所需的扩展数据,最后通过过滤指定图框实现打印较好,不过缺点是,事先已把图框准备好了。

发表于 2007-9-21 18:17:00 | 显示全部楼层
不同的人可能做方法不同,我觉得批量打印的话,先判断打印框是否为PL线,然后判断打印框是否为某个LAYER,按照一定的条件自动批量打印,至于CAD内带的批量打印主要是针对布局空间的,
发表于 2007-9-29 10:06:00 | 显示全部楼层
学习      
发表于 2007-9-29 10:07:00 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 01:41 , Processed in 0.273744 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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