nonsmall 发表于 2008-12-23 13:13:00

[讨论]如何获得前一个图元名

<p>如何获得前一个图元名</p><p>和 entnext&nbsp; 相对应的函数</p><p>能够快速获得前一个图元名?</p>

caoyin 发表于 2008-12-23 13:49:00

<p>这样对不?</p><p>(defun entprev (ename / a b)<br/>&nbsp; (setq b (entnext))<br/>&nbsp; (while (not (eq ename (setq a b b (entnext a)))))<br/>&nbsp; a<br/>)</p><p></p>

nonsmall 发表于 2008-12-23 14:41:00

一张图30000个图元以上的话.....

Student 发表于 2008-12-24 09:05:00

<p>;;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;;&nbsp; 返回给定图元的前一个图元&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br/>;;&nbsp; (entpre ename)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;<br/>;;&nbsp; Ex.(setq preName(entpre(car(entsel))))&nbsp;&nbsp;&nbsp; ;;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>(defun entpre(ename / hd e2)<br/>&nbsp;(if(not(equal ename (entnext)))(progn<br/>&nbsp;&nbsp;(setq hd(cdr(assoc 5 (entget ename))))<br/>&nbsp;&nbsp;(while(not e2)<br/>&nbsp;&nbsp;&nbsp;(setq hd(base 16 (1-(Base16To10 hd))))<br/>&nbsp;&nbsp;&nbsp;(setq e2(handent hd))<br/>&nbsp;&nbsp;&nbsp;(if e2<br/>&nbsp;&nbsp;&nbsp;&nbsp;(if(not(entget e2))(setq e2 nil))<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;)<br/>&nbsp;))<br/>&nbsp;e2<br/>)<br/>;<br/>(defun Base16To10(hd / n i k hd10)<br/>&nbsp;(setq hd10 0)<br/>&nbsp;(setq n(strlen hd) i n)<br/>&nbsp;(while(&gt; i 0)<br/>&nbsp;&nbsp;(setq k(ascii(substr hd i 1)))<br/>&nbsp;&nbsp;(if(&gt; k 57)<br/>&nbsp;&nbsp;&nbsp;(setq k(+ 10 (- k 65)))<br/>&nbsp;&nbsp;&nbsp;(setq k(- k 48))<br/>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;(setq hd10(+ hd10 (* k(expt 16 (- n i)))))<br/>&nbsp;&nbsp;(setq i(1- i))<br/>&nbsp;) <br/>&nbsp;hd10<br/>)<br/>;<br/>;Base函数来之Acad开发者文档<br/>(defun BASE ( bas int / ret yyy zot )<br/>&nbsp; (defun zot ( i1 i2 / xxx )<br/>&nbsp;&nbsp;&nbsp; (if (&gt; (setq xxx (rem i2 i1)) 9)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (chr (+ 55 xxx))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (itoa xxx)<br/>&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp; )<br/>&nbsp; (setq ret (zot bas int) yyy (/ int bas))<br/>&nbsp; (while (&gt;= yyy bas)<br/>&nbsp;&nbsp;&nbsp; (setq ret (strcat (zot bas yyy) ret))<br/>&nbsp;&nbsp;&nbsp; (setq yyy (/ yyy bas))<br/>&nbsp; )<br/>&nbsp; (strcat (zot bas yyy) ret)<br/>)<br/>;<br/>供参考</p><p></p>

nonsmall 发表于 2008-12-24 09:44:00

<p>多谢楼上提供思路</p><p>大概看了下</p><p>是根据句柄生成的递增原理向前查找的</p><p>但是测试结果比entnext要慢些</p><p>看来有改进的空间啊</p>

liminnet 发表于 2008-12-24 09:50:00

页: [1]
查看完整版本: [讨论]如何获得前一个图元名