Chapter 2 – SWAT Model Development and Calibration for Perry Lake and Kanopolis Lake Watersheds
2.4 Conclusion
Vamos a crear ahora un cuadro que controla los parámetros de creación de una curva helicoidal en 3D mediante una polilínea. El programa AutoLISP que controla por completo este
cuadro se explicará, como ejemplo también, en el MÓDULO siguiente. El letrero es el siguiente: Análisis jerárquico :dialog |__ :row | |__ :image | |__ :boxed_column | |__ :radio_row | | |__ :radio_button | | |__ :radio_button | |__ :edit_box | |__ :edit_box |__ :row | |__ :boxed_column | | |__ :edit_box | | |__ :popup_list | |__ :boxed_column | |__ :radio_row | | |__ :radio_button | | |__ :radio_button | |__ :edit_box | |__ :edit_box |__ :row | |__ ok_cancel |__ :row |__ errtile Código
helice:dialog {label="Hélice con Polilínea 3D"; :row {
:image {width=20;aspect_ratio=0.8;color=0;fixed_height=true;key=img;} :boxed_column {label="Radios";
:radio_button {label="&Iguales";value="1";key=igu;} :radio_button {label="&Diferentes";key=dif;}
}
:edit_box {label="Radio i&nicial:";edit_width=6;fixed_width=true; key=radin;}
:edit_box {label="Radio &final: ";edit_width=6;fixed_width=true; is_enabled=false;key=radif;} spacer_1; } } :row { :boxed_column {label="Vueltas";fixed_width=true;
:edit_box {label="Nº &vueltas:";edit_width=2;edit_limit=2;key=nv;}
:popup_list {label="&Precisión:";edit_width=8;list="8 ptos.\n16 ptos.\n24 ptos.\n32 ptos.";key=pre;} spacer_1; } :boxed_column {label="Paso/Altura"; :radio_row { :radio_button {label="P&aso";value="1";key=bpas;} :radio_button {label="Altu&ra";key=balt;} } :edit_box {label="Pas&o:";edit_width=8;key=pas;} :edit_box {label="Al&tura:";edit_width=8;is_enabled=false;key=alt;} } } :row {ok_cancel;} :row {errtile;} } Explicación
El cuadro es muy parecido a los anteriores, únicamente se ha pretendido introducir elementos que no se habían visto aún. Como hemos podido venir comprobando, la estructura de un cuadro de diálogo es siempre la misma. Como los argumentos son comunes a todos los
tiles, simplemente hemos de adaptar su significado a cada uno de ellos.
En este último ejemplo que vamos a comentar se han introducido, como decimos, elementos nuevos. El primero con el que nos tropezamos es :image. Este tile define un hueco para insertar una imagen que será una foto .SLD de AutoCAD. Los argumentos mínimos para definir un hueco de imagen son los que se corresponden a la altura y a la anchura. Esto podemos definirlo con width y height, o con cualquiera de los dos y aspect_ratio. La diferencia consiste en que, con los dos argumentos width y height damos a la imagen una altura y una anchura numérica como tal, y con cualquiera de estos y aspect_ratio, le proporcionamos una altura o una anchura y un factor de proporción de aspecto que hará que el cuadro —y por ende la imagen— sea más o menos cuadrado o más o menos rectangular. Un aspect_ratio de 1 define un cuadrado.
Lo normal es introducir también un atributo color con :image para darle un color de fondo.
El atributo fixed_heigth=true ajusta el cuadro un poco. Y es que, como sabemos, la técnica de construcción de un letrero de diálogo mediante DCL no es una ciencia exacta. Al final, el cuadro se reajusta y establece un poco a sí mismo dependiendo de los valores mayores de una columna y/o una fila, del número de elementos, etcétera.
Otro nuevo tile es :radio_row. :radio_row define una fila de botones excluyentes. Éstos son esas pequeñas casillas circulares que sólo puede estar una activada en cada grupo.
Cada elemento de una :radio_row ha de ser un :radio_button. Estos últimos se definen con su label correspondiente y, en este caso, con un value=1 en uno de los botones para que aparezca señalado al abrir el cuadro. Al otro no hace falta ponerle value=0, pues al ser botones excluyentes aparecerá sin señalar por defecto. Existe también una :radio_column con el mismo significado que :radio_row pero en formato de columna.
También hemos introducido el elemento :popup_list, que define una lista desplegable. Aparte de otros argumentos ya conocidos, :popup_list introduce el argumento list, que declara todos lo elementos que contiene la lista desplegable. Estos elementos han de ir seguidos y separados por el código de control \n que define un salto de línea.
Por último tenemos un elemento predefinido muy utilizado que es errtile. errtile define al final de cuadro de diálogo (normalmente) una línea de errores. Simplemente deja un hueco en el que irán apareciendo los errores pertinentes según cometa algún fallo el usuario. Todo esto, evidentemente, se controla desde AutoLISP.
Así como el botón de Aceptar tiene definida la clave (atributo key) accept, el botón
Cancelar la clave cancel, el botón Ayuda... la clave help y el botón Info... la clave info, la
línea de error errtile tiene definida la clave error. Todo esto lo utilizaremos para interactuar desde AutoLISP.
NOTA: Los tres espacios blancos en Radio final: hacen que las casillas :edit_box
queden alineadas.
NOTA: Al cargar un archivo DCL y cuando se produce un error, a veces se crea un
archivo denominado ACAD.DCE que puede ayudarnos a depurar errores de sintaxis.
Pues bien, hasta aquí este MÓDULO de programación en DCL. Cierto es que no se han mostrado ejemplos de todos los elementos, pero quedan todos explicados. Es trabajo del lector aplicar lo aprendido a diversos ejemplos propios de letreros de diálogo. La mecánica es en todos la misma y quien hace uno no tiene ningún problema en hacer más. En el MÓDULO
ONCE, sobre programación en AutoLISP, se estudiará la manera de hacer que estos cuadros
que hemos diseñado funcionen en condiciones. Allí se verá algún ejemplo más de algún letrero de diálogo.