fedd 发表于 2021-11-19 06:13:57

大神们,救命啊!!!!!求打印超级实用的代码

不要批量打印,每一个CAD文件只有一个图框,图框有时大有时小,求一个lisp代码,运行后自动把大小位置变化的、唯一的图框自动设置为打印窗口,不用每次去选取真的很烦,如果能做到,绝对是超级实用。求大神大侠们出手,10个明经币先奉上,拜托拜托,感谢感谢~~~~~~

nxchenjk 发表于 2021-11-19 07:59:55

;;;*******************多文件批量打印********************
(defun c:mypt ()
(vl-load-com)
(command "_pagesetup")
(setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
(setq clayout (vla-get-activelayout acaddoc))
(vla-refreshplotdeviceinfo clayout)
(setq printname (vla-get-configname clayout))
(setq papersize (vla-GetLocaleMediaName clayout(vla-get-CanonicalMediaName clayout)))
(setq PlotStyle (vla-get-stylesheet clayout))
;(setq currScale (vla-get-StandardScale clayout)) 获得打印例

(setq printorta (vla-get-plotrotation clayout))
(if(= printorta 0)(setq Rote "L")(setq Rote "P"))


(setq        Filepath"D:/")
(if (setq Filepath (getfiled "请选择数据源文件夹的任意一个文件" Filepath "dwg" 2))
    (progn
      (command "-style" "" "宋体" "" "" "" "" "" "")
      (setq strpath (vl-filename-directory Filepath)
          filelist(vl-directory-files strPath "*.dwg" 1)
      )
      (command "erase" "all" "")
      (setq currscale(getint"\n请选择打印比例1. 1:500 2. 1:10003. 1:2000<1-3>:"))
      (if (= currscale 1)(setq printscale 2))
      (if (= currscale 2)(setq printscale 1))
      (if (= currscale 3)(setq printscale 0.5))
      (setq m(getint"\n请输入打印份数:"))
      (setq u 0)
      (repeat m
        (setq i 0)
      (repeat (length filelist)
        (setq FileName (strcat strpath "/" (nth i filelist)))
        (command "-insert" FileName "0,0")
        (while (not (zerop (getvar "CMDACTIVE"))) (command ""))

        (if (null (tblsearch "BLOCK" (nth i filelist)))
          (progn
          (command "_.PLOT"
             "Y" ;_是否需要详细打印配置?[是(Y)/否(N)] <否>: y
             "" ;_输入布局名或 [?] <模型>:
             printname ;_输入输出设备的名称或 [?]
             papersize ;_输入图纸尺寸或 [?] <A3>:
             "M" ;_输入图纸单位 [英寸(I)/毫米(M] <毫米>:
             Rote ;_输入图形方向 [纵向(P)/横向(L)] <横向>:
             "N" ;_是否反向打印?[是(Y)/否(N)] <否>:
             "E" ;_输入打印区域 [显示(D)/范围(E)/图形界限(L)/视图(V)/窗口(W)] <范围>: w
             printscale ;_输入打印比例 (打印的 毫米=图形单位) 或 [布满(F)] <Fit>: fit
             "C" ;_输入打印偏移 (x,y) 或 [居中打印(C)] <0.00,0.00>: c
             "Y" ;_是否按样式打印?[是(Y)/否(N)] <是>:
             PlotStyle;_输入打印样式表名称或 [?] (输入 . 表示无) <hp5100.ctb>:
             "Y" ;_是否打印线宽?[是(Y)/否(N)] <是>:
             "N" ;_是否删除隐藏线?[是(Y)/否(N)] <否>:
             "N" ;_是否打印到文件 [是(Y)/否(N)] <N>:
             "N" ;_是否保存模型选项卡的修改.
             "Y" ;_是否继续打印.
                     
          )
          (setq u(1+ u))
          )
        )
        (command "erase" "all" "")
        (setq i(1+ i))
        )
      )
      
    (setq thr (strcat "打印" (rtos m 2 0) "份,共"(rtos (* m u) 2 0)"张"))
    (alert thr)
    )
)
(princ)
)

690994 发表于 2021-11-19 08:04:51

如果图框外没有东西或者图框是一个块或者是四边形,
取得包围框4点就行,

fedd 发表于 2021-11-19 09:02:48

nxchenjk 发表于 2021-11-19 07:59
;;;*******************多文件批量打印********************
(defun c:mypt ()
(vl-load-com)


谢谢回复,我需要的是设定打印区域,有一个图框,外面什么也没有,我需要的是一键把这个图框设定成打印区域,或者打印成PDF,一键就行,太繁琐就不方便

紫苏炒黄瓜 发表于 2021-11-19 14:56:54

结构计算书?

18603041013 发表于 2021-11-23 08:25:31

了解一下CAD自带的 发布 一个CAD一个文件 打印模版设置成范围
页: [1]
查看完整版本: 大神们,救命啊!!!!!求打印超级实用的代码