明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖

[源码] 批改图框页码,选择集排序疑问

[复制链接]
发表于 2019-9-25 16:12 来自手机 | 显示全部楼层
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=180224&mobile=2
发表于 2020-1-15 09:25 | 显示全部楼层
这应该是你要的。
  1. (princ "\n★功能:批量改图框页码,请输入 ym 命令。原著:by 李晓卓;修改:xvjiex\n")
  2. (if (null vlax-dump-object) (vl-load-com) )
  3. (defun xz-att (ent tag string / liST0 liST1 num blkref)
  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 liST1 (mapcar 'vla-Get-TagString  liST0))
  9.              (setq num (vl-position tag list1))
  10.              (vla-put-TextString (nth num liST0) string)
  11.   )
  12.     ); endif
  13.   ); endif
  14.   (prin1)
  15. ); enddefun
  16. ;(setq  ent  (car (entsel)))   例子
  17. ;(xz-att ent "页码" 30)   例子

  18. ;***********
  19. (defun c:YM (/ EP1 EG1 EG2 blktag EP1st blkname str GETK prefix sttr
  20.        index0 index sslist XZ_sortlist len0 len sslist_ptl )
  21.   (vl-load-com)
  22.   (if (progn
  23.      (setq EP1 (entsel "\n点取属性块中,页码的位置:"))
  24.         (setq EG1 (cdr (assoc 0 (entget (car EP1)))))
  25.            (if (/= EG1 "INSERT")
  26.        (progn(princ "\n必须选择属性块.")(exit)(princ))
  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.   ;开始选择页码块并修改
  41.   (setq prefix (getstring "请输入前缀:"))
  42.   (if (=  str0  nil) (setq str0 1)) (initget 6)
  43.   (setq str (getint (strcat "请输入一个起始整数<" (rtos str0 2 0) ">:")))
  44.   (if (= str  nil)(setq str  str0))
  45.   
  46.   (initget "H V S ")(setq GETK (getkword "排序方式:\n [横向优先(H)/竖向优先(V)/选择优先(S)]: <H> "))
  47.   (princ ">>选择批量修改页码的对象...")
  48.   (setq ss (ssget  (cons blkname slist)))
  49.   (setq index0 0 index (sslength ss) sslist '())   
  50.   (repeat index
  51.     (setq sslist (cons (ssname ss index0) sslist))
  52.     (setq index0 (1+ index0))
  53.   )


  54.   ;开始构建图元点位表
  55.   (setq index0 0  sslist_ptl '() tmp_pt '())   
  56.   (repeat index
  57.     ;(setq e_obj (vlax-ename->vla-object (entget (nth index0 sslist))))
  58.     (setq e_obj (vlax-ename->vla-object  (nth index0 sslist)))
  59.     (vla-getboundingbox e_obj 'minpt 'maxpt)
  60.     (setq tmp_pt (cons (nth index0 sslist) (cons (vlax-safearray->list  minpt) tmp_pt)))
  61.     (setq sslist_ptl (cons tmp_pt sslist_ptl))
  62.     (setq tmp_pt '())
  63.     (setq index0 (1+ index0))
  64.   )




  65.   ;开始排序
  66.   (cond      
  67.   ;从左到右从上到下
  68.   ((or (= GETK "H")(= GETK nil))
  69.     (setq XZ_sortlist (vl-sort
  70.       (vl-sort sslist_ptl '(lambda (s1 s2) (> (cadadr s1) (cadadr s2))))
  71.       '(lambda (s3 s4) (if(equal (cadadr s3) (cadadr s4) 0.6)(< (caadr s3) (caadr s4))))))   
  72.   )
  73.   ;从上到下从左到右
  74.   ((= GETK "V")
  75.     (setq XZ_sortlist (vl-sort
  76.       (vl-sort sslist_ptl '(lambda (s1 s2) (< (caadr s1) (caadr s2))))
  77.       '(lambda (s3 s4) (if(equal (caadr s3) (caadr s4) 0.6)(> (cadadr s3) (cadadr s4))))))   
  78.    )
  79.    ;选择顺序
  80.   ((= GETK "S")
  81.     (setq XZ_sortlist  sslist_ptl))
  82.    );cond
  83.   ;开始修改页码
  84.     (setq len0 0 len (length XZ_sortlist))
  85.     (repeat len
  86.      (if (setq ent0 (car (nth len0 XZ_sortlist)))
  87.    (progn
  88.      (cond
  89.        ((/= prefix "")
  90.      (if (=(strlen (rtos str))1)
  91.        (setq sttr (strcat prefix "0" (rtos str 2 0) "页"))
  92.        (setq sttr (strcat prefix (rtos str 2 0) "页"))
  93.      ))
  94.        ((= prefix "")(setq sttr  (strcat (rtos str 2 0) "页")))
  95.      );cond
  96.      (xz-att ent0 blktag sttr)
  97.      (princ (strcat " >>已修改至页:" (rtos str 2 0) "、"))
  98.      (setq len0 (1+ len0) str (1+ str))
  99.      (setq str0  str)      
  100.    )
  101.       )
  102.   );repeat
  103.   (prin1)
  104. )


点评

非常感谢,是我想要的排序,谢谢!!  发表于 2020-1-15 11:16
回复 支持 1 反对 0

使用道具 举报

发表于 2024-6-8 22:54 | 显示全部楼层
xvjiex 发表于 2020-1-15 09:25
这应该是你要的。

非常感谢!自己写了个图框程序,正愁如何自动化命名,刚好找到了这个帖子!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-26 18:37 , Processed in 0.123377 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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