Nas subrotinas as vezes nos referenciamos as entidades pelo ename, pelo vla-object ou pela handle da mesma... mas temos de ficar testando pra saber qual referência temos... então pra simplificar:
(defun ename-of (ent)
(if (setq ent
(cond
((= 'STR (type ent)) (handent ent))
((= 'VLA-OBJECT (type ent))
(vlax-vla-object->ename ent))
((listp ent) (cdr (assoc -1 ent)))
(t ent)))
(if (entget ent) ent)))
esta rotina tenta converter o argumento passado em um ENAME, se conseguir, tenta recuperar sua ELIST, se conseguir, a referência é válida e a entidade existe, caso contrário, retorna NIL
dxf
Uma rotina bastante útil, pois ela simplifica o processo de pegar o valor de um dxf duma entidade... veja que funciona com selections sets também
(defun dxf (dx ent / tmp ls? l e n)
(if (= 'PICKSET (type ent))
(progn
(setq n 0)
(repeat (sslength ent)
(setq e (ssname ent n)
n (1+ n)
l (append l (list (dxf dx e)))))
l)
(progn
(setq ent (if (listp ent)
ent
(if (setq tmp (ename-of ent))
(entget tmp '("*"))))
ls? (listp dx)
dx (if ls? dx (list dx))
tmp (if ent
(mapcar
'(lambda (x) (cdr (assoc x ent)))
dx)))
(if ls? tmp (car tmp)))))
(defun dxf (dx ent / tmp ls? l e n)
(if (= 'PICKSET (type ent))
(progn
(setq n 0)
(repeat (sslength ent)
(setq e (ssname ent n)
n (1+ n)
l (append l (list (dxf dx e)))))
l)
(progn
(setq ent (if (listp ent)
ent
(if (setq tmp (ename-of ent))
(entget tmp '("*"))))
ls? (listp dx)
dx (if ls? dx (list dx))
tmp (if ent
(mapcar
'(lambda (x) (cdr (assoc x ent)))
dx)))
(if ls? tmp (car tmp)))))
Assinar:
Postagens (Atom)