Bubble
para AutoCAD
El asistente de información
gratuito para AutoCAD
| ¿Cómo
escribir un Plug-in?: |
¿Cómo puedo escribir un
plug-in para Bubble? Es fácil si conoce Autolisp. Sólo siga estos pasos.
Recuerde que los plug-ins sólo funcionan en AutoCAD 2000 y versiones
superiores. No en AutoCAD R14. Tampoco en AutoCAD LT:
1. Cree
un nuevo archivo Autolisp. Añada su cabecera (un comentario):
;; -----------------------------------------------------------------
;; Bubble 2: My Bubble PlugIn 1.0 - (c) 2002 Asuni CAD
;; -----------------------------------------------------------------
|
2.
Añada la siguiente funcion de carga TAL COMO ESTA AQUI. No la modifique.
Esta función permite que convivan varios plug-ins en la misma sesión de
AutoCAD.
;; Esta es la función de carga
;; NO LA MODIFIQUE
(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. La siguiente es la
función que realiza el trabajo de facilitar la información sobre los
objetos. El nombre de esta función ha de comenzar con el prefijo "ASUNI:BUBBLE:"
tal como se muestra en el ejemplo. Con esto se evita la colisión con
otras funciones Autolisp.
PARAMETROS PASADOS A LA FUNCION:
Esta función recibe un parámetro llamado "handle"
que contiene el handle de la entidad de la que Bubble va a mostrar
información.
DATOS DEVUELTOS POR LA FUNCION HACIA BUBBLE:
Esta función le devuelve a Bubble la información en
dos variables::
ASUNI:BUBBLE:DATA - Contiene los datos que va a mostrar
Bubble sobre el objeto, en forma de lista de sublistas que contienen el
nombre de la propiedad y el valor, en formato texto.
ASUNI:BUBBLE:OBJECT - El nombre del objeto (tipo de objeto). Si esta
variable contiene un nombre, Bubble lo usará en lugar del nombre real del
objeto, y sólo añadirá las propiedades comunes a los datos incluidos en
ASUNI:BUBBLE:DATA. Si esta variable es nil, los datos se añaden al final
de la lista actual de la entidad.
(defun ASUNI:BUBBLE:MyBpiPlugIn (handle / ename eget p1 p2)
(setq ename (handent handle))
(setq ASUNI:BUBBLE:DATA nil)
;; si es una línea:
(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 "MiLinea")
(setq ASUNI:BUBBLE:DATA
(list
(if ASUNI:BUBBLE:MyPib:MiLinea:DeltaX
(strcat "DeltaX: " (rtos (abs (- (car p2) (car p1)))))
)
(if ASUNI:BUBBLE:MyPib:MiLinea:DeltaY
(strcat "DeltaY: " (rtos (abs (- (cadr p2) (cadr p1)))))
)
(if ASUNI:BUBBLE:MyPib:MiLinea:DeltaZ
(strcat "DeltaZ: " (rtos (abs (- (caddr p2) (caddr p1)))))
)
)
)
)
)
(princ)
)
|
4. Después se define la
estructura de datos necesaria para que Bubble nos muestre en su lista de
propiedades las de nuestro plugin, para que el usuario seleccione cuáles
desea mostrar. Es una lista que consiste en los siguientes elementos:
- A código (handle) para el plug-in. Bubble lo
utiliza para crear variables de Autolisp que contienen los datos. Debe
ser también el nombre de la carpeta bajo el directorio Plugins.
- Una descripción (utilizada en la ventana de
propiedades).
- El archivo del icono del Plug-in en la ventana de
propiedades. (Este parámetro es opcional. Si no está, se utiliza un
icono por defecto).
- Una lista de cada objeto con:
- El código (handle) del objeto.
- El archivo del icono (extensión ICO) a que se
asociará el objeto en la ventana de propiedades de Bubble (Este
parámetro es opcional. Si no está, se utiliza un icono por
defecto).
- Una lista con parejas: Código (handle) de la
propiedad y valor actual de su estado (T = activa, false = desactiva)
Bubble crea variables con nombres basados en el
siguiente sistema de nomenclatura:
ASUNI:BUBBLE:[HandlePlugIn]:[HandleObjeto]:[HandlePropiedad]
El valor de estas variables es T, si la propiedad
está activa, o nil, si la propiedad está desactivada.
(setq ASUNI:BUBBLE:PROPS
'(("MyPib" "Mi Plugin Bubble"
("MiLinea" "MiLinea.ico"
("DeltaX" T)
("DeltaY" T)
("DeltaZ" T)
)
))
)
|
En este ejemplo, Bubble crea las siguientes variables de
Autolisp, todas con valor T:
- ASUNI:BUBBLE:MyBpi:MiLinea:DeltaX
- ASUNI:BUBBLE:MyBpi:MiLinea:DeltaY
- ASUNI:BUBBLE:MyBpi:MiLinea:DeltaZ
Se utilizan en la función ASUNI:BUBBLE:MyBpiPlugIn
para saber si se ha de mostrar la informacion relativa a cada una de las
propiedades.
5. La última función es
la que conecta el plug-in con Bubble. Le indica a Bubble la información
que éste necesita sobre el plug-in. Primero lo añade a la lista de
GetData con la función ASUNI:BUBBLE:AddPlugIn (así todos los plug-ins
reciben la llamda de Bubble de una manera ordenada), definida al principio
del programa (paso 1). La última función es la que le dice a Bubble
"¡estoy aqui!". Esto se hace con la funcion ASUNI:BUBBLE:LoadProps
;; Aquí tiene lugar la carga:
(if (null ASUNI:BUBBLE:MyBpi:Loaded)
(progn
(princ "\nBubble 2: My Bubble PlugIn 1.0 - (c) 2001 Asuni CAD")
;; Para evitar carga múltiple
(setq ASUNI:BUBBLE:MyBpi:Loaded T)
;; Añade la función a la lista GetData:
(ASUNI:BUBBLE:AddPlugIn "ASUNI:BUBBLE:MyBpiPlugIn")
;; Carga las propiedades en Bubble:
(ASUNI:BUBBLE:LoadProps)
)
)
|
|