明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 37235|回复: 108

源代码:批量改页码(加前缀)及提取属性块

    [复制链接]
发表于 2011-9-2 21:19 | 显示全部楼层 |阅读模式
本帖最后由 LLXXZZ 于 2011-9-4 14:58 编辑

在这个网页中
http://bbs.mjtd.com/thread-64566-1-1.html
有哥们确实向我要了源码,可能有些兄弟确实想看代码.现在给贴出来.
代码一般.没什么大不了的.但也着实让不少同仁受益.
页码的排序的功能写的不好,有优化的空间,懒得改了.哥们儿根据自己的需要自己改.


  1. ;提取属性块标记TagString或对应的值TextString
  2. ;ent:图元名,opt:为T程序返回TextString的表,为nil返回标记TagString的表
  3. (defun xz-att-g (ent opt / liST0 liSTt liSTg blkref a)
  4.   (vl-load-com)
  5.   (if (= (vla-Get-ObjectName (setq blkref (vlax-Ename->vla-Object ent))) "AcDbBlockReference")
  6.     (if (vla-Get-HasAttributes blkref)
  7.       (progn (setq liST0 (vlax-safearray->list  (vlax-variant-value (vla-GetAttributes blkref))))
  8.        (setq liSTt (mapcar 'vla-Get-TagString  liST0))
  9.        (setq liSTg (mapcar 'vla-get-TextString  liST0))
  10.                      
  11.   )
  12.     ); endif
  13.   ); endif
  14.   (if opt (setq a liSTg) (setq a liSTt))
  15.   a
  16. ); enddefun
  17. ;(setq  ent  (car (entsel)))   例子
  18. ;(xz-att-g ent t)   (xz-att-g ent nil)例子


  19.    
  20. ;******************************************************************************
  21. ;******************************************************************************
  22. ;******************************************************************************
  23. (defun c:gat (/ EP1 blkname liSTt GETK ss index0 sslist tmp-pt sslist-ptl XZ_sortlist strlist
  24.         strlenlist0 nthx nthn strlenlist myentmk_line myentmk_text OSM BPM pt m)
  25.   (vl-load-com)
  26.   
  27.   (while (not (setq EP1 (entsel"点取带属性的块:\n"))))
  28.   (if (= (vla-Get-ObjectName (setq blkref (vlax-Ename->vla-Object (car EP1)))) "AcDbBlockReference")
  29.     (if (vla-Get-HasAttributes blkref)
  30.       (progn
  31.         (setq blkname (assoc 2 (entget (car EP1))))
  32.         (setq liSTt (xz-att-g (car EP1) nil))
  33.         (princ (strcat"  属性块 块名为--> " (cdr blkname) "\n"))
  34.        )
  35.       )
  36.     (progn(princ "  必须选择属性块!")(exit))
  37.    )

  38.   ;开始选择页码块并修改

  39.   
  40.   (initget "H V S ")(setq GETK (getkword "排序方式:\n [横向优先(H)/竖向优先(V)/选择优先(S)]: <H> "))
  41.   (princ ">>选择对象...")
  42.   (setq ss (ssget  (cons blkname slist)))
  43.   (setq index0 0 index (sslength ss) sslist '())   
  44.   (repeat index
  45.     (setq sslist (cons (ssname ss index0) sslist))
  46.     (setq index0 (1+ index0))
  47.   )
  48.   ;开始构建图元点位表
  49.   (setq index0 0  sslist-ptl '() tmp-pt '())   
  50.   (repeat index
  51.     (setq tmp-pt (cons (nth index0 sslist) (cons (cdr(assoc 10 (entget (nth index0 sslist)))) tmp-pt)))
  52.     (setq sslist-ptl (cons tmp-pt sslist-ptl))
  53.     (setq tmp-pt '())
  54.     (setq index0 (1+ index0))
  55.   )
  56.   ;开始排序
  57.   (cond      
  58.   ;从左到右从上到下
  59.   ((or (= GETK "H")(= GETK nil))
  60.     (setq XZ_sortlist (vl-sort
  61.       (vl-sort sslist-ptl '(lambda (s1 s2) (> (cadadr s1) (cadadr s2))))
  62.       '(lambda (s3 s4) (if(equal (cadadr s3) (cadadr s4) 0.6)(< (caadr s3) (caadr s4))))))   
  63.   )
  64.   ;从上到下从左到右
  65.   ((= GETK "V")
  66.     (setq XZ_sortlist (vl-sort
  67.       (vl-sort sslist-ptl '(lambda (s1 s2) (< (caadr s1) (caadr s2))))
  68.       '(lambda (s3 s4) (if(equal (caadr s3) (caadr s4) 0.6)(> (cadadr s3) (cadadr s4))))))   
  69.    )
  70.    ;选择顺序
  71.   ((= GETK "S")
  72.     (setq XZ_sortlist  sslist-ptl))
  73.    );cond
  74. ;计算表内每列字符最长长度存储在表strlenlist中
  75.   (setq strlist (mapcar  '(lambda (x) (xz-att-g (car x) t)) XZ_sortlist))
  76.   (setq strlenlist0 (mapcar  '(lambda (x) (mapcar 'strlen  x)) strlist))
  77.   (setq nthx 0 nthn (length (car strlenlist0)))
  78.   (setq strlenlist nil)
  79.   (while (< nthx nthn)
  80.     (setq nth1 (vl-sort strlenlist0 '(lambda (s1 s2) (>= (nth nthx s1) (nth nthx s2)))))
  81.     (setq strlenlist (cons (nth nthx (car nth1)) strlenlist))
  82.     (setq nthx (1+ nthx))
  83.   )
  84.   (setq strlenlist (reverse strlenlist))
  85.   ;____________________________
  86. ;生成图元子程序
  87.   (defun myentmk_line (pt1 pt2 );(起点(uCS) 终点(uCS) 图层 颜色)
  88.     (command "_.line" pt1 pt2 "")
  89.    )
  90.   ;(myentmk_line (getpoint)(getpoint))
  91.   (defun myentmk_text (cont pt1);(内容 起点)
  92.     (if (not (= "" cont)) (command "_.text" "J" "ml" pt1 3.0 0.0 cont ));对齐点为左中
  93.    )
  94.   ;(myentmk_text " " (getpoint))
  95.   ;____________________________  

  96.   ;提取初始状态
  97.   (setvar "CMDECHO" 0)
  98.   (setq OSM (Getvar "OSMODE" ))
  99.   (setq BPM (Getvar "blipmode"))
  100.   (setvar "OSMODE"  0)
  101.   (setvar "blipmode" 0)

  102.   ;判断文字样式
  103.   (command "_.undo" "group")
  104.   ;(if (tblsearch "style" "JHZX")
  105.     ;(setvar "TEXTSTYLE" "JHZX")
  106.     ;(command "-STYLE"  "JHZX"  "ros.shx,hztxt.shx" 0 0.75 0 "n" "n" "n" )
  107.     (command "-STYLE"  "JHZX"  "ros.shx,hztxt.shx" 0 0.75 0 "n" "n" "n" )
  108.   ;) ;设置字体样式JHZX为当前样式

  109.     ;_____________________________________________
  110.     ;绘制表格子程序
  111.   (defun drawtable (lis row pt / x0 yo len x1 n pta ptb)
  112.     (setq x0 (car pt) yo (cadr pt) len (length lis))
  113.     (setq charlen (apply '+ lis))
  114.     ;画横线
  115.     (setq  x1 (+(* 1.5 charlen) (car pt) (* 20 len)))
  116.     (setq  n 0)
  117.     (repeat (+ row 2)
  118.       (setq pta (list x0 (- yo (* n 4))) ptb (list x1 (- yo (* n 4))))
  119.       (myentmk_line pta ptb)
  120.       (setq  n (1+ n))
  121.     )
  122.     ;画竖线
  123.     (myentmk_line pt (polar pt (* 1.5 pi) (* (1+ row) 4)));第一根竖线
  124.     (setq  n 0 x1 x0)
  125.    (while (< n len)
  126.      (setq  x1 (+(* 1.5 (nth n lis)) 20  x1));第二根的x坐标n=0
  127.      (setq pta (list x1 yo) ptb (polar pta (* 1.5 pi) (* (1+ row) 4)))
  128.      (myentmk_line pta ptb)
  129.      (setq  n (1+ n))
  130.      )
  131.    )
  132.   ;_____________________________________________

  133.   ;_____________________________________________
  134.     ;绘制文字子程序
  135.   (defun drawtext (strlist strlenlist pt / x0 x1 pta n )
  136.      ;pt第一个字的起点左中对齐,strlenlist字符长度表
  137.     (setq x0 (car pt) yo (cadr pt) len (length strlenlist))   
  138.     ;按横向写字
  139.     (myentmk_text (nth 0 strlist) pt);第一个文字
  140.     (setq  n 0 x1 x0)
  141.    (while (< n len)
  142.      (setq  x1 (+(* 1.5 (nth n strlenlist)) 20  x1));第二个文字的x坐标n=0
  143.      (setq pta (list x1 yo) )
  144.      (myentmk_text (nth (1+ n) strlist) pta)
  145.      (setq  n (1+ n))
  146.      )
  147.    )
  148.   ;_____________________________________________

  149.   
  150.   ;开始绘制表格
  151.   (setvar "OSMODE"    OSM)
  152.   (while (not(setq pt (getpoint "指定表格的左上点:"))))
  153.   (if pt (setvar "OSMODE"  0))
  154.   (drawtable strlenlist index pt)
  155.    ;表格中写上文字
  156.   (drawtext liSTt strlenlist (list (+ 10 (car pt)) (- (cadr pt) 2)));第一排为属性标记
  157.   (setq m 0)
  158.   (repeat (length strlist)
  159.     (setq  pta (list (+ 10 (car pt)) (- (cadr pt) (* m 4) 6)))
  160.     (drawtext (nth m strlist) strlenlist pta)  
  161.     (setq m (1+ m))
  162.   )

  163.   (command "_.undo" "end")
  164.   ;还原初始状态
  165.   (setvar "OSMODE"    OSM)
  166.   (setvar "blipmode"  BPM)
  167.   (prin1)
  168. )


  169. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  170. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  171. (defun c:gatinf ()
  172. (alert "                                  欢迎使用本程序\n
  173. 1.此程序以送别同仁肖俊,今日他离职了,此处留个记号以标记今天的这个特别的日子。\n
  174. 2.同时提醒自己: 一日不读则愚!\n
  175. 3.程序调用了cad的line与text命令,所以程序反应比较慢,主要是自己对enmake函数应用不精,
  176.    抓紧时间学习这个函数。使用此函数将提高程序运行速度!\n

  177.          
  178.                                                                   ---by 李晓卓 2011.3.14
  179.                                                                   ---RTX:60315
  180.   ")(prin1)
  181.   )
  182. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  183. (princ "\n************************************************")
  184. (princ "\n**    块属性提取 gat.lsp已加载                **")
  185. (princ "\n**      >>提取块属性,以gat启动命令            **")
  186. (princ "\n**      >>查看程序信息,以gatinf启动命令       **")
  187. (princ "\n**                           ----by 李晓卓    **")
  188. (princ "\n**                               2011.3.14    **")
  189. (princ "\n************************************************")
  190. (princ)
  1. ;更改属性块标记tag所对应的值string
  2. (defun xz-att (ent tag string / liST0 liST1 num blkref)
  3.   (vl-load-com)
  4.   (if (= (vla-Get-ObjectName (setq blkref (vlax-Ename->vla-Object ent))) "AcDbBlockReference")
  5.     (if (vla-Get-HasAttributes blkref)
  6.       (progn (setq liST0 (vlax-safearray->list  (vlax-variant-value (vla-GetAttributes blkref))))
  7.        (setq liST1 (mapcar 'vla-Get-TagString  liST0))
  8.              (setq num (vl-position tag list1))
  9.              (vla-put-TextString (nth num liST0) string)
  10.   )
  11.     ); endif
  12.   ); endif
  13.   (prin1)
  14. ); enddefun
  15. ;(setq  ent  (car (entsel)))   例子
  16. ;(xz-att ent "页码" 30)   例子

  17. ;*****************************************************************************
  18. ;排序方式
  19. (defun xz-x (s0)  (car (assoc 10 (entget s0))))   ;取出图元插入点的x坐标值
  20. (defun xz-y (s0)  (cadr (assoc 10 (entget s0))))  ;取出图元插入点的y坐标值
  21. (defun xz-z (s0)  (caddr (assoc 10 (entget s0))))  ;取出图元插入点的z坐标值
  22. ;从左到右,从上到下(reverse
  23. ;lst  ----要排序的图元集 FUZZ----允许偏差;若无为nil
  24. (defun xz-l2r (plist FUZZ / p1 p2)
  25. (setq plist (vl-sort plist  '(lambda (p1 p2)
  26.      ;(cond
  27.        (cond((> (+(xz-y p1)FUZZ) (xz-y p2)) T))
  28.        (cond((and (= (+(xz-y p1)FUZZ) (xz-y p2)) (< (+(xz-x p1)FUZZ) (xz-x p2))) T))
  29.        ;(cond((and (= (+(xz-x p1)FUZZ) (xz-x p2)) (= (+(xz-y p1)FUZZ) (xz-y p2))(> (+(xz-z p1)FUZZ) (xz-z p2))) T))
  30.        ;(T nil)
  31.      ;)
  32.    );lambda
  33. )))


  34. ;从上到下,从左到右
  35. ;lst  ----要排序的图元集 FUZZ----允许偏差;若无为nil (reverse
  36. (defun xz-u2d (plist FUZZ / p1 p2)
  37. (setq plist  (vl-sort plist  '(lambda (p1 p2)
  38.      (cond
  39.      ((> (+(xz-x p1)FUZZ) (xz-x p2)) T)
  40.      ((and (= (+(xz-x p1)FUZZ) (xz-x p2)) (> (+(xz-y p1)FUZZ) (xz-y p2))) T)
  41.      ((and (= (+(xz-x p1)FUZZ) (xz-x p2)) (= (+(xz-y p1)FUZZ) (xz-y p2))(> (+(xz-z p1)FUZZ) (xz-z p2))) T)
  42.            (T nil)
  43.      )   
  44.    );lambda
  45. )))   
  46. ;******************************************************************************
  47. ;******************************************************************************
  48. ;******************************************************************************
  49. (defun c:pg (/ EP1 EG1 EG2 blktag EP1st blkname str GETK
  50.        index0 index sslist XZ_sortlist len0 len sslist-ptl index0)
  51.   (vl-load-com)
  52.   (if (progn
  53.      (setq EP1 (entsel"点取属性块中页码的位置:\n"))
  54.            (setq EG1 (cdr (assoc 0 (entget (car EP1)))))
  55.            (if (= EG1 "INSERT")
  56.                (progn (setq EG2 (car (nentselp (cadr EP1))))
  57.                    (if (= (cdr (assoc 0 (entget EG2))) "ATTRIB")
  58.                  (setq blktag (cdr (assoc 2 (entget EG2)))) ;标记
  59.        )
  60.              (setq EP1st (entget (car EP1)))
  61.              (setq blkname (assoc 2 EP1st))   
  62.          )
  63.     )
  64.         )
  65.    (princ (strcat"  块名为-->" (cdr blkname) "   标记为-->" blktag "\n"))
  66.          (progn(princ "  必须选择属性块!")(exit))
  67.    )
  68.   ;开始选择页码块并修改
  69.   (if (=  str0  nil) (setq str0 1)) (initget 6)
  70.   (setq str (getint (strcat "请输入一个起始整数<" (rtos str0) ">:")))
  71.   (if (= str  nil)(setq str  str0))
  72.   
  73.   (initget "H V S ")(setq GETK (getkword "排序方式:\n [横向优先(H)/竖向优先(V)/选择优先(S)]: <H> "))
  74.   (princ ">>选择批量修改页码的对象...")
  75.   (setq ss (ssget  (cons blkname slist)))
  76.   (setq index0 0 index (sslength ss) sslist '())   
  77.   (repeat index
  78.     (setq sslist (cons (ssname ss index0) sslist))
  79.     (setq index0 (1+ index0))
  80.   )
  81.   ;开始构建图元点位表
  82.   (setq index0 0  sslist-ptl '() tmp-pt '())   
  83.   (repeat index
  84.     (setq tmp-pt (cons (nth index0 sslist) (cons (cdr(assoc 10 (entget (nth index0 sslist)))) tmp-pt)))
  85.     (setq sslist-ptl (cons tmp-pt sslist-ptl))
  86.     (setq tmp-pt '())
  87.     (setq index0 (1+ index0))
  88.   )
  89.   ;开始排序
  90.   (cond      
  91.   ;从左到右从上到下
  92.   ((or (= GETK "H")(= GETK nil))
  93.     (setq XZ_sortlist (vl-sort
  94.       (vl-sort sslist-ptl '(lambda (s1 s2) (> (cadadr s1) (cadadr s2))))
  95.       '(lambda (s3 s4) (if(equal (cadadr s3) (cadadr s4) 0.6)(< (caadr s3) (caadr s4))))))   
  96.   )
  97.   ;从上到下从左到右
  98.   ((= GETK "V")
  99.     (setq XZ_sortlist (vl-sort
  100.       (vl-sort sslist-ptl '(lambda (s1 s2) (< (caadr s1) (caadr s2))))
  101.       '(lambda (s3 s4) (if(equal (caadr s3) (caadr s4) 0.6)(> (cadadr s3) (cadadr s4))))))   
  102.    )
  103.    ;选择顺序
  104.   ((= GETK "S")
  105.     (setq XZ_sortlist  sslist-ptl))
  106.    );cond
  107.   ;开始修改页码
  108.     (setq len0 0 len (length XZ_sortlist))
  109.     (repeat len
  110.      (if (setq ent0 (car (nth len0 XZ_sortlist)))
  111.    (progn (xz-att ent0 blktag str)
  112.                 (princ (strcat "-->正在修改页码 <" (rtos str) ">  "))
  113.           (setq len0 (1+ len0) str (1+ str))
  114.           (setq str0  str)
  115.    )
  116.       )
  117.   );repeat
  118.   (prin1)
  119. )
  120. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  121. (defun c:pginf ()
  122. (alert "                                           欢迎使用本程序\n
  123.          1.本程序为做越南万豪酒店施工图时所写.\n
  124.          2.本程序使用VisualLISP语言.\n
  125.          3.基于程序思想可以实现增加前缀及按页码打印,有空且心情好时再写.\n
  126.          4.本程序排序方法为属性块的插入点.\n
  127.          5.本程序通过ActiveX提取了属性块的标记而后修改相应的值.\n
  128.          6.程序已加密恕不提供源码.\n
  129.          7.如有疑问请自行保留.\n
  130.                                                                        ---by 李晓卓 2010.9.11
  131.                                                                        ---RTX:60315
  132.   ")(prin1)
  133.   )
  134. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  135. (princ "\n************************************************")
  136. (princ "\n**    批量改页码 pg.lsp已加载                 **")
  137. (princ "\n**      >>批量改页码,以pg启动命令             **")
  138. (princ "\n**      >>查看程序信息,以pginf启动命令        **")
  139. (princ "\n**                          ----by 李晓卓     **")
  140. (princ "\n**                              2010.9.11     **")
  141. (princ "\n************************************************")
  142. (princ)


本帖子中包含更多资源

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

x

点评

有心人,不易已  发表于 2017-8-29 15:07
程序非常好用!感谢分享!  发表于 2012-11-29 22:59

评分

参与人数 5明经币 +5 金钱 +30 收起 理由
bssurvey + 1 赞一个!
lidaxiu + 1 + 30 呵呵李工,居然才知道是同个公司的同事,支.
jfxia + 1 很给力!
1993063 + 1 赞一个!
xiaxiang + 1 感谢共享好程序!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2017-12-27 09:18 | 显示全部楼层
yxl88168 发表于 2017-8-25 13:43
此程序有时会出现尾数出现(.0000)用的CAD是2008的,有时又不会出现,你能帮忙优化一下吗

  1. ;更改属性块标记tag所对应的值string
  2. (defun xz-att (ent tag string / liST0 liST1 num blkref)
  3.   (vl-load-com)
  4.   (if (= (vla-Get-ObjectName (setq blkref (vlax-Ename->vla-Object ent))) "AcDbBlockReference")
  5.     (if (vla-Get-HasAttributes blkref)
  6.       (progn (setq liST0 (vlax-safearray->list  (vlax-variant-value (vla-GetAttributes blkref))))
  7.              (setq liST1 (mapcar 'vla-Get-TagString  liST0))
  8.              (setq num (vl-position tag list1))
  9.              (vla-put-TextString (nth num liST0) string)
  10.         )
  11.     ); endif
  12.   ); endif
  13.   (prin1)
  14. ); enddefun
  15. ;(setq  ent  (car (entsel)))   例子
  16. ;(xz-att ent "页码" 30)   例子


  17. ;******************************************************************************
  18. ;******************************************************************************
  19. ;******************************************************************************
  20. (defun c:yema (/ EP1 EG1 EG2 blktag EP1st blkname str GETK prefix sttr
  21.              index0 index sslist XZ_sortlist len0 len sslist-ptl index0)
  22.   (vl-load-com)
  23.   (if (progn
  24.            (setq EP1 (entsel"点取属性块中页码的位置:\n"))
  25.            (setq EG1 (cdr (assoc 0 (entget (car EP1)))))
  26.            (if (= EG1 "INSERT")
  27.                (progn (setq EG2 (car (nentselp (cadr EP1))))
  28.                    (if (= (cdr (assoc 0 (entget EG2))) "ATTRIB")
  29.                        (setq blktag (cdr (assoc 2 (entget EG2)))) ;标记
  30.                    )
  31.                    (setq EP1st (entget (car EP1)))
  32.                    (setq blkname (assoc 2 EP1st))   
  33.                )
  34.           )
  35.         )
  36.          (princ (strcat"  块名为-->" (cdr blkname) "   标记为-->" blktag "\n"))
  37.          (progn(princ "  必须选择属性块!")(exit))
  38.          )
  39.   ;开始选择页码块并修改
  40.   (setq prefix (getstring "请输入前缀:"))
  41.   (if (=  str0  nil) (setq str0 1)) (initget 6)
  42.   (setq str (getint (strcat "请输入一个起始整数<" (rtos str0 2 0) ">:")))
  43.   (if (= str  nil)(setq str  str0))
  44.   
  45.   (initget "H V S ")(setq GETK (getkword "排序方式:\n [横向优先(H)/竖向优先(V)/选择优先(S)]: <H> "))
  46.   (princ ">>选择批量修改页码的对象...")
  47.   (setq ss (ssget  (cons blkname slist)))
  48.   (setq index0 0 index (sslength ss) sslist '())         
  49.   (repeat index
  50.     (setq sslist (cons (ssname ss index0) sslist))
  51.     (setq index0 (1+ index0))
  52.   )
  53.   ;开始构建图元点位表
  54.   (setq index0 0  sslist-ptl '() tmp-pt '())         
  55.   (repeat index
  56.     (setq tmp-pt (cons (nth index0 sslist) (cons (cdr(assoc 10 (entget (nth index0 sslist)))) tmp-pt)))
  57.     (setq sslist-ptl (cons tmp-pt sslist-ptl))
  58.     (setq tmp-pt '())
  59.     (setq index0 (1+ index0))
  60.   )
  61.   ;开始排序
  62.   (cond      
  63.   ;从左到右从上到下
  64.   ((or (= GETK "H")(= GETK nil))
  65.     (setq XZ_sortlist (vl-sort
  66.                         (vl-sort sslist-ptl '(lambda (s1 s2) (> (cadadr s1) (cadadr s2))))
  67.                         '(lambda (s3 s4) (if(equal (cadadr s3) (cadadr s4) 0.6)(< (caadr s3) (caadr s4))))))   
  68.   )
  69.   ;从上到下从左到右
  70.   ((= GETK "V")
  71.     (setq XZ_sortlist (vl-sort
  72.                         (vl-sort sslist-ptl '(lambda (s1 s2) (< (caadr s1) (caadr s2))))
  73.                         '(lambda (s3 s4) (if(equal (caadr s3) (caadr s4) 0.6)(> (cadadr s3) (cadadr s4))))))   
  74.    )
  75.    ;选择顺序
  76.   ((= GETK "S")
  77.     (setq XZ_sortlist  sslist-ptl))
  78.    );cond
  79.   ;开始修改页码
  80.     (setq len0 0 len (length XZ_sortlist))
  81.     (repeat len
  82.      (if (setq ent0 (car (nth len0 XZ_sortlist)))
  83.          (progn
  84.            (cond
  85.              ((/= prefix "")
  86.            (if (=(strlen (rtos str))1)
  87.              (setq sttr (strcat prefix "0" (rtos str 2 0)))
  88.              (setq sttr (strcat prefix (rtos str 2 0)))
  89.            ))
  90.              ((= prefix "")(setq sttr  (rtos str 2 0)))
  91.            );cond
  92.            (xz-att ent0 blktag sttr)
  93.            (princ (strcat "-->正在修改页码 <" (rtos str 2 0) ">  "))
  94.            (setq len0 (1+ len0) str (1+ str))
  95.            (setq str0  str)                 
  96.          )
  97.       )
  98.   );repeat
  99.   (prin1)
  100. )
  101. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  102. (defun c:pginf ()
  103. (alert "                                           欢迎使用本程序\n
  104.          1.本程序为做越南万豪酒店施工图时所写.\n
  105.          2.本程序使用VisualLISP语言.\n
  106.          3.基于程序思想可以实现增加前缀(已增加)及按页码打印,有空且心情好时再写.\n
  107.          4.本程序排序方法为属性块的插入点.\n
  108.          5.本程序通过ActiveX提取了属性块的标记而后修改相应的值.\n
  109.          6.程序已加密恕不提供源码.\n
  110.          7.如有疑问请自行保留.\n
  111.                                                                         ---by 李晓卓 2010.11.17
  112.                                                                         ---RTX:60315
  113.         ")(prin1)
  114.   )
  115. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  116. (princ "\n************************************************")
  117. (princ "\n**    批量改页码 pg.lsp已加载                 **")
  118. (princ "\n**      >>批量改页码,以pg启动命令             **")
  119. (princ "\n**      >>查看程序信息,以pginf启动命令        **")
  120. (princ "\n**                          ----by 李晓卓     **")
  121. (princ "\n**                              2010.11.17    **")
  122. (princ "\n************************************************")
  123. (princ)
回复 支持 3 反对 0

使用道具 举报

发表于 2011-9-3 21:48 | 显示全部楼层
本帖最后由 無恒的地盘 于 2011-9-3 22:12 编辑


429014673应该说的是这个意思吧,动态块好像不可以选。

本帖子中包含更多资源

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

x
回复 支持 0 反对 1

使用道具 举报

发表于 2011-9-3 09:01 | 显示全部楼层
这么好的东东
大家顶哦
楼主真是大好!!!
发表于 2011-9-3 09:16 | 显示全部楼层
顶你!放源码就是好兄弟
发表于 2011-9-3 15:16 | 显示全部楼层
楼主可以改成M-1 M-2 M-3   .............
P-1  P-2  P-3  这种样式就好了(都是属性值来的)
 楼主| 发表于 2011-9-3 21:19 | 显示全部楼层
429014673 发表于 2011-9-3 15:16
楼主可以改成M-1 M-2 M-3   .............
P-1  P-2  P-3  这种样式就好了(都是属性值来的)

没看明白你的意思.
懒得再改它了,尤其是页码的排序,其实可以做的更好,懒得弄.
根据需要自己来处理吧.
 楼主| 发表于 2011-9-3 22:24 | 显示全部楼层
無恒的地盘 发表于 2011-9-3 21:48
429014673应该说的是这个意思吧,动态块好像不可以选。

动态块处理没做过.要补充代码才行,自己补吧.
发表于 2011-9-4 09:45 来自手机 | 显示全部楼层
我那个是图号来的,不过和上面图片也差不多,图纸太多了要一个一个去修改要不少时间,呵呵,找这个程序一直没找到,不知有哪位高人帮忙改下(加入一个提示,点选属性文字,如M-…A-等,再提示页码起始值,如2,框选图框属性值会变为M-2,M-3)
发表于 2011-9-4 10:22 | 显示全部楼层
我顶  
发表于 2011-9-4 14:45 | 显示全部楼层
顶!放源码的都是我的哥!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 02:22 , Processed in 0.286308 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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