;;;=====结构梁重编号===== (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,但是如果有相同的梁号,而一个是配筋的一个没有,最后号都重新编号了,能否改为如果改编号以前的梁在改编号以后梁号还是一样的 |