[讨论]如何获得前一个图元名
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哥才厉害啦,顶。。。。。