明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6263|回复: 40

[源码] 自动判断图幅打印pdf

  [复制链接]
发表于 2015-11-6 15:59 | 显示全部楼层 |阅读模式
本帖最后由 war32 于 2015-11-6 16:09 编辑

潜伏很久了,终于有了个能用的东西,抄了论坛里的很多代码,感谢各位帮助过我的朋友们,感谢明经QQ群里各位的帮助。
好了,程序仅支持图框为块,可多选,不可框选,图框块的名称里必须有A1,A2,A3,A4的字符串,因为我是靠拾取图框中图号好图纸名称用来命名,请各位自行更改程序中定义图号和名称位置的数据。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +2 收起 理由
w245272914 + 1 很给力! 热心助人
USER2128 + 1 值得表扬!

查看全部评分

本帖被以下淘专辑推荐:

  • · 工具|主题: 71, 订阅: 4
发表于 2020-6-18 09:43 | 显示全部楼层
本帖最后由 dd131028 于 2020-6-18 09:44 编辑
war32 发表于 2020-6-15 20:33
代码发上来看看?
在你的基础上加的A0,打印时就是打印不出来,别的A1~A4都可以打印,能帮我看看那边错了吗?谢谢。。。
  1. (defun c:zx(/ en end end_data ff ffn h lujing maxp maxx maxy minp minx miny name newdname1 newdname2 p1 p2 st tufu w x x1 x2 y y1 y2 i)
  2.         (setvar "cmdecho" 0)
  3.         (setq en (ssget))
  4.         (setq i 0)
  5.         (repeat (sslength en)
  6.                 (setq end (ssname en i))
  7.                 (setq end_data (entget end))
  8.                 (vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp)
  9.                 (setq minp (vlax-safearray->list minp)
  10.                         maxp (vlax-safearray->list maxp))
  11.                 (setq minx (car minp)
  12.                         maxx (car maxp)
  13.                         miny (cadr minp)
  14.                         maxy (cadr maxp))
  15.                 (setq w (- maxx minx)
  16.                         h (- maxy miny))
  17.                 (setq p1 minp)
  18.                 (setq p2 maxp)
  19.                 ;判断横向还是纵向,p纵向,l横向
  20.                 (setq x1 (car p1) y1 (cadr p1) x2 (car p2) y2 (cadr p2))
  21.                 (setq x (abs (- x1 x2)) y (abs (- y1 y2)) )
  22.                 (if (> y x) (setq st "p") (setq st "l"))
  23.                 ;依次拾取图号和图纸名称
  24.                 (setq name (fanhuituhao  end st))
  25.                 ;;;将选取的的图号和名称存到文件中
  26.                 (setq NewDName1 (zifutihuan (car name)))
  27.                 (setq NewDName2 (zifutihuan (cadr name)))
  28.                 (setq ffn "D:\\drawing1.xls")
  29.                 (setq ff (open ffn "a"))
  30.                 (princ "\n" ff)
  31.                 (princ newdname1 ff)
  32.                 (princ "\t" ff)
  33.                 (princ newdname2 ff)
  34.                 (princ "\t" ff)
  35.                 (close ff)
  36.                 (setq lujing (strcat "d:\\" NewDName1 "-" NewDName2))
  37.                                 (cond
  38.                                         ((vl-string-search "A0" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A0 (1189.00 x 841.00 毫米)"))               
  39.                                                 ((vl-string-search "A1" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A1 (841.00 x 594.00 毫米)"))
  40.                         ((vl-string-search "A2" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A2 (594.00 x 420.00 毫米)"))
  41.                         ((vl-string-search "A3" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A3 (420.00 x 297.00 毫米)"))
  42.                         ((vl-string-search "A4" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A4 (297.00 x 210.00 毫米)"))
  43.                         (T nil)
  44.                 )
  45.                
  46.                
  47.                 (pdfplot st p1 p2 tufu lujing)
  48.           (setq i (1+ i))
  49.         )
  50.         
  51. )


  52. (defun fanhuituhao (objname fangxiang / name obj tuhao)
  53.         (setq obj (vlax-ename->vla-object objname))
  54.         
  55.         (setq name (vlax-get-property obj "Name"))
  56.         (cond ((/= (vl-string-search "A0" name ) nil) (setq tuhao (a0name obj fangxiang)))
  57.                                  ((/= (vl-string-search "A1" name ) nil) (setq tuhao (a1name obj fangxiang)))
  58.                 ((/= (vl-string-search "A2" name ) nil) (setq tuhao (a2name obj fangxiang)))
  59.                 ((/= (vl-string-search "A3" name ) nil) (setq tuhao (a3name obj fangxiang)))
  60.                 ((/= (vl-string-search "A4" name ) nil) (setq tuhao (a4name obj fangxiang)))
  61.                 ( T nil)
  62.         )
  63.         
  64. )
  65. (defun a0name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  66.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  67.         (vla-getboundingbox obj 'Minp 'Maxp)
  68.         (setq minp (vlax-safearray->list minp)
  69.                 maxp (vlax-safearray->list maxp)
  70.         )
  71.         (setq minx (car minp)
  72.                 maxx (car maxp)
  73.                 miny (cadr minp)
  74.                 maxy (cadr maxp))
  75.         (setq w (- maxx minx)
  76.                 h (- maxy miny))
  77.         (if (= fangxiang "l") (setq scl (/ h 841)) (setq scl (/ h 1189)) )
  78.         
  79.         (a1a2name maxx miny)
  80. )


  81. (defun a1name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  82.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  83.         (vla-getboundingbox obj 'Minp 'Maxp)
  84.         (setq minp (vlax-safearray->list minp)
  85.                 maxp (vlax-safearray->list maxp)
  86.         )
  87.         (setq minx (car minp)
  88.                 maxx (car maxp)
  89.                 miny (cadr minp)
  90.                 maxy (cadr maxp))
  91.         (setq w (- maxx minx)
  92.                 h (- maxy miny))
  93.         (if (= fangxiang "l") (setq scl (/ h 594)) (setq scl (/ h 841)) )
  94.         
  95.         (a1a2name maxx miny)
  96. )

  97. (defun a2name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  98.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  99.         (vla-getboundingbox obj 'Minp 'Maxp)
  100.         (setq minp (vlax-safearray->list minp)
  101.                 maxp (vlax-safearray->list maxp)
  102.         )
  103.         (setq minx (car minp)
  104.                 maxx (car maxp)
  105.                 miny (cadr minp)
  106.                 maxy (cadr maxp))
  107.         (setq w (- maxx minx)
  108.                 h (- maxy miny))
  109.         (if (= fangxiang "l") (setq scl (/ h 420)) (setq scl (/ h 594)) )
  110.         (a1a2name maxx miny)
  111. )
  112. (defun a3name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  113.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  114.         (vla-getboundingbox obj 'Minp 'Maxp)
  115.         (setq minp (vlax-safearray->list minp)
  116.                 maxp (vlax-safearray->list maxp)
  117.         )
  118.         (setq minx (car minp)
  119.                 maxx (car maxp)
  120.                 miny (cadr minp)
  121.                 maxy (cadr maxp))
  122.         (setq w (- maxx minx)
  123.                 h (- maxy miny))
  124.         (if (= fangxiang "l") (setq scl (/ h 297)) (setq scl (/ h 420)) )
  125.         (a3a4name maxx miny)
  126. )

  127. (defun a4name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  128.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  129.         (vla-getboundingbox obj 'Minp 'Maxp)
  130.         (setq minp (vlax-safearray->list minp)
  131.                 maxp (vlax-safearray->list maxp)
  132.         )
  133.         (setq minx (car minp)
  134.                 maxx (car maxp)
  135.                 miny (cadr minp)
  136.                 maxy (cadr maxp))
  137.         (setq w (- maxx minx)
  138.                 h (- maxy miny))
  139.         (if (= fangxiang "l") (setq scl (/ h 210)) (setq scl (/ h 297)) )
  140.         (a3a4name maxx miny)
  141. )


  142. (defun a1a2name (maxx miny / mingcheng mingcheng_data mingcheng_name mingcheng_name1 mx1 mx2 my1 my2 pt_list pt_list1 px1 px2 px3 px4 px5 px6 px7 px8 tuhao tuhao_data tuhao_name tuhao_name1 tx1 tx2 ty1 ty2)
  143.         (setq tx1 (- maxx (* scl 54)))
  144.         (setq ty1 (+ miny (* scl 10)))
  145.         (setq tx2 (- maxx (* scl 10)))
  146.         (setq ty2 (+ miny (* scl 20)))
  147.         (setq px1 (list tx1 ty1))
  148.         (setq px2 (list tx2 ty1))
  149.         (setq px3 (list tx2 ty2))
  150.         (setq px4 (list tx1 ty2))
  151.         (setq pt_list (list px1 px2 px3 px4))
  152.         (setq tuhao (ssget "cp" pt_list '((0 . "TEXT"))))
  153.         ;获得名称的四个坐标
  154.         (setq mx1 (- maxx (* scl 122)))
  155.         (setq my1 (+ miny (* scl 10)))
  156.         (setq mx2 (- maxx (* scl 62)))
  157.         (setq my2 (+ miny (* scl 28)))
  158.         (setq px5 (list mx1 my1))
  159.         (setq px6 (list mx2 my1))
  160.         (setq px7 (list mx2 my2))
  161.         (setq px8 (list mx1 my2))
  162.         (setq pt_list1 (list px5 px6 px7 px8))
  163.         (setq mingcheng (ssget "cp" pt_list1 '((0 . "TEXT"))))
  164.         ;获得图号
  165.         (setq tuhao_name (ssname tuhao 0))
  166.         (setq tuhao_data (entget tuhao_name))
  167.         (setq tuhao_name1 (assoc 1 tuhao_data))
  168.         (setq tuhao_name1 (cdr tuhao_name1))
  169.         ;获得名称
  170.         (setq mingcheng_name (ssname mingcheng 0))
  171.         (setq mingcheng_data (entget mingcheng_name))
  172.         (setq mingcheng_name1 (assoc 1 mingcheng_data))
  173.         (setq mingcheng_name1 (cdr mingcheng_name1))
  174.         (list tuhao_name1 mingcheng_name1)
  175. )
  176. (defun a3a4name (maxx miny / mingcheng mingcheng_data mingcheng_name mingcheng_name1 mx1 mx2 my1 my2 pt_list pt_list1 px1 px2 px3 px4 px5 px6 px7 px8 tuhao tuhao_data tuhao_name tuhao_name1 tx1 tx2 ty1 ty2)
  177.         (setq tx1 (- maxx (* scl 49)))
  178.         (setq ty1 (+ miny (* scl 5)))
  179.         (setq tx2 (- maxx (* scl 5)))
  180.         (setq ty2 (+ miny (* scl 15)))
  181.         (setq px1 (list tx1 ty1))
  182.         (setq px2 (list tx2 ty1))
  183.         (setq px3 (list tx2 ty2))
  184.         (setq px4 (list tx1 ty2))
  185.         (setq pt_list (list px1 px2 px3 px4))
  186.         (setq tuhao (ssget "cp" pt_list '((0 . "TEXT"))))
  187.         ;获得名称的四个坐标
  188.         (setq mx1 (- maxx (* scl 117)))
  189.         (setq my1 (+ miny (* scl 5)))
  190.         (setq mx2 (- maxx (* scl 57)))
  191.         (setq my2 (+ miny (* scl 23)))
  192.         (setq px5 (list mx1 my1))
  193.         (setq px6 (list mx2 my1))
  194.         (setq px7 (list mx2 my2))
  195.         (setq px8 (list mx1 my2))
  196.         (setq pt_list1 (list px5 px6 px7 px8))
  197.         (setq mingcheng (ssget "cp" pt_list1 '((0 . "TEXT"))))
  198.         ;获得图号
  199.         (setq tuhao_name (ssname tuhao 0))
  200.         (setq tuhao_data (entget tuhao_name))
  201.         (setq tuhao_name1 (assoc 1 tuhao_data))
  202.         (setq tuhao_name1 (cdr tuhao_name1))
  203.         ;获得名称
  204.         (setq mingcheng_name (ssname mingcheng 0))
  205.         (setq mingcheng_data (entget mingcheng_name))
  206.         (setq mingcheng_name1 (assoc 1 mingcheng_data))
  207.         (setq mingcheng_name1 (cdr mingcheng_name1))
  208.         (list tuhao_name1 mingcheng_name1)
  209. )
  210. ;;;字符替换程序
  211. (defun zifutihuan (zifu )
  212.         (while (vl-string-search "/" zifu)
  213.     (setq zifu (vl-string-subst "." "/" zifu))
  214.   )
  215.         (while (vl-string-search "\\" zifu)
  216.     (setq zifu (vl-string-subst "." "\\" zifu))
  217.   )
  218.         (while (vl-string-search "-" zifu)
  219.     (setq zifu (vl-string-subst "." "-" zifu))
  220.   )
  221.         (while (vl-string-search "Ⅱ" zifu)
  222.     (setq zifu (vl-string-subst "II" "Ⅱ" zifu))
  223.   )
  224.         (while (vl-string-search "Ⅰ" zifu)
  225.     (setq zifu (vl-string-subst "I" "Ⅰ" zifu))
  226.   )
  227.         
  228.         zifu        
  229. )
  230. (defun pdfplot (st p1 p2 tufu lujing / dayinji)
  231.         (setq dayinji "dwg to pdf.pc3")
  232.   
  233.   (command "-plot" "y"         ; 是否需要详细打印配置
  234.                 "模型"           ; 输入布局、模型名称
  235.                 dayinji         ; 输入输出设备的名称  此处例举虚拟打印机 pdfFactory Pro
  236.                 ; (lisp语言中的一个 \ 符号需要用 \\符号表示,即\=>\\)
  237.                 ; 例如:共享打印机 \\Adminstractor\Kyocera KM-2560 KX应该表示为\\\\Adminstractor\\Kyocera KM-2560 KX
  238.                 tufu           ; 输入图纸尺寸A4
  239.                 "m"           ; 输入图纸单位(I:英寸 M:毫米)
  240.                 st           ; 输入图形方向(纵向:P 横向)
  241.                 "n"           ; 是否反向打印
  242.                 "w"           ; 输入打印区域(显示:D范围:E图形界限 视图:V 窗口:W)
  243.                 p1                   ; 打印图框左下角点坐标
  244.                 p2                   ; 打印图框右上角点坐标
  245.                 "f"           ; 输入打印比例(F:布满)
  246.                 "c"           ; 输入打印偏移(居中打印:C)
  247.                 "y"           ; 是否按样式打印
  248.                 "22.ctb"           ; 输入打印样式名称
  249.                 "y"           ; 是否打印线宽
  250.                 "a"           ; 输入着色打印设置(按显示:A 线框:W
  251.                 ; 消隐:H 渲染:R)
  252.                 lujing          ; 是否打印到文件
  253.                 "n"           ; 是否保存对页面设置的修改
  254.                 "y"           ; 是否继续打印
  255.         )
  256. )
发表于 2020-6-17 15:37 | 显示全部楼层

就加了一小段

本帖最后由 dd131028 于 2020-6-17 15:44 编辑
war32 发表于 2020-6-15 20:33
代码发上来看看?

((= cw_d_Specifications "A0")
(progn (setq  cw_right_pt    (polar cw_leftdown_pt 0 (* 1189 cw_read_draw_times)))
        (setq  cw_true_corner (polar cw_right_pt  (/ pi 2) (* 841 cw_read_draw_times)))))     
((= cw_d_Specifications "A1")
(progn (setq  cw_right_pt    (polar cw_leftdown_pt 0 (* 841 cw_read_draw_times)))
        (setq  cw_true_corner (polar cw_right_pt  (/ pi 2) (* 594 cw_read_draw_times)))))
((= cw_d_Specifications "A2")
(progn (setq  cw_right_pt    (polar cw_leftdown_pt 0 (* 594 cw_read_draw_times)))
        (setq  cw_true_corner (polar cw_right_pt  (/ pi 2) (* 420 cw_read_draw_times)))))
发表于 2015-11-6 17:22 | 显示全部楼层
如何将图块名改为自定义的名称?
发表于 2015-11-6 22:48 来自手机 | 显示全部楼层
myfrankie 发表于 2015-11-6 17:22
如何将图块名改为自定义的名称?

辛苦了!做个程序真心不易
 楼主| 发表于 2015-11-7 08:12 | 显示全部楼层
myfrankie 发表于 2015-11-6 17:22
如何将图块名改为自定义的名称?

可以改,但是图块名必须有可以区分图幅的字样才可以,我目前做的规定图块名必须带A1、A2、A3、A4,你可以把这些改成其他的特征字符,但必须可以通过这些识别图幅,例如你可以把大写的A换成a
发表于 2015-11-7 09:30 | 显示全部楼层
程序真的不错,设计个程序真的不容易
发表于 2015-11-7 10:34 | 显示全部楼层
有点意思   
发表于 2015-11-7 11:05 | 显示全部楼层
程序真的不错,设计个程序真的不容易
发表于 2015-11-10 08:32 | 显示全部楼层
不错,多谢分享
发表于 2015-11-10 16:22 | 显示全部楼层
谢谢分享, 支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 12:55 , Processed in 0.310145 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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