Professional Documents
Culture Documents
REFERENCIA DCL
Si entra en la carpeta Support de AutoCAD, encontrar un archivo llamado Base.dcl. Este archivo
contiene las definiciones bsicas DCL y definiciones para los prototipos comnmente usados.
Tambin encontrar en la carpeta el archivo Acad.dcl. Este archivo contiene las definiciones
estndar de todos los cuadros de dilogos usados por AutoCAD.
Como trabaja el DCL.
Primero crearemos un nuevo archivo DCL llamado incluir.dcl:
incluir : dialog {
label = Elija un punto:;
ok_cancel;
}
Ahora, crearemos un nuevo archivo de AutoLISP llamado incluir.lsp con el siguiente cdigo:
(defun c:incluir () ;_define la funcin
(setq dcl_id (load_dialog "incluir.dcl")) ;_carga el archivo dcl
(if (not (new_dialog "incluir" dcl_id)) ;_carga el cuadro de dilogo
(exit) ;_si no esta cargado sale
)
(action_tile
"cancel"
"(done_dialog)
(setq resultado nil)"
) ;_si selecciona el botn Cancel, el cuadro se cierra.
(action_tile
"accept"
"(done_dialog)
(setq resultado t)"
) ;_si selecciona el botn OK fue aceptado
(start_dialog) ;_comienza el cuadro de dilogo
(unload_dialog dcl_id) ;_descarga el cuadro de dilogo
(princ)
) ;_defun
(princ) ;_carga limpia
Ahora, abra AutoCAD, cargue la rutina y luego ejectela.
Deber aparecer un cuadro de dilogo muy simple, como el siguiente:
Ahora, supongamos que tenemos un logo de una empresa, o algo parecido, y queremos que
aparezca en todos los cuadros de dilogos personales. Podramos poner el cdigo del logo en todos
nuestros archivos DCL. Pero que pasa si cambiamos nuestro nmero de telfono?. Tendramos
que editar todos nuestros cdigos de los cuadro de dilogos que contienen nuestro logo. Pero hay
una forma de evitar eso. Crearemos otro archivos DCL para nuestro logo, e incluiremos este
archivo en nuestro archivo DCL original. Hacindolo de la siguiente manera, slo tendremos que
cambiar el archivo DCL principal si queremos hacer la revisin para nuestro logo.
Vamos a crear nuestro primer archivo DCL para el logo.
Crearemos un nuevo archivo DCL llamado logo.dcl:
logo : boxed_column {
:paragraph {
:text_part {
label = Traido a;
}
:text_part {
label = Usted por;
}
:text_part {
label = AfraLisp;
}
:text_part {
label = 063-235837;
}
}
}
Ahora edite el archivo incluir.dcl y agregue lo siguiente:
@include logo.dcl y deber quedar de la siguiente forma:
@include logo.dcl
incluir : dialog {
label = Elija un punto:;
ok_cancel;
logo;
}
Vuelva a cargar y ejecute el archivo incluir.lsp y deber aparecer lo siguiente:
Ok, el logo no es de lo mejor, pero estoy seguro que se le ocurrir una idea mucho mejor.
Puede incluir dos o ms referencias para archivos DCL si lo desea.
Permtame mostrarle otro ejemplo. Primero crearemos un nuevo archivo DCL llamado gpunto.dcl
con el siguiente cdigo:
gpunto : boxed_column {
label = Ejemplo de punto;
:button {
Si lo desea, podra crear una biblioteca entera de archivos DCL que contienen las definiciones
modificadas para requisitos particulares del cuadro de dilogo que usted podra incluir como
referencia en todos sus archivos DCL.
10
11
}
}
: dialog {
fixed_width = true;
label = "Barra de Progreso DCL";
key = "br-label";
: row {
: button {
key
= "start";
label
= "Start";
mnemonic = "S";
}
: edit_box {
key
= "max";
label
= "Max:";
mnemonic = "M";
}
}
: image {
key
= "progbar";
fixed_width = 50;
height = 1;
}
: row {
: button {
label = "OK";
mnemonic = "O";
key = "ok";
}
: button {
label = "Cancel";
mnemonic = "C";
key = "cancel";
is_cancel = true;
}
}
: row {
: errtile {
label = "";
key = "error";
width = 26;
}
DCL Tutorial
Subject: Creating a ProgressBar in DCL.
This Tutorial is CopyRighted by Nir sullam and anySOFT 1999.
It is free to use and free for distribution
12
13
Bien, admito que el cuadro con atributos no es lo mas sofisticado, pero es bastante para darle una
idea general.
Ahora, el archivo *.lsp y *.dcl gurdelo dentro de la carpeta de AutoCAD y luego en la lnea de
comandos escriba (load addat) y de un enter. Luego escriba en la lnea de comandos de AutoCAD
addat y de un enter.
14
Cambie algunos datos y presione Ok. Los datos debern actualizarse al momento de salir del
cuadro.
Usted puede ampliar la rutina para dejarla a sus necesidades, usando el cdigo como plantilla.
Nota: No tiene porque mostrar todos los atributos de un bloque. Slo muestre los que desea
modificar. Tambin puede crear cuadros de dilogos para distintos datos, por ejemplo: Uno para el
titulo de un bloque, uno para revisin, etc. Aunque todos los datos estn contenidos en un atributo.
Cdigo DCL:
attab : dialog {
label = Ttulo del dibujo;
: edit_box {
label = &Nmero dibujo;
key = eb1;
edit_width = 30;
}
: edit_box {
label = &Revisin;
key = eb2;
edit_width = 30;
}
: edit_box {
label = &Dibujado por;
key = eb3;
edit_width = 30;
}
: edit_box {
label = &Fecha;
key = eb4;
edit_width = 30;
}
: edit_box {
label = &Ttulo;
key = eb5;
edit_width = 30;
}
ok_cancel;
: text_part {
15
16
17
18
19
20
(defun crear-dialogo ()
(setq fname (vl-filename-mktemp "dcl.dcl"))
(setq fn (open fname "w"))
(write-line
"temp : dialog { label = \"Test Dilogo N 3\";
: edit_box { label = \"Ingrese su nombre :\"; mnemonic = \"N\";
key = \"nombre\"; alignment = centered; edit_limit = 30;
edit_width = 30; } : edit_box { label = \"Ingrese su edad :\";
mnemonic = \"A\"; key =\"edad\"; alignment = centered;
edit_limit = 3; edit_width = 3; value = \"22\";
} : button { key = \"accept\"; label = \"OK\";
is_default = true; fixed_width = true; alignment = centered;
} : errtile { width = 34; } }"
fn
)
(close fn)
) ;_defun
(princ)
Note que no hay archivo DCL esta vez. Cargue el archivo y luego ejectelo. Deber desplegarse un
cuadro parecido al siguiente:
Hemos cargado y ejecutado un archivo DCL aunque no tenemos uno. Ahora podr compilar esto en
un archivo FAS si lo desea. (Hey, un archivo FAS con DCL genial!).
En la prxima pgina, veremos ms de cerca este fenmeno que es verdaderamente asombroso. Al
mismo tiempo disearemos una Variable-auto-self-sizing-Dialog-Box-without-a-DCL-file, es decir,
un cuadro de dilogo auto-variable sin un archivo DCL.
21
Variable-auto-self-sizing-Dialog-Box-without-a-DCL-file
En este tutorial crearemos una aplicacin para extraer atributos de un bloque y mostraremos los
atributos en un cuadro de dilogo. El cuadro de dilogo ser creado on-the-fly y el nmero de
cuadros de textos de atributos se determinar por el nmero de atributos que contenga el bloque.
Usaremos mucho cdigo de Visual LISP con estas rutinas, y tambin deseo demostrar un mtodo
para extraer y actualizar atributos usando Visual LISP.
No hay ms explicacin, toda la explicacin necesaria esta en el cdigo.
Cdigo AutoLISP:
;;;DCLATT.LSP
;;;This program is for demonstration and tutorial purposes only.
;;;-------------------------------------------;;;This program, using Visual Lisp will extract attributes from
;;;a block and display them in a dialog box.
;;;The dialog box will be created "on the fly" with the relevant
;;;number of edit boxes to suit the number of attributes within
;;;the block.
;;;The new attribute data will then be retrieved from the dialog
;;;and the block updated.
;;;Written by Kenny Ramage - May 2002
;;;afralisp@mweb.com.na
;;;http://www.afralisp.com
;;;------------------------------------------;;;Usage :
;;;Load by typing (load "DCLATT") at the command prompt.
;;;Type DCLATT at the command prompt to run.
;;;Select any block containing attributes.
;;;Replace any of the values in the text boxes to updated
;;;the attributes.
;;;-------------------------------------------;;;Dependencies : None that I know of.
;;;Not much in the way of error checking I'm afraid.
;;;--------------------------------------------;;;Limitations : Will only edit a certain number of attributes.
;;;System dependent.
;;;I don't recommend more than 10.
;;;I've had up to 14 on my display.
;;;---------------------------------------------;;;---------------------------------------------(prompt "\nEscriba DCLATT para correr la rutina...")
(defun c:dclatt (/
theblock
thelist n
taglist
txtlist lg
fname
fn
nu
dcl_id
l
relist
)
;;Cargar las extensiones de Visual Lisp
(vl-load-com)
;;obtener la entidad y su nombre
(setq theblock (car (entsel)))
;;Convertir el objeto a vl
(setq theblock (vlax-ename->vla-object theblock))
;;Verificar si es un bloque
(if (= (vlax-get-property theblock 'objectname)
22
23
24
(defun upatt ()
(setq nu 0)
;;Comenzar el ciclo
(repeat lg
;;actualizar el atributo
(vla-put-textstring (nth nu thelist) (nth nu relist))
;;Incrementar el conteo
(setq nu (1+ nu))
) ;_repeat
;;Actualizar el bloque
(vla-update theblock)
) ;_defun
(princ)
Ahora cree dos bloques que contengan diferentes numero de atributo, por ejemplo:
El cuadro volver aparecer, pero esta vez con 2 atributos. Que tal eh?
Muchas gracias a Stig Madsen por ayudar con el cdigo de este proyecto.