明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1101|回复: 1

[求助]请高手看一下加入一个语句能实现我的小小要求

[复制链接]
发表于 2005-9-15 23:34 | 显示全部楼层 |阅读模式
;;;=====结构梁重编号=====
(defun C:cbh(/ xsel ysel sel bm tmpsel tmpobj n begin ans va co elist1 elist2 elist3 entmod2 do)
 (prompt "\n    非常感谢您的支持!")
   (prompt "\n本程序快捷键为 CBH !")
 (prompt "\n请选择范围:")
 (defun entmod2(code var na / old new na)
  (setq old(assoc code na))
  (setq new(cons code var))
  (setq na(subst new old na))
  (entmod na)
 )
 (setq sel (ssget) add (ssadd))
 (prompt "\n>请输入编号前缀 <KL>:")
 (setq prefix (getstring))
 (if (= prefix "") (setq prefix "KL"))
 (setq begin (getint "\n请输入开始编号 <1>:"))
 (if (not begin) (setq begin 1))
 (setq xsel (ssadd) ysel (ssadd) n 0)
 (setq bm begin)
 (while (< n (sslength sel));分成X向和Y向两组
  (setq elist1 (entget(ssname sel n)))
  (if (and
      (or
          (= (cdr (assoc 0 elist1)) "TEXT")
    (= (cdr (assoc 0 elist1)) "MTEXT")
          );or
          (or   
              (< (cdr (assoc 50 elist1)) (* (/ pi 180) 45))
              (>= (cdr (assoc 50 elist1)) (* (/ pi 180) 315))
          );or
      (wcmatch prefix (substr (cdr (assoc 1 elist1)) 1 (strlen prefix) )) ;是否为梁柱编号
      (not (wcmatch "*" (substr (cdr (assoc 1 elist1)) 1 1 )))
      );and  
  (setq ysel (ssadd (ssname sel n) ysel))
  );if
  (if (and
      (or
          (= (cdr (assoc 0 elist1)) "TEXT")
    (= (cdr (assoc 0 elist1)) "MTEXT")
          );or
          (and   
              (>= (cdr (assoc 50 elist1)) (* (/ pi 180) 45))
              (< (cdr (assoc 50 elist1)) (* (/ pi 180) 315))
          );and
          (wcmatch prefix (substr (cdr (assoc 1 elist1)) 1 (strlen prefix) ));是否为梁柱编号
      );and
       (setq xsel (ssadd (ssname sel n) xsel))    
       );if  
  (setq n (+ n 1))
 );while
 (princ (strcat "\n查找到" (itoa (sslength xsel)) "个X向编号," (itoa (sslength ysel)) "个Y向编号"))
 (princ (strcat "\n一共有" (itoa (+ (sslength xsel) (sslength ysel))) "个编号,正在重新编号,请稍候..."))
 (princ "\n...")
 (setq tmpsel ysel ysel nil tmpobj nil)
 (setq ysel (ssadd))
 (while (< 0 (sslength tmpsel));Y向排序(竖向) 
  (setq tmpobj (ssname tmpsel 0) n 1);取第一个对象
  (while (< n (sslength tmpsel));比较大小
   (setq elist1 (entget tmpobj));取ELIST1
   (setq elist2 (entget(ssname tmpsel n)))
   (if
           (< (nth 2 (assoc 10 elist2)) (nth 2 (assoc 10 elist1)));如果小于
           (setq tmpobj (ssname tmpsel n))
          );if
          (if
           (and (= (nth 2 (assoc 10 elist2)) (nth 2 (assoc 10 elist1))) (< (nth 1 (assoc 10 elist2)) (nth 1 (assoc 10 elist1))) );如果小于
           (setq tmpobj (ssname tmpsel n))
          );if
   (setq n (+ 1 n))
  );while
      (setq elist3 (entget tmpobj))
      (setq co 1)
      (setq va (cdr (assoc 1 elist3)))
    (setq va (substr va (+ 1 (strlen prefix)) (- (strlen va) (strlen prefix))))
    (while (or (> (atoi (substr va 1 1)) 0) (= (substr va 1 1) "0"));是0 
     (setq va (substr va 2 (strlen va)))
      );while
    (setq va (strcat prefix (itoa bm) va))
    (entmod2 co va elist3)
      (setq ysel(ssadd tmpobj ysel))
      (setq tmpsel (ssdel tmpobj tmpsel))
      (setq bm (+ 1 bm))
 );while
 (setq tmpsel xsel xsel nil tmpobj nil)
 (setq xsel (ssadd))
 (while (< 0 (sslength tmpsel));X向排序(竖向) 
  (setq tmpobj (ssname tmpsel 0) n 1);取第一个对象
  (while (< n (sslength tmpsel));比较大小
   (setq elist1 (entget tmpobj));取ELIST1
   (setq elist2 (entget(ssname tmpsel n)))
   (if
           (< (nth 1 (assoc 10 elist2)) (nth 1 (assoc 10 elist1)));如果小于
           (setq tmpobj (ssname tmpsel n))
          );if
          (if
           (and (= (nth 1 (assoc 10 elist2)) (nth 1 (assoc 10 elist1))) (< (nth 2 (assoc 10 elist2)) (nth 2 (assoc 10 elist1))) );如果小于
           (setq tmpobj (ssname tmpsel n))
          );if
   (setq n (+ 1 n))
  );while
      (setq elist3 (entget tmpobj))
      (setq co 1)
      (setq va (cdr (assoc 1 elist3)))
    (setq va (substr va (+ 1 (strlen prefix)) (- (strlen va) (strlen prefix))))
    (while (or (> (atoi (substr va 1 1)) 0) (= (substr va 1 1) "0"));是0      ; 
     (setq va (substr va 2 (strlen va)))
      );while
    (setq va (strcat prefix (itoa bm) va))
    (entmod2 co va elist3)
      (setq xsel(ssadd tmpobj xsel))
      (setq tmpsel (ssdel tmpobj tmpsel))
      (setq bm (+ 1 bm))
 );while
(if (= bm begin) (princ "\n没有合条件的编号,所以没有重新编号!"))
(if (/= bm begin) (princ (strcat "\n编号由" prefix (itoa begin) "到" prefix (itoa (- bm 1)) )))
(princ)
)

一个结构梁得编号的LISP,但是如果有相同的梁号,而一个是配筋的一个没有,最后号都重新编号了,能否改为如果改编号以前的梁在改编号以后梁号还是一样的

发表于 2005-9-16 11:59 | 显示全部楼层
把样例的图纸也发上来,否则没有人会去看这么长后篇代码。代码运行(在你的图上)结果是怎样,想改成怎样的结果,自然会有人帮你。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 17:02 , Processed in 0.275786 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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