![]() |
[讨论]如何获得前一个图元名
[讨论]如何获得前一个图元名
www.dimcax.com [讨论]如何获得前一个图元名 如何获得前一个图元名 和 entnext 相对应的函数 能够快速获得前一个图元名? 原创加密lisp真正的破解.原创lisp操作cad内置对话框.原创lisp直接调用win32 api.原创lisp开发小助手(代码自动生成器).原创vba语句->lisp语句解释器.原创lisp音乐播放器.原创lisp直接使用vba对话框. 这样对不? (defun entprev (ename / a b) (setq b (entnext)) (while (not (eq ename (setq a b b (entnext a))))) a ) d 一张图30000个图元以上的话..... 原创加密lisp真正的破解.原创lisp操作cad内置对话框.原创lisp直接调用win32 api.原创lisp开发小助手(代码自动生成器).原创vba语句->lisp语句解释器.原创lisp音乐播放器.原创lisp直接使用vba对话框. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 返回给定图元的前一个图元 ;; ;; (entpre ename) ;; ;; ex.(setq prename(entpre(car(entsel)))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun entpre(ename / hd e2) (if(not(equal ename (entnext)))(progn (setq hd(cdr(assoc 5 (entget ename)))) (while(not e2) (setq hd(base 16 (1-(base16to10 hd)))) (setq e2(handent hd)) (if e2 (if(not(entget e2))(setq e2 nil)) ) ) )) e2 ) ; (defun base16to10(hd / n i k hd10) (setq hd10 0) (setq n(strlen hd) i n) (while(> i 0) (setq k(ascii(substr hd i 1))) (if(> k 57) (setq k(+ 10 (- k 65))) (setq k(- k 48)) ) (setq hd10(+ hd10 (* k(expt 16 (- n i))))) (setq i(1- i)) ) hd10 ) ; ;base函数来之acad开发者文档 (defun base ( bas int / ret yyy zot ) (defun zot ( i1 i2 / xxx ) (if (> (setq xxx (rem i2 i1)) 9) (chr (+ 55 xxx)) (itoa xxx) ) ) (setq ret (zot bas int) yyy (/ int bas)) (while (>= yyy bas) (setq ret (strcat (zot bas yyy) ret)) (setq yyy (/ yyy bas)) ) (strcat (zot bas yyy) ret) ) ; 供参考 d 多谢楼上提供思路 大概看了下 是根据句柄生成的递增原理向前查找的 但是测试结果比entnext要慢些 看来有改进的空间啊 原创加密lisp真正的破解.原创lisp操作cad内置对话框.原创lisp直接调用win32 api.原创lisp开发小助手(代码自动生成器).原创vba语句->lisp语句解释器.原创lisp音乐播放器.原创lisp直接使用vba对话框. nons哥才厉害啦,顶。。。。。 |
所有的时间均为北京时间。 现在的时间是 09:15 PM. |