Bubble per AutoCAD
L'assistente di informazioni gratuito per gli utenti di AutoCAD
| Come scrivere un plug-in: |
Come scrivere un plug-in per Bubble? Se conoscete Autolisp, è
facile. Basterà seguire questi passi. Da notare che i plug-in funzionano solo con AutoCAD 2000 e versioni
successive. No R14. No LT:
1. Creare un nuovo file
Autolisp. Aggiungere un'intestazione (un commento):
;; -----------------------------------------------------------------
;; Bubble 2: Il mio plug-in 1.0 per Bubble - (c) 2002 Asuni CAD
;; -----------------------------------------------------------------
|
2. Aggiungere questa funzione loader TALE
QUALE. Non modificatela:
;; Si tratta della funzione di caricamento
;; NON MODIFICARE
(defun ASUNI:BUBBLE:AddPlugIn (PlgInFunction)
(if ASUNI:BUBBLE:GETDATA
(setq ASUNI:BUBBLE:GETDATA
(append ASUNI:BUBBLE:GETDATA
(list
'(setq temp ASUNI:BUBBLE:DATA)
(list (read PlgInFunction) 'handle)
'(setq ASUNI:BUBBLE:DATA
(append temp '("[-]") ASUNI:BUBBLE:DATA)
)
'(princ)
)
)
)
(progn
(defun-q ASUNI:BUBBLE:GETDATA (handle / temp)
(setq ASUNI:BUBBLE:OBJECT nil)
)
(setq ASUNI:BUBBLE:GETDATA
(append ASUNI:BUBBLE:GETDATA
(list
(list (read PlgInFunction) 'handle)
'(princ)
)
)
)
)
)
)
|
3. Qui di seguito presentiamo la funzione che realizza il
lavoro. Occorre anteporre al nome della funzione "ASUNI:BUBBLE:", come compare
nell'esempio. Ciò consente di evitare la collisione con altre funzioni di Autolisp.
DATI INVIATI ALLA FUNZIONE:
Questa funzione riceve il parametro "handle", il quale gestisce l'oggetto che Bubble sta cercando di mostrare.
DATI INVIATI DALLA FUNZIONE A BUBBLE:
Questa funzione restituisce le informazioni a Bubble in 2 variabili:
ASUNI:BUBBLE:DATA - Le informazioni che Bubble deve mostrare all'istante, come un elenco di liste
consistenti di nome e valore di una proprietà.
ASUNI:BUBBLE:OBJECT - Il nome dell'oggetto. Se assegnate un nome all'oggetto, si visualizzano solo le vostre informazioni e le proprietà comuni
dell'oggetto. Se la variabile è nulla, i dati vengono aggiunti alla fine dell'elenco delle informazioni.
(defun ASUNI:BUBBLE:MyBpiPlugIn (handle / ename eget p1 p2)
(setq ename (handent handle))
(setq ASUNI:BUBBLE:DATA nil)
;; se si tratta di una linea
(if (and ename (= "LINE" (cdr (assoc 0 (setq eget (entget ename))))))
(progn
(setq p1 (cdr (assoc 10 eget)))
(setq p2 (cdr (assoc 11 eget)))
(setq ASUNI:BUBBLE:OBJECT "MyLine")
(setq ASUNI:BUBBLE:DATA
(list
(if ASUNI:BUBBLE:MyBpi:MyLine:DeltaX
(strcat "DeltaX: " (rtos (abs (- (car p2) (car p1)))))
)
(if ASUNI:BUBBLE:MyBpi:MyLine:DeltaY
(strcat "DeltaY: " (rtos (abs (- (cadr p2) (cadr p1)))))
)
(if ASUNI:BUBBLE:MyBpi:MyLine:DeltaZ
(strcat "DeltaZ: " (rtos (abs (- (caddr p2) (caddr p1)))))
)
)
)
)
)
(princ)
)
|
4. Quindi occorre definire la struttura dei dati di cui ha bisogno Bubble per mostrare le proprietà del plug-in nella finestra di Bubble, in modo tale che l'utente selezioni le informazioni da
mostrare. L'elenco consta dei seguenti elementi:
- Un handle del plug-in. Bubble lo usa per creare delle variabili
Autolisp. Deve essere anche il nome della cartella sotto la cartella
Plugin;
- Una descrizione (usata nella finestra proprietà);
- Il nome dell'icona del Plug-in (questo parametro è opzionale; se non si usa, viene usata un'icona di
default);
- Una lista per ogni oggetto con:
- L'handle dell'oggetto
- Il nome dell'icona dell'oggetto (ICO file) da associare all'oggetto nella finestra proprietà
(questo parametro è opzionale; se non si usa, viene usata un'icona di
default)
- Una lista di coppie di elementi: l'handle della proprietà ed il valore attuale (T = on, falso = off)
Bubble crea delle variabili basate sugli handle con il seguente sistema di nomenclatura:
ASUNI:BUBBLE:[PlugInHandle]:[ObjectHandle]:[PropertyHandle]
Il valore è T se la proprietà è attiva, mentre è nullo se la proprietà è disattivata.
(setq ASUNI:BUBBLE:PROPS
'(("MyBpi" "Il mio plugin per Bubble"
("MyLine" "MyLine.ico"
("DeltaX" T)
("DeltaY" T)
("DeltaZ" T)
)
))
)
|
In questo esempio, Bubble crea le seguenti variabili Autolisp:
- ASUNI:BUBBLE:MyBpi:MyLine:DeltaX
- ASUNI:BUBBLE:MyBpi:MyLine:DeltaY
- ASUNI:BUBBLE:MyBpi:MyLine:DeltaZ
che vengono usate nella funzione ASUNI:BUBBLE:MyBpiPlugIn.
5. L'ultima funzione è quella
definitiva. Fornisce a Bubble le informazioni necessarie sul plug-in. Prima di tutto, inserisce il plug-in nell'elenco getdata (in modo tale che i plug-in ricevano le informazioni senza disturbare gli altri plug-in), usando la funzione ASUNI:BUBBLE:AddPlugIn, definita nel file elenco (passo
1). Quindi, avvisa Bubble della sua presenza. Lo fa con ASUNI:BUBBLE:LoadProps
;; Quindi viene eseguito il caricamento :
(if (null ASUNI:BUBBLE:MyBpi:Loaded)
(progn
(princ "\nBubble 2: Il mio plugin per Bubble 1.0 - (c) 2001 Asuni CAD")
;; Per evitare caricamenti multipli
(setq ASUNI:BUBBLE:MyBpi:Loaded T)
;; Per aggiungere la funzione all'elenco GetData :
(ASUNI:BUBBLE:AddPlugIn "ASUNI:BUBBLE:MyBpiPlugIn")
;; Per caricare le proprietà su Bubble :
(ASUNI:BUBBLE:LoadProps)
)
)
|
|