@yu85.info wrote:
Hello, I have a file (attached) with many blocks. I need to select some of them by a range of a specific attribute (POINT). For exemple 36-56.
Is there a simple way to do this?
Thanks in advance.
(defun c:range ( / ss rl rh range data f numresult i)
(if (and
(setq rl (getint "\nEnter Range (low): "))
(setq rh (getint "\nEnter Range (high): "))
(setq result (ssadd)
ss (ssget "_x" '((0 . "INSERT")(66 . 1))))
)
(progn
(setq range (vl-sort (list rl rh) '<));<-- because some user are really strubborn
(repeat (setq i (sslength ss))
(setq data (mapcar '(lambda (at)
(cons (vla-get-tagstring at)(vla-get-textstring at)))
(Vlax-invoke (vlax-ename->vla-object (ssname ss (Setq i (1- i)))) 'GetAttributes)))
(and
(setq f (assoc "POINT" data))
(numberp (setq num (read (cdr f))))
(<= (Car range) num (cadr range))
(ssadd (ssname ss i) result)
)
)
)
)
(sssetfirst nil result)
)
HTH