明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: LLXXZZ

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

    [复制链接]
发表于 2016-5-23 13:31 | 显示全部楼层
好东西,先顶了!
发表于 2016-11-1 21:23 | 显示全部楼层

       李工,因有旋转(即竖向)的图框,且块比例都不相同,但图框下端都在一水平线上,
                 所以排序时是否可以修改为以图框的左下角点进行排序?
       参考了好多的排序函数,但都没顺利的修改出来,请有时间的时候帮忙修改下,谢谢!!
发表于 2017-7-28 21:35 | 显示全部楼层
感谢分享。受益匪浅
发表于 2017-8-23 12:55 | 显示全部楼层
感谢楼主 的确改页码 自动递增就更好
发表于 2017-8-25 13:43 | 显示全部楼层
此程序有时会出现尾数出现(.0000)用的CAD是2008的,有时又不会出现,你能帮忙优化一下吗

本帖子中包含更多资源

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

x
发表于 2017-8-27 15:59 | 显示全部楼层
谢谢楼主,支持下
发表于 2017-10-12 11:07 | 显示全部楼层
顶你!放源码就是好兄弟。谢谢分享
发表于 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

使用道具 举报

发表于 2017-12-27 16:41 | 显示全部楼层
太好了,找到相应的东西
发表于 2018-3-28 11:59 | 显示全部楼层

谢谢您,我下来试一下,好久没上明经了,今天才看到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 09:09 , Processed in 0.935940 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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