Selezione oggetto con Visual Lisp

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
#1
In Lisp (non visual) posso ottenere il nome dell'entità o la sua lista completa via
(setq NOME_ENTITA (car (entsel)))
(setq ENTITA (entget (car (entsel))))

Le stesse informazioni, via Visual Lisp come si ottengono?
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#2
(setq NOME_ENTITA (car (entsel)))

(setq vlaobj (vlax-ename->vla-object NOME_ENTITA)) ottieni l'oggetto (pari a ENTITA), ancora non sai cosa sia, linea, plinea, etc.

(vlax-get-property vlaobj 'ObjectName) tipo entità

(fnVariantToLisp (vlax-get-property vlaobj "StartPoint")) se fosse una linea ritorna la stessa lista di (cdr (assoc 10 ENTITA))

=====================================================
questa piccola funzione riporta le proprietà dell'entità selezionata
; che cosa è
(defun c:CCE()
(setq n (car (sing "\nSel ent: ")))
(setq vlaObj (vlax-ename->vla-object n))
(vlax-dump-object vlaObj)
)
=====================================================
; trasforma variabile tipo variant in liste
(defun fnVariantToLisp(var)
(cond
((= (type var) 'variant)
(fnVariantToLisp (vlax-variant-value var)))
((= (type var) 'safearray)
(mapcar 'fnVariantToLisp (vlax-safearray->list var))
)
(T var)
)
=====================================================

è solo l'inizio, in rete si trova un sacco di materiale.
 

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
#3
Ammazza, un bel po più complicato del Lisp secco, anche se ho visto che puoi ottenere funzioni più mirate (tipo l'intersezione di una retta con una pline, una distanza su una curva etc)
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#4
I comandi aggiunti con vl-load-com utilizzano la stessa logica del vba, quindi oggetti con proprietà e metodi, impari uno e capisci l'altro.
Ciao