Bubble pour AutoCAD
L'auxiliaire d'informations gratuit pour les utilisateurs d'AutoCAD


Comment écrire un module :

Comment puis-je écrire un module pour Bubble ? C'est facile si vous connaissez Autolisp. Suivez ces instructions : Les modules ne fonctionnent que sur AutoCAD 2000 et postérieurs. Pas sur R14. Pas sur LT :

1. Créez un nouveau fichier Autolisp. Ajoutez votre en-tête (un commentaire) :

;; -----------------------------------------------------------------
;; Bubble 2 : Mon module Bubble 1.0 - (c) 2002 Asuni CAD
;; -----------------------------------------------------------------

2. Ajoutez cette fonction de chargement TELLE QUELLE, vous ne devez pas la modifier :

;; Il s'agit de la fonction de chargement
;; NE PAS MODIFIER
(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. Vous devez écrire ensuite la fonction qui fait le travail. Le nom de la fonction devra être précédée de "ASUNI:BUBBLE:" comme dans l'exemple. Ceci permet d'éviter toute confusion avec d'autres fonctions Autolisp. 

DONNÉES ENVOYÉES À LA FONCTION :

Cette fonction reçoit un paramètre appelé "handle" qui contient le handle de l'entité que Bubble essaie de montrer. 

DONNÉES  RENVOYÉES PAR LA FONCTION À BUBBLE :

Cette fonction renvoie l'information à Bubble sous forme de 2 variables :

ASUNI:BUBBLE:DATA - L'information à montrer par Bubble, sous forme d'une liste de listes constituée du nom et de la valeur de la propriété. 
ASUNI:BUBBLE:OBJECT - Le nom de l'objet. Si vous donnez un nom à l'objet, seule votre information et les propriétés communes sont montrées pour cet objet. Si cette variable est nulle, les données sont ajoutées à la fin de la liste d'informations actuelle.

(defun ASUNI:BUBBLE:MyBpiPlugIn (handle / ename eget p1 p2)
  (setq ename (handent handle))
  (setq ASUNI:BUBBLE:DATA nil)
  ;; s'il s'agit d'une ligne
  (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. Nous définissons ensuite la structure de données nécessaire pour que Bubble puisse afficher les propriétés de notre module dans la fenêtre de Bubble, afin que l'utilisateur puisse sélectionner les informations à montrer. Il s'agit d'une liste comprenant les composants suivants :

  • Un code (handle) du module : Bubble l'utilise pour créer les variables de données d'Autolisp. Ce doit aussi être le nom du dossier dans le répertoire des modules
  • Une description (utilisée dans la fenêtre des propriétés).
  • Le nom de l'icône du module. (Ce paramètre est facultatif, s'il n'est pas indiqué, une icône par défaut est utilisée.)
  • Une liste pour chaque objet contenant :
    • Code de l'objet
    • Nom de l'icône de l'objet (fichier ICO) à associer avec l'objet dans la fenêtre de propriétés. (Ce paramètre est facultatif, s'il n'est pas indiqué, une icône par défaut est utilisée)
    • Une liste avec les couples : code de la propriété et valeur réelle (T = activée, false = désactivée)

Bubble crée des variables basées sur les codes avec le système de nom suivant :

ASUNI:BUBBLE:[CodeModule]:[CodeObjet]:[CodePropriété]

La valeur est T, si la propriété est activée ou nil si la propriété est désactivée.

(setq ASUNI:BUBBLE:PROPS
 '(("MyBpi" "Mon module Bubble"
    ("MyLine" "MaLigne.ico"
      ("DeltaX" T)
      ("DeltaY" T)
      ("DeltaZ" T)
    )
  ))
)

Dans cet exemple, Bubble créer les variable Autolisp suivantes :

  • ASUNI:BUBBLE:MyBpi:MaLigne:DeltaX
  • ASUNI:BUBBLE:MyBpi:MaLigne:DeltaY
  • ASUNI:BUBBLE:MyBpi:MaLigne:DeltaZ

qui sont utilisées dans la fonction ASUNI:BUBBLE:MyBpiPlugIn .

 

5. La dernière fonction relie le module et Bubble. Elle indique à Bubble les informations sur le module. Elle ajoute tout d'abord notre module à la liste getdata (pour que tous les modules obtiennent des informations sans créer de conflit avec les autres), en utilisant la fonction ASUNI:BUBBLE:AddPlugIn, définie auparavant dans le fichier lisp (1er point). La dernière fonction indique à Bubble "Je suis là". ASUNI:BUBBLE:LoadProps 

;; Le chargement est alors exécuté :
(if (null ASUNI:BUBBLE:MyBpi:Loaded)
  (progn
    (princ "\nBubble 2: Mon module Bubble 1.0 - (c) 2001 Asuni CAD")
    ;; Pour éviter plusieurs chargements
    (setq ASUNI:BUBBLE:MyBpi:Loaded T)
    ;; Pour ajouter la fonction à la liste GetData :
    (ASUNI:BUBBLE:AddPlugIn "ASUNI:BUBBLE:MyBpiPlugIn")
    ;; Pour charger les propriétés dans Bubble :
    (ASUNI:BUBBLE:LoadProps)
  )
)

 

 


(c) 2006, Asuni CAD - Notice légale
.