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)
  )
)

 

 


(c) 2006, Asuni CAD - Avviso legale
webmaster