[讨论]如何获得前一个图元名
<p>如何获得前一个图元名</p><p>和 entnext 相对应的函数</p><p>能够快速获得前一个图元名?</p> <p>这样对不?</p><p>(defun entprev (ename / a b)<br/> (setq b (entnext))<br/> (while (not (eq ename (setq a b b (entnext a)))))<br/> a<br/>)</p><p></p> 一张图30000个图元以上的话..... <p>;;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;; 返回给定图元的前一个图元 ;;<br/>;; (entpre ename) ;;<br/>;; Ex.(setq preName(entpre(car(entsel)))) ;;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>(defun entpre(ename / hd e2)<br/> (if(not(equal ename (entnext)))(progn<br/> (setq hd(cdr(assoc 5 (entget ename))))<br/> (while(not e2)<br/> (setq hd(base 16 (1-(Base16To10 hd))))<br/> (setq e2(handent hd))<br/> (if e2<br/> (if(not(entget e2))(setq e2 nil))<br/> )<br/> )<br/> ))<br/> e2<br/>)<br/>;<br/>(defun Base16To10(hd / n i k hd10)<br/> (setq hd10 0)<br/> (setq n(strlen hd) i n)<br/> (while(> i 0)<br/> (setq k(ascii(substr hd i 1)))<br/> (if(> k 57)<br/> (setq k(+ 10 (- k 65)))<br/> (setq k(- k 48))<br/> )<br/> (setq hd10(+ hd10 (* k(expt 16 (- n i)))))<br/> (setq i(1- i))<br/> ) <br/> hd10<br/>)<br/>;<br/>;Base函数来之Acad开发者文档<br/>(defun BASE ( bas int / ret yyy zot )<br/> (defun zot ( i1 i2 / xxx )<br/> (if (> (setq xxx (rem i2 i1)) 9)<br/> (chr (+ 55 xxx))<br/> (itoa xxx)<br/> ) <br/> )<br/> (setq ret (zot bas int) yyy (/ int bas))<br/> (while (>= yyy bas)<br/> (setq ret (strcat (zot bas yyy) ret))<br/> (setq yyy (/ yyy bas))<br/> )<br/> (strcat (zot bas yyy) ret)<br/>)<br/>;<br/>供参考</p><p></p> <p>多谢楼上提供思路</p><p>大概看了下</p><p>是根据句柄生成的递增原理向前查找的</p><p>但是测试结果比entnext要慢些</p><p>看来有改进的空间啊</p>
页:
[1]