Programando con Avenue Sonia Carretero Antón Nieves Lantada Zarzosa Adaptació: SIGTE 28/02/00 Aclaración Hace tiempo que envie este fichero a otros tantos como vosotros que me lo solicitaron, pero nadie me ha dicho si le ha sido de utilidad. Se trata de un fichero comprimido (.zip) con windows, que contiene varios fichero de formato word (uno por capitulo). Lo que si me gustaria deciros es que no es una versión definitiva, ya que una compañera (Sonia Carretero y yo), hicimos un borrador para la empresa ESRI, quien se encargaría de hacer correcciones e insertar las figuras que falta. Nunca más volvimos a saber de la publicación y nuestra relación con la empresa no fue mejorando por decirlo de alguna manera. Espero que os valga, y ante todo supongo que no es necesario que insista en que su uso no debería ser con afán de lucro, sino meramente educativo o de investigación. Mail rebut el, 24/02/00 a les 16:27 hores de [email protected] Contenido Índice 1. El entorno de desarrollo de ArcView 2. Creación de scripts en Avenue 3. Introducción a objetos y requerimientos 4. Comprensión de las clases en ArcView 5. Comprensión de eventos 6. Personalización de la aplicación y documento proyecto 7. Ramificación y bucles 8. Trabajo con temas y leyendas 9. Creación y consulta de tablas 10. Creación de shapes y gráficos 11. Trabajo con GUIs de documentos 12. Construcción de extensiones Apéndices A. Leer y escribir ficheros de texto B. Comunicación con otro software C. La demo Acme D. Solución a los ejercicios E. Comandos de requerimiento en Avenue F. Teclas de función en ArcView G. Contrato de licencia H. Instalación de datos I. Reconocimiento de datos Evaluación del curso S E C C I Ó N 1 El entorno de desarrollo de ArcView El Entorno de desarrollo de ArcView................................................................ 1-2 Los controles y GUIs de documentos de ArcView..................................... 1-4 Personalización de la interfaz de usuario................................................... 1-6 La Caja de Diálogo de Personalización............................................................ .1-8 La lista de propiedades.............................................................................. 1-10 Establecer las propiedades del control...................................................... 1-12 Establecer las propiedades para los menús............................................... 1-14 Personalización de la ventana del proyecto............................................... 1-16 Salvar su GUI personalizada...................................................................... 1-18 Acceso a su GUI personalizada................................................................. 1-20 Ejercicio 1: visión de conjunto.................................................................... 1-22 Ejercicio 1: Diseño de una GUI personalizada................................................ 1-25 El Entorno de desarrollo de ArcView Lenguaje de programación orientado a objetos. Una interfaz gráfica para la personalización y desarrollo fig (1-2) El Entorno de desarrollo de ArcView El entorno de desarrollo del Gis de ArcView® consiste en un lenguaje de programación orientado a objetos y una interfaz gráfica para la personalización. La interfaz gráfica, incluye la Caja de Diálogo de Personalización (Customize) y el Editor de Scripts, que le permiten escribir, ejecutar y depurar el código de Avenue y la personalización de la interfaz de usuario gráfica standard (GUI), mientras trabaja en el entorno de desarrollo familiar de ArcView. Caja de Diálogo de Personalización Use la Caja de Diálogo de Personalización para editar menús, botones, herramientas y campos de menú y sus propiedades. Editor de Scripts Use el Editor de Scripts para crear y testear los scripts de Avenue. Aprenderá más sobre el Editor de Scripts en la sección siguiente. Los controles y GUIs de documentos de ArcView Los documentos GUI están formados por grupos de control. Los controles son menús, botones, herramientas y campos de menú. Cada control se asocia a un script de Avenue fig(1-4) Los controles y GUIs de documentos de ArcView Cada documento de ArcView tiene una GUI. La GUI está formada por los menús, botones, herramientas y campos de menú que se usan en el documento. Los menús, botones y herramientas aparecen representados en tres barras horizontales: la barra de menu, la barra de botones y la barra de herramientas. A estas barras y campos de menú se les llama también grupos de control. Controles. Al campo de menú, botón y herramienta individual se les llama controles. Grupos de control. Son coleccciones de controles e incluye barras de menú (menus), menús, barra de botones (botones), barra de herramientas (herramientas) y grupos de campos de menú. Scripts de Avenue. Cada control (menú, herramienta, o campos de menú) tiene asociado un script de Avenue. Usted puede ver, copiar o editar el script de cada control. Personalización de la interfaz de usuario Personaliza una interfaz de usuario gráfica (GUI) Construye nuevas funciones para aplicaciones específicas Crea herramientas y botones personalizados Empaqueta para la distribución. fig(1-6) Personalización de la interfaz de usuario Avenue proporciona al usuario un entorno de desarrollo fácil para la personalización y creación de aplicaciones de ArcView. Use Avenue para simplificar operaciones, construir nuevas funciones o desarrollar aplicaciones completas con GUIs personalizadas. Use Avenue para personalizar ArcView Utilizará Avenue para personalizar la interfaz gráfica de usuario (GUI). En esta sección, se introducen las bases de la GUI de ArcView, y aprenderá a crear nuevos menús, botones y herramientas para modificar la GUI. Cree interfaces personalizadas Con Avenue, puede crear interfaces personalizadas para una aplicación. Por ejemplo, una GUI puede ser diseñada para las tareas realizadas por una aplicación de planificación ambiental, mientras otra GUI podrá ser hecha para una aplicación que busca nuevas áreas de mercado. Simplifique tareas comunes Para agilizar operaciones, puede combinar algunos pasos en un campo de menú o botón. Comuníquese con otro software Avenue proporciona herramientas que permiten a ArcView trabajar y comunicarse con otras aplicaciones. Avenue utiliza métodos estándar para transferir datos e instrucciones. Empaquete GUIs personalizadas Puede empaquetar y distribuir su versión personalizada de ArcView. La Caja de Diálogo de Personalización Modifica las GUIs de los documentos. Las GUIs de los documentos están formadas por controles. Selecciona o añade un control y edita sus propiedades Doble Clic Tipo de documento GUI Control de asignación de la Categoría Editor de Control Lista de propiedades La Caja de Diálogo de Personalización La Caja de Diálogo de Personalización es la interfaz visual que se usa para personalizar las GUIs de los documentos. Con esta caja puede mover, añadir o borrar controles, o cambiar sus propiedades. Para abrir la Caja de dialogo de personalización, escoja Personalizar desde el menú Project (Proyecto) o haga doble clic en un espacio en blanco de la barra de botones o de herramientas. Tipo de documento GUI Escoja el tipo de documento GUI según los controles que quiera personalizar. Categoría del grupo de control Seleccione la categoría del grupo de control que quiere personalizar. Cuando escoja una categoría, el grupo de control seleccionado, aparecerá en el Editor de Control. Editor de control El Editor de Control muestra los controles especificados por el tipo de documento y la categoría que usted seleccione. Use el Editor de Control para seleccionar un control al tiempo que lo edita. Use el Editor de Control para añadir o borrar controles y separadores. Lista de propiedades Las propiedades definen como aparece representado y como funciona un control. La lista de propiedades muestra las propiedades actuales establecidas para el control seleccionado. Deshacer la edición desde la Caja de Diálogo de Personalización. Puede deshacer la última acción usando <Control>+Z (UNIX y PC) o <Command>+Z (Macintosh). ArcView mantiene el estado deshacer hasta el siguiente comando. No puede rehacer una acción deshecha. Mover controles Use el ratón para seleccionar un control, entonces arrástrelo y déjelo en la nueva posición. La lista de propiedades Las propiedades definen como se representa y como funciona un control Seleccione un control para ver sus propiedades Cada grupo de control tiene una lista de propiedades distinta. fig.(1-10) La lista de propiedades Cada control tiene unas propiedades que puede cambiar. En la lista de propiedades aparece el nombre de la propiedad y los valores asignados al control seleccionado. La lista de propiedades es diferente para cada categoría de controles (menús, botones, herramientas y campos de menú). Por ejemplo, botones y herramientas tienen una propiedad Icon (icono); menús y campos de menús no. Estos últimos tienen una propiedad Label (etiqueta) que no tienen botones y herramientas. Para más información... Las propiedades de los controles pueden asignarse con scripts de Avenue. Este tema se comenta con más detalle en la sección 11 de este manual, Trabajando con GUIs de documentos. Establecer las propiedades del control Doble clic para cambiar una propiedad Cursor Ayuda Icono Establecer las propiedades del control Algunas propiedades conmutan entre true y false (verdadero y falso respectivamente), otras requieren una cadena, y otras presentan una ventana de cremallera con una lista de posibles elecciones. Puede cambiar una propiedad mediante doble clic sobre el nombre de la propiedad o sobre el valor actual que tiene asignado. Propiedad Cursor Define el cursor que aparecerá cuando se aplique una herramienta en la ventana del documento. Propiedad Disabled (inhabilitado) Define si un control está inhabilitado (true) o habilitado (false). Un control inhabilitado aparece en gris y no puede seleccionarse. Propiedad Help (ayuda) Define la cadena de ayuda que aparecerá en la barra de estado de la ventana de la aplicación, tanto si está asociada a una herramienta como a un botón. Propiedad Help Topic (ayuda del tema) Define la ayuda en línea asociada con un control. Puede personalizar la ayuda en línea de ArcView y cargarla en el Icon Manager (Gestor de iconos). Propiedad Icon (icono) Define el nombre del icono que aparece en el botón o herramienta. Puede crear sus propios gráficos y luego cargarlos en el gestor de iconos. Propiedad Invisible Define si un control está invisible (true) o visible (false). Si un control está invisible no aparecerá en la GUI. Propiedad Tag (comentario) Almacena un texto adicional (con el propósito de identificarlos o comentarlos) necesaria para un control. Los comentarios de los controles se almacenan con el proyecto. Establecer las propiedades para los menús La propiedad Label (etiqueta) asigna una cadena de texto Asigna una clave de acceso con un ‘&’ La clave de acceso está subrayada La propiedad Shortcut asigna una combinación de teclas de función Etiqueta Teclas de función Establecer las propiedades para los menús Las propiedades Label (etiqueta) y Shortcut son válidas para menús y campos de menú. Las claves del acceso y de función permiten acceder al menú desde el teclado. Son usadas como una alternativa al ratón. Etiqueta La propiedad Etiqueta especifica el texto para un menú o campo de menú. Claves de acceso En la propiedad etiqueta, teclee un ampersand (&) delante de la letra/tecla de acceso. En el menú, esta letra aparece subrayada. Por ejemplo, las propiedades etiqueta para el menú File y el campo de menú Save Project son &File y &Save Project respectivamente. Para acceder al menú File y Save Project, el usuario tecleará <Alt>+F, entonces S (sin la tecla <Alt>). Las claves de acceso deben ser únicas para cada menú, y para cada campo de menú. La clave de acceso es comúnmente la primera letra de cada campo de menú, pero puede ser cualquier letra. Shortcut Use esta propiedad para especificar la combinación de teclas de función que darán acceso directo a un campo de menú (sin el paso intermedio de acceder al menú). Escoja la combinación deseada desde la caja de diálogo Shortcut. En el menú desplegable, la teclas de función aparecerán a la derecha del campo de menú. Por ejemplo, la elección de menú Save Project tiene las teclas de función Ctrl+S. Para salvar un proyecto, el usuario tecleará <Crtl>+S (sin acceder primero al menú File). Vea el apéndice F de este manual donde aparece una lista de estas teclas. Nota Los campos de menú no reconocen el acceso mediante teclas de función. Personalización de la ventana del proyecto Maneja las interfaces de usuario de los documentos Copia y borra las interfaces de usuario de los documentos Actualiza las propiedades de las interfaces de usuario de los documentos fig. (1-16) Personalización de la ventana del proyecto En la Caja de Diálogo de Personalización, haga clic en el botón Edit (Editar) para acceder a la Caja de Diálogo de Personalización de Tipos. Esta última caja le permite editar las propiedades de las interfaces de usuario del documento que aparece en la ventana del proyecto. Puede añadir o borrar tipos de documentos, cambiar el orden en el que estos aparecen o cambiar el icono asociado con ellos. Por ejemplo, si su proyecto tienen cinco vistas, tres contienen datos para países y dos para ciudades, puede crear los tipos “cities” y “countries” que aparecerán en la ventana del proyecto. Entonces podrá asociar la vista city con el tipo cities y la vista country con el tipo countries. Entonces cuando seleccione el icono cities en la ventana del proyecto, sólo aparecerán listadas las vistas que están asociadas con el tipo. Deshacer su ediciones en la Caja de Diálogo de Personalización de Tipos. Puede deshacer la última edición en la Caja de Diálogo de Personalización de Tipos pulsando crtl-Z (UNIX y Windows) o CommandZ (Macintosh). Documentos virtuales Los nuevos tipos de documentos se refieren a documentos virtuales. Los documentos virtuales tienen su propio tipo de documento vista, tabla, composición, gráfico o script. La Caja de Diálogo de Personalización de tipos permite manipular documentos virtuales. Para más información, vea la ayuda sobre este tema: Customize Types (Dialogo box), Virtual documents. Salvar su GUI personalizada Salve la GUI con el proyecto en curso. Fig. Salve la GUI con el proyecto llamado default.apr en su directorio home Restablezca la GUI original desde default.apr en el directorio de instalación fig. (1-18) Salvar su GUI personalizada Después de la personalización de ArcView, guarde los cambios en el proyecto. Los cambios pueden guardarse para un proyecto específico, para un proyecto personal por defecto o para el proyecto por defecto del sistema de ArcView. Guardar los cambios en un fichero de proyecto específico Si guarda los cambios para un proyecto específico, un proyecto creado por el usuario (ej. Myproj.apr), el usuario que abra más tarde el proyecto verá la GUI personalizada. Los cambios son únicos para el proyecto y no afectan a otros proyectos. Make Default (Valores por omisión) Si hace clic en el botón Make Default (Valores por omisión) en la Caja de Diálogo de Personalización, el fichero de proyecto personal por defecto llamado default.apr se reemplaza en el directorio home. Cada vez que usted inicie ArcView (o cualquiera que comparta el mismo directorio home o acceso), visualizará esta GUI. Reset (Restablecer) La apariencia original de los controles de ArcView y los scripts asociados se establece en el proyecto por defecto del sistema de ArcView llamado default.apr, el cual se almacena en el directorio de instalación de ArcView (ej. c:\win32app\arcview\etc). Si quiere volver a la GUI original de ArcView después de hacer los cambios, haga clic en el botón Reset (Restablecer). El fichero de proyecto por defecto del sistema de ArcView puede modificarse, pero las modificaciones afectarán a todos los usuarios de esta copia de ArcView. Debería hacerse sólo después de muchas consideraciones, ya que será necesaria una reinstalación del software si este fichero se sobrescribe y no fue salvado en una copia. Reemplazar el fichero de proyecto del sistema default.apr Antes de reemplazar el fichero de proyecto del sistema, default.apr en el directorio de instalación de ArcView, haga una copia. Entonces escriba un script de Avenue que use el requerimiento MakeSysDefault. Para más información vea la ayuda sobre este tema: System and User Default Projects. Acceso a su GUI personalizada Cuando se inicializa ArcView, lee los ficheros de proyecto en este orden: 1. Proyecto del sistema por defecto 2. Proyecto home por defecto 3. Proyecto actual fig. (1-20) Acceso a su GUI personalizada Cuando se inicia ArcView, se lee el fichero de proyecto del sistema, default.apr. Entonces se lee el proyecto por defecto (si existe uno) en el directorio home del usuario. Finalmente, se abre el proyecto leído. El proyecto por defecto de home y el proyecto actual contienen sólo la información que define los cambios del proyecto por defecto del sistema. No hay más información en estos ficheros de proyecto, en cuanto a la GUI por defecto, no cambia. Por tanto, el usuario ve que la GUI final es una combinación de estos tres ficheros. Iniciar ArcView Además de leer varios ficheros de proyecto durante la inicialización, ArcView también lee y ejecuta algunos scripts. Aprenderá como modificar estos scripts en otras secciones. Al iniciar ArcView, se leen los siguientes ficheros en este orden: Personalizaciones que afectan a todos los usuarios: $AVHOME/etc/startup $AVHOME/etc/default.apr script en el directorio de instalación proyecto en el directorio de instalación Personalización en su entorno de trabajo personal $AVHOME/default.apr Appl.Initialize proyecto en el directorio home script en default.apr de home Personalización en un proyecto específico aProject.apr Appl.Initialize su proyecto específico script en el aProject.apr Ejercicio 1 : visión de conjunto Experimente con la Caja de Diálogo de Personalización Cree su directorio de trabajo para almacenar los datos Los nombres de las rutas que necesita conocer ruta para el directorio de trabajo: ruta para el directorio de datos de partida: ruta para el directorio de ejercicios: ruta para el directorio de datos: ruta para el directorio home: Instrucciones para iniciar ArcView Para iniciar ArcView: Tres tipos de pasos: obligatorio, opcional y propuesto: Paso 1 Paso 1 (opcional) 1 Ejercicio 1 : visión de conjunto En este ejercicio, usará la Caja de Diálogo de Personalización para hacer personalizaciones sencillas. Crear un directorio temporal Durante este curso, creará algunos scripts de Avenue y necesitará un lugar donde almacenarlos. Antes de iniciar el primer ejercicio, creará un directorio de trabajo llamado pavetemp. Almacenará todos sus datos y los ficheros en él. Cree el directorio usando los comandos apropiados de su sistema operativo o con el administrador de archivos. Si es necesario, el instructor le explicará como crear el directorio pavetemp. El instructor puede haberlo creado ya para usted. Directorio de datos de partida El instructor le dirá donde se encunetran los datos necesarios para este curso. Anote la ruta en el espacio proporcionado en la página anterior. El directorio principal se llama pave y contiene los subdirectorios exercice y data. Directorio de ejercicio y datos El directorio exercice contiene un proyecto (*.apr) para cada ejercicio de este manual. El directorio data contiene los datos para utilizar en cada ejercicio. El instructor le dará las rutas de estos directorios. Es conveniente, anotarlos en el espacio proporcionado para ellos en la página anterior. Pasos obligatorios Los pasos obligatorios proporcionan las instrucciones detalladas. Los pasos que implican escribir un script, por ejemplo, conocer cada objeto y requerimiento que se necesita para realizar una tarea. Pasos opcionales Pasos opcionales que puede realizar si el tiempo se los permite. Pasos propuestos Los pasos propuestos puede realizarlos también si tiene tiempo. Sin embargo, estos pasos no proporcionan instrucciones detalladas; sólo describen la tarea a realizar, permitiéndole, al estudiante, determinar el mejor camino para llevarla a cabo. Ejercicio 1: Diseño de un GUI personalizado Paso 1 Cree el directorio pavetemp Paso 2 Inicie ArcView y abra un proyecto Paso 3 Borre y mueva los controles en la barra de botones de la vista Paso 4 Modifique las propiedades invisible e inhabilitado Paso 5 Determine las propiedades Icon y Help Paso 6 Salve su GUI personalizada Paso 7 Modifique el menú de la vista y la barra de herramientas (opcional) 8 Asigne la propiedad Apply de las herrramientas Ejercicio 1: Diseño de una GUI personalizada Convenciones utilizadas en los ejercicios: Los nombres de ficheros, de documentos, nombre de botones y campos de menús aparecen en negrita. Use el botón izquierdo del ratón a menos que se indique de otra manera, o si se encuentra bajo sistema UNIX®. Los párrafos con instrucciones están sangrados. Paso 1 Cree el directorio de trabajo Durante este primer día de curso, creará algunos scripts de Avenue y necesitará almacenarlos. Use su sistema operativo para crear el directorio pavetemp donde almacenar los datos. Si lo necesita, el instructor le explicará como crear el directorio de trabajo pavetemp. (En algunos casos, el instructor puede haberlo creado ya para usted). Paso 2: Inicie ArcView y abra un proyecto Inicie ArcView. Referirse al Ejercicio visión de conjunto (pág. 1-20) Después de iniviar ArcView, abra el proyecto para este ejercicio. Desde el menú File (Archivo), escoja Open Project (Abrir proyecto). Haga doble clic en las carpetas de los directorios y navegue hasta el directorio exercice (vea las notas de la pág. 1-20). Haga doble clic en ex1.apr para abrir el proyecto para este ejercicio. Cuando abra el proyecto, verá una vista llamada Census Tracs. En este ejercicio, aprenderá cómo diseñar una interfaz gráfica de usuario en ArcView usando la Caja de Diálogo de Personalización. Verá también el efecto de salvar su GUI personalizada para diferentes ficheros de proyecto. Paso 3 Borre y mueva los controles en la barra de botones de la vista Usará la Caja de Diálogo de Personalización para borrar y mover los botones existentes en la barra de botones de la vista Census Tracts. Con la vista Census Tracts activa, abra la Caja de Diálogo de Personalización mediante doble clic sobre un espacio en la barra de botones o herramientas. figura Si quiere modificar la barra de botones de la vista, asigne View (Vista) a Type (tipo) y Buttons (botones) a Category (categoría). En el Editor de Control (en el centro de la Caja de Diálogo de Personalización) verá una copia de la barra de botones de la vista. El botón Save (salvar) está actualmente seleccionado. Figura Amplíe la Caja de Diálogo de Personalización para ver la barra de botones entera. Suponga que su usuario no necesitará el botón Locate Address (localizar dirección, para la geocodificación interactiva), y también quiere borrar el botón de la barra de botones. Haga clic en el botón Locate Adress para seleccionarlo figura Ahora con clic en Delete (borrar). Mediante el botón de borrado, borrará sus propiedades. Su cambio se refleja en el Editor de Control y en la barra de botones de la vista en la ventana de la aplicación. figura Luego, modificará la barra de botones moviendo el botón seleccionado del modo siguiente. figura En el Editor de Control, sitúe el cursor sobre el botón Select Features Using Graphic (Selección gráfica de entidades). Figura Pulse y mantenga el botón del ratón y arrástrelo a la derecha del botón de consulta, entonces suelte el botón del ratón. figura Ahora pulse y mantenga el botón del ratón sobre el botón Clear Selected Features (Borrado de entidades seleccionadas). figura Arrástrelo a la derecha del botón de la selección gráfica de entidades. Figura Paso 4 Modifique las propiedades invisible e inhabilitado En este paso, trabajará con las propiedades de dos botones. Aprenderá como hacer visible y habilitar un botón en su GUI personalizada. Primero, suponga que está construyendo el sistema de visualización en pantalla y quiere resaltar el botón guardar proyecto. Haga clic en el botón Save Project (Guardar Proyecto) para seleccionarlo. figura En la lista de propiedades, haga doble clic en la propiedad Invisible para conmutar la asignación desde False (falso) a True (verdadero). figura Observe que el botón está invisible en la barra de botones de la vista en la ventana de la aplicación (sin embargo es visible en la Caja de Diálogo de Personalización). figura Ahora modificará el botón añadir tema para inhabilitarlo. Un control inhabilitado aparece en gris y no puede seleccionarse haciendo clic en él. Haga clic en el botón Add Theme (Añadir Tema) para seleccionarlo. figura En la Lista de Propiedades, haga doble clic en la propiedad Disabled (Inhabilitado) para cambiar el valor a True. figura Observe que el botón está inhabilitado en la barra de botones de la vista en la ventana de la aplicación. figura Desde la ventana de la aplicación, haga clic en el botón Add Theme para ver que su propiedad está también inhabilitada. Puede inhabilitar o poner un control invisible cuando quiera restringir a los usuarios que utilicen ese control (por ejemplo, no quiere que el usuario guarde el proyecto o añada temas a la vista). Paso 5 Determine las propiedades Icon y Help Luego, cambiará el icono de un botón, añadirá un nuevo botón y cargará un gráfico de usuario como icono del nuevo botón. También añadirá alguna ayuda al nuevo botón. Suponga que quiere modificar un icono que sus usuarios encuentran difícil de leer o incomprensible. Modificará el icono para el botón de consulta. En la Caja de Diálogo de Personalización, haga clic en el botón Query (Consulta) para seleccionarlo. figura En la lista de propiedades, haga doble clic en la propiedad Icon. figura En el gestor de iconos, elija el icono Q, entonces haga clic en OK. figura Su nuevo botón de consulta aparece en la barra de botones de la vista. figura Luego, añadirá un nuevo botón con el logotipo de una compañía al final de la barra de botones. Para este botón, cargará un bitmap creado por el usuario en el gestor de iconos. Haga clic en el botón Help (ayuda) para seleccionarlo. Figura En lugar de situar un botón nuevo a la derecha del botón Help, añadirá un separador para crear un espacio. Haga clic en Separator (Separador) para insertar un botón después del separador. figura Haga clic en New para insertar un botón después del separador. figura Haga doble clic en la propiedad Icon para que aparezca el Gestor de Iconos, entonces pulse Load (Cargar). En la ventana de búsqueda de ficheros, establezca la lista de ficheros de tipo Windows Bitmap (*.bmp), muévase hasta el directorio data (vea las notas en la página 1-20) y entonces elija jtlogo.bmp rojo y azul y haga clic en OK. Figura El fichero jtlogo.bmp se cargará en el Gestor de Iconos figura Haga clic en OK para situar el icono en el nuevo botón. figura Cuando el usuario mueve el cursor sobre el botón, aparece una cadena de ayuda en la barra de estado. Ahora añadirá la ayuda al nuevo botón. En la Lista de Propiedades, haga doble clic en la propiedad Help (Ayuda). figura Teclee la cadena Información sobre JT Consultores en la caja de diálogo de Ayuda, entonces haga clic en OK. figura Para testear esta propiedad, mueva el cursor sobre el botón JT en la ventana de la aplicación y mire en la barra de estado para ver la cadena de ayuda. Figura Herramienta de aviso para Microsoft Windows 95 y Microsoft Windows NT Cuando el botón se posa en un botón o herramienta, aparece sobre el control una caja con un pequeño texto. A esto se le llama una herramienta de aviso. Para crear una herramienta de aviso, haga doble clic en la propiedad Help, entonces en la caja de diálogo de Ayuda, escriba la herramienta de aviso usando esta sintaxis: Tool Tip string77Status bar help string. Por ejemplo, la propiedad de Ayuda del botón JT puede verse que es: JT Info//Information about JT Consultants. Para testear, observe directamente sobre el botón la herramienta. Para más información, busque la ayuda sobre este tema: Help Property. Paso 6 Salve su GUI personalizada En este paso, verá el efecto de salvar una GUI personalizada para diferentes ficheros de proyecto. Salvará el proyecto en el fichero de proyecto actual, entonces hará pequeños cambios y salvará el fichero de proyecto (default.apr) en su directorio home. Active la ventana de proyecto. Desde el menú File (Archivo), elija Save Project As (Guardar proyecto como). Mueva su directorio pavetemp (vea pág. 1-20) y salve el proyecto como paveex1.apr. Ahora haga pequeños cambios en la interfaz y cree un proyecto personal por defecto. Active la vista. En la Caja de Diálogo de Personalización, asigne View (Vista) a Type (Tipo) y Buttons (Botones) a Category (Categoría). En la Caja de Diálogo de Pesonalización, haga clic en el botón Save (salvar) para seleccionarlo. Haga doble clic en la propiedad Invisible para conmutarla a False, haciendo visible de esta forma el botón Save. Haga clic en el botón JT para seleccionarlo. Haga doble clic en la propiedad Invisible para conmutarla a True, de esta forma el botón se hará invisible. En la Caja de Diálogo de Personalización, haga clic en Make Default (Valor por omisión). Esto salvará los cambios en el fichero de proyecto llamado default.apr en su directorio home. Cierre la Caja de Diálogo de Personalización y desde el menú File (Archivo), elija Exit (Salir) para salir de ArcView. Haga clic en No cuando pregunte para salvar los cambios en paveex1.apr. Ahora tiene dos barras de botones de la vista diferentes: una en el directorio pavetemp y otra en el directorio home. Ahora examine la diferencia entre los dos ficheros. Inicie ArcView Haga clic en New (nuevo) para abrir una vista nueva y examine la GUI creada desde default.apr, en su directorio home. EL botón Save (Guardar) está visible y el botón JT invisible. Observe también que el botón Query (consulta) tiene una Q como icono. figura Active la ventana del proyecto. Desde el menú File (Archivo), elija Open Project (Abrir Proyecto), haga clic en No cuando pregunte para salvar los cambios en el proyecto Untitled (Sin título). Muévase al directorio pavetemp y abra paveex1.apr. Examine la GUI personalizada que guardó en paveex1.apr. El botón Save (Guardar) está invisible, el JT está visible, y el botón Add Theme (Añadir Tema) está inhabilitado. figura Para restablecer la GUI original de ArcView, abra la Caja de Diálogo de Personalización y haga clic en Reset (Restablecer). Esta GUI está almacenada en el proyecto llamado default.apr en el directorio de instalación de ArcView. figura Active la ventana de proyecto y desde el menú File (Archivo) elija Close Project (Cerrar Proyecto) y no guarde el proyecto. Ahora borrará el fichero default.apr en su directorio home. Use el sistema operativo o el gestor de archivos para moverse al directorio home (vea la pág. 1-20) y borre el fichero default.apr. Si deja el fichero default.apr en el directorio home, cuando inicie ArcView y abra un proyecto verá estas personalizaciones. Paso 7 Modifique el menú de la vista y la barra de herramientas (opcional) En primer lugar personalizará la barra de menú de la vista, añadiendo un nuevo menú con campos para cada tema en la vista Atlanta. Abra el proyecto paveex1.apr. Con la vista Census Tracs activa, use la Caja de Diálogo de Personalización para cambiar la Category a Menus . Haga clic en &Theme (&Tema) para seleccionarlo, entonces haga clic en el New Menu (Nuevo Menú). Se creará un menú nuevo a la derecha del menú Theme (Tema). figura Luego, cambiará el texto en su nuevo menú y añadirá una clave de acceso. Haga doble clic en la propiedad Label y teclee &Layers en la caja de diálogo. Haga clic en OK. figura Se creará un nuevo menú llamado Layers (Capas) en la barra de menú. figura Ahora está preparado para diseñar los campos del menú que los nombres de los temas de la vista Census Tracts. Haga clic en New Item (nuevo campo) tres veces para crear tres campos de menú. Haga clic en la primera elección para seleccionarla y doble clic en Label Property y teclee como nueva etiqueta &Population, entonces haga clic en OK. Haga lo mismo para los otros dos campos y etiquételos con &Income y &Education respectivamente. &Layers &Population &Income &Education Para acceder al menú, active la vista y pulse <ALT>+L. figura Pulse P, I o E para hacer desaparecer el menú. En un ejercicio posterior asignará scripts para ejecutarlos desde los campos de menú. Ahora personalizará la barra de herramientas de la vista mediante la adición de una nueva herramienta. Suponga que el usuario quiere una función que devuelva las coordenadas x, y de la localización seleccionada en la vista. Debido a que la función requiere el uso del ratón desde el usuario, se añadirá una herramienta en lugar de un botón. En la Caja de Diálogo de Personalización, cambie Category a Tools. En el editor de control, haga clic en la herramienta Identify (identificar) para seleccionarla. figura Haga clic en Tool (herramienta) para crear una nueva herramienta a la derecha de la herramienta Identify (identificar). Después de aparecer la nueva herramienta, arrástrela al extremo derecho de la barra de herramientas (a la derecha de la herramienta Snapping ,Selección). Haga doble clic en la propiedad Icon y seleccione el icono XY2 y haga clic en OK. figura El Editor de Control y la barra de herramientas aparecen ahora con una nueva herramienta. figura La herrramienta también se debe asignar a un cursor. Haga doble clic en la propiedad Cursor, elija Cursors.Bullseye para el cursor y haga clic en OK. figura Para ver el cursor bull’s-eye, haga clic en la nueva herramienta XY y mueva el cursor por el mapa de la vista. 8 Asigne la propiedad Apply de las herrramientas Asigne la propiedad Apply para la herramienta XY creada en el paso anterior. Cuando la propiedad está asignada, seleccione el script XYTool del Gestor de Scripts. Testee la nueve herramienta de nuevo para ver el informe de coordenadas XY. Fin S E C C I Ó N 2 Creación de scripts en Avenue Creación de scripts en Avenue.......................................................................... 2-2 Escribir scripts con el Editor de Scripts...................................................... 2-4 Cargar un fichero de texto.......................................................................... 2-6 Cargar un script del sistema....................................................................... 2-8 Compilar y testear un script........................................................................ 2-10 Depurar un script........................................................................................ 2-12 Guardar un script....................................................................................... 2-14 Ejercicio 2: Escribir y testear scripts................................................................ 1-17 Creación de scripts en Avenue Paso 1: Introducir el código figura Paso 2: Compilar el script figura Paso 3: Testear y depurar cuando sea necesario. figura Paso 4: Guardar el script. figura Creación de scripts en Avenue Las aplicaciones Gis de ArcView® personalizadas se crean con los scripts de Avenue™. Los scripts se escriben, compilan, testean y depuran desde el documento del Editor de Scripts de ArcView. Aprenderá cómo utilizar el Editor de Scripts para crear sus propios scripts o modificar los scripts de ArcView existentes. Hay cuatro pasos para crear su primer script en Avenue: introducir el código, compilar el código, testear y ejecutar el script, y guardarlo cuando sea correcto. Introducir el código El primer paso es introducir el código en una ventana de scripts. Hay tres formas de hacerlo: tecleando en la ventana del script, copiando un script existente en la ventana del script, o copiando un fichero de texto en la ventana del script. Compilar su script Compile el código para convertirlo al formato que entiende ArcView y encontrar los errores de sintaxis. Testear y depurar su script Cuando no existen errores de compilación, está preparado para testear el script. Si encuentra un error durante la ejecución, corrija el error, entonces recompile y retestee el script. Este procedimiento, conocido como depuracion, puede necesitar ser repetido varias veces antes de que el script proporcione los resultados deseados. Guardar su script Cuando el script sea correcto, guárdelo con el proyecto. Más tarde, puede asociarlo con un control. Los usuarios ejecutan los scripts al actuar sobre los botones, herramientas, menús y campos de menú de la GUI. En otra sección posterior se explica como ejecutar los scrips desde la GUI. Escribir scripts con el Editor de Scripts Escribir, compilar, ejecutar y depurar el script Cortar, copiar, pegar y editar scripts Añadir comentarios para documentar su trabajo figura Escribir scripts con el Editor de Scripts El Editor de Scripts es un documento que le permite crear, compilar, ejecutar, depurar y modificar scripts. Al igual que otros documentos de Arcview, el editor de scritps tiene un único grupo de menús y botones para permitir estas operaciones. Una ventana del editor de scripts contienen estamentos de Avenue que pueden ser compilados y salvados como un script. Al hacer clic en el icono Scripts en la ventana del proyecto, aparecen listados los scripts que se crean en el proyecto. Una forma de empezar a escribir el código de Avenue, es tecleándolo en la ventana del Script. Para editarlo se utilizan los botones de cortar, copiar y pegar texto. Usar comentarios en un script Es una buena costumbre añadir comentarios a su código para documentar el trabajo. Un apóstrofe ( ‘ ) indica un comentario en Avenue. Un comentario puede ocupar una línea entera o puede aparecer al final de la línea. Avenue ignora los comentarios y líneas en blanco. Determinar el tamaño de la fuente del script Puede asignar el tamaño de la fuente usada en el editor de script elijiendo Properties (Propiedades) del menú Script. Puede asignar el tamaño de la fuente como pequeña, media o grande. Para más información, busque en la ayuda: Scripts Properties (Dialogo Box). Cargar un fichero de texto Fichero de texto (ej. Hello.ave) aMessage = “Hello World” MsgBox.Info (aMessage, “My Message”) Seleccione el fichero de texto figura Cargue el fichero de texto en una ventana de script figura Cargar un fichero de texto Puede usar también el editor de texto para teclear su código de Avenue en un fichero de texto ASCII, y entonces cargar el fichero de texto en la ventana del Editor de Scripts. Botón de carga de fichero de texto El botón de carga de ficheros de texto hace aparecer en pantalla un buscador de ficheros desde el cual se puede elegir el fichero de texto para insertarlo en la ventana activa del Editor de Scripts. Puede añadir varios ficheros de texto juntos o añadir un fichero de texto a un script existente en una única ventana del editor de scripts. Cargar un script del sistema Haga clic en el botón Load System Script (carga de script del sistema) figura Seleccione un script del sistema de ArcView El script se carga en la ventana del script activa figura Cargar un script del sistema Algunos scripts que puede querer utilizar están ya escritos por completo o parcialmente como parte del software de ArcView. Puede cargar algunos de los scripts del sistema de ArcView en una ventana de scripts y editarlos. Puede ahorrar tiempo cargándo y editándo un script del sistema que sea similar al que quiere escribir. Cargar un script existente El botón Load System Script carga un script del sistema en la ventana de Scripts. Haciento clic en este botón aparece un Gestor de Scripts. Gestor de Scripts Utilice el Gestor de Scripts para elegir un script e insertarlo en la ventana de scripts. El gestor de scripts es una caja de diálogo que lista todos los scripts del proyecto actual. Esta lista muestra todos los scripts del sistema, y los nuevos scripts creados por usted en el proyecto actual o en el proyecto default de home. Ejemplo Por ejempo, puede cargar un script llamado View.ZoomIn en el Script3. El script View.ZoomIn contiene dos líneas de código en Avenue que activan el documento ventana (GetActiveDoc) y hacen un zoom in (ZoomIn), es decir aumenta el dibujo en la pantalla (GetDisplay) con un factor 125. Para cambiar la función de aumento al factor 250, reemplace 125 por 250. Utilizar una librería de scripts Además de los scripts del sistema, ArcView tiene algunos scripts que proporcionan funciones adicionales (ej. Buffer, intersect, histograms). Están localizados en :$SAVHOME/samples/scripts. Para más información, busque en Contenidos en la Ayuda de ArcView de este libro: Sample scripts and extensions. Compilar y testear un script Compile el script figura Testee el script figura Caja de mensaje Compilar y testear un script Cuando haya acabado de teclear o cargar el código en la ventana del Script, el script está preparado para compilar y testear. El editor de scripts tiene dos botones para ayudarle con estas tareas: el botón Compile (Compilar) y el botón Run (ejecutar) Compilar el script Al compilar su script lo convierte en código legible para ArcView y chequea los errores de sintaxis del código en Avenue. Si existen errores de sintaxis, aparece un mensaje de error, y el script no se compila. Cuando se ejecuta el script se usa la versión compilada. El botón Run (Ejecutar) está inhabilitado hasta que el script se compile con éxito. Testear el script Use el botón Run (Ejecutar) para ejecutar y testear el script. (Los scripts normalmente se ejecutan con el botón Run con el propósito de testearlo solamente). Una vez que es script es testeado y funciona correctamente, asócielo a un control particular de la GUI. El usuario puede entonces ejecutarlo desde la GUI. Cajas de mensajes de información MsgBox.Info muestra en pantalla una caja de diálogo que contiene un mensaje para el usuario. Requiere dos parámetros: un mensaje y un título para el título de la barra en la ventana. Ambos parámetros son cadenas. Las cajas de mensajes se explican con más detalle en secciones posteriores. Depurar un script Depura paso a paso figura Introduce o borra un punto de ruptura figura Examina las variables figura Mensajes de error figura figura Depurar un script El Editor de Scripts contiene varios botones para ayudarle a depurar su código. Puede ver como se ejecuta, ver los valores de las variables, y encontrar la localización exacta del problema. Depurar paso a paso El botón Step (Paso) o <F8> le permiten escalonar el script a cada objeto y requerimiento cada vez. (Vea la sección 3, Introcucción a objetos y requerimientos, para más información sobre objetos y requerimientos). El botón Step está inhabilitado hasta que el script se compila con éxito. Introducir o borrar un punto de ruptura Puede introducir puntos de ruptura para interrumpir la ejecución del script. El botón Toggle Breakpoint (Conmutar Puntos de Ruptura) inserta o borra puntos de ruptuta en la posición actual del cursor. El botón Toggle Breakpoint está inhabilitado hasta que el script se compila con éxito. ArcView no guarda los puntos de ruptura cuando cierra el proyecto o sale de ArcView. Examinar variables Puede chequear los valores de las variables usando el botón Examine Variables. (Vea la sección 3, Introducción a objetos y requerimientos, para más información sobre variables). El botón Examine Variables muestra en pantalla una ventana que muestra el tipo (ej. Local o global), nombre, clase y valor de la variable. Este botón está inhabilitado hasta que el script se compila con éxito. Mensajes de error ArcView puede mostrar mensajes de error al compilar y ejecutar. Interprete cada mensaje de error o búsquelo en la ayuda en línea. Aislar errores En los scripts más largos, debería aislar los errores para localizarlos. Copie y pegue el código incorrecto en un script vacío. Testee y ejecute el script corto para identificar el error. Una técnica es usar cajas de mensaje (o av.SetName(su variable)) para visualizar las variables y ver como cambian durante la ejecución. Guardar un script Guardar un fichero de proyecto Fichero de proyecto (ej. World.ap) (SED.147 Name: “Hello” Source:“‘The famous Hello World World\”\natitle= \ “ Welcome \ “ \ n MsgBox.Info (aMessage, aTitle)” script. \naMessage Escribir un fichero de texto Fichero de texto (ej. Hello.ave) ‘ The famous Hello World script amessage= “Hello World” aTitle = “Welcome” MsgBox.Info (aMessage, aTitle) = \“Hello Guardar un script Los scripts se pueden guardar con el proyecto actual. separado del proyecto. También puede guardarlos como un fichero de texto para almacenarlos por Guardar el proyecto Cuando guarda el proyecto actual, algunos scripts se crean y guardan con el fichero del proyecto (ej. World.apr) Vea la sección 1, El Entorno de Desarrollo de ArcView, para más información sobre como salvar scripts en el proyecto por defecto de home. Escribir un fichero de texto El botón Write Text File (Escribir un fichero de texto) escribe en un fichero de texto los contenidos de la ventana del script activa. Se escribirá un fichero de texto en su directorio home (ej. C:\temp), y añadido con una extensión .ave (ej. Hello.ave). Utilizando este botón puede salvar su script y enviárselo a alguien como un fichero ASCII. Si tiene resaltado algún texto en el script, sólo se escribirá en el fichero de salida el texto seleccionado. Ejercicio 2: Escribir y testear scripts Paso 1 Iniciar ArcView y abrir un proyecto Paso 2 Escibir, compilar, ejecutar y renombrar un script Paso 3 Cargar un fichero de texto y arreglar un error de compilación Paso 4 Examinar variables durante la ejecución del script Paso 5 Guardar el script como un fichero de texto Paso 6 Modificar un script existente Ejercicio 2: Escribir y testear scripts En este ejercicio, tecleará su primer script de Avenue y seguirá los pasos necesarios para ejecutarlo con éxito. Examinará la compilación y errores de ejecución, y aprenderá técnicas de depuración de scripts. Paso 1 Iniciar ArcView y abrir un proyecto Si es necesario, inicie ArcView. Desde el menú File (Archivo), elija Open Project (Abrir Proyecto). Muévase al directorio exercice (vea pág.1-20). Haga doble clic en ex2.apr para abrir el proyecto de este ejercicio. Cuando abra el proyecto, verá la ventana de proyecto vacía. Paso 2 Escibir, compilar, ejecutar y renombrar un script Ahora, creará su primer script, que hará aparecer un mensaje de saludo. En la ventana de proyecto, haga clic en el icono Scripts, entonces con clic en New (Nuevo) se abre un nuevo script. figura Aparece una nueva ventana de script vacía llamada Script1. Figura Primero, teclee el script, incluyendo dos comentarios. Los comentarios son una forma de documentar su trabajo. Un apóstrofe indica un comentario en Avenue. En la primera línea, teclee un comentario que contenga su nombre y la fecha. En la segunda línea teclee un comentario describiendo el script que ha hecho. En la tercera línea cree y visualice una caja de mensaje. Teclee lo siguiente: MsgBox. Info (“Hello World”,”Welcome Message”) Info es un requerimiento de Avenue que tiene dos parámetros: el primero es el mensaje que se visualiza en la caja de mensaje y el segundo es el título de la barra en la ventana de la caja de mensaje. Aprenderá más sobre requerimientos en la siguiente sección. Su script será ahora este, salvo sus comentarios que serán distintos. figura Observe que el botón a la derecha del botón de compilación, usado para ejecutar y depurar el script, está inhabilitado antes de compilar el script. Haga clic en el botón Compile (Compilar) para chequear los errores y compilar el script. Figura Ahora que es script está compilado, el botón Compilar está inhabilitado y los otros botones aparecen habilitados. Haga clic en el botón Run (Ejecutar) para ejecutar y testear el script. Figura Cuando aparezca el mensaje Hello, haga clic en OK para hacer desaparecer la ventana del mensaje. Figura Ha ejecutado con éxito su primer script; ahora está preparado para darle un nombre descriptivo. Desde el menú Script, elija Properties (Propiedades). En la caja de diálogo del script, cambie el nombre del Script1 a Hello, entonces haga clic en OK. Figura Observe los cambios en el título de la ventana del script y en la lista de scripts de la ventana del proyecto. Si salva el proyecto, el script Hello se guardará con el fichero del proyecto (ex2.apr) y lo verá la próxima vez que abra este proyecto. Paso 3 Cargar un fichero de texto y arreglar un error de compilación En este paso, cargará un fichero de texto que contiene un código de Avenue, en una ventana de Script. El código contiene un error de compilación que usted arreglará. En la ventana del proyecto, haga clic en el icono Scripts, y luego en New para abrir un nuevo script. Aparecerá una ventana llamada Script1. Haga clic en el botón Load Text File (Carga Fichero de Texto). Figura Muévase al directorio data y seleccione el fichero employee.ave. Examine las variables creadas en este script: name1, name2, empAge y tehMesage. Tres de las variables son cadenas de texto y la variabla empAge es un número. Aprenderá más sobre variables en la sección 3. Figura Haga clic en el botón Compile (Compilar) para compilar el script. Aparecerá el siguiente mensaje de error debido a que la variable theTitle (usada como parámetro de MsgBox.Info) no ha sido definida. Figura Haga clic en OK para hacer desaparecer el mensaje de error. Para fijar el error, añada esta línea al script, antes del estamento MsgBox.Info: theTitle = “Employee Data” El script final será este: Figura Haga clic de nuevo en el botón Compile y el script se compilará con éxito. Concatenar cadenas de texto Dos signos de suma (++) se utilizan para concatenar dos cadenas de texto con un espacio entre ellas. Paso 4 Examinar variables durante la ejecución del script Aprender como examinar variables durante la ejecución del script es una forma de ayuda para depurar sus scripts. Antes de ejecutar un script, defina un punto de ruptura y examine los valores de las variables. Utilice el ratón, haga clic y arrastre resaltando hasta “Name and Age:”, entonces haga clic en el botón Toggle Breakpoint (Conmutar Punto de Ruptura): figura Después de añadir el punto de ruptura, haga clic en Run para ejecutar el script. No aparecerá ninguna caja de mensaje ya que la ejecución se ha detenido en el punto de ruptura (ej. Antes de llegar a la línea de MsgBox.Info) Ahora haga clic en el botón Examine Variables (Examinar variables). figura Observe que todas las variables tienen un tipo y un valor excepto theMessage y theTitle. El punto de ruptura se encuentra antes de que estas variables sean asignadas. figura Haga clic en OK para hacer desaparecer la ventana. Entonces borre los puntos de ruptura haciendo clic en el botón Toggle Breakpoint. figura Ahora en el script, haga clic en la palabra MsgBox, entonces haga clic en el botón Toggle Breakpoint. MsgBox está resaltada. Haga clic en el botón Run y examine las variables con el botón Examine Variables. Ahora todas las variables tienen un valor asignado. figura Haga clic en el botón Run para continuar la ejecución del script. figura Haga clic en OK para hacer desaparecer la ventana de mensaje. Paso 5 Guardar el script como un fichero de texto Ahora, guardará su script como un fichero de texto. Haga clic en el botón Write Text File (Salvar como fichero de texto) figura En el buscador de archivos de script, muévase al directorio pavetemp y llame al fichero employee.ave. Haga clic en OK para guardar el script. Este fichero de texto se guarda en un lugar aparte del fichero de proyecto. Paso 6 Modificar un script existente Cambie las variables en el script employee.ave a su nombre y edad y ejecute el script de nuevo. Intente, modificar el mensaje y título en la caja de mensaje. Para hacer un pequeño ruido, añada la siguiente línea justo antes de la línea de la caja de mesaje: System.Beep. Fin S E C C I Ó N 3 Introducción a objetos y requerimientos Introducción a objetos y requerimientos.......................................................... 3-2 Construir estamentos en Avenue............................................................... 3-4 Usar estamentos de asignación................................................................. 3-6 Usar variables............................................................................................ .3-8 Usar enumeraciones.................................................................................. .3-10 Usar números............................................................................................. 3-12 Usar cadenas.............................................................................................. 3-14 Usar cajas de mensaje............................................................................... 3-12 Expandir requerimientos............................................................................. 3-14 Ayuda en línea en Avenue.................................................................................. 3-20 Obtener la ayuda para requerimientos....................................................... 3-22 Ejercicio 3: Escribir estamentos de Avenue.................................................... .3-25 Introducción a objetos y requerimientos ArcView está compuesto de objetos Los objetos tienen propiedades que se modifican con requerimientos Los objetos y requerimientos confeccionan los estamentos de Avenue. Aplicaciones Proyectos Figura figura Vistas Controles figura figura Introducción a objetos y requerimientos En esta sección, se comentan algunos de los conceptos básicos de la programación orientada a objetos. Examinará como se manejan los objetos del GIS de ArcView® mediante requerimientos. También utilizará la ayuda en línea para encontrar los requerimientos de las operaciones que quiera realizar. Aprenderá como construir estamentos en Avenue, y como usar cadenas, números, y enumeraciones en su primer script de Avenue. Objetos Un objeto es una entidad que representa algo en su trabajo con ArcView. Los objetos son elementos de la interfaz tales como controles y ventanas de documentos, o pueden ser componentes de un proyecto como vistas o composiciones o pueden ser elementos básicos de Avenue tales como números, fechas, booleanos y cadenas, o pueden ser primitivas gráficas tales como puntos, líneas u otras superficies. Requerimientos Un requerimiento en Avenue le permite crear, manejar y manipular o proporciona información sobre objetos. Por ejemplo, puede añadir un tema a la vista enviando a la vista el requerimiento AddTheme, o encontrar un documento específico en un proyecto enviando al proyecto el requerimiento FindDoc, o cambiar el icono del botón mediante el requerimiento SetIcon enviado a un objeto botón. Construir estamentos en Avenue Los requerimientos se envían a los objetos Los estamentos tienen el formato: Objeto.Requerimiento av.GetProject theView.Print System.Beep Los requerimientos necesitan parámetros: Objeto.Requerimiento (parámetros) av.Resize (800,1000) theView.SetName (“Redlands”) theProject.FindDoc (“Chart1”) theButton.SetIcon (dollar) Los estamentos con números: Objeto Requerimiento Objeto 2 + 7 x - 25 theValue * 100 theCount / 8 Construir estamentos en Avenue Los objetos y requerimientos permiten realizar operaciones, deben estar estructurados en estamentos. Cree un estamento enviando a un objeto un requerimiento utilizando una sintaxis particular. La sintaxis general de un estamento es Objeto. Requerimiento. Parámetros La mayoría de los requerimientos necesitan parámetros que proporcionan información específica. Un parámetro puede ser el nombre de un documento, una cadena de un título o el número de segundos de retraso. La clase de parámetros está definida por el requerimiento. Por ejemplo, Resize requiere dos números, FindDoc requiere una cadena, FindTheme requiere una cadena, e Info requiere dos cadenas. Estamentos con números Cuando se realizan operaciones matemáticas se escriben convencionalmente con estamentos con números y la sintaxis es Objeto Requerimiento Objeto. Usar estamentos de asignación Un requerimiento enviado a un objeto devuelve otro objeto Asigna una variable al objeto devuelto aNumber = 4+40 aDoc = theProject.FindDoc (“World”) aString = theTheme.GetName aTheme = theView.FindTheme (“Canada”) ‘número ‘documento ‘cadena ‘tema Asigna variables directamente x = 7 companyTitle = “JB Global Systems, Inc.” aConstant = 1.5 Asigna variables locales o globales ‘número ‘cadena ‘número myLocalVar = 25 * 23 _myGlobalVar = myValue * 37 _theTheme=theView.FindTheme(“Canadá”) ‘ local para el script ‘ global para el proyecto ‘ global Usar estamentos de asignación El resultado de enviar un requerimiento a un objeto es otro objeto. Use un estamento de asignación para asignar una variable al objeto devuelto. La clase de la variable se define mediante un requerimiento: por ejemplo, GetProject devuelve un proyecto, FinDoc devuelve un documento, FindTheme devuelve un tema, Info devuelve una cadena y * devuelve un número. También puede asignar una variable, una cadena o número tecleándolo a la derecha de un signo igual. Variables locales Una variable local es utilizable sólo en el script en el que se encuentra asignada. Variables globales Una variable global está precedida de un signo de subrayado (_). Una vez que son asignadas, estas variables se pueden utilizar en todos los scripts del proyecto actual. Es posible utilizar la misma variable global en varios proyectos. Los scripts del sistema Project.Open y Project. New contienen una línea av.ClearGlobals, que limpia las variables globales. Usted puede editar los scripts y borrar esta línea. Sea cuidadoso, ya que la memoria para las variables globales permanece asignada aún después de cerrar el proyecto y abrir uno nuevo. Comprensión de variables Las variables de Avenue se refieren a objetos. Una variable se crea cuando aparece a la izquierda del estamento de asignación. La variable referencia el objeto a la derecha del signo igual. Para más información, vea la ayuda de temas: Working assignement statements y variables, Local y global variables. Usar variables No declarada o no definido su tipo Debe comenzar con una letra o signo de subrayado No diferencia la mayúsculas de las minúsculas El compilador de Avenue encuentra conflictos con palabras reservadas view = theProject.findDoc (“Redlands”) figura Denominación de las variables comienzan con una letra minúscula las palabras importantes comienzan con letra mayúscula theViewWindow newCustomerNumber companyTitleString Usar variables Cuando use variables, debería aplicar ciertas normas y convenciones de nombres. Normas en variables Algunos lenguajes de programación necesitan que especifique el tipo de dato (ej. Entero, coma flotante, cadena) para una variable antes de usarla. Las variables en Avenue no se declaran. Están definidas desde la primera vez que aparecen en el estamento de asignación. Los nombres de variables deben comenzar con una letra o signo de subrayado, pero pueden contener números. restricciones en la longitud del nombre de la variable. Avenue no diferencia mayúsculas de minúsculas No hay Los conflictos entre los nombres de variables y las palabras reservadas, tales como clases y nombres de requerimientos, se identifican al compilar. El compilador de Avenue muestra un mensaje de error con el nombre que produce el conflicto. Convenciones en la denominación de Variables Por convención , se mezclan minúsculas y mayúsculas para clarificar el estilo. Las variables comienzan por letras minúsculas y las palabras importantes comienzan por una letra mayúscula. Para más información sobre estilos de denominación de variables. Vea el apéndice B, Pautas de Codificación en Avenue, en la documentación del software “Utilizando Avenue”. Usar enumeraciones Una serie de posibilidades utilizadas como parámetros de un requerimiento Usadas para asignar el tipo de gráfico, fichero o campo Ejemplo: asignando el tipo de gráfico theChartDisplay.SetType (#CHARTDISPLAY_PIE) figura theChartDisplay.SetType (#CHARTDISPLAY_COLUMN) figura Usar enumeraciones Las enumeraciones son distintas posibilidades que pueden ser usadas como parámetros de requerimientos. Las enumeraciones comienzan con el signo (#). Se usan con algunas clases incluyendo ficheros, gráficos y campos. La clase gráfico, por ejemplo, tiene enumeraciones llamadas ChartDisplayEnum que son parámetros del requerimiento SetType. Cada ChartDisplayEnum define un tipo diferente de gráfico. Los posibles ChartDisplayEnum son: #CHARTDISPLAY_AREA #CHARTDISPLAY_LINE #CHARTDISPLAY_PIE #CHARTDISPLAY_COLUMN #CHARTDISPLAY_BAR #CHARTDISPLAY_XYSCATTER Ejemplo Antes de determinar el tipo de gráfico de visualización con el requerimiento SetType debe encontrar primero el gráfico y entonces obtener su presentación. TheChart = av.GetProject.FindDoc (“Chart1”) TheChart.GetChartDisplay.SetType (#CHARTDISPLAY_COLUMN) TheChart.GetWin.Open Usar números La evaluación numérica es de izquierda a derecha, a menos que se usen paréntesis x = 2 + 3 * 3 x = 2 + (3 * 3) ‘x = 15 ‘x = 11 Operaciones matemáticas posNumber = -29.Abs wholeNumber = 35.689.Round maxNumber = 35 Max 333 ‘devuelve 29 ‘devuelve 36 ‘devuelve 333 Formato de los números Number.SetDefFormat (“d.ddd”) aScript.SetNumberFormat (“d.ddd”) anyNumber.SetFormat (“d.dd”) ‘toda la aplicación ‘todo el script ‘un número particular Usar números La evaluación numérica es de izquierda a derecha, a menos que se cambie el orden con paréntesis. Realiza las operaciones matemáticas estándar, incluyendo logaritmos, raíces cuadradas y medidas angulares. Formato de números Puede utilizar formatos numéricos utilizando un formato de cadena con uno o tres requerimientos: SetDefFormat, SetNumberFormat o SetFormat. Los formatos numéricos se especifican para la aplicación, para un script o un número específico respectivamente. El formato de cadena define como se sitúan algunos decimales a la izquierda y derecha del punto decimal. Por ejemplo, un formato de cadena (“d.ddd”) significa que al menos uno de los dígitos aparece a la izquierda del punto decimal y exactamente tres dígitos aparecen a la derecha. Conversión de números Un número puede convertirse a cadena o a duración (número de días) usando AsString y AsDays. Los valores en radianes y grados pueden convertirse usando los requerimientos AsRadians y AsDegrees. Observe que los requerimientos de medidas angulares tales como Cosine y Sine (coseno y seno), utilizan valores en radianes. Ejemplo de conversión de números: numRadians = 90.AsRadians numDegrees = numRadians.AsDegrees aString = maxNumber.AsString numDays = 4.AsDays Usar cadenas Cadenas concatenadas theNewString = “Good Morning” ++ “Michael” theNewString = “Good Morning” + “Michael” MsgBox.Info (TheNewString,””) Figura Nueva línea, tabulación y retorno de carro: NL, TAB, y CR myString = “Good Morning” + NL + “Michael” Figura Conversión de cadenas theString = aNumber.AsString myNumber = String1.AsNumber NewDate = myString.AsDate Usar cadenas Cuando asigne una cadena directamente o la use como parámetro de requerimiento, escríbala entre comillas dobles (“ ”). Concatenar cadenas Puede unir cadenas con los requerimientos + y ++. Usando + concatena cadenas sin ningún espacio entre ellas; y usando ++ concatena cadenas con un espacio entre ellas. Cadenas especiales Avenue tiene cadenas especiales para manejar caracteres de nueva línea, tabulación y retorno de carro. Estos son NL, TAB , y CR respectivamente. Conversión de cadenas Las cadenas se convierten a números y fechas usando los requerimientos AsNumber y AsDate. Los números y fechas pueden convertirse a cadenas usando el requerimiento AsString. Buscando la ayuda en línea para requerimientos que comienza con As... realice otros requerimientos que conviertan objetos de una clase a otra. Usar cajas de mensaje Muestra en pantalla mensajes MsgBox.Banner (file, seconds. Title) MsgBox.info (message, title) Figura figura Permite al usuario una entrada por teclado MsgBox.Input (aMessage,Title, defaultString) Figura Figura Usar cajas de mensaje Las cajas de mensaje visualizan en pantalla información o entradas de usuario. Puede visualizar una imagen, un mensaje de error, información general o errores de advertencia. Cree las cajas de mensaje utilizando MsgBox y uno de los siguientes requerimientos : banner, error, info, o warning. Obtener e introducir Las cajas de mensaje de entrada le permiten obtener información desde el usuario. Las cajas de mensaje de entrada utilizan tres cadenas como parámetros del requerimiento Input. La primera cadena es un instrucción o mensaje que usted quiere que el usuario lea, la segunda es el título de la ventana y la tercera es un valor de entrada por defecto. asString = MsgBox.Input(aMessage,aTitle,aDefaultString) Convertir cadenas a números MsgBox.Input devuelve una cadena. Si necesita usar la cadena devuelta en una operación matemática, debe convertirla a un número con el requerimiento AsNumber. Sin embargo, MsgBox.Info toma una cadena como mensaje, que también debe convertir el número devuelto a una cadena usando el requerimiento AsString. Ejemplo: order = MsgBox.Input (“Enter the order amount”, “Order”, ””) orderNum = order.AsNumber myComm = orderNum * 0.12 myCommString = myComm.AsString MsgBox.Info (“Your commission is” ++ myCommString,””) Botón Cancel (Anular) Si el usuario hace clic en el botón Cancel o no introduce una cadena, se devuelve un valor Nil (nulo). El objeto Nil es un objeto que no tiene valor. En una sección posterior (Ramificaciones y bucles), aprenderá como chequear condiciones con Nil y a realizar un procedimiento específico cuando se devuelve Nil. Expandir requerimientos El encadenamiento permite combinar requerimientos en un solo estamento: theProject = av.GetProject theView = theProject.FindDoc (“World”) theTheme = theView.FindTheme (“GNF”) Es lo mismo que: theTheme = av.GetProject.FindDoc(“World”).FindTheme(“GNF”) El anidamiento permite usar un requerimiento como un parámetro de otro requerimiento: Order = MsgBox.Input (“Enter the order amount”, “Order Entries”,””) myComm = 0.12 * (Order.AsNumber) MsgBox.Info (“Your commission is” ++ myComm.AsString, “Total commission”) Expandir requerimientos El uso de requerimientos puede ser dilatado, incluyendo múltiples requerimientos encadenados a la vez para construir un estamento o usando un requerimiento como parámetro de otro requerimiento. Cambiar requerimientos Puede dilatar la sintaxis del requerimiento Object.Request para incluir varios requerimientos (ej. Object.Request. Request. Request). Los requerimientos encadenados deberían operar sobre el objeto devuelto desde el primer requerimiento. Por ejemplo: theProject =av.GetProject theProject.SetName (“ACME GIS”) es lo mismo que: av.getproject.SetName (“ACME GIS”) El número de estamentos de asignación (variables) usadas para llevar a cabo una tarea depende del estilo de estamento. Si encadena varios requerimientos sin interrupción en su estamento, use menos estamentos de asignación. Por ejemplo, los estamentos siguientes: theProject = av.GetProject theView = theProject.FindDoc (“World”) theTheme = theView.FindTheme (“GNP”) pueden acortarse a: theTheme = av.GetProject.FindDoc(“World”).FindTheme(“GNP”) Observe que la variable, en este caso, theTheme, almacena el objeto devuelto por el último requerimiento de la cadena. Anidar requerimientos Los requerimientos y los objetos devueltos, pueden usarse como parámetros de otros requerimientos. En el ejemplo de anidamiento en la página anterior, el requerimiento AsNumber se envía a una variable Order para convertir el objeto desde una cadena a un número y trabajar con el requerimiento *. El requerimiento AsString se envía a la variable myComm para construir una cadena como primer parámetro del requerimiento Info (enviado a MsgBox). Ayuda en línea en Avenue Contenidos Índice Encontrar Figura Figura Figura Ayuda en línea en Avenue La ayuda en línea de Avenue proporciona al sistema explicaciones detalladas de clases y requerimientos. Desde el menú Help (Ayuda) puede elegir uno de las tres posibilidades del menú: Help Topics (Ayuda acerca de ...), How to Get Help (cómo obtener ayuda), y About ArcView (acerca de ArcView). Help Topics (Ayuda de temas) La elección de menú Ayuda de temas, inicia una ayuda del sistema de ArcView en línea. Esta ayuda del sistema proporciona un menú en el que encontramos tres opciones: Contenidos, Índice y Encontrar. Los contenidos presenta al usuario una colección de libros de ayuda. Bajo cada libro hay una ayuda de temas. Puede hacer clic en uno de estos temas y la ayuda del sistema saltará a la página del tema. El Index (índice) le permite teclear primero unas pocas letras de la palabra que está buscando, y la cremallera del índice irá a la primera ocurrencia de sus caracteres. Desde aquí, puede hacer doble clic en la entrada del índice que quiera o puede hacer clic una vez en la entrada del índice que quiere y escoger entonces display. En otro caso, la ayuda del sistema de ArcView saltará a la página de entrada. La tercera opción, Find (encontrar), le permite teclear una palabra o palabras y la ayuda del sistema encontrará todas las palabras que la contengan, también puede estrechar la búsqueda, y elegir entonces el tema donde estará la palabra o palabras. La ayuda del sistema entonces salta a la ayuda acerca de una elección. Como obtener la ayuda Describe los diferentes modos por los que puede acceder a la Ayuda desde la interfaz de usuario gráfica del documento. Sobre ArcView Esta posibilidad del menú proporciona una ventana en pantalla que le da la versión del producto y la información de registro. Obtener la ayuda para requerimientos Buscar en el índice de la ayuda un requerimiento Examinar Syntax para los parámetros requeridos Examinar Returns para ver que tipo de objeto es devuelto Figura Figura Obtener la ayuda para requerimientos La ayuda dada para un requerimiento describe qué hace ese requerimiento, cómo trabaja y cómo se relaciona con otros. Sintaxis La sintaxis ilustra el formato necesario para los requerimientos de Avenue. Los nombres de los parámetros indican su propósito en el requerimiento. Cada parámetro es un objeto, y por tanto pertenece a una clase en particular. Haciendo clic en un parámetro aparece una descripción de su clase. Objeto devuelto La clase del objeto devuelto por el requerimiento está listada. Haciendo clic en el nombre de una clase aparece su descripción. Ejercicio 3: Escribir estamentos de Avenue Paso 1 Iniciar ArcView y abrir un proyecto Paso 2 Crear un script que calcule los impuestos de ventas Paso 3 Analizar un estamento de Avenue Paso 4 Utilizar enumeraciones para cambiar el tipo de gráfico. Paso 5 Requerimientos encadenados para crear un script de una sola línea Ejercicio 3: Escribir estamentos de Avenue En este ejercicio, creará dos scripts (uno para informar sobre los impuestos en una compra, y otro para cambiar el tipo de gráfico que aparecerá). Paso 1 Iniciar ArcView y abrir un proyecto Si es necesario, inicie ArcView. Desde el menú File (Archivo), elija Open Project (abrir proyecto). Muévase al directorio exercice y haga doble clic en ex3.apr para abrir el proyecto para este ejercicio. Cuando abra el proyecto, todos los documentos estarán cerrados excepto la ventana del proyecto. Paso 2 Crear un script que calcule los impuestos de ventas Escriba un script que use una caja de mensaje de entrada para pedir al usuario un coste. Calcule los impuestos de venta para las cantidades introducidas por el usuario, entonces informe del importe de devolución para el usuario. Abra el script Exercice 3, Step2. Desde el menú Help (Ayuda), elija Help Topics (Ayuda Tema). Busque el índice para MsgBox. Encuentre el requerimiento Input (entrada) y conteste las siguientes cuestiones. ¿Cuales son los tres parámetros para el requerimiento Input, y que tipo de objeto es cada parámetro (ej. Número, cadena, vista, o tema)? Parámetro 1: Parámetro 2 : Parámetro 3: Objeto: Objeto: Objeto: El requerimiento de entrada devuelve un objeto que puede almacenar en una variable. ¿Qué tipo de objeto es devuelto? Ahora escriba el script que usa la caja de mensaje de entrada para que el usuario introduzca la cantidad de la compra. Cree una variable llamada theCostString para enviar el requerimiento Input a MsgBox. Envíe el mensaje Enter the Cost, y como título de mensaje de la caja, Calculate Tax, y utilice 0.00 como valor por defecto. Convierta la cadena cost a un número, y calcule el 7.5 por ciento de impuesto sobre el coste. Cree una variable theCostnumber convirtiendo theCostString a número con el requerimiento de conversión AsNumber. Cree una variable theTaxNumber multiplicando theCostNumber por 0.075 Convierta el impuesto de número a cadena e informe en una caja de mensaje cual es el impuesto. Cree una variable llamada theTaxString convirtiendo theTaxNumber a cadena con el requerimiento de conversión AsString. Use una caja de mensaje Info para informar de theTaxString. El título de la caja será Your Tax. Compile y ejecute el script. Paso 3 Analizar un estamento de Avenue Abra el script Exercice 3, Step 3. Revise los siguientes estamentos: theProject = av.GetProject theView = theProject.FindDoc (“Atlanta”) Para contestar a las siguientes cuestiones, busque en el Help Index (Índice de Ayuda) cada requerimiento: figura El requerimiento Getproject se envía a GetProject devuelve un El requerimiento FindDoc es enviado a FindDoc devuelve un Paso 4 Utilizar enumeraciones para cambiar el tipo de gráfico. En este paso, cambiará el tipo de gráfico del gráfico Atlanta Banks. Primero examinará los diferentes tipos de enumeraciones. Abra dos documentos: el gráfico Atlanta Banks y el script Exercice 3, Step 4. Antes de escribir un script, busque cuantos tipos de gráficos hay usando lel Index (Índice) de la ayuda para buscar ChartDisplayEnum (Enumeración). ¿Cuántas enumeraciones hay para gráficos? Ahora escribirá un script para cambiar los tipos de gráfico. Obtenga el proyecto y busque el documento gráfico por su nombre. Cree una variable theProject enviando el requerimiento GetProject a aplication (av). Cree una variable theChart enviando el requerimiento FinDoc a theProject. Encuentre el gráfico Atlanta Baks. Luego, tome el área de visualización del gráfico y cambie el tipo de gráfico Cree una variable llamada thechartDisplay enviando el requerimiento GetChartDisplay a theChart. Cambie tipo theChartdisplay con el requerimiento SetType; para el parámetro introduzca la enumeración para un gráfico columna. Compile y ejecute el script para testearlo. 5 Cadena de requerimientos para crear un script de una sola línea Abra el script en blanco Exercice 3, Step 5 y con una cadena de requerimientos, desde el Exercice 3, Step 4 introduzca el script en una sola línea. Vea la página 3-5 y 3-7 para información y ejemplos de requerimientos encadenados. Compile y ejecute este script de una línea. Fin S E C C I Ó N 4 Comprensión de las clases en ArcView Comprensión de las clases en ArcView............................................................ 4-2 Clases e instancias..................................................................................... 4-4 Propiedades de los objetos........................................................................ 4-6 Requerimientos a instancias...................................................................... 4-8 La jerarquía de clases................................................................................ 4-10 Diagramas Modelo de Objeto............................................................................. 4-12 Ayuda para las clases................................................................................ 4-14 Búsqueda de ayuda desde un script.......................................................... 4-16 Ejercicio 4: Búsqueda de ayuda para las clases.............................................. 4-19 Comprensión de las clases en ArcView Los objetos están organizados dentro de clases Vistas Controles Formas Comprensión de las clases en ArcView En esta sección, se discuten algunos de los conceptos básicos de la programación orientada a objetos. Examinará como se crean, cambian y manejan los objetos en Avenue™ mediante requerimientos. Los objetos y requerimientos se organizan según la Jerarquía de Clase de Avenue. También usará la ayuda en línea para navegar por la jerarquía de objetos y encontrar los requerimientos válidos para las operaciones que quiera realizar. Clases e instancias Una clase es un anteproyecto para crear objetos. Cada clase tiene un único grupo de propiedades y requerimientos Las instancias son objetos creados desde la misma clase Crear objetos usando requerimientos de clase. aProject = Project.Make myView = View.Make Clase Vista Propiedades Requerimientos Figura Instancias de la clase vista Clases e instancias Una clase es un anteproyecto que define las propiedades y requerimientos para un tipo específico de objeto. Todos los objetos creados desde la misma clase son referidos como instancias de la clase. Tienen la mismas propiedades y pueden realizar los mismos requerimientos. Por ejemplo, todas las vistas tienen un mapa y una tabla de contenidos, y pueden abrirse o cerrarse. Instancias Cada objeto es único, única instancia de la clase desde la que fue creado. Puede crear cada instancia de una clase única enviándole el requerimiento que cambia sus propiedades. Por ejemplo, podría asignar a dos botones diferentes iconos y diferentes scripts para hacerles diferentes y llevar a cabo diferentes operaciones. Ejemplo “El mejor amigo del hombre” Clase Perro Figura Rex Figura Sparky Instancias de la clase Perro Requerimientos de clase Si un objeto no existe, utilice un requerimiento de la clase para crear una nueva instancia. El requerimiento Make es un ejemplo de requerimiento de una clase; este requerimiento crea una nueva instancia (ej. Un objeto nuevo) de la clase a la que es enviado. Propiedades de los objetos Los objetos de ArcView tienen propiedades (Atributos) Las propiedades definen características de un objeto Vista Propiedades Figura Figura Botón Propiedades Figura Figura Propiedades de los objetos Los objetos son elementos con los que se trabaja en el GIS ArcView®, tales como vistas, temas, GUIs, controles, y gráficos. Cuando abre una vista, está trabajando con un objeto Vista; cuando añade un botón a la GUI, está añadiendo un objeto Botón al objeto GUI. Los objetos pueden ser también números, cadenas, y fechas. Cada objeto tiene una serie de propiedades (atributos) que describen como es el objeto y su apariencia. Por ejemplo, una vista tienen un nombre, temas, y una proyección; un botón tiene un script asignado, un icono y la propiedad de ser visible. Ejemplo “El mejor amigo del hombre” Propiedades Figura 2 orejas 4 patas rabo hocico odia a los gatos Sparky Requerimientos a instancias Manipular objetos y sus propiedades Proporcionar objetos o propiedades de objetos myView = aProject.FindDoc (“View1”) theTheme = myView.FindTheme (“Population”) myView.GetName Chequear y cambiar los valores de las propiedades theTheme.IsVisible myView.SetName(“Atlanta”) theTheme.SetVisible(true) Clase vista Figura Figura Requerimientos a instancias Los requerimientos de Avenue le permiten recuperar objetos y sus propiedades, y chequear o cambiar las propiedades de los objetos. Por ejemplo, puede encontrar una vista existente, asignar el nombre a una vista, y cambiar la visibilidad de un tema enviando los requerimientos apropiados a un objeto. La mayoría de requerimientos recuperan o modifican objetos existentes, y se llaman requerimientos de instancias. Los requerimientos de instancias se llaman con prefijos estándar basados en sus funciones. Los requerimientos que comienzan con Get..., tales como GetName y GetThemes, devuelven información sobre las propiedades de los objetos. Otros requerimientos Get..., como GetProject, GetActiveDoc y GetActiveField, acceden a objetos cuando el objeto está activo. Set... se utiliza para requerimientos que asignan nuevos valores a las propiedades de los objetos, tales como SetName, SetVisible, y SetActive. Los requerimientos que empiezan con Find..., como FindTheme y FindDoc, acceden a los objetos por medio de su nombre. Ejemplo “El mejor amigo del hombre” Propiedades Figura duerme se sienta huele ladra me trae un palo Sparky Ver todos los requerimientos Puede ver todos los requerimientos que se incluyen en Avenue cargando una ampliación de muestra llamada el “Class Browser”. Esta ampliación puede acceder desde los contenidos de la ayuda según una muestra de scripts y ampliaciones : Proyectos. La jerarquía de clases La Jerarquía de Clase organiza las clases desde lo general a lo específico. Cada clase hereda todas las propiedades y requerimientos desde su superclase Figura Figura La jerarquía de clases Las clases se organizan desde lo general a lo específico ( ej. Desde la superclase a la clase). La relación entre clases está representada en la Jerarquía de Clase. La Jerarquía de Clase comienza con el objeto más general, Obj. Todos los otros objetos son subclases de Obj. La ayuda en línea incluye la jerarquía de clase completa y la lista de subclases para cada clase. Herencia Una vez definido el nivel de la superclase, las propiedades y requerimientos se heredan a todas las subclases. La herencia permite que las propiedades y requerimientos se definan sólo una vez en la jerarquía. Cada subclase puede tener también su propias y únicas propiedades y requerimientos. Por ejemplo, las clases Vista y Tabla son subclases de la clase Doc, y ambas heredan los requerimientos tales como SetName y Open desde la clase Doc. Las Vista y la Tabla también tienen requerimientos únicos. Por ejemplo, View tiene GetThemes y ZoomIn, y Table tiene Sort y Summarize. Ejemplo “El mejor amigo del hombre” Clases Figura Instancias Sparky Rex Diagramas Modelo de Objeto Muestra las relaciones entre objetos Herencia Asociación uno a uno cero o más cero o uno Agregación (compuesto de ) Figura Diagramas Modelo de Objeto Los Diagramas Modelo de Objeto muestran la relación entre las clases de Avenue. Herencia La herencia se simboliza mediante un triángulo, es una relación clase-a-subclase. Por ejemplo, Documento es la superclase de las clases gráfico, composición, Sed y Vista. El triángulo apunta a la superclase, o clase más general. La herencia se describe con detalle en la jerarquía de clases. Asociación Una asociación entre dos clases se indica con una línea dibujada entre ellas. Una línea representa una asociación uno-a-uno. Una línea que acaba en un punto negro representa una asociación múltiple. Una asociación múltiple puede ser de dos tipos. Una sólida muestra una asociación cero-a-más y una hueca muestra una asociación cero-a-uno. Agregación La composición de relaciones, simbolizada con un diamante, existe entre una agregación y las clases que la constituyen. Un proyecto, por ejemplo, está compuesto de documentos y docGuis. El diamante se dibuja en la clase agregada. Diagramas Modelo de Objeto Para encontrar un Diagrama Modelo de Objeto en la ayuda de Avenue, busque Functional Overview of ArcView Classes. Cada tema tiene un salto a su Diagrama Modelo de Objeto. Nota Una versión abreviada de la Técnica de Diagrama Modelo de Objeto (OMT) para modelizar la relación entre clases, aparece en este manual. Vea Rumbaugh, James, et al. 1991. Object-Otiented Modeling and Design. Englewood Cliffs: Prentice-Hall. Ejemplo “El mejor amigo del hombre” Juguetes Balón Hueso Perro Ropa Cuerda Collar Cadena Chapa Ayuda para las clases La herencia From identifica la superclase La herencia By identifica todas las subclases Las listas de Requerimientos de Clase se envían directamente a la clase Las listas de Requerimientos de Instancias se envían a una instancia de la clase Figura Figura Ayuda para las clases La ayuda para cada clase describe el propósito de la clase y cómo trabaja ésta. La descripción de la clase incluye una visión de conjunto de la clase, con varios temas para detallar su posición en la jerarquía de clase, define sus requerimientos e indica la relación entre clases. Heredar desde (From) Identifica la superclase de la clase. Si no puede encontrar un requerimiento de una clase, busque su superclase para heredar sus requerimientos. Heredar a (By) Identifica las subclases de la clase. Esta sección no aparece si no se heredaron las clases desde la clase. Requerimientos de clase Liste los requerimientos que se pueden hacer directamente a la clase (no a instancias de clase). Haga clic en el nombre del requerimiento para ver la ayuda detallada. Requerimientos de instancias Liste los requerimientos que se pueden hacer a alguna instancia de la clase. Haga clic en el nombre del requerimiento para ver la ayuda detallada. Búsqueda de ayuda desde un script Seleccionar un objeto o requerimiento, y hacer clic en el botón de Ayuda del script Figura Búsqueda de ayuda desde un script Haciendo clic en el botón de Ayuda del Script se inicia una búsqueda de ayuda del sistema de Avenue, usando el código seleccionado actualmente en su script. Cuando necesite la ayuda para clases, requerimientos, o comandos, selecciónelo (seleccionándolo en el script) y entonces haga clic en el botón de ayuda del script. Si la clase, requerimiento o comando que ha seleccionado tiene un sólo tema, la ventana de ayuda del tema lo mostrará en pantalla. Por otra parte, la caja de diálogo muestra los múltiples temas encontrados para su selección. Ejercicio 4: Búsqueda de ayuda para las clases Paso 1 Iniciar ArcView y abrir un proyecto Paso 2 Navegar por la Jerarquía de Clase Paso 3 Examinar la clase Aplication (Aplicación) Paso 4 Examinar la clase Doc Paso 5 Examinar la clase Vista Ejercicio 4: Búsqueda de ayuda para las clases En este ejercicio, utilizará la ayuda del sistema de Avenue para preguntar una serie de cuestiones. Paso 1 Iniciar ArcView y abrir un proyecto Si es necesario inicie ArcView. Desde el menú File (Archivo), elija Open Project (Abrir Proyecto). Muévase al directorio exercice. Haga doble clic en ex4.apr para abrir el proyecto de este ejercicio. Cuando el proyecto se abra, observe que aparece la ventana del proyecto y una ventana llamada Script1. Paso 2 Navegar por la jerarquía de clases Conteste las siguientes cuestiones navegando por la Jerarquía de Clase. Desde el menú de ayuda, elija Help Topics, Ayuda de temas. Haga clic en Contents (Contenidos) y navegue a la Jerarquía de Clase de ArcView como se muestra a continuación: Figura ¿Cuál es la primera clase de la Jerarquía de Clase? Haga clic en Obj y salte a la ayuda de temas para preguntar lo siguiente: ¿Cuáles son los atributos (propiedades) de la clase Obj? Haga clic en Back (Volver) para volver a la Jerarquía de Clase. Muévase por la Jerarquía de Clase y observe que todas las clases se organizan desde la general a las específicas (ej. Desde la superclase a las subclases). Ahora conteste las siguientes cuestiones: ¿Cuál es la superclase de File ? ¿Cuáles son las subclases de File? ¿Cuál es la superclase de MsgBox? ¿Cuáles son las subclases de MsgBox? ¿Cuál es la superclase de Shape? ¿Cuáles son las superclases de Shape? ¿Qué subclase de Shape tiene sus propias subclases? Paso 3 Examinar la clase Aplication Examine los atributos de la clase Aplication (Aplicación) y conteste las siguientes preguntas: Liste los tres atributos de la clase Aplicación que tiene el comando Active: ¿Qué atributo se maneja si ArcView puede personalizarse? ¿Qué requerimiento devuelve a ArcView la personalización? Haga clic en Back para volver a la Jerarquía de clase. Paso 4 Examinar la clase Doc Ahora examine la clase documento (Doc) Desde el menú de ayuda, elija ayuda de temas. Haga clic en Contents y navege a Functional overview of ArcView classes como se muestra a continuación: Figura Haga clic en Aplication Framework para saltar al Diagrama Modelo de Objeto (OMD). Figura ¿Qué símbolo denota la relación de herencia? ¿Qué símbolo denota la relación de composición? En el OMD, haga clic en la caja de la clase Doc y conteste a las siguientes cuestiones. ¿Cuál es la superclase de un Doc? ¿Cuál es la subclase de Doc? ¿DocGUI es una subclase de Doc? Liste los atributos de la clase Doc Observe que la herencia (superclase-subclase) que ve en la ayuda del tema clase Doc también estaba expresada en el Diagrama Modelo de Objeto. Paso 5 Examinar la clase Vista Ahora, conteste algunas cuestiones sobre la clase Vista. Desde la opción Index (Índice), tipo View (clase Vista), haga clic en Display (Presentación en pantalla), o en el Diagrama Modelo de Objeto haga clic en View (Vista) para obtener el tema vista. ¿Cuál de los dos atributos de la clase Vista tiene alguna conexión con gráficos en la vista? ¿Cuál es la superclase de Vista? ¿Cuáles son la subclases de Vista? ¿Es el Tema una subclase de la Vista? ¿Qué son los requerimientos de Clase para la clase Vista? Enmarque en un círculo los requerimientos de la siguiente lista, que puede entender una vista. Puede utilizar el índice de la ayuda para encontrar un requerimiento o puede moverse con la cremallera de la ayuda de temas. Si no puede encontrar un requerimiento bajo la ayuda del tema clase Vista, puede buscar su superclase. Make GetColor GetActiveGUI SetName Is Is Ready Create AddTheme Revise sus respuestas a las cuestiones anteriores abriendo el script Results-Exercice 4. Fin S E C C I Ó N 5 Comprensión de eventos Comprensión de eventos................................................................................... 5-2 Eventos del control..................................................................................... 5-4 Asignación de un script a un control........................................................... 5-6 Eventos del documento.............................................................................. 5-8 Asignación de un script a un proyecto........................................................ 5-10 Ejercicio 5: Asignación de scripts a eventos.................................................. 5-12 Comprensión de eventos Cuando un usuario actúa en una aplicación, se produce un evento. Los scripts se asignan a eventos. Cuando se produce un evento, se ejecuta un script. Control + Script evento + Evento = Operación ArcView Figura = + Figura + Figura Figura Comprensión de eventos Los eventos como click, apply, open y close, son propiedades especiales de los controles, documentos y temas. Puede asignar scripts a estos eventos. Una vez que lo haga, el script asignado se ejecuta si se produce el evento. Los eventos se desencadenan al actuar el usuario en la GUI. Eventos del Control La acción del usuario en un control provoca un evento Click o Apply. Click en un control ... ejecuta un script. Figura Figura Figura Apply en una herramienta... ejecuta un script. Eventos del Control Los tres tipos de eventos asociados con controles son Click, Apply, y Update. El usuario provoca los eventos Click y Apply, actuando sobre los controles de la GUI. Click Un evento Click se produce cuando se usa un control. Cuando se ejecuta la propiedad clic, se ejecuta el script asignado al control en que se ha hecho clic. Apply Un evento Apply se produce cuando se usa una herramienta en un documento ventana. Cuando aplica una herramienta en un documento, se ejecuta el script asignado al evento Apply del control. Comprensión de eventos Update (de actualización) Los eventos Update se producen cuando el usuario realiza una acción que cambia el estado del documento activo, tales como añadir un tema a una vista, cambiar la visibilidad de un tema, hacer una selección, o un aumento del dibujo. Un script asignado a un evento Update se ejecuta cuando se produce el evento Update. Para más información, busque la ayuda del tema: Understanding Events. Asignación de un script a un control Doble-clic es una propiedad evento del control Elija un script desde el Gestor de Scripts Botón Zoom In Figura Herramienta Chart Color Figura Asignación de un script a un control En la Caja de Diálogo de Personalización , use la lista de propiedades para asignar un script a un control. Haga doble-clic en la propiedad evento para visualizar el gestor de scripts, y elija el script que se ejecutará cuando se produzca el evento. El Gestor de Scripts La Caja de Diálogo del Gestor de Scripts lista todos los scripts que se pueden utilizar en el proyecto. El gestor de scripts lista todos los scripts del sistema Gis ArcView y los nuevos scripts creados en el proyecto actual o en el proyecto por defecto home. Propiedades Evento Todas los campos de menú, botones, y herramientas tienen una propiedad click y responden al evento click, las herramientas tienen también una propiedad Apply, y responden al evento Apply. Usando ambas propiedades, puede tener un script que se ejecute cuando haga clic en el botón y otro cuando se aplique una herramienta. Por ejemplo, haga clic en la herramienta Chart Color (Color del Gráfico) y ejecute un script que mostrará en pantalla la paleta de color. Aplicando la herramienta Chart Color, en la ventana del gráfico, se ejecuta otro script que cambia el color de un dato señalado. Asignación incorrecta de propiedades evento Si usted asigna incorrectamente un script a la propiedad Click y ésta debe ser Apply, el script se ejecuta sin esperar a que el usuario provoque el evento Apply (ej. Para usar el cursor en la ventana). Por ejemplo, si su script espera que el usuario haga una selección desde la pantalla, asegúrese de que asigna al script la propiedad Apply; en caso contrario, el script se ejecutará sin esperar a que el usuario haga la selección. Eventos del Documento Todos los documentos tienen eventos open (abrir) y close (cerrar). Los proyectos también tienen los eventos Startup (arranque) y Shutdown (cierre). Cuando se abre o cierra la ventana de un documento, se ejecuta un script. Abre un proyecto... ...se ejecuta el script de arranque figura Figura Figura Cierra un proyecto... ...se ejecuta el script de cierre figura Figura Figura Eventos del documento Los tres tipos de eventos asociados con documentos son open, close, y update. El script del evento open (abrir), se ejecuta cuando se abre un documento; el script del evento close (cerrar) se ejecuta cuando se cierra un documento; y el script de evento update (actualizar) se ejecuta cuando el estado del documento actual cambia ( vea pág.5-5). Los proyectos son un conjunto de documentos. Los proyectos también pueden tener propiedades de arranque o cierre que se asocian con scripts. Por ejemplo, un script de arranque, puede iniciar un proyecto presentando en pantalla una imagen (banner), conectar una base de datos externa, o preguntar por el acceso a la información. Un script de cierre, puede desconectar la base de datos externa, borrar ficheros temporales, o dar un mensaje de despedida. Asignación de un script a un proyecto Asigna un script al proyecto en la caja de diálogo de Propiedades del Proyecto. Figura Asignación de un script a un proyecto Para asignar scripts a las propiedades de arranque y cierre de un proyecto, en la caja de diálogo de Propiedades del Proyecto, teclee el nombre del script, o haga clic en el botón Load System Script (Carga de Script del Sistema) y elija un script desde el Gestor de Scripts. Cuando se inicia ArcView, éste lee el proyecto por defecto del sistema, el proyecto por defecto home del usuario (si existe uno), y entonces el script de arranque (si hay alguno asociado con el proyecto actual). Vea la sección 1, El Entorno de Desarrollo de ArcView, para más información sobre el sistema y los ficheros de proyecto por defecto de home. Asignar un script al documento Para asignar un script a los eventos abrir y cerrar de un documento, use estos requerimientos: aDoc.SetOpenScript (“aScriptName”) aDoc.SetCloseScript (“aScriptName”) Para más información, busque la Ayuda del Ttema: Doc. Ejercicio 5: Asignación de scripts a eventos Paso 1 Iniciar ArcView y abrir un proyecto Paso 2 Crear un script y asignarlo a un evento Click de un botón. Paso 3 Crear un script nuevo desde los scripts existentes del sistema. Paso 4 Asignar scripts al proyecto (opcional) Paso 5 Asignar scripts a un menú nuevo (opcional) Ejercicio 5: Asignación de scripts a eventos En este ejercicio, experimentará escribiendo nuevos scripts y asignándolos a controles en la GUI. También creará scripts de arranque y cierre del proyecto, y los asignará al proyecto actual. Paso 1 Iniciar ArcView y abrir un proyecto Si es necesario, inicie ArcView. Desde el menú File (Archivo), elija Open Project. Muévase al directorio exercice. Haga doble clic en el proyecto ex5.apr para abrir este ejercicio. Cuando abra el proyecto, verá la ventana del mismo. Paso 2 Crear un script y asignarlo a un evento click de un botón. Para este paso suponga que quiere escribir un script que abra una vista y un gráfico cuando el usuario haga clic en un botón en la barra de botones del Proyecto. En la ventana del proyecto, haga clic en el icono Scripts, entonces haga clic en New (Nuevo) para abrir un nuevo script. Aparecerá una ventana de Script vacía llamada Script1. El nombre de la vista que se abrirá es Atlanta. El gráfico se llama Atlanta Population by Country. En la primera línea, teclee el siguiente código para establecer una variable llamada myView para la vista Atlanta: myView = av.GetProject.FindDoc (“Atlanta”) En la siguiente línea, teclee el siguiente código que establece la variable llamada myChart para el gráfico Atlanta Population by Country: myChart=av.GetProject.FindDoc(“Atlanta Population by Country“) Añada las siguientes líneas a su script para abrir las ventanas de los documentos vista y gráfico: myView.GetWin.Open myChart.GetWin.Open Su script será ahora como este: Figura Haga clic en el botón Compile (Compilar) para chequear los errores y compilar el script: Figura Haga clic en el botón Run (Ejecutar) para testear que el script abre la ventana y el gráfico. Figura Desde el menú File (Archivo), elija Close All (Cerrar todo), para cerrar la vista, el gráfico y el script. Ahora que su script funciona, está preparado para asignarlo a un nuevo botón. La ventana del proyecto está activa y la GUI del proyecto aparece con el nuevo botón (con una A mayúscula) en la barra de botones. El botón fue creado para usted. Abra la caja de diálogo de Personalización Debido a que usted quiere asignar su script a un botón A en la barra de botones del proyecto, asigne Project a Type y Buttons a la Category. En el editor de control, haga clic en el botón A para seleccionarlo. Figura Luego, asignará el Script1 a la propiedad Click del botón. Haga doble clic en al propiedad Click que aparece vacía en la lista de Propiedades. Figura Seleccione Script1 en el Gestor de Scripts. Figura Ahora el Script1 está asignado a la propiedad evento Click del botón. Figura Ahora, testeará su nuevo script haciendo clic en el botón A de la GUI del proyecto. Primero, minimice la caja de diálogo de Personalización. Active la ventana del proyecto con un clic en el botón A. La ventana Atlanta y el gráfico Atlanta Population by Country se abrirán. Paso 3 Crear un script nuevo desde scripts del sistema existentes. En este paso, suponga que quiere crear un control que aumente en pantalla las entidades seleccionadas. ArcView ya permite esta operación pero con dos controles: la herramienta Select Feature para seleccionar entidades y el botón Zoom to Selected para realizar aumentos. Combinará los dos scripts existentes para crear un tercer script, el cual asignará a un nuevo control. Cierre el gráfico y active la vista Atlanta. Abra la caja de diálogo de Personalización y asigne View a Type y Tools en Category. Primero, compruebe que el script del sistema de ArcView se ejecuta cuando utiliza la herramienta Select Feature; entonces cargue el script en un nuevo script. Elija la herramienta Select Feature (Selección de entidades) para visualizar la lista de propiedades. Figura Observe que el script View.SelectPoint está asignado a la propiedad Apply de esta herramienta. Figura Minimice la caja de diálogo de Personalización. Luego, cargue el script del sistema View.SelectPoint en el nuevo script vacío. En la ventana del proyecto, haga clic en el icono Scripts, entonces con clic en New (Nuevo) se abrirá un nuevo script. El nuevo script está vacío y se llama Script2. Haga clic en el botón Load System Script (Carga de un script del sistema). Figura Desde el Gestor de Scripts, elija View.SelectPoint, entonces haga clic en OK para insertar este script del sistema en su nuevo script. Figura Pulse <Enter> después de la última línea en su nuevo script para emplazar el segundo script del sistema. Ahora, cargue el script del sistema de ArcView, View.ZoomSelected, que está asignado al botón Zoom to Selected. Haga clic de nuevo en el botón Load System Script. Desde el Gestor de Scripts, elija View.ZoomToSelected y haga clic en OK. De esta forma se inserta el script View.ZoomToSelected después del script View.SelectPoint. Haga clic en el botón Compile para chequear los errores y compilar el script. Ahora que su nuevo script está compilado, está preparado para asignarlo a un control. Recuerde, este script requiere que el usuario seleccione las entidades desde la vista. Antes de asignar el script, necesita contestar tres cuestiones: ¿En qué tipo de documento (Vista, Tabla, Gráfico o Composición) trabaja el control? ¿Qué control es apropiado (Campo de menú, Botón o herramienta? ¿Qué evento se produce (Click o Apply) al ejecutar el script? Conteste a la primera de las cuestiones y determine que nuevo script (Script2) se ejecutaría desde la herramienta de la barra de la Vista. Active la vista Atlanta y abra la caja de diálogo de personalización. En la caja de diálogo de personalización, asigne a Type View (Vista) y a Category Tools (herramientas). En el Editor de Control, haga clic en la herramienta Select and Zoom. (Esta herramienta fue añadida para usted al ejercicio ex5.apr). Figura Luego, asignará el Script3 a la herramienta Select and Zoom. Basado en su contestación a la tercera cuestión, asigne el script2 a la propiedad evento Apply. Haga doble clic en la propiedad Apply que aparece vacía en la lista de Propiedades. En el Gestor de Scripts, haga doble clic en Script2 para asignarlo a la herramienta. Figura Minimice la caja de diálogo de Personalización y la ventana del script. Ahora testeará su script utilizando la herramienta. Con la ventana de la vista activa, haga clic en la herramienta Select and Zoom. Seleccione un grupo de entidades englobándolas en una caja, y luego aumente las entidades seleccionadas en la vista. Paso 4 Asignar scripts al proyecto (opcional) En este paso, creará dos nuevos scripts: Arranque y Cierre. Asignará uno para ejecutarlo cuando se abra el proyecto y otro se ejecutará cuando se cierre el proyecto. En la ventana del proyecto, haga doble clic en el icono de Scripts para abrir un nuevo script. Desde el menú Script, elija Properties (Propiedades) y llame al script Startup. El script Startup (Arranque) cambiará el título en la ventana de su aplicación (av) para el nombre de su compañía y visualizará el logotipo de la misma. Active Startup (Arranque), entonces haga clic en el botón Load Text File (Carga fichero de texto). Figura Desde el administrador de archivos, muévase al directorio data para seleccionar en él startup.ave. Figura En la primera línea de este script determine el nombre de la ventana de la aplicación (av). Reemplace la cadena por el nombre de la compañía. La siguiente línea mostrará una caja de mensaje con un logotipo (desde un fichero de gráficos llamado acme.tif) durante 8 segundos. El título en la ventana de la caja de mensaje será Go ACME!. Haga clic en el botón Compile para chequear los errores y compilar el script. Figura Ahora creará un script que se ejecute al cerrarse el proyecto. En la ventana del proyecto, haga doble clic en el icono de Script para abrir un nuevo script. Desde el menú Script, elija Properties (Propiedades) y llame al script Shutdown. El script de cierre necesita al usuario para registrar este producto de software. Active Shutdown, entonces haga clic en el botón Load Text File. Desde el administrador de archivos, muévase al directorio data y seleccione shutdown.ave. Figura Haga clic en el botón Compile para chequear los errores y compilar el script. Desde el menú File (Archivo) elija Close All. Asigne los nuevos scripts a los eventos de arranque y cierre del proyecto. Desde el menú Project (Proyecto), seleccione Properties (Propiedades). Para el evento de arranque, haga clic en el botón Load System Script y desde el Gestor del Scripts, seleccione el script de arranque. Desde el evento de cierre, haga clic en el botón Load System Script, y desde el Gestor de Scripts, seleccione el script de cierre. Haga clic en OK cuando acabe. Figura Ahora, guardará el proyecto y testeará estos nuevos scripts abriendo y cerrando el proyecto. Active la ventana del proyecto y desde el menú File (Archivo), elija Save Project As (Guardar como...). Muévase al directorio pavetemp y guarde paveex5.apr. Desde el menú File (Archivo), elija Close Project (Cerrar Proyecto). El script asignado al evento Shutdown y visualice el siguiente mensaje: Figura Haga clic en OK para que desaparezca la caja de mensaje. Ahora, desde el menú File (Archivo), elija Open Project (Abrir Proyecto). Muévase al directorio pavetemp y abra paveex5.apr. El script asignado al evento de arranque ejecuta y visualiza este mensaje durante 8 segundos: Figura Desde el menú File (Archivo), elija Close Project (Cerrar Proyecto). El mensaje aparece de nuevo. Haga clic en OK para disminuir la caja de mensaje. Paso 5 Asignar scripts a un menú nuevo En este paso, escribirá un script que le permita el usuario dibujar (abrir) los temas eligiéndolos desde un menú, en vez de hacer clic en sus cajas de control en la Tabla de Contenidos. Esta posibilidad sería útil si necesitara ocultar la Tabla de Contenidos. Abra el proyecto ex5.apr. Se ha añadido un nuevo menú llamado Layers (Capas) a la GUI de la vista, con un campo de menú para cada tema en la vista Atlanta: Population, Income y Education. Figura Primero, creará un script que visualice el tema Population. En la ventana del proyecto, haga doble clic en el icono Scripts para abrir un nuevo script. Aparecerá una nueva ventana de Script vacía llamada Script3. En la primera línea, teclee el siguiente código para establecer una variable llamada aTheme para el tema Population en la vista Atlanta: aTheme = av.GetProject.FindDoc (“Atlanta”).FindTheme (“Population”) Teclee esta línea para visualizar el tema: aTheme.SetVisible (true) Haga clic en el botón Compile para compilar el script y chequear los errores. Ahora, cargará este script en dos nuevos scripts, y los modificará para los temas Income y Education. Active la ventana del proyecto y haga doble clic dos veces más en el icono Scripts, para abrir dos nuevos scripts: Script4 y Script5. Active Script4 y haga clic en el botón Load System Script. (Va a copiar el Script3 dentro de Script4). Figura Desde el Gestor de Scripts, elija Script3. Edite el Script4 reemplazando Population por Income. Haga clic en el botón Compile. Ahora copie el script3 en el script5. Active Script5, haga clic en el botón Load System Script, y desde el Gestor de Scripts, elija Script3. Edite Script5 reemplazando Population por Education haciendo clic en el botón Compile. Luego, asignará estos scripts a los campos de menú. Abra la caja de diálogo de personalización. Asigne View (Vista) a Type y Menus a Category. En el editor de Control, haga clic en el campo de menú Population debajo del menú Layers (capas). Figura Haga doble clic en la propiedad Click en la lista de propiedades, y seleccione Script3 en el Gestor de Scripts. De igual forma elija los campos de menú Income y Education, asignando Script4 a Income y Script5 a Education. Cierre la caja de diálogo de personalización. Ahora testeará sus scripts usando el menú Layers de la GUI de la vista. Active la vista Atlanta. Haga clic en la caja de control del tema Population para apagarlo. Desde el menú Layers, elija Population, aparecerá el tema population. La caja de control es chequeada automáticamente para indicar el estado de la visualización. Apague el tema Population haciendo clic en la caja de control. Ahora testee los campos de menú Income y Education. Fin S E C C I Ó N 6 Personalización de la aplicación y documento proyecto Personalización de la aplicación y el documento proyecto............................ 6-2 La clase Aplicación..................................................................................... 6-4 Trabajar con la ventana de la aplicación.................................................... 6-6 Controlar la barra de estado de la aplicación............................................. 6-8 Ejecutar los scripts desde la aplicación...................................................... 6-10 Trabajar con el proyecto............................................................................... 6-12 Establecer las propiedades del proyecto................................................... Nombrar la aplicación y el proyecto........................................................... 6-14 6-16 Ejercicio 6: Uso de la aplicación y proyecto.................................................... 6-19 Personalización de aplicación y documento proyecto Utilizar la aplicación Usar la aplicación para ejecutar scripts Manejar el proyecto y sus documentos Figura Personalización de aplicación y documento proyecto En este capítulo, trabajará con el objeto aplicación. Cuando inicie el GIS ArcView, se crea el objeto aplicación. La aplicación está asociada con un proyecto de ArcView y sus documentos. En este capítulo usará el objeto aplicación para manipular ventanas de documentos, ejecutar scripts y controlar la barra de estado, entre otras cosas. También aprenderá a manipular la ventana de ArcView y las ventanas de los documentos que tienen la aplicación. La clase Aplicación Cuando se inicia ArcView, se crea la aplicación (av) Referirse a la aplicación desde el teclado con el comando av. Entre la aplicación y el proyecto existe la asociación de uno a uno. av.GetProject Entre proyecto y Doc, y entre proyecto y los DocGUI existe una asociación múltiple. Av.GetProject.FindDoc (“World”) Av.GetProject.FindGUI (“myGUI”) Entre Doc y DocWin existe una relación de uno a uno. Av.GetProject.FindDoc (“World”).GEtWin Aplicación Extension Objeto Proyecto Script Script Editor DocGUI Gráfico Doc Composición DocWin Tabla Vista La clase Aplicación La aplicación ArcView es la única instancia de la clase Aplicación, y se crea cuando se inicia ArcView. Cuando escribe el código de Avenue™, se refiere a la aplicación desde el teclado con av. Iniciando desde av, puede encadenar requerimientos que le llevarán a otro objeto que exista actualmente en la aplicación. De forma más técnica, av es el objeto raíz en el modelo de ArcView y el punto de inicio para navegar por el modelo. Diagrama modelo de objetos de la aplicación Un diagrama modelo de objetos es una ayuda visual que le ayuda a escribir el código de Avenue. Mediante la navegación por los diagramas modelo de objetos, puede descifrar la asociación entre objetos y determinados requerimientos que pueden enviarse. Comenzando con el diagrama modelo de objeto de la estructura de la Aplicación, puede buscar requerimientos que son enviados a la aplicación y a los objetos del proyecto. Mediante la visualización de las relaciones entre clases, el diagrama modelo de objetos le ayuda sin duda, a dos cosas: elegir el requerimiento apropiado para su estamento de Avenue, y colocar estos estamentos en el orden apropiado. Por ejemplo, si intentó encontrar un documento, iniciaría con la aplicación, entonces tomaría el objeto, y encontraría el documento que quiere. Para ayudar a elegir el requerimiento, utilice la asociación entre las clases mostradas en el diagrama modelo de objetos. Los requerimientos Get... y Find... se utilizan con diferentes tipos de asociaciones. El requerimiento Get... trabaja con la asociación uno a uno , mientras que Find... trabaja con múltiples asociaciones. av, Aplicación, y ArcView Todos estos términos se refieren a lo mismo, av se refiere a ArcView o a la aplicación, av se utiliza para simplificar, ya que es más fácil de teclear que ArcView o Aplicación. Trabajar con la ventana de la aplicación Propiedades de las ventanas av.MoveTo(20,20) av.Resize (800,600) av.TileWindows av.CascadeWindows Documento y ventana activa theActiveDoc = av.GetActiveDoc theActiveWin = av.GetActiveWin Figura Trabajar con la ventana de la aplicación Con el objeto aplicación puede asignar las propiedades de la ventana y manejar el documento activo y la ventana del documento. Busque la ayuda de Avenue para la clase Application para encontrar los correspondientes requerimientos y propiedades (atributos). La ventana de la aplicación El requerimiento moveTo sitúa la esquina inferior izquierda de la ventana de la aplicación y especifica la localización del pixel en una x,y específica. El requerimiento Move sitúa la ventana en relación a su posición actual especificando un incremento de x, e y en pixeles. El requerimiento Resize, cambia el tamaño de la ventana de la aplicación. El parámetro del requerimiento Resize es el tamaño de la x y la y en pixeles. Ordene el mosaico de ventanas enviando el requerimiento TileWindows a la aplicación. Cuando ordene las ventanas en mosaico, se abrirán todas y se mostrarán en pantalla sin solaparse. El documento activo Desde la aplicación, puede obtener el documento activo con el requerimiento GetActiveDoc y la ventana activa con el requerimiento GetActive Win. Controlar la barra de estado de la aplicación Visualizar mensajes av.ShowMsg (“Creating themes...”) av.ShowStopButton Figura Mover la barra de progreso ‘procesando algo av.SetStatus (25) Figura ‘procesando más av.SetStatus (50) Figura ‘procesando más av.SetStatus (75) Figura ‘procesando más av.SetStatus (100) Figura Controlar la barra de estado de la aplicación El objeto aplicación controla la barra de estado (barra horizontal en la parte inferior de la ventana de la aplicación). Los requerimientos ShowMsg y ShowStopButton muestran un mensaje y un botón Stop, respectivamente, en la barra de estado. Utilice el requerimiento SetStatus dentro de un bucle para cambiar la barra de progreso. Un bucle moverá la barra de progreso incrementándola desde la posición 0 a la posición 100 %. Borre el botón Stop y la barra de progreso enviando el requerimiento ClearStatus. Mover la barra de progreso Puede usar un bucle For Each para mover la barra de progreso. Aprenderá sobre los bucles For Each en la sección Ramificaciones y bucles. for each y in 0 .. 100 av.setStatus (y) end ‘asigna la barra de progreso Limpiar la barra de estado Los textos de mensajes, la barra de progreso, y el botón de Stop pueden borrarse de la barra de estado. Un mensaje se borra utilizando el requerimiento ClearMsg. Borre el botón de Stop y la barra de progreso enviando el requerimiento ClearStatus. av.ClearMsg av.ClearStatus ‘ Limpia el área de mensaje ‘ Limpia la barra de estado Esperar para una operación El cursor WaitCursor se parece a un reloj de vidrio. av.UseWaitCursor Ejecutar los scripts desde la aplicación Ejecutar un script desde otro script Utilizar la aplicación con el requerimiento Run av.Run (“script name”,object) Pasar un objeto al script llamado En el script llamado, se utiliza SELF para referirse al objeto pasado Utilizar el estamento Return para devolver un objeto. Compra 1 cost1= MsgBox.Input (“Enter Cost”,””,””) a =av.run (“CalcTax, cost1) MsgBox.Info (a.AsString, “Your Tax”) Compra 2 cost2 = MsgBox.Input (“Enter Cost”,””,””) b = av.run (“CalcTax”, cost2) MsgBox.Info (b.AsString, “Your Tax”) CalcTax x = SELF.AsNumber * 0.75 Return x Ejecutar los scripts desde la aplicación Para ejecutar un script desde otro, envíe el requerimiento Run al objeto av. Run tiene dos parámetros: el nombre del script para ejecutar y un objeto para pasar al script llamado. SELF es el comando que se utiliza en Avenue, en el script llamado para referirse al objeto pasado. El script llamado puede almacenarse en el proyecto actual, en el proyecto de usuario por defecto, o en el proyecto por defecto del sistema. La aplicación busca estos directorios en este orden para encontrar el script. SELF Utilice SELF en el script llamado para almacenar el objeto pasado desde el script principal. En el ejemplo de la página anterior, cost1 es pasado desde Compra1 a CalcTax, entonces se almacena en SELF, convertido a número, multiplicado por el factor de impuesto 0.075, que entonces es devuelto al script principal, Compra1. Devolver objetos al script principal que realiza la llamada Un objeto puede ser devuelto al script principal con el estamento Return. En este ejemplo, la cadena Done script2 fue devuelta a result, en el script principal. Result = av.run (“script2”,””) return “Done script2” ‘en el script principal ‘último estamento del script llamado Si no usa Return en el script llamado, el último objeto creado en este script no es devuelto. Requerimiento DelayedRun El requerimiento DelayedRun ejecuta un script en un intervalo de tiempo (ej. Cada diez minutos). Para parar la ejecución del script, renómbrelo o bórrelo. Av.DelayedRun (aScript, anObject, timeDelay) Trabajar con el proyecto Crear, nombrar y guardar un proyecto theProject = Project.Make theProject.SetFileName (“world.apr”.AsFileName) theProject.Save Abrir y cerrar un proyecto theProject = Project.Open (“world.apr”.AsFileName) theProject.Close Manejar documentos en el proyecto theView = theProject.FindDoc (“Asia”) theProject.SetActive (theView) theProject.RemoveDoc (theView) Figura Figura Trabajar con el proyecto Puede crear un nuevo proyecto enviando el requerimiento Make a la clase proyecto. Este proyecto no está titulado y se le puede dar nombre con el requerimiento SetFileName. SetFileName requiere un objeto FileName. Proporciona la cadena de la ruta de su fichero de proyecto y lo convierte a FileName con el requerimiento AsFileName. Después de ser renombrado, puede salvarlo con el requerimiento Save. Puede abrir un proyecto existente con el requerimiento Open. El requerimiento Open también necesita un FileName. Cierre el proyecto con el requerimiento Close. Ficheros Object Data Base Los ficheros de proyectos se almacenan en un fichero de texto con un formato especial llamado Object Data Base (ODB). Un ODB permite almacenar y recuperar información desde un fichero. Esto permite salvar todos los componentes de un proyecto, y volver a crearlos cuando se abra el fichero de proyecto. Para más información sobre ficheros ODB, busque la ayuda de tema: ODB. Manejando documentos del proyecto El requerimiento FinDoc devuelve un documento por su nombre. En este ejemplo, theView es la vista Asia. El requerimiento SetActive activa un documento del proyecto en la ventana del proyecto. El requerimiento RemoveDoc borra un documento desde la ventana del proyecto. Establecer las propiedades del proyecto Asigna los scripts de arranque y cierre av.GetProject.SetStartup (“Open”) av.GetProject.SetShutdown (“Close”) Asigna el directorio de trabajo y el color de selección av.GetProject.SetWorkDir (“c:\robb”.AsFileName) av.GetPtoject.SetSelColor (Color.GetRed) Obtiene el autor, fecha de creación y comentarios av.GetProject.GetCreator av.GetProject.GetCreationDate av.GetProject.GetComments Figura Establecer las de propiedades del proyecto De igual forma que el usuario cambia las propiedades del proyecto desde la caja de diálogo de propiedades del proyecto, éstas pueden cambiarse mediante el código de Avenue. Las versiones de los requerimientos Get... y Set... son capaces de identificar o cambiar algunas de estas propiedades. Arranque y Cierre Puede especificar los scripts para ejecutar cuando se inicia o cierra su proyecto. Esto puede ser utilizado para inicializar variables o borrar ficheros indeseados. Use los requerimientos Startup y Shutdown y especifique el nombre del script. Para más información sobre los scripts Startup y Shutdown, vea la sección 2, Creando scripts en Avenue. Otras propiedades Use el requerimiento SetSelColor para definir un nuevo color de selección para las selecciones que haga en sus documentos. SetSelColor necesita un color como parámetro. Para establecer o cambiar el directorio de trabajo para el proyecto, utilice el requerimiento SetWorkDir. Para el parámetro de SetWorkDir, dele la ruta de un directorio y conviértalo a un objeto FileName. Para recuperar información sobre la creación del proyecto, o algunos comentarios almacenados con el proyecto, utilice estos requerimientos: GetCreator, GetCreationDate y GetComments. Nombrar la aplicación y el proyecto ‘ Cambia los nombres de la aplicación (av) y el proyecto av.SetName (“Acme GIS Company”) theProject = av.GetProject theProject.SetName (“Redlands”) Figura Figura Nombrar la aplicación y el proyecto Cuando inicia ArcView, se visualizan la ventana de la aplicación (llamada ArcView) y la ventana del proyecto llamada Untitled (Sin Título). El título de la ventana de la aplicación se puede cambiar y renombrar el proyecto utilizando el script anterior. Ejemplo En el ejemplo, el requerimiento SetName se utiliza para cambiar el título en la ventana de la aplicación a ACME GIS Company. Luego, se crea la variable theProject, tomándolo de la aplicación (referido como av en el script de Avenue). El requerimiento SetName se utiliza para renombrar theProject. Ejercicio 6: Uso de la aplicación y proyecto Paso 1 Iniciar ArcView y abrir un proyecto Paso 2 Modificar la ventana de la aplicación Paso 3 Personalizar la barra de estado Paso 4 Cambiar el nombre del proyecto Paso 5 Escribir un script que ejecute otro script (opcional) Paso 6 Escribir un script que obtenga y visualice comentarios del proyecto. Ejercicio 6: Uso de la aplicación y proyecto En este ejercicio, trabajará con el objeto aplicación y escribirá el código que permite operaciones en la aplicación y el proyecto. Paso 1 Iniciar ArcView y abrir un proyecto Si es necesario, inicie ArcView. Desde el menú File (Archivo), elija Open Project (Abrir Proyecto). Muévase al directorio exercice. Haga doble clic en ex6.apr para abrir el proyecto para este ejercicio. Cuando se abre el proyecto, no se abren los documentos. Paso 2 Modificar la ventana de la aplicación Escriba el script para mover la ventana de la aplicación, cámbiele el nombre y redimensiónela. Abra el script Exercice 6, Step 2. Mueva la ventana de la aplicación con el requerimiento MoveTo a la posición 100,100 pixeles. Asigne el nombre a la aplicación con el requerimiento SetName para poner título a la ventana de la aplicación ACME GIS, Inc. Redimensione la ventana de la aplicación con el requerimiento Resize a 800, 600 pixeles. Compile y ejecute el Exercice 6, Step 2. Observe los cambios de la ventana de la aplicación. Cierre el script. Paso 3 Personalizar la barra de estado En este paso, editará un script existente para informar al usuario del progreso de una operación. Abra el script Exercice 6, Step 3. Inserte la siguiente línea de código debajo del comentario Show message in status bar. Para visualizar un mensaje en la aplicación, envíe un requerimiento ShowMsg a la aplicación, con la cadena Running script... como parámetro. El bucle For Each moverá la barra de estado desde 0 a 100 por cien. Entre el estamento For Each y el estamento End, añada el código para asignar el estado de la aplicación enviando el requerimiento SetStatus con el parámetro percent. (Aprenderá sobre bucles For each en la siguiente sección Ramificaciones y bucles. Inserte la siguiente línea de código bajo el comentario Clear message from status bar. Limpie el mensaje desde la barra de estado de la aplicación enviando a ésta el requerimiento ClearMsg. Compile y ejecute el Exercice 6, Step 3. Cuando finalice, cierre el script. Paso 4 Cambiar el nombre del proyecto Escriba un script que renombre el proyecto actual y lo guarde con el nuevo nombre. Abra el script Exercice 6, Step 4. Para obtener el proyecto actual, asigne la variable llamada myProject enviando a la aplicación el requerimiento GetProject. Asigne el nombre del fichero myProject enviando el requerimiento SetFileName con el nombre del fichero como su parámetro. Para crear la cadena del nombre del fichero, empiece con la ruta de su directorio personal y el fichero de proyecto world.apr (ej. C:\temp\world.apr). Entonces envíe el requerimiento AsFileName a esta cadena para convertirla en un nombre de fichero. Salve myProject enviando el requerimiento Save. Compile y ejecute Exercice 6, Step 4. Chequee el título en la barra de la ventana del proyecto para ver que el nombre del proyecto actual ha cambiado. Cuando acabe, cierre el script. Paso 5 Escribir un script que ejecute otro script (opcional) En este paso, escribirá dos scripts: ScriptA y ScriptB. El ScriptA ejecutará ScripB con av.Run. Desde la ventana del proyecto, abra los scripts ScriptA y ScriptB. El ScriptA obtendrá el nombre de la aplicación a y entonces ejecuta ScriptB, pasándole el nombre. En el ScriptA, cree una variable llamada appName para almacenar el nombre de la aplicación; para hacerlo, pregunte a la aplicación, enviando el requerimiento GetName a aplication. Luego, cree una variable llamada aNewName para ejecutar la aplicación, usando el ScriptB y appName como parámetro del requerimiento Run. Cuando se devuelve el control al ScriptA, el nombre de la aplicación ha cambiado. En el ScriptA, en la siguiente línea av.Run (donde se devuelve el control), asigne el nombre de la aplicación enviando el requerimiento SetName para cambiar su nombre a aNewName. El ScriptB muestra el nombre de la aplicación y entonces pregunta al usuario el nuevo nombre. En el ScriptB, utilice MsgBox con el requerimiento Info para visualizar un mensaje. Para el mensaje, concatene la cadena The current application name is con la aplicación almacenada en SELF. Utilice una cadena vacía (“”) para el título de la caja de mensaje. Luego, cree una variable llamada newAppName utilizando un MsgBox con el requerimiento Input. Utilice el mensaje Enter a new application name: escriba como título de la caja de mensaje Change Application name y utilice una cadena vacía como valor. En la última línea del ScriptB, use el estamento Return para devolver newAppName al ScriptA, newAppName se devuelve como aNewName al ScriptA. Compile el ScriptA y el ScriptB. Para testear ambos scripts, active el ScriptA y ejecútelo. Cuando pida un nombre para la aplicación, introduzca el nombre que quiera. Observe que el título de la ventana de la aplicación cambia para mostrar el nuevo nombre. Cuando acabe, cierre el script. 6 Escribir un script que obtenga y visualice comentarios del proyecto. Escriba un script que recupere los comentarios del proyecto actual y los muestre en pantalla como el mensaje en la caja de mensaje. También obtiene la fecha de creación del proyecto y visualiza el título en la caja de mensaje. Fin S E C C I Ó N 7 7. Ramificaciones y bucles Ramificaciones y bucles El estamento If Expresiones y objetos booleanos El estamento While El estamento For Each Listas Uso de listas con cajas de mensaje Continue, Break, Return y Exit Aplicación de lo anterior Ejercicio 7: Ramificaciones y Bucles 7-2 7-4 7-6 7-8 7-10 7-12 7-14 7-16 7-18 7-2 Ramificaciones y bucles Estamentos de ramificación If Then Expresiones booleanas (true o false) Estamentos de bucles While For Each Listas Ramificaciones y bucles Avenue tiene estamentos que soportan operaciones condicionales y de bucles. Las ramificaciones usan condiciones para determinar el código que debe ejecutarse en cada caso. Los estamentos de bucles usan comúnmente colecciones o grupos de objetos para determinar cuántas veces se debe aplicar un determinado código. Los bucles pueden también usar condiciones booleanas para determinar si debe ejecutarse o no un determinado código y cuando debe parar. El estamento If Ramificaciones condicionales If (Boolean expression) then ‘ do something else ‘ do something different end Ejemplo: verificar una password ‘ Script de inicio para el proyecto La Banks thePword = MsgBox.Password if ( thePWord=“ cheddar” ) then av.GetProject.FindDoc (“Los Angeles Banks”).GetWin.Open else MsgBox.Info (“Sorry, incorrect password”,”Password”) av.GetProject.Close end El estamento If El estamento If Then usa una condición ( p.e. una expresión booleana) para determinar qué parte de un script debe jecutarse. Se puede chequear una condición y, dependiendo de si es verdadera (true) o falsa (false), ejecutar diferentes líneas de código. Cada estamento If Then debe tener su correspondiente End. Uso de ElseIf El estamento ElseIf se usa para anidar estamentos condicionales múltiples if ( condición 1) then ‘ requerimiento bloque 1 elseif ( condición 2) then ‘requerimiento bloque2 elseif (condición 3 ) then ‘requerimiento bloque 3 else ‘requerimiento bloque 4 end Expresiones y objetos booleanos Existen dos objetos booleanos: true y false Se pueden asignar directamente o ser devueltos desde un requerimiento done = false status = TheTheme.IsVisible editStat = myTable.CanEdit ok= MsgBox.YesNo ( “¿Desea añadir ahora más registros? ”,” ”,true ) Expresiones booleanas entre paréntesis ( passwd = “shana” ) ( yourNumber >36 ) Creación de expresiones compuestas con and, or , xor o not ( ( YourResponse = “ yes” ) and ( yournumber >36 ) ) ( ( oldNumber < newNum ) or ( MyThm.IsVisible)) ( not (aValue > 100 ) ) ‘igual que ( ( aValue > 100 ) .Not) Expresiones y objetos booleanos Existen dos instancias de clase booleana: true y false. Éstas pueden ser asignadas directamente usando las palabras clave true y false, o pueden ser devueltas desde un requerimiento. Los requerimientos que comienzan con Is, Can y Has devuelven objetos Booleanos, así como algunas cajas de mensaje, por ejemplo MsgBox.YesNo. Las expresiones booleanas constituyen la componente condicional de los estamentos If y While en Avenue. Las expresiones booleanas deben evaluarse a true o false. y deben ser encerradas entre paréntesis. Expresiones compuestas Las expresiones compuestas se crean usando and, or , xor y not. Se puede negar un objeto booleano (true o false) con el requerimiento Not, usando los dos formatos que aparecen en la última línea de la página anterior. La evaluación de una expresión booleana compuesta finaliza cuando se determina el resultado de la expresión; así, cuando se usa and, se puede ahorrar tiempo resolviendo un pequeño testeo antes de uno largo. La técnica se muestra abajo. ( ( shortTest ) and ( longTest ) ) ‘ ahorra tiempo El estamento While Lleva a cabo un conjunto de requerimiento mientras una condición sea true While (condición) ‘ algún requerimiento ‘ la condición debe cambiar end Ejemplo: sumar un conjunto de números sum = 0 start = true While (start) TheValue = MsgBox.Input ( “Introduce un valor”,”Formato de entrada”,” ” ) if (theValue<>nil) then sum = sum + theValue. AsNumber else start = false MsgBox.Info(“El total es ”++sum.AsString,” Resultado” ) end end El estamento While El bucle del estamento While recorre un conjunto de requerimientos tanto tiempo como una condición sea true. Cuando la condición cambie a False, el bucle se detiene. Para asegurar no encontrarse un bucle mal finalizado, incluya en el bucle un estamento que cambie la condición de true a false. Cada estamento While debe tener su correspondiente estamento End. En el ejemplo anterior, la caja de mensaje de entrada se visualiza en la pantalla, y continúa sumando valores dados por el usuario. Cuando el usuario haga click en Cancel, theValue se asigna a nil (nulo), y se ejecuta la rama Else; start se asigna a false, y se visualiza el total. En la siguiente iteración del bucle, el valor de start es false, y el bucle se finaliza. El objeto Nil El objeto Nil es un objeto que no tiene valor. Se devuelve Nil, por ejemplo, cuando se pide al usuario que escriba una cadena en una caja de mensaje y éste no escribe nada, hace clic en Cancel o quita la ventana. Atrapar errores Para asegurar que el valor de entrada es un número real, chequee para ver si devuelto es una instancia de la clase number (número): if ((theValue <>nil))and(theValue.IsNumber)). El estamento For Each Aplica un conjunto de requerimientos a cada objecto en una colección For each anObject in aCollection ‘ bloque de requerimiento end Activa cada tema en la vista theThemeList = theView.GetThemes for each thm in theThemeList thm.SetVisible (true) end Intervalos e incrementos for each num in 0 . . 5 by 2 MsgBox.Info(num.AsString, “The number is . . . ” ) end el valor El estamento For Each El bucle del estamento For Each recorre cada objeto en una colección ( p.e. una lista) y lleva a cabo una serie de equerimientos. El bucle inicializa anObject dando el primer objeto en aCollection. El bucle continúa hasta que se lea el último objeto de la colección. Cada estamento For Each debe tener su correspondiente estamento End. En el ejemplo anterior, en cada iteración de el bucle, se lee y devuelve un tema de la lista de temas. Intervalos e incrementos For Each también trabaja con rangos de números, fechas y tiempo como expresiones, usando el requerimiento interval intervalo(..)). Un incremento puede aplicarse a intervalos usando la clave by. En el ejemplo anterior, num comienza con 0 y se incrementa en 2 en cada iteración. El bucle se detiene cuando num es igual o mayor que 5. Listas Una colección ordenada de objetos Crear una lista theList = {theCompany, “Phone”, 157.50} theThemeNames ={“Banks”,”Roads”,”Malls” } theThemeList = theView.GetThemes newList = List.Make ‘ con llaves ‘ con Get ... ‘ con Make Añadir objetos a la lista theThemes.Insert (“City”) theThemes.Add (“Streets”) ‘ al principio de la lista ‘ al final de la lista Referenciar objetos en una lista Índices: 0 1 2 myList = {“City”,”Banks”,”Streets”} thePoints = myList.Get (1) myList.Set (1, “Finance”) theIndex= myList.FindByValue(“City”) theCount= myList.Count myList.Remove(2) ‘ thePoints es Banks ‘ Cambia Banks por Finance ‘ El índice es 0 ‘ El contador es 3 ‘ borra Streets Listas Una lista es un grupo ordenado o colección de objetos. Una lista puede contener objetos de diferentes tipos. Por ejemplo, adenas, temas y números pueden ser miembros de la misma lista. Las listas se usan comúnmente en bucles y cajas de mensaje. Una colección es una clase abstracta; esta subclase incluye BitMaps, Dictionary (Diccionarios), List(Listas), NameDictionary (Diccionarios de nombres )y Stacks (pilas). (Los diccionarios se explican en la sección 12.) Creación de listas Existen varios caminos para crear una lista. Cualquier técnica que se elija resulta en un objeto lista ( p.e. una instancia de una Lista) Se puede crear una lista asignando un grupo de objetos, encerrados entre llaves {}, a una variable lista. Se puede enviar una requerimiento a un objeto que devuelva una lista. La mayoría de los requerimientos que inician una lista con Get ... devuelve una lista: por ejemplo, el requerimiento GetThemes devuelve la lista de temas en la vista, y el requerimiento GetDocs devuelve una lista de documentas en un proyecto. Se puede crear una lista con el requerimiento Make. Se puede poblar una lista usando los requerimientos Insert y Add. Insert coloca un nuevo objeto al principio de la lista, y Add coloca el nuevo objeto al final. Referenciar objetos en una lista Cada objeto en una lista se referencia con un número índice. El índice comienza con 0 para el primer objeto y termina con <número de objetos > -1. El requerimiento Get devuelve un objeto por su número índice, y Set cambia el valor de el objeto. Use el requerimiento Find para devolver el índice de el objeto especificado; use FindByValue si el objeto especificado en una cadena o un número. Count devuelve el número total de objetos en las lista, y Remove borra un objeto por el número de índice. Uso de listas con cajas de mensaje MsgBox.Choice theThemeList = theView.GetThemes theTheme = MsgBox.Choice (theThemeList, “Elige un tema”, “Selección de tema”) MsgBox.MultiInput labelsList = {“Nombre”,”Dirección”,”Número de teléfono”} defaultList ={“Bernie Szukalski”,”380 New York Street”,”909.793.2853”} ‘ La lista default podría estar compuesta de cadenas vacías {“ ” ,“ ” ,“ ”} theDataList = MsgBox.MultiInput ( “Añade cliente” ,” Datos del cliente”,labelsList,defaultList) Uso de listas con cajas de mensaje Las listas se usan normalmente con cajas de mensaje que presenta selecciones o campos de entrada y obtienen información desde el usuario. Cajas de mensaje Choice y List Los requerimientos Choice, List y MultiList se envían a una MsgBox para presentar las opciones del usuario. Un requerimiento Choice visualiza las opciones en una lista desplegable; el requerimiento List visualiza las opciones es una lista tipo scrolling (cremallera); y el requerimiento MultiList permite seleccionar varios objetos desde una lista scrolling. Choice y List devuelven un objeto; MultiList devuelve una lista de objetos. MsgBox.Choice(aList,aMessage, aTitle) MsgBox.List(aList,aMessage, aTitle) MsgBox.MultiList(aList,aMessage, aTitle) Use el requerimiento AsString cuando la lista de opciones esté formada en su totalidad por objetos tipo cadena. MsgBox.ChoiceAsString(aList,aMessage, aTitle) MsgBox.List AsString(aList,aMessage, aTitle) Cajas de mensaje MultiInput Envíe el requerimiento MultiInput a MsgBox para crear una formato de entrada para que rellene el usuario. El objeto devuelto desde el requerimiento MultiInput es una lista. MsgBox.MultiInput(aList,aMessage, aTitle,aListOfLabels,aListOFDefaults) Continue, Break, Return y Exit Altera el flujo normal de control Continue salta la iteración actual del bucle u continúa a la siguiente for each num in 1 .. 5 if (num =3) then continue Else ‘MsgBox.Info (num.AsString,” ”) end ‘ 1,2,4 y 5 son visualizados, 3 se salta Return termina inmediatamente el script actual for each num in 1 .. 5 if (num =3) then break Else ‘MsgBox.Info (num.AsString,” ”) end ‘ 1,2 son visualizados, luego Break para el bucle Return termina inmediatamente el script Exit termina todos los scripts en marcha Continue, Break, Return y Exit Use Continue, Break, Return y Exit para modificar el flujo de control en el bucle. Continue Cuando se encuentra un estamento Continue, cualquier paso remanente en la iteración actual se ignora y el control pasa a la siguiente iteración en el bucle Use Continue par saltar el proceso de los elementos seleccionados o que cumplan una determinada condición. Break Cuando un estamento Break es encontrado, el bucle encerrado más próximo finaliza y el control pasa al estamento siguiente del estamento End del bucle. Return Cuando se encuentra un estamento Return, finalice inmediatamente el script actual. Exit Termina todos los scripts en curso. Puesta en práctica conjunta Uso estamentos For Each múltiples con una estamento If Then. Puesta en práctica conjunta Los scripts con frecuencia están formados de estamentos múltiples, o usan varias veces el mismo estamento. El ejemplo de la página anterior usa el estamento If Then dentro de un estamento For Each y dos For Each dentro de un estamento If Then. Ejemplo El ejemplo permite al usuario tres intentos de introducir la password correcta. Si el usuario introduce la password correcta, se visualiza una lista de temas. El usuario entonces selecciona uno o más temas para hacerlos visibles cuando se abra la vista. Después, el script finaliza usando el estamento Return. Si el usuario falla al introducir la password correcta en tres intentos, el programa notifica al usuario que la password es incorrecta y se cierra el proyecto. Ejercicio 7: Ramificaciones y Bucles Paso 1 Iniciar ArcView y abrir un proyecto. Paso 2 Crear y visualizar una lista de temas. Paso 3 Uso de listas para diseñar un formato de entrada de datos de clientes. Paso4 opcional Uso de un estamento If Then para chequear los temas activos. Paso 5 Uso de un estamento For Each para conmutar la visibilidad de un tema. Ejercicio 7: Ramificaciones y Bucles En este ejercicio, se podrán practicar las ramificaciones y bucles usando listas, los estamentos If Then y el estamento For Each. Paso 1 Iniciar ArcView y abrir un proyecto. Es necesario iniciar ArcView. Desde el menú Archivo (File), elija Abrir Proyecto (Open Project). Moverse al directorio ejercicio. Hacer doble clic en ex7.apr para abrir el proyecto para este ejercicio. Cuando el proyecto se abra, se verá la ventana de proyecto con el script del ejercicio 7, paso 2 y abierta la vista Atlanta. Paso 2 Crear y visualizar una lista de temas Escribirá un script para visualizar una lista de temas en una caja de mensaje, permite al usuario elegir un tema y hacer un informe del tema seleccionado. En el ejercicio 7, paso 2, cree una variable llamada TheView enviando a application (aplicación) equerimiento GetActiveDoc. Después, cree una lista de temas llamada theThemeList enviando el requerimiento GetThemes a theView (la vista). Cree una variable llamada theTheme enviando a una MsgBox el requerimiento Choice para visualizar theThemeList. El mensaje es Seleccione un tema. El título sobre la caja de mensaje debe decir Temas para Atlanta. Para construir este título use “Temas para”++theView.GetName. Envíe a MsgBox el requerimiento Info para visualizar el tema seleccionado por el usuario. Tome el nombre de theTheme enviando el requerimiento GetName (esto también crea la cadena requerida). El título de la caja de mensaje El tema seleccionado Compile y corra el script para testear éste. Cuando acabe, cierre el script. Paso3 Uso de listas para diseñar un formato de entrada de datos de clientes. Escriba un script que pida al usuario el nombre de la compañía, la dirección y número de teléfono y que haga un informe con el número de teléfono. Usará la caja de mensaje MultiInput para crear un formulario con la información de entrada. Use la ayuda par responder a las siguientes cuestiones acerca del requerimiento MultiInput ¿Cuales son los cuatro parámetros? ¿Cual es la clase de cada parámetro? Parámetro 1: Parámetro 2: Parámetro 3: Parámetro 4: Clase: Clase: Clase: Clase: ¿Qué clase objeto devuelve el requerimiento MultiInput? MultiInput incluye dos listas como parámetros. La lista Labels especifica las etiquetas del campo de entrada, y la lista Defaults especifica los valores por defecto para los campos de entrada. En el ejemplo de abajo, las etiquetas de los campos de entrada son Nombre de Compañía, Dirección, y Número de Teléfono. Los valores por defecto para los tres campos de entrada son ESRI, 380 New York Street, y (909) 793-2853. Abra el ejercicio 7, paso 3. Inicie el script creando dos variables lista. una para las etiquetas llamadas theLabels y la otra para los valores por defecto llamada theDefaults. Cree una variable llamada theData enviando el requerimiento MultiInput a MsgBox para que el usuario pueda introducir los datos del Cliente. El título de la caja de ensaje es Lista de Clientes. Use theLabels y theDefaults como los últimos dos parámetros. Después extraerá y hará un informe con el número de teléfono y nombre de la compañía a partir de la lista devuelta Cree una caja de mensaje Info. Para el mensaje, tome el número de teléfono enviando a theData el requerimiento Get con número de índice(2). Para el título, tome el nombre de la compañía enviando a theData el requerimiento Get con número de índice (0). Compile y corra el script. Mientras está introduciendo los datos en la caja MultiInput, use la tecla <Tab> para moverse entre las cajas de entrada. Cuando acabe, cierre el script. Paso4 Uso de un estamento If Then para chequear los temas activos. En este paso, usará ele estamento If Then para chequear si una vista tiene algún tema activo y presentar una caja de aviso si fuera necesario. Abra el script del Ejercicio7, paso4. o Cree una variable llamada theView enviando a application (aplicación) el requerimiento GetActiveDoc. Cree una variable llamada theThemes enviando a theView el requerimiento GetActiveThemes. Inicie un estamento If Then. Para la condición, primero cuente cuántos temas hay en theThemes enviando el requerimiento Count. Después testee si el contador es menor que uno. Si el contador es menor que uno, envíe una caja de mensaje de aviso (Warning) al usuario, con el mensaje Al menos debe activarse un tema, y sin título. Use Exit para finalizar el script Si no ( si hay al menos un tema activo) envíe una caja de mensaje de elección (Choice ) al usuario que visualice la lista theThemes. Para el mensaje, escriba Seleccione un tema para editar. Finalice el estamento if Then Compile el script. Haga al menos un tema activo y corra el script. Córralo de nuevo sin temas activos. Cuando acabe, cierre el script. Paso 5 Uso de un estamento For Each para conmutar la visibilidad de un tema. Escriba un script que conmute la visibilidad de todos los temas en una vista. Inicie el script tomando la vista actual y creando una lista de los temas de la vista. Abra el script Ejercicio 7 , paso 5 Cree una variable llamada theView enviando a application (aplicación) el requerimiento GetProject. después el requerimiento FindDoc para encontrar la vista Atlanta. Cree una variable llamada theThemes enviando a theView el requerimiento GetThemes. Después, use el estamento For Each para conmutar la visibilidad de todos los temas en la vista. Si el tema está visible, que lo ponga invisible. Si el tema está invisible, que lo ponga visible. Escriba el bucle For Each usando cada t (tema) en la lista TheThemes. Dentro del bucle, cree una variable llamada vis enviando a cada t (tema) el requerimiento IsVisible. Cambie la visibilidad de cada t (tema) con el requerimiento SetVisible. Para el parámetro, use la variable vis y cambie el valor booleano con el requerimiento Not. Finalice el bucle For Each Compile y corra el script para testear éste. Cierre el script cuando acabe. End S E C C I Ó N 8 8. Trabajo con temas y leyendas Trabajo con temas y leyendas 8-2 La clase Theme (tema) Temas de entidades Añadir un temas a una vista Ajustar la simbología de un tema Cambiar la simbología de un tema Clasificar la leyenda de un tema Ordenar temas en la TOC 8-4 8-6 8-8 8-10 8-12 8-14 8-16 Ejercicio 8: Creación de temas nuevos 8-19 Trabajo con temas y leyendas Creación de temas Ajustar simbología de temas Crear clasificaciones de leyenda de temas Trabajo con temas y leyendas En esta sección se aprenderá a crear un temas a partir de las diferentes fuentes de datos y cómo establecer la simbología de un tema y clasificaciones de leyenda usando el código de Avenue. Ejemplos: Cuando se añade un tema nuevo a una vista, ArcView le asigna un color arbitrario. Con Avenue se puede añadir una tema a una vista y controlar su color y clasificación. ArcView coloca los temas nuevos al principio de la Tabla de Contenidos (TOC). Esto puede ser un problema si el tema nuevo es un tema de polígonos, imágenes o rejilla(grid), debido a que estos puede tapar a los otros temas. Usando Avenue, se puede controlar el orden de los nuevos temas, ordenándolos al final de la Tabla de Contenidos. La clase Tema Una vista está compuesta desde ninguno hasta muchos temas. Un tema representa una fuente de datos sencilla. Usar ScrName para definir la fuente de datos de un tema. Existen cuatro clases de temas. Cada tema en una vista representa una fuente de datos espacial. La clase Tema permite visualizar una variedad de temas reunidos en una sola vista. Cada tema tiene un ScrName asociado que define su fuente de datos. Temas de Entidad Los temas de entidad o Fthemes, soportan fuentes de datos de entidades tales como shapefiles, coberturas, capas de librería o bases de datos ArcStorm. Temas de Imágenes Los temas de Imágenes o Ithemes, soportan fuentes de datos de imágenes. Un Itheme puede crearse desde cualquier fichero de imágenes que reconozca ArcView. Temas de Bases de Datos Los temas de Bases de Datos o DBThemes soportan fuentes de datos SDE (Turbina de Base de Datos Espacial). Temas de Rejilla Los temas de rejilla o Gthemes soportan las fuentes de datos raster que se pueden usar con la extensión de Análisis Espacial de ArcView. Temas de Entidades Cada tema de entidades (FTheme) está asociado con una tabla y con una leyenda. Cada leyenda está compuesta de uno o muchos símbolos y clases. Cada tabla de entidades (FTab) tiene desde ninguno a muchos campos. Temas de Entidades Los temas de Entidades a los que nos referimos como FThemes, soportan operaciones sobre un tema tales como cambiar su simbología y clasificación en la leyenda. La leyenda de un tema es un conjunto de símbolos y clases. Una tabla de entidades a la que nos referimos como FTab está asociada con cada Ftheme. Los campos en la Ftab proporcionan los datos para clasificar temas de entidades. Añadir un tema a una vista Crear un nombre de fuente de datos desde una cobertura: dataSrc = SrcName.Make (“c:\avdata\streets line”) desde un shapefile: dataSrc = SrcName.Make (“c:\avdata\streets.shp”) Crear el tema theTheme = Theme.Make(dataSrc) Añadir el tema a una vista theView = av.GetProject.FindDoc(“Redlands”) theView.AddTheme(theTheme) Añadir un tema a una vista Se puede crear un SrcName enviando el requerimiento Make y especificando una fuente de datos como una cadena de path que identifique la localización de los datos. Cuando se usen coberturas de ARC/INFO como fuente de datos, se requiere junto con la cadena del path, un tipo de entidad (polígono, línea, punto, etc). El SrcName se usa para crear un nuevo tema enviando el requerimiento Make a la clase Tema. Añade un nuevo tema a la vista, pero previamente buscando la vista y después enviando a ésta el requerimiento AddTheme con el nuevo tema como parámetro. Crear un tema a partir de una fuente de datos x, y El ScrName puede crearse desde una tabla que contenga coordenadas x,y. El ejemplo demuestra cómo se crea una ScrName desde una tabla en el proyecto actual y se usa para crear un tema. theVTab = av.GetProject.FindDoc ( “coords.txt” ).GetVTab xField = theVTab.FindField ( “xcoord” ) yField = theVTab.FindField ( “ycoord” ) theXYScr = XYName.Make( TheVtab, xField,yField ) newTheme = Theme.Make( theXYSrc ) theView = av.GetProject.FindDoc( “Redlands” ) theView = AddTheme( newTheme ) Ajustar la simbología de un tema Toma una lista de símbolos de leyenda theLegend = theTheme.GetLegend theLegendSyms = theLegend.GetSymbols Toma la Ventana de Símbolos y la Paleta de Colores thePalette = av.GetSymbolsWin.GetPalette theColors = thePalette.GetList (#PALETTE_LIST_COLOR) Asigna el color del símbolo firstSym = theLegendSyms.Get(0) firstSym.SetColor (theColors.Get(4)) Redibuja la leyenda y activa el tema theTheme.InvalidateLegend theTheme.SetVisible (true) Ajustar la simbología de un tema Después de añadir un tema a una vista, se puede controlar su simbología cambiando la leyenda del tema. Empiece tomando la leyenda del temas desde thetheme con el requerimiento GetLegend. Después, tome la lista de símbolos en la leyenda con el requerimiento GetSymbols. En el ejemplo anterior, hay solo un símbolo en la lista Ventana de símbolos y paleta Cada aplicación de ArcView tiene una ventana de símbolos a través de la que se accede a una paleta que contiene símbolos. Envíe el requerimiento GetsymbolWin a la aplicación y después use el requerimiento GetPalette para recuperar la paleta. Con la paleta, use GetList con una enumeración que especifique qué lista de símbolos desea. En el ejemplo anterior, lista de colores desde la paleta de color se especifica con #PALETTE_LIST_COLOR. Símbolo Use el requerimiento Get con el número de índice para tomar un símbolo desde la lista de símbolos. Cada símbolo tiene asociado un color. Para asignar el color, envíe al símbolo el requerimiento SetColor. El requerimiento SetColor precisa un color como parámetro. Use el requerimiento Get con la lista de colores para tomar un color. Redibujar la leyenda Después de cambiar los símbolos en una leyenda, la leyenda debe redibujarse en la tabla de contenidos (TOC). Use el requerimiento InvalidateLegend sobre el tema para redibujar su leyenda. El término invalidate se refiere a la necesidad de refrescar una ventana que no visualiza la información actual (p.e. símbolos). Cambiar la simbología de un tema Tomar el símbolo y reasignar su color y tamaño theSyms = theLegend.GetSymbols theSyms.get(0).SetColor( theColors.Get(6)) theSyms.get(0).SetSize(2) Redibujar el tema y su leyenda con un nuevo símbolo theTheme.UpdateLegend Cambiar la simbología de un tema Cuando se cambia la simbología de una tema ya visualizado en la vista, se deben redibujar ambos, la leyenda y el tema. Actualizar el mapa con los cambios en la leyenda Use el requerimiento UpdateLegend después de cambiar la simbología de un tema. El requerimiento UpdateLegend actualiza la visualización del mapa y la leyenda de un tema en la TOC para que se corresponda con los nuevos símbolos. Salvar y grabar leyendas Las leyendas deben salvarse en un fichero de leyenda (.avl), y cargar éste en el nuevo tema. Ésta es una forma para mantener la integridad de las leyendas de temas en las vistas, composiciones y proyectos. ‘Salvar una leyenda theLegend.Save (“streets.avl”.AsFileName) ‘Cargar una leyenda para un nuevo tema theLegend.SetFieldNames ({myTheme.GetFTab.FindFIeld(“st_code”)}) theLegend.Load (“streets.avl”.AsFileName, #LEGEND_LOADTYPE_ALL) Clasificar la leyenda de un tema Asigna el tipo de leyenda del tema theTheme = theView.FindTheme(“Nwtracts”) theLegend = theTheme.GetLegend theLegend.SetLegendType(#LEGEND_TYPE_COLOR) Elige un método de clasificación y número de clases theLegend.Interval(theTheme,”Med_hh_in”,4) Redibuja el tema y su leyenda theLegend.UpdateLegend Clasificar la leyenda de un tema Los temas se clasifican en base a un atributo en su tabla de temas. Dicho atributo se identifica por una cadena que referencia al nombre del campo. Ver sección 9. Creación y consulta de tablas, para ver más información sobre tablas de entidades. Métodos de clasificación Hay 5 métodos de clasificación de leyendas: Intervalos iguales, Cuantiles, Áreas iguales , Desviación Standard, Rupturas naturales y Único. Envíe a la leyenda uno de los requerimientos, Interval, Quantile, Area, StdDev, Natural o Unique para llevar a cabo el método. Use el objeto Tema, una cadena (el nombre del campo a clasificar), y el número de clases (si el número de clases no es único) como parámetros Colores gamados En el ejemplo anterior, se usa el requerimiento Interval para crear cuatro clases. El símbolo para cada clase se selecciona arbitrariamente. Si se tienen más de dos clases, se puede crear una gama de color y luego usarla con el requerimiento RampColors sobre theSymbolist de theLegend (Leyenda). Los parámetros de este requerimiento son los colores inicial y final de la gama. Use el requerimiento después de un requerimiento de clasificación, y antes de el requerimiento de actualizar la leyenda. ‘ ejemplo de gama de color theLegend.Quantile(theTheme,aFieldName,numClasses) theLegend.GetSymbols.RampColors(theColors.Get(3),theColors.Get(7)) theTheme.UpdateLegend Tipos de leyenda El tipo de leyenda debe asignarse antes de cambiar el color y número de clases. Los tipos de leyenda son: Single - leyenda de símbolos sencilla Color - leyenda de color graduada Symbol - leyenda de símbolos graduada Unique - leyenda de valor único Dot - leyenda de densidad de punto Chart - leyenda de gráfico Ordenar temas en la TOC Toma la vista y la lista de temas theView = av.GetActiveDoc theThemeList = theView.GetThemes Ordena el primer tema al final theTheme= theThemeList.Get(0) theThemeList .Shuffle(theTheme,theThemeLIst.Count) Redibuja todas las leyendas de los temas en la TOC theView .InvalidateTOC(nil) Ordenar temas en la TOC Los temas se dibujan en orden sobre la pantalla de visualización desde abajo de la TOC hasta arriba. Los temas de polígono o imágenes (que son con frecuencia colores de relleno sólidos) pueden cubrir a otros temas si se colocan en la cabeza de la TOC. Se puede mover un tema desde una posición de la TOC a otra usando el requerimiento Shuffle sobre la lista de temas. Con el requerimiento Shuffle, se especifica el tema que se va a mover y su nueva posición. Para definir la nueva posición al final de la TOC, use el requerimiento Count sobre la lista de temas. Invalidación de la TOC Después de alterar el orden de un tema, use el requerimiento InvalidateTOC y muestre el nuevo posicionamiento. El parámetro Nil provoca que se redibujen todos los temas en la TOC. Si se especifica un tema como parámetro, entonces el tema y cualquier tema superior en la TOC se redibujan. Esto es lo que le diferencia del requerimiento InvalidateLegend, que trabaja sólo con la leyenda del tema especificado. Ejercicio 8: Creación de nuevos temas Paso 1 Iniciar ArcView y abrir un proyecto. Paso 2 Crear un tema desde una fuente de datos shapefile. Paso3 Clasificar un tema. Paso4 Cambiar los símbolos para las clases. Paso 5 (opcional) Alterar un tema en al TOC. Ejercicio 8: Creación de nuevos temas En este ejercicio se podrá añadir un tema llamado Census Tracts a la vista Atlanta usando un fichero shapefile llamado tracts.shp. Se clasificará su leyenda y alterará su posición en la TOC. Paso 1 Iniciar ArcView y abrir un proyecto. Es necesario iniciar ArcView.Desde el menú Archivo(File), elija Abrir Proyecto (Open Project). Muévase al directorio ejercicio. Hacer doble clic en ex8.apr para abrir el proyecto para este ejercicio. Cuando el proyecto se abra, se verá la ventana de proyecto y la vista Atlanta que contiene los temas County y Banks. Paso 2 Crear un tema desde una fuente de datos shapefile En este paso, se añadirá un tema llamado Census Tracts a la vista Atlanta usando un shapefile llamado tracts.shp. Desde la ventana de proyecto, abra el script Ejercicio8, Paso2. La línea de código que busca la vista Atlanta ya está en el script. Cree una variable llamada shapeSrc enviando a la clase SrcName el requerimiento Make. Como parámetro, use la cadena para el shapefile $AVETRAIN/data/tracts.shp Ahora cree una variable llamada theTheme para enviar a la clase Tema el requerimiento Make. Use ShapeSrc como parámetro. Después, añada el tema a la vista y nombre éste. Para añadir el tema a la vista, envíe a theView el requerimiento AddTheme con theTheme como parámetro. Envíe a theTheme el requerimiento SetName y nombre el tema con la cadena Census Tracts. Compile y corra el script. En la vista aparecerá un nuevo tema llamado CensusTracts. Cuando acabe, cierre el script. Paso3 Clasificar un tema. Ahora creará una clasificación por cuantiles de la leyenda del tema Census Tracts en base a la renta familiar media. Desde la ventana de proyecto, abra el script Ejercicio8, paso3. El código en el script busca la vista Atlanta y el tema Census Tracts. Tome al leyenda del tema creando una variable llamada theLegend y envíe a theTheme el requerimiento GetLegend. Después, asigne el tipo de leyenda para el tema Envíe a theLegend el requerimiento SetLegendType y use como parámetroel enumerador #LEGEND_TYPE_COLOR.(esto crea una leyenda de color gradual) Ahora use el tema y el nombre del campo para clasificar la leyenda Envíe a theLegend el requerimiento Quantile par crear una clasificación por cuantiles con theTheme, “Med_hh_in”, y 5 clases. Redibuje la leyenda y el tema con la nueva simbología y la nueva clasificación. Refresque el tema en la vista con el requerimiento UpdateLegend. Compile y corra el script. El tema Census Tracts se reclasifica con la clasificación por cuantiles. Paso4 Cambiar los símbolos para las clases. En este paso, cambiará los símbolos de las 5 clases, para que la gama vaya de verde claro a oscuro. Desde la ventana de proyecto, abra el script Ejercicio8, paso4. Dese cuenta de que las líneas de código en el script ya buscan la vista Atlanta y el tema Census Tracts. Tome la leyenda del tema creando un variable llamada theLegend, y envía a theTheme el requerimiento GetLegend. Tome una lista de los símbolos, llamada theSymList, enviando a theLegend el requerimiento GetSymbols. Para almacenar la lista de colores de la paleta de color, cree una variable llamadatheColors. Envía a la aplicación el requerimiento GetWin, después el requerimiento GetPalette, y finalmente el requerimiento GetList con enumeración #PALETTE_LIST_COLOR como parámetro. Después creará un bucle para procesar las cinco clases. Conseguirá cada símbolo desde la lista símbolos por el número de índice. Cree un bucle For Each usando symIndex para cada número en el intervalo 0 ..4 Cree una variable currSym enviando a theSymList el requerimiento Get con el parámetro symIndex. Los colores del verde claro al verde oscuro tienen índices del 13 al 17 . Cree aNewColor enviando a theColors el requerimiento Get con symIndex + 13 como parámetro. Para asignar le nuevo color al símbolo, envíe a currSym el requerimiento SetColor con newColor. Finalice el bucle For Each Redibuje la leyenda y el tema, reflejando la nueva leyenda, enviando a theTheme el requerimiento UpdateLegend. Para encender el tema, envíe a theTheme el requerimiento SetVisible con true Compile y corra el script. Verá que la leyenda del tema Census Tracts cambia al rango de símbolos verde claro a verde oscuro. Paso 5 (opcional) Alterar un tema en al TOC. El tema Census Tracts está cubriendo el tema Banks. Habrá que mover el tema Census Tracts al final de la TOC. Entonces, éste se dibujará primero y el tema Banks después. Empiece abriendo el script Ejercicio8, Paso5. Dese cuenta de que da inicio script. La primera línea de código encuentra la vista Atlanta. Después, cree una variable llamada theThemeList enviando a theView el requerimiento GetThemes. Tome el primer tema (Census Tracts) en la variable llamada theTheme enviando a theThemeList el requerimiento Get con índice 0. Para tomar la última posición en la TOC, asigne una variable llamada lastPos y envíe a theThemeList el requerimiento Count. Para mover el tema Census Tracts a la posición final, envíe el requerimiento Shuffle a theThemeList. Los parámetros de el requerimiento Shuffle son theTheme y su nueva localización, lastPos. Para redibujar en la TOC, envía a theView el requerimiento InvalidateTOC con el parámetro Nil. Para redibujar todos los temas, envíe a theView el requerimiento Invalidate. Compile y corra el script End 10. Creación de shapes y gráficos Creación de shapes y gráficos 10-2 Comprensión del display Uso de shapes Creación y dibujo de shapes Cómo están asociados gráficos y shapes Creación y visualización de un gráfico Cambio de la simbología de un gráfico Localización y movimiento de un gráfico Asociación de gráficos a un tema 10-4 10-6 10-8 10-10 10-12 10-14 10-16 10-18 Uso de shapes para seleccionar entidades de un tema 10-20 Añadir entidades a un tema de shapes 10-22 Ejercicio 10 : Creación de shapes y gráficos 10-25 Creación de shapes y gráficos Visualización y uso de shapes y gráficos en vistas Asignación de simbología Animación de gráficos Asociación de gráficos con temas Adición de entidades a tema Creación de shapes y gráficos En esta sección, se aprenderá a crear shapes y gráficos y a visualizar estos en una vista. Las shapes y los gráficos tienen una asociación especial: se ha de tener una shape para construir un gráfico. A pesar de que tienen cosas en común, tienen importantes diferencias que afectan a la forma en que se usan. El interfaz de usuario del SIG ArcView permite usar shapes y gráficos para muchos propósitos: para esbozar áreas de interés, para seleccionar temas, para añadir nuevas entidades, y para cambiar simbología de gráficos. Se aprenderá a llevar a cabo estas operaciones usando scripts de Avenue. Comprensión del Display Los gráficos se dibujan en el área de visualización (display) Las vistas tienen un área de pantalla gráfica. theMapDisplay = theView.GetDisplay theGraphicList = theView.GetGraphics Mapdisplay Prj View TOC Graphiclist Comprensión del Display Una vista se compone de la visualización de un mapa, una lista gráfica, y de cero, uno o muchos temas. Algunos o todos los gráfico de la lista gráfica pueden asociarse a un tema. Visualización de un mapa La visualización de un mapa utiliza el área de la vista donde los temas y los gráficos se dibujan en la pantalla. El usuario interactúa con el display para hacer una vista panorámica, un zoom o dibujar. Se puede tomar el área de visualización enviando a la vista erequerimiento GetDisplay. Lista Gráfica Una vista tiene una Lista Gráfica asociada que maneja la colección de gráficos en la vista. Se puede crear, modificar, y mover gráficos. Use el requerimiento GetGraphics con una vista para crear su lista gráfica. Una composición tiene una lista gráfica, que funciona como la lista de gráficos de la vista. Si se envía el requerimiento GetGraphics a un tema. Se puede crear un conjunto de gráficos del tema (GraphicSet). Los gráficos del tema se explican más tarde en esta sección. Uso de shapes Uso de shapes para crear gráficos, seleccionar entidades y crear entidades. Uso de shapes Las shapes son los bloques de construcción básicos usados para representar las entidades geográficas del mundo real. Por ejemplo, las shapes pueden representar áreas comerciales, áreas de mercado, líneas de potencia o localizaciones especiales peligrosas. Use shapes para crear gráficos en una vista o composición, seleccionar entidades de un tema o crear entidades en un tema. Clase de shapes Las subclases de shapes son círculo, línea, punto múltiple, punto y rectángulo. Cada subclase define la shape geométrica específica. Toda la geometría de las shapes es plana ( no esférica). Creación y dibujo de una shape Toma el Display theDisplay = theView.GetDisplay Crea una shape a partir de coordenadas conocidas theCircle = Circle.Make (250000@200000,2640) desde localización del ratón theCircle = theDisplay.ReturnUserCircle Dibuja una shape theDisplay.BeginClip theDisplay.DrawnCircle(theCircle,theSymbol) theDisplay.EndClip Creación y dibujo de una shape Se puede crear una shape a partir de coordenadas conocidas y medidas o por entrada desde ratón. Después de crear una shape, debe dibujarse en el display. Las shapes se almacenan en la Lista Gráfica; así, desaparecen cuando se cierra la vista, y no pueden seleccionarse moverse o alterarse. Creación de una desde a partir de coordenadas conocidas Una shape de punto es la shape básica más sencilla. Para crear una shape puntual, use el requerimiento Make sobre la case Point. Use el operador crear un punto desde un valor x,y aPoint = Point.Make (155, 385) aPoint = 155@385 Use el formato de punto básico par construir shapes más complicadas aLine = Line.Make (40@40, 40@100) ‘ dos puntos aCircle = Circle.Make( aPoint,400) ‘ radio = 400 Creación de una shape a partir de localizaciones de ratón Se pueden crear shapes desde localizaciones de ratón definidas por el usuario usando requerimientos que comiencen con ReturnUser.Use dichos requerimientos sólo con un script que se aplique a Herramientas thePoint = theDisplay.ReturnUserPoint theLine = theDisplay.ReturnUSerPoint theCircle = theDisplay.ReturnUserCircle Dibujo de una shape en el Display Dibuje una shape en el display usando el requerimiento Draw apropiado. Use el requerimiento BeginCLip antes del Draw y el requerimiento EndClip después de éste. Éste dice al display que dibuje sólo en el área cubierta por la shape @para Resalto de shapes El requerimiento FlashShape envía una shape sobre el display, usando un símbolo durante un tiempo determinado y número de veces especificado aShape = Circle.Make(3@3,2) aSymbol.Make(#SYMBOL_FILL) theDisplay.FlashShape (aShape,aSymbol, 10,10) Cómo están asociados las shapes y los gráficos Cree una shape Cree una shape gráfica a partir de una shape Almacene la shape gráfica en la Lista Gráfica Visualice los gráficos en la vista Graphic Symbol GraphicGroup GraphicShape Shape Oval Line Rect Point Circle Multipoint Polyline Polygon Cómo están asociados las shapes y los gráficos Para crear un gráfico en la vista, se debe comenzar creando la definición matemática geometría plana), llamada shape. Una ShapeGráfica se crea a partir de una shape y se almacena más tarde en una lista Gráfica. La Lista Gráfica visualiza los gráficos en al vista ( o composición) Clases de shapes La clase Shape tiene muchas subclases. Las siguientes son clases de shapes: Circle(Círculo), Line(Línea2 puntos), Multipoint (grupo de puntos), Oval(Óvalo), Point(Punto) y Rect(Rectángulo). Polyline es una subclase de Multipoint y Polygon una subclase de PolyLine. Dichas shapes pueden construirse usando el requerimiento Make con los parámetros de medida y coordenadas apropiados. Creación y visualización de un gráfico Crea una Shape Gráfica desde una shape theGraphicCircle = GraphicShape.Make (theCIrcle) Añade la Shape Gráfica a la Lista Gráfica theGraphicList = theVIew.GetGraphics theGraphicLIst.Add (theGraphicCircle) Creación y visualización de un gráfico Las shapes gráficas (GraphicShapes)se crean a partir de shapes. Se debe crear primero una definición matemática de una shape y después crearla. Para convertir una shape en una shape gráfica se usa el requerimiento Make con la shape definida, sobre la clase GraphicShape. Se puede añadir la GraphicShape a la lista de gráficos de una vista (o composición). Una vez que se tienen la lista de gráficos del documento, use el requerimiento Add con la GraphicShape como parámetro. Debido a que las shapes gráficas se asocian con la lista de gráficos, la shape gráfica se dibuja inmediatamente sobre el documento, y todas las shapes gráficas se redibujan cuando se abre el documento o actualiza. Cambio de la simbología de un gráfico Asigna un relleno theGraphicCircle = SetSymbol (Vectorfill.Make) Toma el símbolo gráfico y cambie sus propiedades theSym = theGraphicCircle.GetSymbol theSym.SetStyle(#VECTORFILL_STYLE_HATCH) theSym.SetAngle(45) theSym.SetOLWidth (3) theSym.SetOLColor (Color.GetRed) Redibuja el gráfico con su nueva simbología theGraphicCircle.Invalidate Cambio de la smbología de un gráfico Una shape gráfica tiene un símbolo asociado con propiedades que se pueden cambiar. El requerimiento GetSymbol devuelve un símbolo gráfico. Sus propiedades son el tipo, el tamaño en puntos, y el color (background, foreground y outline) Patterns de relleno Los patterns de relleno tienen tres variantes: VectorFill, RasterFill y CompositeFill (símbolo de relleno con múltiples capas). Se puede crear cualquier tipo de símbolo usando el requerimiento Make sobre la clase apropiada. Use el requerimiento SetStyle con la enumeración VectorFillStyleEnum o RasterFillStyleEnum para asignar el estilo al nuevo símbolo. Consulte la ayuda para consultar la lista completa de estilos. El siguiente ejemplo asigna un relleno verde sólido a un símbolo: theSym = RasterFill.Make theSym.SetStyle (#RASTERFILL_STYLE_SOLID) theSym.SetColor(Color.GetGreen) theGraphicCircle.SetSymbol (theSym) Redibujo del gráfico Después de cambiar el símbolo gráfico, debe redibujarlo. El requerimiento Invalidate enviado a un gráfico redibuja el gráfico con su nueva simbología. Sólo se redibujará el área cubierta por el gráfico, no el display completo. Localización y movimiento de un gráfico. Devuelve el punto origen location = theCar.GetOrigin Mueve y redibuja el gráfico theCar.Invalidate theCar.SetOrigin(aNewPoint) theCar.Invalidate ‘ Borra de la posición antigua ‘ Mueve ‘ Redibuja a la nueva posición Cambio de la sismología de un gráfico Se puede localizar un gráfico y mover éste desde una posición a otra. Cuando se mueve un gráfico, se debe redibujar la pantalla para reflejar la nueva posición del gráfico. Se puede localizar la posición actual de el gráfico con el requerimiento GetOrigin. La posición devuelta es la coordenada abajo-izquierda de el gráfico. Movimiento del gráfico Para crear apariencia de movimiento, el gráfico debe borrarse de su posición original y después redibujarse en su nueva posición. Para hacer eso, use el requerimiento Invalidate dos veces: una antes de asignar la posición inicial, y otra después de asignarla. La nueva posición se asigna usando el requerimiento SetOrigin. SIG en tiempo real Las aplicaciones en tiempo real necesitan mover gráficos o cambiar simbología, cambios en coordenadas o en atributos. Se puede escribir un script para leer coordenadas o valores de atributos a intervalos de tiempo (p.e. cada minuto) usando el requerimiento DelayedRun. Se puede usar la Comunicación Entre Aplicaciones (IAC) si se usa otro software para proporcionar coordenadas o atributos. Para más información acerca de IAC, ver apéndice B, Comunicación con otros software. Creación de simbología de punto Los símbolos puntuales se crean usando una BasicMarker con el requerimiento Make. Los estilos disponibles se definen por un BasicMarkerStyleEnum . Ver la ayuda para ver una lista completa de estilos. En el ejemplo, car (almacenado en formato Raster de Sun) fue convertido en un símbolo con el siguiente código. thePointSym = BasicMarker.Make thePointSym.SetSyle (#BASICMARKER_STYLE_ICON) theIcon =Icon.Make ( “c:\temp\car.rs”.AsFileName) thePointSym.SetIcon (theIcon) Invalidate Invalidate sobre un gráfico redibuja la porción del display ocupada por el gráfico. Asociación de gráficos a un tema. Toma la lista de gráficos de la vista theViewGraphics = theVIew.GetGraphics Mergea la lista de gráficos de la vista con el conjunto de gráficos del tema theTheme.GetGraphics.Merge (theVIewGraphics) Apariencia con el tema encendido Apariencia con el tema apagado Gráficos asociados Gráficos no asociados Localización y movimiento de un gráfico. Una colección de gráficos puede ser asociada a un tema en particular. Asociando gráficos a un tema, se les puede hacer dependientes de la escala y con la visibilidad del tema. La Lista Gráfica (GraphicShape) es una colección de gráficos asociados con el área del display de la vista. Un conjunto gráfico (GraphicSet) es una colección de gráficos asociados con un tema. (p.e. añadido a un GraphicSet existente o creando uno nuevo) usando el requerimiento Merge. Uso de shapes para seleccionar entidades de tema Selección entidades con gráficos seleccionados theGraphics = theView.GetGraphics.GetSelected theShapeList = {} for each g in theGraphics theShapeList. Add (g.GetShape) end theTheme.SelectByShapes (theShapeList, #VTAB_SELTYPE_NEW) Selecciona entidades con una shape sencilla definida por el usuario theRectangle = theView.ReturnUserRect theTheme. Select ByRect (theRectangle, #VTAB_SELTYPE_NEW)) Uso de shapes para seleccionar entidades de tema Para seleccionar entidades desde un tema, se pueden usar gráficos seleccionados desde la GraphicList o usar una shape sencilla definida por el usuario. En cada caso, la selección se hace con la shape ( p.e. con la definición matemática, no con el gráfico) Selección de entidades a partir de gráficos seleccionados Se pueden usar GraphicShapes de una GraphicList para seleccionar entidades de un tema que intersecten. Use el requerimiento GetSelected sobre la lista gráfica para devolver sólo los shapes gráficas seleccionadas. Para cada shape gráfica en la lista, debe encontrar su shape usando el requerimiento GetShape. Cuando se vaya tomando cada shape, se añade a las lista con el requerimiento Add. Use el requerimiento Select ByShapes para encontrar todas las entidades en el tema activo que intersecta las shapes. Selección de entidades a partir de una shape definida por el usuario Si se tiene una shape que no forma parte de la GraphicList, al igual que haría usando cualquiera de los requerimientos UserReturn, use el requerimiento que empieza con SelectBy y añada la shape apropiada. Por ejemplo, use el requerimiento SelectByRect con el requerimiento ReturnUserRect. #VTAB_SELTYPE_NEW es un tipo de selección que sustituye la selección existente por una nueva (New Set en Query Builder) Determinación de si hay o no vecindad Antes de llevar a cabo la selección, puede determinar si hay relación de vecindad entre dos shapes. Contains(contiene), Intersects(Intersecta) y IsWithin (está a una distancia de) son ejemplos de requerimientos que se deben usar para eso. Dichos requerimientos devuelven un valor booleano que define si hay o no vecindad. stat1 = aShape.Contains(anotherShape) stat2= aShape.Intersects(anotherShape) stat3 = aShape.IsWithin(anotherShape,300) Adición de entidades a un tema de shapes Cada tabla de entidades del tema tiene una campo Shape. Añade nuevas shapes al tema editable pt= Point.Make (720000,390000) shapeField = theFTab.FindField ( “shape” ) rec = theFTab.AddRecord theFTab.SetValue ( shapeField, rec , pt ) Adición de entidades a un tema de shapes Se pueden añadir nuevas entidades a cualquier tema editable (p.e. a una tema creado a partir de un fichero de shapes).Cada Ftab del tema tiene un campo Shape que almacena la información geométrica asociada con cada registro. Al tiempo que se añaden nuevas entidades al tema, se pretende añadir nuevos registros a la FTab. Adición de nuevas entidades Se puede construir la shape para la nueva entidad usando el requerimiento Make o ReturnUser. Se puede pedir al usuario las coordenadas con MsgBox.Input Trabajo con proyecciones Después de construir la shape, se debe chequear la proyección de la vista para asegurarse de que las coordenadas estén posicionadas con propiedad. Use el requerimiento GetProjection para encontrar la proyección de la vista. Si hay una proyección, se desea que la shape sea devuelta en las unidades de los datos de la fuente (p.e. coordenadas sin proyección). Use el requerimiento ReturnUnprojected sobre la shape para llevar a cabo dicho cálculo. Cuando la shape se coloque sobre la vista, se proyecta junto con todas las otras entidades. Ejemplo thePrj = theVIew.GetProjection thePoint = theDisplay.ReturnUserPoint unPrjPoint = thePoint.ReturnUnprojected (thePrj) MsgBox.Info (thePrj.GetClass.ReturnPrjName + NL + NL + thePoint.AsString + NL+ “Unprojected” ++ unPrjPoint.AsString, “ ” ) Adición de nuevos registros Para construir un nuevo registro para la nueva shape, use la Ftab del tema.Use el requerimiento FIndFIeld para encontrar el campo Shape, y el requerimiento AddRecord para añadir un nuevos registro. Después, use el requerimiento SetValue para asignar el valor del campo Shape a una shape puntual. Nota : el valor no es una cadena, sino la shape actual. Ejercicio 10: Creación de shapes y gráficos Paso 1 Iniciar ArcView y abrir un proyecto. Paso 2 Hacer un informe de las coordenadas X e Y de la shape definida por el usuario Paso3 Creación de un gráfico y cambio de su simbología Paso4 Uso de un gráfico para seleccionar entidades Paso 5 opcional Animar un gráfico. Ejercicio 10: Creación de shapes y gráficos En este ejercicio, se tomarán las coordenadas x e y de una shape, se creará un gráfico y se cambiará su simbología, después se usará éste para seleccionar entidades. El último paso contiene una animación ejemplo de un Sistema de Seguimiento de Vehículos. Paso 1 Iniciar ArcView y abrir un proyecto. Es necesario iniciar ArcView. Desde el menú Archivo (File), elija Open Project. Moverse al directorio del ejercicio. Hacer doble clic en ex10.apr para abrir el proyecto para este ejercicio. Cuando el proyecto se abra, se verá una vista de las calles de Redlands y dos nuevas herramientas en el lado derecho de la barra de herramientas. Uno tiene el icono XY, el otro un círculo. Paso 2 Informe de las coordenadas de una shape definida por un usuario. En este paso, se escribirá un script que devuelve las coordenadas x,y de una shape dibujada por el usuario. Después, asocie el script con un evento Apply de una nueva herramienta. Empiece abriendo el script Ejercicio 10, paso 2. Éste crea theView buscando la vista Redlands. Cree theDisplay enviando a theView el requerimiento GetDisplay. Cree thePoint enviando al theDisplay el requerimiento ReturnUserDisplay. Se devolverán las coordenadas del usuario Visualice los resultados enviando a MsgBox el requerimiento Info. Use ThePoint convertido con el requerimiento AsString y una cadena vacía para los dos parámetros. Compile el script pero no lo testee todavía. Debe primero asociar éste con un control Asocie el script con un control. Responda a las siguientes cuestiones para determinar con qué control y con qué propiedad del Evento se debería asociar el script. ¿Con que evento asociar el script? Apply Click Update ¿Por qué? Qué control ejecutará ese script? Menú Botón Herramienta ¿Por qué? Use al caja de diálogo de personalización (Customize) par visualizar las Herramientas de la vista en el Editor del control. Asocie el script Ejercicio10, paso2 con la propiedad Apply de la herramienta XY. Verifique que el script se ejecuta adecuadamente testeando la herramienta XY. Cuando acabe, cierre todas las ventanas excepto la de la ventana de Proyecto y la vista Redlands. Paso3 Cree un gráfico y cambie su simbología. Cree un círculo basado en un definición del usuario, después altere su simbología antes de visualizarlo. Abra el script Ejercicio 10, Paso3. El script crea theView buscando la vista Redlands. Cree una variable TheDisplay enviando a theView el requerimiento GetDisplay. Defina TheCircle enviando a theDisplay el requerimiento ReturnUserCircle para devolver un círculo cuyo origen y radio los defina el usuario. Cree theGraphicCircle enviando a la clase GraphicShape el requerimiento Make con theCircle como parámetro. Asigne la simbología para el círculo tomando el gráfico la simbología del círculo y cambiando sus propiedades .Cambie el relleno a un pattern rojo sólido y azul el borde. Cree theSymbol enviando a theGraphicCircle el requerimiento GetSymbol Asigne el color a theSymbol con el requerimiento SetColor. Como parámetro, envíe a la clase Color el requerimiento GetRed. Asigne el estilo a theSymbol con el requerimiento SetStyle, y use la enumeración #RASTERFILL_STYLE_SOLID como parámetro. Asigne a theSymbol el color del borde con el requerimiento SetOLColor Asigne a theSymbol el color del borde con el requerimiento SetOLColor, usando la clase Color con el requerimiento GetBlue como parámetro. Añada el círculo definido por el usuario a la lista gráfica de la vista. Cree theGraphicList de theView enviando el requerimiento GetGraphics Después envíe a theGraphicList el requerimiento Add para añadir theGraphicCircle. Compile el script, pero no lo testee todavía. Use la caja de diálogo Customize para visualizar las Herramientas de la Vista en el Editor de Controles. Asocie el script ejercicio 10, paso 3 con la propiedad Apply de la herramienta Círculo. Paso4 Uso de un gráfico para seleccionar entidades. Abra la vista Redlands Parcels. Después abra el script Ejercicio 10, paso4. El script asigna la variable theView con la vista Redlands, y asigna la variable theTheme con el tema Parcels. Inicie el script asegurándose de que Parcels es el único tema activo en la vista. Cree theThemeList enviando a theView el requerimiento GetThemes Use la lista en un estamento For Each para procesar cada thm en theThemeList En el bucle, inactive todos los temas usando el requerimiento SetActive con false como parámetro. Finalice el bucle Active theTheme enviando el requerimiento SetActive con true como parámetro. Ahora, coloque el círculo alrededor del punto central dado por el usuario. Cree theDisplay enviando a theView el requerimiento GetDisplay Construya thePoint enviando a theDisplay el requerimiento ReturnUserPoint para devolver la localización x,y de un punto dado por el usuario Cree theCircle enviando el requerimiento Make para crear una shape matemática con thePoint como centro del círculo y 300 de radio. Cree theGraphicCircle enviando a la clase GraphicShape el requerimiento Make, con el círculo como parámetro. Añada ahora el gráfico a la lista de gráficos y use éste para seleccionar entidades. Cree theGraphicList enviando a theView el requerimiento GetGraphics. Después envíe a theGraphicsList el requerimiento Add para añadir theGraphicCircle. Seleccione las entidades en theTheme usando el requerimiento SelectByShapes. Los parámetros incluyen una lista,{theCircle}, y el enumerador #VTAB_SELTYPE_NEW. Compile el script, después asócielo con la herramienta Círculo usada en el paso 3. Testee la herramienta seleccionando algunos puntos en la vista Redlands Parcels. Se crearán nuevos círculos y se seleccionarán y destacarán las entidades que toquen con ellos. Cuando acabe, cierre todas las ventanas excepto la de Proyecto. Paso 5 opcional Animar un gráfico Las aplicaciones en tiempo real trabajan continuamente con datos cambiantes continuamente. Por ejemplo, para visualizar el movimiento de un vehículo, las coordenadas del objeto deben cambiarse continuamente. En este paso, se correrá algún script existente para crear un Sistema de Seguimiento de Vehículos. Abra la vista Vehicle Tracking System. Tiene un único GUI. El botón Sparky se añadió al lado derecho de la barra de botones. Un script (VTSI) provoca el proceso de seguimiento de vehículos se procesa para empezar, y el otro script (VTS2) lee las coordenadas del vehículo cada segundo y actualiza la posición del gráfico en la vista. El requerimiento av.DelayedRun se usa para leer un script en un intervalo dado. Abra el script VTSI y examine su contenido. Abra la caja de diálogo de personalización (Customize) y asocie el script VTSI con el botón Sparky. Abra y examine el script VTS2. Inicie el sistema de seguimiento simulado haciendo clic en el botón Sparky. End S EC CI O N 11 Trabajo con GUIs de Documentos Trabajo con GUIs de Documentos 11-2 DocGUI Creación de un docGUi para un documento específico Recuperación y modificación de controles del GUI Colocar nuevos controles Añadir un menú Añadir un botón con un menú personal Cambio de la visibilidad de los controles 11-4 11-6 11-8 11-10 11-12 11-14 11-16 Comprensión de los eventos Update Habilitar y deshabilitar controles 11-18 11-20 Ejercicio 11: Cambio del GUI 11-23 Trabajo con GUIs de documentos Construir nuevos GUIs para documentos específicos Usar scripts para modificar el GUI Cambiar el GUI como cambio de condiciones Uso de eventos Update Trabajo con GUIs de documentos Esta sección introduce la case DocGUi y los requerimientos usados con instacias de la clase. Esta clase se usa para construir nuevos GUIs para documentos específicos. Los componentes de los GUIs como barras individuales y controles, pueden modificarse con script de Avenue mejor que a través de la caja de diálogo de Personalización (Customize). Dichos scripts, acompañados de los scripts de eventos Update permiten cambiar el GUI como condiciones en el cambio de la aplicación. El docGUI Un proyecto está asociado con muchos docGUIs Un docGUI está compuesto de una barra de menú, una barra de botones y una barra de herramientas. PopupSet MenuBar DocGUI Project ButtonBar Doc ToolBar El docGUI Un proyecto está asociado con muchos docGUI (p.e. uno para las vistas, otro para las composiciones, etc. Cada docGUI está compuesto por una barra de menús, una de botones y otra de herramientas. Algunos requerimientos devuelven el GUI completo, mientras que otros devuelven las barras ce controles individuales. Use el requerimiento GetGUIs para devolver una lista de todos los GUIs en un proyecto. Este requerimiento es útil para llevar a cabo operaciones globales, como adición del mismo botón a todos los GUIs. Se puede devolver un GUI específico usando el requerimiento FindGUI con el nombre theGUI (p.e. "vista" o "composición".) Se puede también conseguir el GUI activo actual se envía a la aplicación el requerimiento GetActiveGUI. Una vez que se tiene theGUI, se puede devolver uno de esas barras de controles con los requerimientos GetMenuBar, GetButtonBar, GetToolBar. Ejemplos Los requerimientos que devuelven GUIs y conjuntos de controles theGUIs = theProject.GetGUIs theGUI = theProject.FindGUI ("layout") theButtonBar = theGUI.GetButtonBar theToolBar = av.GetActiveGUI.GetToolBar Creación de un docGUI para un documento específico Crear y nombrar un docGUI cityGUI = av.FindGUI ("view").Close cityGUI = av.SetName ("TaxGUI") Añadir el docGUI a un proyecto Personalizar el nuevo GUI Asociar el docGUI con un documento av.GetProject.FindDoc ("City Parcels”. SetGUI("TaxGUI")) Creación de un docGUI para un documento específico En el SIG ArcView, el usuario ve el mismo docGUI para todos los documentos el mismo tipo (p.e. todas las vistas tienen el mismo GUI y todas las tablas tienen el mismo GUI). Con Avenue se puede crear un docGUI único para un documento específico. Por ejemplo, una vista de parcelas de tasas puede tener un docGUI diferente de una vista de redes de transporte en U.S. Crear y nombrar el docGUI Un docGUI nuevo se crea tomando un docGUI existente (p.e. el GUI de la vista) y copiando éste. El requerimiento Clone crea una copia de un docGUi existente. El requerimiento SetName da un nombre a un nuevo docGUI. Para usar este nuevo GUI se debe primero añadir éste al proyecto.Se hace esto, enviando al proyecto el requerimiento AddGUI. Personalizar el nuevo docGUI Después de que el nuevo GUI se ha añadido al proyecto, aparece en la lista Tipo(Type) en la caja de diálogo de Personalización (Customize).Use la caja de diálogo o un script de Avenue par hacer los cambios en el docGUI. Ver sección 1, Entorno de Desarrollo de la Aplicación para más información sobre el uso de esta caja de diálogo. Asociar el docGUI con un documento El GUI se asocia con un documento usando el requerimieto SetGUI. En el ejemplo anterior, TaxGUI está asociado con la vista City Parcels. Otras vistas en en proyecto están asociadas con el GUI original de la vista. Cuando el usuario activa la vista City Parcels se visualiza TaxGUI. Recuperación y modificación de controles GUI Toma el botón thebBar = av.GetProject.FindGUI ("View").GetButtonBar theButton = theBar.FindByScript ("View.ThemeProperties") Cambia las propiedades de los botones y herramientas theButton.SetIcon(Props) theButton.SetTag("Properties") theButton.SetVisible(true) theButton.SetEnabled(true) Cambia las propiedades del menú y opciones de menú. theMenu.SetLabel ("&File") theMenuChoice.SetLabel("Close &All") Recuperación y modificación de controles GUI Antes en el curso, se usó la caja de diálogo de personalización para cambiar las propiedades de los controles. Se pueden llevar a cabo esas operaciones a través de scripts de Avenue. El uso de scripts permite cambiar el GUI como condiciones en el cambio de sesión de ArcView. Todas las propiedades de los controles pueden asignarse con un requerimiento que comience por Set.Con los botones y herramientas, por ejemplo, use el requerimiento SetIcon para añadir un icono. Use SetEnabled para asignar utilidad al control y SetVisible para esconder o mostrar un control. Use SetTag para almacenar una cadena descriptiva con un control y GetTag para recuperarla. Para menús y opciones de menú, use el requerimiento SetLabel para crear una etiqueta Colocar nuevos controles Los controles se referencian por un número de índice Use (-1) par insertar a la izquierda y arriba Colocar nuevos controles Los controles se referencian por un número de índice. Los controles se insertan a la derecha de la posición índice asignada. Esto está de acuerdo con la posición de un nuevo control a la derecha del seleccionado en la caja de diálogo de Personalización. En el ejemplo anterior, si se usa (1) como índice de la barra de menús, se insertará un nuevo menú a la derecha del menú Edit. El índice (1) se usa para insertar el menú u opción de menú en la primera posición. Uso del requerimiento Count Para insertar un nuevo control al principio o final de la barra, se puede usar el requerimiento Count sobre la lista de controles (GetControls)para determinar el número de controles en la barra. Se puede usar también este número para calcular la posición índice. Para más información acerca de los requerimientos usados para manejar listas, ver sección 7, Ramificaciones y Bucles. Cálculo de la posición índice Use el requerimiento Count para identificar la última posición o cualquier otra posición sobre la barra de menús( o cualquier otro punto de controles). menu.Count = theMenuBar.GetControls.Count windowMenuIndex = menuCount-2 Adición de un menú Añade un menú en la primera posición aMenu=av.GetActiveGui.GetMenuBar.New (-1) aMenu.SetLabel("&Print") ' asigna etiqueta al menú Añade opciones de menú choiceList = {"Maps","Charts","Reports"} 'elabora una lista index = -1 for each c in choiceList ' añade una nueva opción theChoiceList = aMenu.New (index) ' etiqueta la opción theChoiceList.SetLabel ("&"+c) ' incrementa el índice index=index+1 end Adición de un menú Se puede añadir un nuevo menú con un script. Es útil cuando se quieren crear menús en base a condiciones actuales del proyecto. Por ejemplo, se podría crear un nuevo menú en base a la vista actual y temas, las entidades seleccionadas o diferentes privilegios de acceso a los datos. Adición de un menú a la barra Se añade un nuevo menú a al barra enviando el requerimiento New a la barra de menú actual. El requerimiento New requiere un parámetro para definir la posición del índice. Adición de opciones de menú Las opciones de menú se añaden enviando el requerimiento New al menú actual. Las opciones de menú se crean desde una lista, donde los elementos en la lista son las etiquetas de las opciones de menú. & se añade a cada elemento para definir una clave de acceso para cada opción. Ver sección 1, Entorno de Desarrollo de ArcView, para más de una etiqueta y clave de acceso. Índice En el ejemplo, en índice empieza por (-1), lo que indica que la primera opción se coloca a la cabeza del menú. Dentro del bucle, el número índice se incrementa para añadir cada opción detrás de la opción previa. Si el número de índice no se incrementa, cada opción de menú podría insertarse en la cabeza y podría aparecer en orden inverso en la muestra. (p.e. Informes en la cabecera, después Gráficos y luego Mapas). Adición de un botón con un icono personal Crear un fichero de gráficos (p.e. dollar.xbm) Añadir un botón newButton = av.GetActiveGUI.GetButtonBar.New (-1) Crear un icono y ponerlo en el botón myIcon = Icon.Make ("dollar.xbm".AsFileName) newButton.SetIcon (myIcon) Adición de un botón con un icono personal Antes de crear el fichero de gráficos, cree un icono con el requerimiento Make. El requerimiento Make necesita un nombre de fichero. Convierta una cadena que contenga el nombre del path del fichero de gráficos en un nombre de fichero usando el requerimiento AsFileName. Use el requerimiento SetIcon con el icono como parámetro para especificar el icono que ha de ser dibujado en la cara del botón. X-Bitmap (*.xbm) MacPaint (*.mcp) WindowsDIb (*.bmp) SunRaster (*.rs) Nexpert Object Image (*.obj) GIF (*.gif) TIFF (*.tif) Tamaño de los iconos Los iconos para los botones son de 20*17 pixeles. Los iconos para las herramientas son de 18*15 pixeles. Iconos del Gestor de Iconos Para seleccionar un icono específico de los disponibles en el Gestor de Iconos (Icon Manager), envíe el requerimiento Get a la lista de icono devuelta por el requerimiento GetIcons sobre el objeto IconMgr. Por ejemplo: IconMgr.GetIcons.Get(20) devuelve el icono de índice 20 Cambio de la visibilidad de los controles Conmutar la visibilidad de cada botón for each b in av.GetActiveGUI.GetButtonBar.GetControls if (b.IsVisible) then b.SetVisible (false) else b.SetVisible(true) end end OR for each b in av.GetActiveGUI.GetButtonBar.GetControls b.SetVisible(b.IsVisible.Not) end Cambiar la visibilidad de la herramienta Edit for each b in av.GetActiveGUI.GetButtonBar.GetControls ttag = t.GetTag t.SetVisible ((ttag = "edit")) and (login= "steve") end Cambio de la visibilidad de los controles Esos ejemplos muestran cómo examinar y cambiar los controles en la barra. Cambiar la visibilidad de los controles sobre el GUI es una forma de limitar las funciones a las que un usuario puede acceder, y de presentar solo aquellas funciones que sean apropiadas en un momento dado. Conmutar la visibilidad de un control Para conmutar la visibilidad de cada control en la barra, se debe primero tener una lista de todos los controles en la barra. Enviar el requerimiento GetControls a la barra de controles para hacer eso. Determinar la visibilidad de cada control, y después invertir dicho ajuste usando el estamento If. Use el requerimiento IsVisible para determinar la visibilidad del control. Use el requerimiento SetVisible para conmutar la propiedad del control de visible(true) a invisible(false). Uso del requerimiento Not Debido a que el requerimiento IsVisible devuelve una respuesta true o false ( p.e. un objeto booleano), se puede usar ésta donde se requiera un valor booleano. En el segundo ejemplo, el requerimiento IsVisible está enlazado con el requerimiento Not, para invertir la visibilidad del botón usando la construcción If Then. Uso de la propiedad Tag Cada control tiene una propiedad Tag que puede almacenar cualquier cadena. Se puede usar la etiqueta para identificar de forma única cada control. Se puede asignar una propiedad tag a un control en la caja de diálogo de Personalización(Customize) o a través de un script, enviando el requerimiento SetTag a el control. Una vez asignada, se puede recuperar usando el requerimiento GetTag. En el ejemplo anterior, en cada iteración del bucle de toma una etiqueta de un control. Si la etiqueta indica que el control es la herramienta Edit, y el usuario ha introducido la password correcta la herramienta se hace visible. Comprensión de los eventos Update Un evento Update tiene lugar cuando se cambia un documento Añade un tema, conmuta la visibilidad del tema, Selecciona entidades de la vista o tabla Pone activo un campo, selecciona un registro. Los scripts Update hacen cambios en el docGUI Habilita o deshabilita controles Visibiliza o Invisibiliza controles Los scripts Update se asignan a las propiedad Update de un control Cualquier control comparte el mismo script Cualquier evento Update todos los scripts Update Comprensión de los eventos Update Cuando se trabaja con ArcView, los GUI cambian en base al estado del documento. Por ejemplo, si se han seleccionado entidades en una vista, se puede usar Zoom para el botón seleccionado; si no está , el botón se deshabilita. Este tipo de cambio en el GUI se hace por un script que es asignado por un evento Update Ejemplos de Eventos Update Un evento Update tiene lugar cuando cambia el estado de un documento. Se incluyen ejemplos de eventos Update que añaden temas a un vista, conmutan un tema en apagado y encendido, seleccionan entidades en una vista o registros en una tabla, y hacen activo un campo en una tabla. Los scripts Click y Update normalmente ejecutan scripts que llevan a cabo operaciones en un determinado botón o herramienta en particular. Los eventos Update ejecutan scripts que conmutan la mayoría de los controles en habilitado o deshabilitado, o visible e invisible, en base a condiciones específicas. Asignación de scripts a los controles Para permitir que cambie un control durante un evento Update, asigne el script que lleve a cabo cambio en la propiedad Update. El mismo script puede asignarse a muchos controles. De esta forma, muchos controls pueden responder de forma idéntica a una condición dada (p.e. pueden poner invisible o deshabilitado) A pesar de que los eventos Click y Update típicamente ejecutan un script, un evento Update provoca que todas las propiedades Update de todos los scripts asignados se ejecuten. Habilitar e inhabilitar controles Asigna la propiedad SetEnabled en base a una condición SELF se refiere al script en ejecución actual del control Ejemplo de evento update: añadir el primer tema Habilitar e inhabilitar controles Cuando el estado de un documento en particular cambia, el GUI debería cambiar para tener disponibles sólo las operaciones apropiadas. Por ejemplo, el script View.HasThemesUpdate asigna la propiedad SetEnabled de un botón en base al número de temas en la vista. Si no hay temas en la vista, el control se deshabilita; si hay al menos un tema en la vista, el control se habilita El script TheView.HasThemesUpdate se asocia con las propiedades Update de todos los botones de la barra (excepto Save, AddThemes y Help). Cuando se añade un tema, se produce un evento update. View.HasThemesUpdate se ejecuta una vez para cada botón; debido a que si el número de temas es mayor de uno, se habilitan todos los controles. Uso de SELF Los scripts Update se ejecutan una vez para cada control a que estén asignados. Use la palabra SELF para referirse al control actual de ejecución del script update. Cuando un control ejecuta el script Update, éste aplica esto a si mismo. Esto permite que el mismo script sea usado por cada control. En la sección 6. Personalización de la aplicación y el proyecto, hay una explicación de SELF en relación a valore pasados cuando se corre un script desde otro. Script Update para conmutar los iconos de los controles El siguiente script usa SELF para almacenar y conmutar el icono de un control. Primero, el icono se almacena en el comentario (tag) del control. Después el nuevo icono (índice 20 del Gestor de Iconos) se asigna al propio control. (SELF.SetObjectTag(SELF.GetIcon)) if (alguna condición ) then (SELF.SetIcon(IconMgr.GetIcons.Get(20))) end Ejercicio 11: Cambio del GUI Paso 1 Iniciar ArcView y abrir un proyecto. Paso 2 Añadir un menú que contenga una opción para cada tema Paso3 Crear un icono y colocar éste en una herramienta Paso4 Habilitar un herramienta en base a una condición Paso 5 opcional Conmutar la visibilidad de todos los botones, excepto el de ejecución Paso 6 Crear un GUI para una vista diferente. Ejercicio 11: Cambio del GUI En este ejercicio, se verán varias formas de cambiar GUI a través de scripts de Avenue. Se cambiará el GUI en base a una condición. Se podrán construir GUIs diferente para dos vistas distintas Paso 1 Iniciar ArcView y abrir un proyecto. Si es necesario iniciar ArcView. Desde el menú Archivo (File), elija Open Project. Moverse al directorio ejercicio. Hacer doble clic en ex11.apr para abrir el proyecto para este ejercicio. Cuando el proyecto se abra, se verá la ventana de Atlanta displayada. Un botón y herramienta han sido añadidos a la vista GUI. Vea que hay una herramienta extra sin icono entre las herramientas HotLink y Área of Interest. También está el botón del diamante verde que se usará en el paso 5. Paso 2 Añadir un menú que contenga un opción para cada tema En este paso, se escribirá un script que añada un menú a el docGUI de la Vista. El nuevo menú será añadido entre los menús Graphics y Window .El menú contendrá una opción para cada tema en la vista. El menú contendrá ona opción para cada tema en la vista Desde la venta de Proyecto, abra el script Ejercicio 11, Paso2Primero, tome el GUI de la vista y la barra de menús Crea una variable llamada theViewGUI enviando a la aplicación el requerimiento GetActiveGUI. Ahora cree una variable llamada theMenuBar enviando el requerimiento GetMenuBar. Después, añadirá un nuevo menú tras el menú Graphics ( que es el tercero desde el final). Después etiquetará el el menú. Cree la variable llamada menuIndex enviando a theMenuBar el requerimiento Getcontrols. Después envíe el requerimiento Count y reste 3 para tomar el índice del menú Graphics. Ahora cree una variable llamada theMenu enviando a theMenuBar el requerimiento New. El parámetro del requerimiento New es el número índice. Para etiquetar theMenu, use el requerimiento SetLabel con Display como cadena Tome una lista de los temas en la vista Atlanta. Se usará esta lista para crear las opciones de menú Cree una variable llamada theThemeList enviando a la aplicación el requerimiento GetActiveDoc para recuperar la vista, después enviar el tema GetThemes a la vista Añada un opción al menú por cada tema activo correspondiente Use el bucle For Each sobre cada thm en theThemeList Dentro del bucle, cree una variable llamada theChoice enviando a theMenu el requerimiento New. Use -1 como número de índice para el requerimiento New para añadir la nueva opción al principio Etiquete theChoice enviando el requerimiento SetLabel. El parámetro SetLabel se crea enviando a cada thm el requerimiento GetName. Después, asignará un script que corra cuando la opción se menú sea elegida. Un script llamada ThemeToggle ya ha sido escrito y conmutará la visibilidad de cualquier tema que sea elegido del menú. Asigne un script a theChoice enviando el requerimiento SetClick. El parámetro de SetClick es una cadena que contiene el script llamado ThemeToggle Finalice el bucle For Each Compile el script. Active la vista Atlanta, después corra el script. Pruebe el nuevo menú. Vea cómo trabaja el script ThemeToggle, abra el script y examínelo. Paso3 Crear un icono y colocar éste en una herramienta En este paso, creará un icono desde un fichero de gráficos, añadirá este al proyecto, después lo usará sobre una herramienta. Abra el script Ejercicio 11, Paso3. Cree una variable llamada theIcon enviando a la clase Icon el requerimiento Make. Como parámetro , de la cadena del path de el fichero del icono en el directorio data ($AVETRAIN/data/dollar.xbm). Después envíe el requerimiento AsFileName a la cadena para convertir éste en un nombre de fichero. Después, tome la barra de herramientas de la vista. Cree la variable llamada theToolBar enviando a la aplicación el requerimiento GetActiveGUI para recuperar el GUI de la vista. Después envíe el requerimiento GetToolBar al GUI de la vista para recuperar la barra de herramientas. Cree una variable llamada theToolList enviando a theToolBar el requerimiento GetControls. Después, tome la herramienta sin icono ( en posición 9) y asigne el signo de dólar como su propiedad Icon. Cree la variable llamada theTools enviando a theToolList el requerimiento Get. El parámetro para el requerimiento Get es 9. Envíe a theTool el requerimiento SetIcon y use theIcon como parámetro. Compile y corra el script Abra la caja de diálogo de personalización y seleccione la herramienta Dólar. Haciendo doble clic en su propiedad Apply se visualizará el script Manager. Haga clic par seleccionar el script ShowDeposit. Cierre la caja de diálogo de Personalización. Active la vista y use la nueva herramienta Dólar sobre el GUI de la vista. Paso4 Habilitar un herramienta en base a una condición Escriba un script que habilite la nueva herramienta Dólar cuando el tema Banks se active y que se deshabilite cuando el tema Banks esté apagado. Abra el script del Ejercicio 11, paso 4. Cree una variable llamada theTheme enviando a la aplicación los requerimientos GetProject y FIndDoc para buscar la vista Atlanta. Después envíe a la vista el requerimiento FindTheme para encontrar el tema Banks. Envíe a SELF (la herramienta Dólar) el requerimiento SetEnabled. Para el parámetro, envíe a theTheme el requerimiento IsVisible para devolver el estado de visibilidad del tema Banks . Si IsVisible devuelve false, el tema está apagado y la herramienta inhabilitada. Si el tema devuelve true, el tema está encendido y la herramienta habilitada. Compile el script, pero no lo corra todavía Para que este script corra correctamente, debe asociarse con un evento Update(el tema Bank encendido o apagado) . Se usará la caja de diálogo de Personalización para asignar al script la propiedad Update de la herramienta Dólar. Abra la caja de diálogo de personalización y seleccione la herramienta Dólar. Haga doble clic en la propiedad Update para visualizar el Gestor de Scripts. Haga clic en el script Ejercicio 11, paso 4. Cierre la caja de diálogo de personalización. Para testear el script, active la vista Atlanta. Encienda el tema Banks. La herramienta Dólar debería habilitarse. Apague el tema Banks. La herramienta debería deshabilitarse. Paso 5 opcional Conmutar la visibilidad de todos los botones, excepto el de ejecución Escriba un script que conmute la visibilidad de todos los botones, excepto del botón que corre el script. El botón del diamante verde, ejecutará el script y controlará la visibilidad de todos lo demás botones. (Este script es útil si se quiere esconder botones en la barra de botones.) Abra el script del Ejercicio 11, paso 5. Construya un bucle que vaya través de cada botón de la barra de botones de la vista. Empiece con el estamento For Each, use la variable llamada btn para cada botón de la barra de botones. Cree la barra de botones enviando a la aplicación el requerimiento GetActiveGUI, enviando el requerimiento GetButtonBar. Cuando el bucle encuentre el botón del diamante verde, no cambiará su visibilidad Dentro del bucle For Each, use el estamento If then para chequear si btn es igual a SELF (botón del diamante verde). Si es así, continúa. Si no, envíe a btn el requerimiento SetVisible. Para el parámetro SetVisible, envíe a btn el requerimiento IsVisible seguido por Not. El parámetro devuelve la visibilidad opuesta, que conmuta el botón. Finalice los estamentos IfThen y For Each Compile el script, pero no lo corra, o todos los botones se apagarán. Abra la caja de diálogo de Personalización y elija el botón Diamante Verde. Asigne el script Ejercicio 11, paso5 a la propiedad Click del botón. Paso 6 Crear un GUI para una vista diferente. En este paso, se creará un nuevo GUI para la vista Atlanta Banks que sea diferente de GUI de la vista Atlanta. Abra el script Ejercicio 11, paso6. Hará una copia de GUI de la vista standard, cambie su nombre y añada ésta al proyecto. Cree una variable llamada myNewGUI enviando a la aplicación el requerimiento FindGUI para devolver el GUI de la vista. Después, envíe el requerimiento Clone para hacer una copia. Asigne el nombre de myNewGUI enviando el requerimiento SetName con BankGUI como cadena Añada éste al proyecto enviando a la aplicación el requerimiento GetProject, después añada el requerimiento AddGUI con el parámetro myNewGUI. Para asociar el nuevo GUI a la vista Atlanta Banks, envíe a la aplicación el requerimiento GetProject seguido por el requerimiento FindDoc con la vista Atlanta Banks como parámetro, después envíe el requerimiento SetGUI con BankGUI como parámetro. Para añadir un nuevo título al nombre del documento en la vista Proyecto, envíe a myNewGUI el requerimiento SetTitle con “A_Banks” como parámetro. Compile y corra el script. Abra la caja de diálogo de Personalización, y , para Type elija BankGUI. Borre todos los botones, excepto el de Zoom Out. Añada dos nuevos botones al principio de la barra. Sobre el primer botón, para la propiedad Icon asignar FrameText; para la propiedad Click, asigne el script OpenTable. Sobre el segundo botón, para la propiedad Icon asignar MakeChart; para la propiedad Click, asigne el script OpenChart. Sobre el botón Zoom Out, para la propiedad Click, asigne el script OpenAtlantaView. Desde el menu Archivo (File), seleccione Close All. Para la ventana de Proyecto, abra la vista Atlanta Banks. Vea el nuevo GUI de Bank. Testee los nuevos botones. Use el botón Zoom Out para abrir la vista Atlanta y vea que tiene un GUI diferente. End S EC CI O N 12 Construcción de extensiones ¿Qué es una extensión? ¿Qué puede almacenarse en una extensión? Ejemplos de extensiones Cómo trabajar con extensiones Creación de extensiones El script Make El script Make (continuación) El script Install El script UnInstall Uso de extensiones 12-2 12-4 12-6 12-8 12-10 12-12 12-14 12-16 12-18 12-20 Ejercicio 12A: Creación de una extensión 12-23 Propiedades de las extensiones 12-34 El script Make (continuación) El script Install El script UnInstall Uso de extensiones 12-36 12-38 12-40 12-42 Ejercicio 12B: Manejo de una extensión 12-45 ¿Qué es una extensión? Una colección de objetos de ArcVIew Maneja la distribución de dichos objetos Los objetos de la extensión no forman parte física de un proyecto Pertenecen a la extensión Se incorporan al proyecto cuando la extensión se activa Se borran del proyecto cuando la extensión se desactiva ¿Qué es una extensión? extensión es una colección de objetos de ArcView. El concepto de adición de objetos a un proyecto de forma interactiva no es nuevo y Arcview lo contemplaba antes de desarrollar las extensiones. Sin embargo, lo que las extensiones aportan, es un significado al manejo de la organización de dichos objetos. Antes de las extensiones, el añadir objetos adicionales al proyecto requería que se importaran los objetos al proyecto. Con las extensiones, los objetos nunca forman parte física del proyecto y no se escriben en el fichero de proyecto. Los objetos pertenecen a la extensión y son incorporados al proyecto solo cuando el usuario activa la extensión. Se borran del proyecto cuando el usuario desactiva la extensión. Por ejemplo, se quieren añadir dos botones y una herramienta al GUI del documento.Se debería usar la Caja de Diálogo de Personalización (Customize) para añadir los controles, escribir un script para añadir los controles, o construir un proyecto vacío con los controles e importar el proyecto vacío. En los tres casos, los controles son una parte permanente del fichero de proyecto cuando se salva éste. Con las extensiones, los controles forman parte de la extensión, la extensión está activa o apagada, y los controles nunca se escriben en el fichero de proyecto. Los objetos puede instalarse o desinstalarse en el proyecto actual: interactivamente por el usuario en base a una condición especificada en un script al tiempo que el proyecto se abre o se cierra. ¿Qué puede almacenarse en una extensión? Controles personales y GUIs Datos Scripts ¿Qué puede almacenarse en una extensión? El autor de una extensión puede incorporar en ésta cualquier objeto de ArcView .Dichos objetos pueden ser controles personales (botones y herramientas), menús y opciones de menú, o interfaces de documentos. Los objetos pueden incluir documentos tales como Tablas, Composiciones y Plantillas de Composiciones, o objetos en si mismos, tales como temas, shapefiles, grid o temas de imagen y ficheros de datos. Si los controles se almacenan en extensiones, los scripts soportados por los eventos Click, Apply y Update, también necesitan ser parte de la extensión. Controles personales Se puede usar una extensión para cargar menús, botones, herramientas, y que estos soporten scripts que proporcionan una funcionalidad específica. Interfaces de los documentos Si la funcionalidad que se incorpora es más que sólo una pareja de botones y herramientas, puede ser más apropiado construir un docGUI. La extensión carga el docGUI en el proyecto y cuando el script lo especifique, el GUI de el documento activo se asigna a dicho documento. Documentos Una extensión puede proporcionar datos en el formato de vistas de cualquier documento de ArcVIew. Por ejemplo, se puede crear una vista definitiva para el área de estudio y querer compartir ésta con todos los miembros del departamento. Se puede incorporar éste a la extensión. Scripts Una extensión puede contener script que se necesiten en un proyecto. Ejemplos de extensiones Rango de un control el GUI para un conjunto de funciones de análisis complejas Ejemplos de extensiones En ArcView 3.0., ESRI proporciona varias extensiones que ofrecen nuevas funcionalidades. Los tipos de extensiones van desde una que añade un botón sencillo, tales como la extensión Buffer, a uno que añade un conjunto completo de funciones de análisis, tales como Extensión de Análisis Espacial de ArcView. Extensiones que vienen con ArcView Una extensión de Digitizador Soporta ficheros de datos IMAGINE Soporta ficheros JPEG Extensión de Temas de Bases de Datos Extensión de Lectura CAD Extensión de Análisis Espacial de ArcView La extensión de Análisis Espacial de ArcView proporciona funcionalidad de análisis espacial genérico sobre Grid y Temas de Entidades. Algunas de las funcionalidades almacenadas por esta extensión son : Calcular pendientes, Crear Contornos, Sumar zonas, Histogramas por zonas, estadísticas de vecindad, y reclasificación. Extensión de Análisis de Red de ArcVIew El Análisis de Red de ArcView es la solución de ArcView para ayuda de los usuarios al trabajar con redes de entidades lineales más eficientemente. Cuando se carga el Análisis de Red, se puede: buscar una ruta de viaje eficiente, determinar las facilidades de acceso y determinar una área de servicio Extensiones sencillas ArcView proporciona varias extensiones de ejemplo. Algunos de eso ejemplos son: Utilidades de Editor de Scripts, Herramientas de Mapa, un selector de Clase, Modelado hidrológico, Herramientas de visibilidad, y entidades seleccionadas por Buffer. Todos estos scripts se instalan con ArcView y se accede a ellos a través del Sistema de Ayuda de ArcView. Cómo trabajar las extensiones Almacenados como un fichero de texto Una subclase de la Clase Objeto Base de Datos (ODB) ODB Apllication Extension Obj Script Project DocGUI ScriptEditor Doc DocWin Chart Layout Table View Una clase especial de fichero de Objeto Base de Datos (ODB) Almacena objetos Los objetos se leen y recrean (cargan) en otros objetos. Se usan tres scripts para crear extensiones : Make, Install, Uninstall Cómo trabajar las extensiones El diagrama modelo muestra que la clase extensión es una subclase de la Clase Objeto Base de Datos (ODB). El proyecto y las clases de aplicación tienen relaciones uno a muchos con la clase extensión Ficheros ODB Los objetos ODB son ficheros de textos especiales que permiten un método eficiente de adición de objetos y almacenamiento de dichos objetos para una fácil recuperación. Cuando un objeto se almacena en un fichero de texto ODB existente, los objetos se recaen desde sus definiciones en el fichero de texto. Los ficheros de proyecto (.apr) son un ejemplo de objetos ODB. Un fichero de proyecto almacena los objetos necesarios para construir completamente la aplicación ArcView y el proyecto actual. Cuando la aplicación abre un proyecto, éste lee los objetos del ficheros de proyecto y los recrea. Una extensión es un fichero que almacena objetos (cualquiera que el autor haya incorporado a la extensión) para descarga fácil en el fichero actual. Un fichero de extensión (.avx) es otra clase especial de fichero ODB. En una extensión, los objetos se añaden en un orden específico y después se recuperan cuando la extensión se instala en la aplicación o proyecto actual. Un fichero de extensión tiene scripts específicos incorporado, tales como el script Make, Install y UnsInstall. Ficheros *.avx Los Ficheros de extensión vienen dados por un sufijo .avx standard. Cómo almacenar y acceder a esos ficheros .avx se explica más tarde en esta sección. Creación de extensiones Crea un proyecto fuente, después añade los objetos necesarios Escribe los scripts necesarios para crear una fichero extensión Define las propiedades de la extensión Creación de extensiones Una extensión comienza como un proyecto. Este proyecto se convierte del fichero fuente de extensión. Añade cualquier objeto necesario para mejorar la extensión de ese proyecto. Scripts adicionales Con el proyecto fuente, pueden crearse otros tres scripts. Dichos scripts son Make, Install y UnInstall. El script Make usa el requerimiento anExtension.Make para crear una extensión y después añade los objetos necesarios a la extensión. Las propiedades de la extensión y dependencias se establecen también en el script Make. Dos scripts adicionales, Install y UnInstall cumplen con los parámetros del requerimiento Make. Propiedades de las extensiones Las extensiones tienen propiedades (tales como SetAbout, SetExtVersion, Load y Unload) que permiten manejar la interacción del usuario con la extensión. Las propiedades se asignan a la extensión cuando se crea; algunas tienen scripts asociados con ellas. Se aprenderá más acerca de las propiedades de las extensiones más adelante en esta misma sección El Script Make Crea una extensión que añade dos botones a el GUI de la Vista Crea el objeto extensión theExt = Extension.Make ( “c:\miguel\extens\vectool.avx”.AsFileName, “VectorTools”, av.GetProject.FindScript.FindScript (“TheInstaller”), av.GetProject.FindScript.FindScript (“TheUnInstaller”), {}) Busca y nombra los botones bBar =av.GetProject.FIndGUI (“View”.GetButtonBar) aButton1= bBar.FIndByScript(“VectTools.CalcDistance”) aButton1.SetName (“VectButton1”) aButton2= bBar.FIndByScript(“VectTools.GeoBuffer”) aButton2.SetName (“VectButton2”) El script Make Este script se usa para crear una extensión. Su contenido variará dependiendo de los objetos añadidos y de los números de las propiedades. Las páginas 12-12 y 12-14 dan los requerimientos mínimos para construir una extensión. Contenidos del script Dependencias En este script, el requerimiento Make se usa para crear una extensión Extension.Make (aFileName.Name,InstallScript,UnInstallScript, Dependencies) En los parámetros para el requerimiento “Make”, aFileName es el nombre del fichero de la extensión que se creará. Debería llevar un sufijo .avx añadido a éste. El parámetro Name es para el nombre de la extensión que aparece en la caja de diálogo Extension. InstallScript es el script que se ejecuta cuando se abre al extensión. UnInstallScript es el script que se ejecuta cuando se cierra la extensión. El parámetro dependencies especifica cualquier otro extensión o librería de linkaje dinámico (DLLs) cuya extensión es más dependiente. (ver en ayuda de ArcView DLL Basics). Se pueden definir dependencias de la extensión proporciona una lista de otras extensiones o librerías compartidas proporcionadas por ESRI. Por ejemplo, si se crea una extensión que proporcione alguna funcionalidad específica al Análisis Espacial, es imperativo que se cargue la extensión de Análisis Espacial. Especifica el Análisis Espacial en la lista de dependencias. ArcView asegura que el Análisis Espacial esté cargado antes de empezar a cargar la extensión, asegurando el entorno para la extensión. Las librerías compartidas proporcionadas por ESRI que extienden la jerarquía de clase tala como DDLs soportan el análisis espacial. Por ejemplo, si se crea una extensión que use las clases y requerimientos definidas en el análisis espacial, pero no el interface, podría crear una extensión con dependencia sobre el Análisis Espacial DLL El script Make añade los objetos de la raíz de las extensión. El autor de la extensión debe ser consciente del orden en que dichos objetos se añaden, debido a que el script Install recupera los objetos de la extensión usando los valores de los índices. Los objetos en una extensión se indexan como si ellos estuvieran en una lista. Uso de nombres para controles Es una convención nombrar cualquier control añadiendo una extensión. Esto hace fácil buscar el proyecto y encontrar los aquellos objetos nombrados cuando hay que desinstalarlos. El script Make (continuación) Añade los objetos a la extensión (en orden) theExt.Add(aButton1) theExt.Add(aButton2) Añade los scripts a la extensión theExt.Add (av.GetProject.FIndScript (“VecTool.CalcDistance”)) theExt.Add (av.GetProject.FindScript (“VecTool.GeoBuffer”)) Describe la extensión y el asigna el número de la versión theExt.SetAbout (“Esta extensión proporciona funcionalidad de análisis vectorial”) theExt.SetExtVersion(1) Ejecuta la extensión y escribe el fichero al disco. Se compila pero no se corre Después de que los botones han sido añadidos a la extensión, el script Make añade los scripts que soportan. Asignación de propiedades de extensiones En este momento el autor de la extensión determina qué propiedades han de ser asignadas en el script Make. En el ejemplo anterior, los requerimientos theExt.SetAbout y theExt.SetExtVersion se usan para establecer las propiedades. Número de versión Esta propiedad es el número de versión de la extensión que ha sido asignado en el script Make con el requerimiento anExtension. SetVersion. Esta propiedad puede ser útil para programadores que puedan llevar a cabo futuras versiones de la extensión. El script install puede testear par ver si una versión particular de una extensión está ya cargada, antes de continuar la ejecución del script install. About Esta propiedad es una cadena que describe la extensión. La cadena aparece en la ventana de diálogo cuando el usuario hace clic en el nombre de las extensión. La propiedad se asigna en el script Make con el requerimiento anExtension.SetAbout. (Otras propiedades de las extensiones se cubren más tarde en esta sección.) Ejecución de ODB El último paso en el script Make usa el requerimiento Ext.Commit.Este requerimiento se hereda de la clase ODB y realiza cambios en el fichero ODB y escribe la ODB en el disco. Compilación del script Make Después de que el script esté completo, se necesitará compilar este script, pero no correrlo al tiempo. Antes de poder correr el script Make, debe asegurarse que de los otros scripts están en uso, específicamente e Install y Uninstall deben compilarse también. Si se corre el script Make antes de compilar los dos últimos, el script Make encontrará un error . El script Install Se ejecuta cuando se carga la extensión o cuando se abre el proyecto El objeto SELF hace referencia a la extensión Define cómo se añaden los objetos al proyecto actual Añade los botones a la barra de botones de la vista empezando en la posición 21 bb=av.GetProject.FindGUI (“View”).GetButtonBar bb.Add(SELF.Get(0),21) bb.Add(SELF.Get(1),22) Los script soportados por los botones no se añaden al proyecto Debe compilarse, no ejecutarse antes de correr el script Make El script Install El script Install es un script adicional que prepara una extensión. El script Install El script Install se ejecuta cuando se carga una extensión o si la extensión está ya cargada, cuando se abre un proyecto diferente o se crea uno nuevo. El script Install define cómo se añaden los objetos al proyecto actual. El autor de la extensión especifica el orden en que los objetos se añaden a la extensión en el script Make para facilitar la instalación de cada objeto desde la extensión al proyecto. Por ejemplo, si se añaden 3 herramientas y dos botones al docGUI de la vista del proyecto actual, el script Install define cómo y dónde dichos controles se añaden a las barras de controles. El script Install se ejecuta también cuando cualquier nuevo proyecto se crea mientras la extensión esté activa. En el código de la página anterior, los objetos empiezan a instalarse y recuperarse desde la extensión. La extensión está reverenciada por la palabra clave SELF. Instalación de scripts En la página anterior, los scripts que soportan los controles no se añaden al proyecto Es innecesario porque los scripts son parte de la extensión y en la extensión está en la búsqueda que realiza ArcVIew cuando busca el script llamado (el script asociado con el control).La aplicación busca el proyecto actual, los valores por defecto, las extensiones cargadas, y después los valores por defecto del sistema para el script llamado. El orden de búsqueda es el siguiente: 1. Proyecto 2. Valores por defecto del usuario 3. Extensiones 4. Valores por defecto del sistema Esto significa que no todos los objetos tienen que ser añadidos al proyecto. Estos permanecen como parte de la extensión y cuando los objetos nombrados aparecen en un script, la extensión se busca para los objetos nombrados. El script Install debe compilarse antes de ejecutar el script Make. El ejemplo de la página anterior es la suma mínima necesaria para el script Install. Hay otros detalles del script Install que serán introducidos después de esta sección. El script UnInstall Se ejecuta cundo se descarga una extensión o cuando se cierra un proyecto. Borra cualquier objeto añadido al proyecto por el script Install Borra los botones de la barra de botones de la vista bb=av.GetProject.FindGUI (“View”).GetButtonBar bb.Remove( bb.FIndByName(“VectButton1”)) bb.Remove(bb.FIndByName(“VectButton2”)) Debe compilarse antes de ejecutar el script Make El script UnInstall El segundo script recomendado es el script UnInstall. El script UnInstall El script UnInstall se ejecuta si el proyecto se cierra o cuando se descarga una extensión. Este script se ejecuta antes del script UnLoad y limpia cualquier especificación al proyecto. Este script borra cualquier objeto que se añadió con el script Install. Este concepto es critico y repetitivo: cualquier objeto que se añada al proyecto por el script Install necesita borrarse con el script UnInstall. El script UnInstall debe compilarse antes de ejecutar script Make. El código de la página anterior es lo mínimo necesario para el script UnInstall. Hay otros detalles del script Install que se comentarán más tarde en la sección. Uso de nombres para localizar controles Cuando los controles se borran del proyecto, es ventajoso recuperarlos por el nombre.Desde que el usuario tiene la oportunidad de moverse por el conjunto de controles, pueden no estar en la misma posición en que fueron añadidos. Esto hace difícil el localizarlos y recuperarlos con el script UnInstall. Al referirse a los controles por sus nombres, el autor de las extensiones no tiene que preocuparse por los movimientos del usuario. Uso de extensiones Asignar variables de entorno para localizar ficheros .avx de extensiones $AVEXT $USEREXT Carga de una extensión de la caja de diálogo Extensions Uso de extensiones Cuando se ejecuta el script Make, éste crea el fichero de la extensión en el directorio especificado por el requerimiento anExtension.Make Localización de ficheros *.avx Para ver la extensión listada en la caja de diálogo Extensions, el fichero .avx tiene que localizarse en $AVHOME/ext32 o moverse a un directorio especificado por el usuario. El $AVHOME/ext32 se referencia por una variable llamada $AVEXT. El directorio especificado por el usuario está referenciado por la variable $USEREXT. Ambas variables pueden asignarse en el script de inicio del nivel de la aplicación o en el script de inicio del proyecto, usando el requerimiento System.EnvVar. ExtensionWin Para llamar a una extensión específica, haga activa la ventana de proyecto, y desde el menu Archivo (File) pique la opción de menú Extensions. Este menú corre el script appl.GetExtensionWin. Este script tiene una única línea de código que envía al objeto ExtensionWIn el requerimiento Show. Ejercicio 12A: Creación de una extensión Paso 1 Iniciar ArcView y abrir un proyecto. Paso 2 Inspeccionar los scripts Install y UnInstall Paso3 Escriba el script Make y ejecútelo. Paso4 Testee la extensión con otro proyecto. Ejercicio 12A: Creación de una extensión En este ejercicio, se podrá construir una extensión que añada algunos controles de análisis de vector al proyecto. Se construirá la extensión escribiendo el script Make. Se correrá el script para construir el fichero de extensión y después testear la extensión añadiendo éste a un proyecto diferente. Paso 1 Iniciar ArcView y abrir un proyecto. Si es necesario iniciar ArcView. Desde el menú Archivo (File), elija Open Project. Moverse al directorio ejercicio. Hacer doble clic en ex12a.apr para abrir el proyecto para este ejercicio. Cuando el proyecto se abra, se verá una vista llamada Atlanta Schools. Se construirá una extensión que añada algunas facilidades de análisis vectorial al proyecto. Este proyecto ya contiene los objetos necesarios para la extensión; se escribirá el script Make que construye la extensión. La barra de botones tiene dos botones nuevos a la derecha del botón Ayuda (Help). Hay también una nueva herramienta al final a la derecha de la barra de herramientas. Esos tres contoles tienen las siguientes propiedades: Propiedad botón#1 botón#2 Apply N/A N/A Click VectTools.CalcDistance VectTools.GeoBuffer Cursor N/A N/A Herramienta #1 VectTools.FindNear vacío Paso 2 Cursor.Bullseye False Disabled False False Help Calcula la distancia entre las entidades de dos temas de punto Dibuja un buffer alrededor de la entidad seleccionada Busca la entidad más cercana del punto identificado Help Topic vacío vacío vacío Icon PatternRamp Loop Speeding Bullet Invisible False False False Tag vacío vacío vacío Update View.HasDataUpdate View.HasDataUpdate View.HasDataUpdate Inspeccionar los scripts Install y UnInstall Los scripts Install e UnInstall son una parte importante de la extensión. Ellos controlan que las extensiones se carguen en un proyecto y que se borren. Primero examina el script Install. Este script se usará para instalar los objetos almacenados por la extensión en el proyecto actual. Abra el script VectTools.Installer Los objetos se recuperan desde la extensión (SELF) y después se añaden a la barra de botones de la vista. El script Install no carga los tres scripts que se usan por los controles. Se añadirán a la extensión. La extensión está en el orden de búsqueda que ArcView usa cuando busca un script determinado. Cuando acabe de revisar el script, compílelo, y cierre la ventana del script. Después examinará el script UnInstall. Abra el script llamado VectTools.UnInstaller Tómese un minuto en revisar el contenido de este script. Éste encuentra los objetos cargados en la extensión por su nombre y los borra del proyecto. Cuando acabe de revisar el script, compile éste y cierre la ventana del script. Paso3 Escriba el script Make y ejecútelo. El script Make crea la extensión y define los objetos que se almacenarán en la extensión. Incluso si el proyecto actual contiene objetos que formarán parte de la extensión, el proyecto actual es únicamente la fuente para la extensión. Puede no haber creado la extensión. Para hacerlo, usará el requerimiento Extension.Make, busca los objetos en el proyecto actual, y los añade a la extensión. Abra un nuevo script y, desde el menú del script, elija propiedades(Properties), En la caja de diálogo de propiedades, llame el script Tools.Maker. Haga clic en OK. La primera cosa que hará será crear la extensión Cree la variable llamada theExt enviando el requerimiento Make a la clase Extension. El requerimiento Make tiene cinco parámetros, un nombre de fichero(aFileName),un nombre (aName),un script de Instalación (anInstallScript), un script de desinstalación(anUnInsallScript),y cualquier Dependencia (Dependencies). Para el primer parámetro, nombre la extensión vectoolLavx y de el path de el directorio pavetemp. Para convertir la cadena a un nombre de fichero, use el requerimiento AsFileName. Para el segundo parámetro, nombre al extensión Vector tools. Para el tercer parámetro, comience con av y después use el requerimiento GetProject, seguido por el script FindScript, especificando VectTools.Installer como script Install. Para el cuarto parámetro, use los mismos requerimientos que antes y especifique VectTools.Uninstaller como script UnInstall. Debido a que esa extensión no va a ser dependiente de cualquier otra extensión, sólo proporciona una lista vacía para el parámetro Dependencias. Después construirá los objetos raíz para la extensión. Empiece con el primero de los botones y después la herramienta (El orden no es importante. Lo es sólo cuando en los objetos añadidos a la extensión.) Recupere el primer botón. Cree una variable llamada aButton1. En el lado derecho del operador de asignación, empiece con av, y después use el requerimiento GetProject, seguido por el requerimiento FindGUI. El requerimiento FindGUI debería tener la cadena “View” como parámetro. Después envíe el requerimiento GetButtonBar y FindByScript. El requerimiento FindByScript debería tener VectTools.CalcDistance como parámetro. Todo esto se puede hacer en una única línea usando requerimientos encadenados, o construir varias variables de varias líneas (Puede usar esas variables de nuevo cuando añada el otro botón y la herramienta.) Nombre este botón Boton1 enviando el requerimiento SetName a la variable aButton1. Añada el segundo botón a la extensión de la misma forma que el primero. El script que ejecuta este botón se llama VectTools.GeoBuffer. Nombre este botón Botón2 enviando el requerimiento SetName a al variable aButton2. Ahora construya la herramienta de la misma forma que se construyeron los dos botones. Use el requerimiento GetToolBar en lugar deGetButtonBar. Esta herramienta ejecuta un script llamado VectTools.FindNear. Nombre la herramienta Herramienta1 enviando el requerimiento SetName a la variable aTool1 Es importante que se de nombre a esos botones y herramientas como se especifica arriba, debido a que el script UnInstall usa esos nombres para localizarlos. Después añada los dos botones y la herramienta a la extensión. Para añadir un objeto a la extensión, use el requerimiento Add. El requerimiento Add se hereda de la superclase ODB. Envíe el requerimiento Add a la variable theExt. Haga esto tres veces, una vez para cada control. Use las variables para los botones y herramienta como parámetros para el requerimiento Add. Añada los tres scripts que usarán los controles de la extensión Envíe el requerimiento Add a la variable theExt. Como primer parámetro, use el conjunto de requerimientos encadenados av.GetProject.FindScript. Para el parámetro del requerimiento FindScript, de el nombre del script. Remítase al gráfico de la página 12-25 para los nombres de los scripts. Necesitará hacerlo tres veces, una para cada script que esté siendo añadido. Consejo: Debería parecerse a algo como object.request(object.request(parámetrro).) Lo siguiente que se debería hacer es describir la extensión Envíe a al extensión (referenciado con la variable theExt) el requerimiento SetAbout. Para este requerimiento, proporcione una frase o dos que describan lo que hace la extensión. Por ejemplo: “Esta extensión se asigna para añadir”+NL+”alguna utilidad de análisis vectorial simple para”+NL+”el proyecto actual”. Esta cadena aparecerá al final de la caja de diálogo de la Extension Asigne el número de versión de la extensión. Envíe a la variable theExt el requerimiento SetExtVersion. Como es la primera versión, use el parámetro 1.0. El paso final es hacer la extensión. El requerimiento Commit creará el fichero de extensión en el disco en el directorio pavetemp.Envíe el requerimiento Commit a la variable theExt. Cree el fichero de la extensión Compile y corra el script Make. Éste creará la extensión (el fichero ODB) vectooLavx en el directorio pavetemp. Finalmente, salvará el proyecto. Salva el proyecto como VectTool.apr en el directorio pavetemp Paso4 Testee la extensión con otro proyecto. La extensión está ahora disponible. Se testeará la extensión abriendo otro proyecto y cargándolo en éste. Con la ventana de proyecto activa, elija Abrir Proyecto (Open Project) del menú Archivo(FIle). Después muévase al directorio ejercicio y elija ex12test.apr Cuando se abra el proyecto, verá el script activo llamado USEREXT.Set. Este script asignará la variable del sistema (USEREXT) para apuntar al directorio pavetemp. ArcView usa esta variable para encontrar los ficheros .avx que están disponible para las cajas de diálogo Extensions. Cambie el path en el script para que se ajuste al path del directorio pavetemp. Compile y corra el script, después cierre la ventana del script. Ahora, cargue la extensión. Active la ventana de proyecto, después desde el menú Archivo (File), haga clic en la opción Extensions. Debería ver la extensión VectorTools listada en la caja de diálogo Extensions. Haga clic en el nombre de la extensión y lea el mensaje About (descripción de la extensión) Haga clic en la caja de chequeo a la izquierda de Vector Tools, después haga clic en OK. En este momento la extensión se carga y se ejecuta el script Install. Active la vista. Debería ver los dos botones y la herramienta que fueron instalados por la extensión. Testee las herramientas: Button1 calcula la distancia desde uno o más puntos en un tema a todos los puntos en otro tema. Button2 construye gráficos poligonales alrededor de las entidades seleccionadas de un tema. Tool1 encuentra y selecciona las entidades más cercanas en el tema activo a un punto dado por el usuario de forma interactiva. Cuando acabe, active la ventana de Proyecto, y desde el menú Archivo (File), de nuevo elija Extensions. Haga clic en Vector Tools para apagar la extensión. Haga clic en OK. Ahora ejecutará el script UnInstall especificado por el requerimiento Make. Active la vista y vea que los controles ardido por la extensión se han ido. End Propiedades de la extensión Seis propiedades de eventos permiten manejar la extensión Install UnInstall Load Unload CanUnload ProjectSave Cada propiedad tiene su propio script Todas la propiedades de las extensiones tienen scripts asociados con ellas y están establecidos por el requerimiento Make de la Extensión o cualquier otro requerimiento de Avene en el scriptMake. Load El script asociado con la propiedad Load se ejecuta cuando se activa la extensión. Una extensión puede devolverse de varias formas: haciendo clic en la caja de chequeo en la caja de diálogo de Extensiones, abriendo un proyecto que depende de la extensión o usando un requerimiento de Avenue. Este script se usa para asignar el entorno de aplicación para la extensión, así como las variables globales. Install El script Install se ejecuta cuando la extensión se carga primero y cada vez que se crea o abre un proyecto diferente mientras dicha extensión esté cargada. El script Install se usa para añadir objetos de la extensión al proyecto. UnInstall La propiedad UnInstall tiene un script asociado con ella que se ejecuta cuando se descarga la extensión o cuando se cierra el proyecto actual. El script UnInstall borra cualquier objeto del proyecto que fuese añadido por el script Install. Unload El script se ejecuta cuando la extensión se descarga del proyecto. El script UnLoad lleva a cabo cualquier operación de limpieza a nivel de la aplicación antes de que la extensión se descargue (El script Unload deshace todo aquello que hizo el script Load). CanUnload La propiedad CanUnLoad tiene asociado un script con el que testear si la aplicación puede descargarse. Este script se ejecuta cuando se llama al diálogo de la extensión y determina el estado de la marca de chequeo en la caja de diálogo de las Extensiones, devolviendo true si se puede chequear y false si no. Se deja a la elección del autor de la extensión asignar la condición para cuando la extensión pueda o no descargarse. ProjectSave La propiedad TheProjectSave tiene asociado un script que se ejecuta antes de que el proyecto sea escrito en un fichero. Relación entre proyectos y extensiones Los proyectos pueden depender de las extensiones Los objetos de las extensiones residen en el espacio de la extensión Los objetos de las extensiones no se salvan en el espacio del proyecto. Los objetos copiados se salvan en el espacio del proyecto Relación entre proyectos y extensiones La relación entre proyecto y extensión se basa en el estado actual del proyecto. Esto es, si el proyecto se salva con la extensión cargada, el proyecto depende de la extensión. Si se intenta abrir el proyecto y el fichero de extensión no está localizado en el directorio especificado por AVEXT o $USEREXT , entonces será requerido para que lleve a cabo la reparación del proyecto y localización del fichero de extensión Espacio de extesiones frente a espacios de proyecto. Los objetos instalados por la extensión pertenecen a la extensión y nunca se escriben en el fichero de proyecto cuando se salva éste. Esto significa que si el usuario personaliza los objetos instalados por la extensión, los cambios nos se salvan con el proyecto .Por ejemplo, si la extensión se carga una vista, y el usuario añade temas o cambia los símbolos de la leyenda para el tema, esos cambios no se salvarán con el proyecto cuando el usuario lo salve. Dichos objetos se llaman “pertenecientes a la extensión” y residen en el “espacio de la extensión”. Clonar objetos El autor de la extensión puede permitir la personalización de los objetos de la extensión clonando los objetos de la misma. El autor añade los objetos clonados al proyecto y así forman parte del “espacio del proyecto”. Una vez que los objetos forman parte del espacio, cualquier personalización de los mismos se escribe en el fichero del proyecto cuando éste se salva. Si se instalan objetos el en espacio proyecto es crítico, ya que si no dichos objetos se borrarán cuando la extensión se descargue. Necesitará localizar dichos objetos para borrarlos .Si el usuario salva el proyecto y se cierra mas tarde el proyecto, se ejecuta el script UnInstall , pero no se borran los objetos. Esto se da sólo cuando el usuario descarga al extensión que el script UnInstall ejecuta y borra todos los objetos añadidos por el script Install, incluso los objetos clonados. Entonces, cualquier personalización realizada se perderá, y se borrarán los objetos. Manejo de una extensión con el script Install El script Install debería verificar si se está en un proyecto activo. if (av.GetProject = nil) then return nil end Usa diccionarios para ver si las extensión se ha cargado ya. if (SELF.GetPreferences.Count <>0 ) then return nil else SELF.GetPreferences.Add (“Versión”, SELF.GetExtVersion) end Permite la personalización y ubicación de controles en GUIs personalizados. bb = av.GetProject.FindGUI (“View”).GetButtonBar pos = bb.GetControls.FInd (bb.FindByScript (“Help.Tool” )) bb.ADD (SELF.Get(0).clone,pos - 3) bb.ADD (SELF.Get(1).clone,pos - 2) Manejo de una extensión con el script Install Es importante recordar que el script Install se ejecute cuando el usuario carga la extensión, cuando se cree un nuevo proyecto mientras se carga la extensión, o cuando un proyecto se abre y depende de la extensión Verificar un proyecto activo Lo primero que el script Install debería hacer es verificar si hay un proyecto activo antes de continuar añadiendo objetos a la extensión. Si no hay un proyecto activo, el script Install no debe ejecutarse. Utilización de el diccionario de Preferencias Si los objetos de la extensión han sido clonados y añadidos al espacio proyecto, se escriben en el fichero de proyecto cuando éste se salva. El proyecto ahora depende de la extensión. Cuando se vuelve a abrir el proyecto, aquellos objetos leídos des fichero de proyecto se añaden automáticamente a éste. También se ejecuta el script Install de la extensión. Cuando éste se ejecuta, añade los objetos de nuevo hasta donde fue cargada al principio. Consecuentemente, pueden suceder dos cosas. El script Install necesita verificar si ya está cargada la extensión. Si lo está, no es necesario finalizar el script Install y se puede no ejecutar dicho script. Si no está instalado, entonces añade los objetos. El autor debería usar diccionarios de preferencias par testear esto. (Ver 12-39 para una descripción de los diccionarios) Cada extensión cargada tiene un diccionario de preferencias que se salva con el proyecto. Incluso si el diccionario de preferencias se salva en el fichero de proyecto, se debe acceder sólo a través de la extensión a la que pertenece. El requerimiento es anExtension.GetPreferences Permiso de personalización Se puede permitir la personalización de dos formas: Clonar los objetos que la extensión añade. Este pone aquellos objetos en el espacio proyecto y cualquier personalización realizada a dichos objetos se escribe en el fichero de proyecto. Cuando se añaden controles al proyecto, la interfaz puede ser fuertemente personalizada. Se pueden localizar controles usando la posición exacta, en el conjunto de controles, relativo a otro control, o colocarlos al principio o final del conjunto de controles Uso de diccionarios con extensiones Un diccionario es una colección de claves únicas y pares de valores KEY VALUE KEY VALUE KEY VALUE Cargado true Version 1.0 Crear o recuperar diccionarios theDictionary = Dictionary.Make (100) theExt.GetPreferences Añadir elementos theDictionary.Add (aKey, aValue) theExt.GetPreferences.Add (“Versión”, theExt.GetVersion) Recuperar entradas de diccionario keyList = theDictionary.ReturnsKeys theVersion = theKey.GetPreferences.Get(“Versión”) Uso de diccionarios con extensiones Los diccionarios son una colección de claves y pares de valores. Los diccionarios aseguran que cada clave es única. La clave y valor pueden ser objetos de cualquier clase, y no necesita pertenecer a la misma clase. Diccionarios de Nombres Un Diccionario de Nombres (NameDictionary) usa los pares clave/valor, pero distinto de los diccionario genéricos, donde la clave puede ser cualquier objeto, la clave es el nombre del objeto. Este método permite más eficiente acceso y de recuperación. El proyecto tiene un Diccionario de Nombres que contiene un diccionario para cada extensión cargada. Crear o recuperar diccionarios Para crear un diccionario, envíe el requerimiento Make a la clase Diccionary. El nombre y tamaño (número de entradas) del diccionario se especifica en el requerimiento Make. Con las extensiones un diccionario de preferencias se almacena con el proyecto, pero pertenece a y se recupera de la extensión con el requerimiento getPreferences. Añadir elementos a un diccionario Los pares key/value se añaden a cualquier diccionario usando el requerimiento Add. Devolver entradas en diccionarios. Envíe el requerimiento Returnkeys al diccionario para devolver una lista de valores únicos. Esta lista puede usarse es cajas de mensaje o bucles. Para recuperar los valores asociados con una clave en una lista, envíe el requerimiento Get con una clave (parámetro) al diccionario. Con extensiones, se puede chequear par ver qué versión de la extensión se carga usando el requerimiento Get con la clave “Versión” Manejo de una extensión con el script UnInstall El script UnInstall debería verificar si se está en un proyecto activo. if (av.GetProject = nil) then return nil end No hay razón para desinstalar los objetos de una extensión si el proyecto se está cerrando. i f(av.GetProject.IsClosing) then return nil end Manejo de una extensión con el script UnInstall Con un script UnInstall más extenso, el autor de la extensión puede manejar la extensión en un grado mayor Verificar un proyecto activo Lo primero que debería hacer el script Uninstall es verificar si hay un proyecto activo abierto antes de continuar. Si no hay proyectos activos, entonces, no es necesario ejecutar el script uninstall. Desinstalación al tiempo de cerrar Es importante recordar que el script UnInstall se ejecuta cuando se cierra un proyecto o cuando el usuario descarga la extensión. Cuando se cierra el proyecto, el script UnInstall no se necesita ejecutar porque el estado de la extensión y ha sido determinado. Por ejemplo, si el autor de la extensión ha elegido dejar los objetos de la misma en el espacio de la extensión, estos objetos no se salvarán con el fichero de proyecto. Cuando se cierra el proyecto dichos objetos se borran de la memoria y como consecuencia no hay razón para que el script UnInstall los borre del proyecto. Otro ejemplo es si el autor de la extensión ha elegido añadir los objetos al espacio del proyecto, los objetos de la extensión se escriben en el fichero de proyecto y no es necesario borrarlos cuando se cierre el proyecto. Es sólo cuando el usuario descarga la extensión que el script UnInstall necesita borrar todos los objetos añadido por el script Install. Ejercicio 12B: Manejo de una extensión Paso 1 opcional Editar el script Install para manejar extensiones. Paso 2 opcional Editar el script UnInstall y el script Make Paso3 opcional Paso 1 opcional Personalizar los controles de la extensión Editar el script Install para manejar extensiones. En este paso, se editará el script Install para que si se hacen cambios en los objetos añadidos por la extensión, puedan salvarse con el proyecto. Si es necesario, inicie ArcView. Desde el menú Archivo (File), elegir Abrir Proyecto (Open Project). Muévase al directorio ejercicio. Haga doble clic en ex12b.apr para abrir el proyecto para ese ejercicio. En la ventana de proyecto, haga clic en el icono Scripts y abra el script VectTools.ModifiedInstaller. Vea las primeras líneas de código en ese script. Ellas chequean par ver si hay un proyecto actual abierto. Si no lo hay, el script devuelve un objeto nil (nulo) y nunca acaba. Lo primero que se debe hacer en ese script es escribir el estamento If Then para chequear si la extensión está ya cargada. (Recuerde, si el proyecto se salva con la extensión cargada, el proyecto se hace dependiente de la extensión. Entonces, cada vez que se abra el proyecto, la extensión se carga automáticamente y se ejecuta el script Install.)Si la extensión está ya cargada, no se quiere hacer nada que no sea devolver desde el script. Si la extensión no está cargada, ha de continuar. Inicie el estamento If Then . Como condición, envíe SELF ( que referencia a la extensión), el requerimiento GetPreferences, seguido por el requerimiento Count, y use el operador relacional not equal to seguido por 0. Si la condición es true, la extensión ya está cargada; entonces devuleve un objeto nil (nulo) desde el script. Si el contador es cero, significa que la extensión no está cargada. Después, escribirá el estamento Else para asignar la versión actual de la extensión. Se añadirá un elemento al diccionario de Preferencias que identifica qué versión está cargada. El número de versión se usa para llevar a cabo el desarrollo de la extensión. Envíe el requerimiento GetPreferences a SELF seguido por el requerimiento ADD para añadir un elemento al diccionario de preferencias. Como primer parámetro (la clave) use Version. Para segundo parámetro ( el valor), recupere el número de versión desde la extensión enviando a la extensión (SELF) el requerimiento GetExtVersion. Ahora, examine las líneas que añaden los controles .Para localizar los controles en un posición relativa, el script asigna una variable llamada pos a un valor de índice del botón Help ( el último botón en la barra de botones de la vista). Después, editará el script para clonar los controles añadidos por la extensión. Se colocarán también los controles relativos al botón Help. En la línea posterior se crea la variable pos, inserte el requerimiento Clone después del parámetro Get(0). Reemplace el parámetro 2/ con la variable pos seguido por -3 como posición. Este colocará el primer botón tres lugares a la izquierda del botón Help. Después , edite el script para clonar y colocar el segundo botón. Edite la siguiente línea, usando -2 como posición. Ahora editará el script para clonar u colocar la herramienta similar de la forma que hizo para los botones. Muévase a la sección de código que añade la herramienta. En la última línea (tb.Add(SELF.Get(2),15)inserte el requerimiento Clone después del parámetro Get (2). Después, para el parámetro de posición (15) , envíe a la variable tb (para la barra de botones) el requerimiento Getcontrols seguido del requerimiento Count. Compile ( no corra) el script. Cuando acabe, cierre el script. Ahora, cuando salve el proyecto, cualquier personalización se preservará. Paso 2 opcional Editar el script UnInstall y el script Make En este paso, editará el script UnInstall por lo que si se cierra el proyecto actual, el script UnInstall no se ejecutará. Abra el script VectTools.ModifiedUninstaller. Después de las tres primeras líneas comentadas, empiece un estamento If Then. Para la condición, envíe a la aplicación (av) el requerimiento GetProject seguido del requerimiento IsClosing. Después si la condición es true, devuelve nil para terminar el script, después finalice el estamento If Then. Compile el script. Después, abra el script VectTools.Maker. Modificará este script y especificará los nuevos scripts Install y UnInstall. Primero, asigne el path en el requerimiento Extension.Make del directorio pavetemp. Muévase a la línea donde se hace la extensión (theExt). Cambie el nombre del fichero .avx desde vectool.avx a mvectool.avx ( “m” indica la versión modificada) Después, cambie el nombre de la extensión de Vector Tools a Mod Vector Tools. Finalmente, cambie el script Install desde Installer a VectTools.ModifiedInstaller y el script UnInstall desde VectTools.UnInstaller a VectTools.ModifiedUnInstaller. Compile este script, después córralo. Crea otro fichero de extensión en el directorio pavetemp llamada mvectool.avx. Cuando acabe, cierre la ventana del script. Salve el proyecto como mvtool.apr en el directorio pavetemp. Ahora testeará la nueva extensión. Haga clic en el proyecto para activarlo. Entonces, desde el menú Archivo (File), haga clic en Abrir Proyecto(Open Project) y abra el proyecto ex12test.apr almacenado en el directorio ejercicio. Después abra el proyecto, vaya al menú Archivo (File) y haga clic en Extensions. Debería ahora ver Mod Vector Tools junto con VecTools listado en la caja de diálogo Extensiones Haga clic en la caja de chequeo a la derecha de Mod Vector Tools, después haga clic en OK. En este momento se carga la extensión y se ejecuta el script Install modificado. Usará este script con la extensión cargada en el siguiente paso. Paso3 opcional Personalizar los controles de la extensión En este paso, se personalizarán los controles añadidos por la extensión, se salvará el proyecto para ver qué personalizaciones se preservan. Abra la caja de diálogo de Personalización (Customize). Cambie el icono para la herramienta que se ha añadido a la extensión. Después arrastre los dos botones de la extensión a una nueva localización de la barra de botones. Cuando acabe, cierre la caja de diálogo de Personalización (Customize). Active la ventana de Proyecto, y desde el menú Archivo (File) elija Salvar como (Save Project As). Salve este proyecto en el directorio pavetemp y nombre éste custvect.apr. Ahora volverá a abrir el proyecto y examinará las personalizaciones Con la ventana de Proyecto activa, desde el menú Archivo (File), elija Abrir Proyecto (Open Project) .Navegue por el directorio pavetemp y vuelva a abrir custvect.apr. Este es el proyecto en que se acaban de personalizar los controles. Cuando abra el proyecto, active la vista. Los controles reflejarán la personalización. End A P É N D I C E A Leer y escribir ficheros de texto Leer y escribir ficheros de texto........................................................................ A-2 La clase Fichero......................................................................................... A-4 Crear FileNames y objetos Fichero............................................................ A-6 Utilizar FileDialog....................................................................................... A-8 Leer y escribir operaciones........................................................................ A-10 Leer el final del fichero............................................................................... A-12 Ejercicio A: Leer y escribir ficheros.................................................................. A-15 Leer y escribir ficheros de texto Trabajar con ficheros y objetos FileName Definir los permisos de acceso a ficheros Utilizar las cajas de diálogo para buscar o crear ficheros Figura Leer y escribir ficheros de texto Esta sección examina el fichero de entrada y salida de Avenue™. Aprenderá como trabajar con los objetos File (fichero) y FileName (nombre de fichero), para permitir accesos básicos al fichero. Los permisos de acceso al fichero (ej. Leer o escribir) se definen mediante emnumeraciones de permiso. También aprenderá como usar las cajas de diálogo para buscar o crear ficheros. La clase Fichero Leer, escribir y manejar ficheros Subclases de File (Fichero) TexFile (un único carácter) LineFile (línea completa) Cada objeto File (Fichero) tiene un objeto FileName asociado File LineFile FileName TextFile FileName ODB La clase Fichero La clase File maneja operaciones básicas de ficheros, tanto copiar, borrar, chequear el acceso de escritura y operaciones de entrada/salida, como el abrir, cerrar y leer ficheros. El fichero es una clase abstracta, usada sólo para organizar las características de sus subclases: todo fichero es un FileName o un TexFile. Un objeto FileName proporciona una ruta para localizar un fichero. Objetos LineFile Un elemento LineFile es una línea completa de caracteres, que acaba mediante una plataforma dependiente de un carácter de final de línea. Las operaciones de escritura sobre un LineFile conservan la terminación original. Objetos TextFile Un elemento TextFile es un único carácter. La clase TextFile se utiliza cuando un fichero no está orientado a líneas (Ej. Cuando se necesita buscar un carácter e insertar otro carácter o cadena de caracteres). Crear FileNames y objetos Fichero Crear un FileName myNewFN = FileName.Make (“c:\train\data.txt”) Crear un FileName mediante la conversión de una cadena theWinFN = “c:\work\data.txt”.AsFileName theUnixFN = “/usr1/data.txt”.AsFileName theMacFN = “Disk1:work:data”.AsFileName ‘Windows Unix ‘Macintos Enumeraciones de permiso de ficheros FILE_PERM_READ - abre el fichero con permiso de lectura FILE_PERM_WRITE - abre el fichero con permiso de escritura FILE_PERM_APPEND - abre el fichero para añadir FILE_PERM_MODIFY - abre el fichero para modificarlo Crear un LineFile theLFile = LineFile.Make (theWinFN.#FILE_PERM_READ) Crear FileNames y objetos Fichero Cada fichero tiene asociado un FileName. Usted puede crear un FileName usando la cadena de la ruta correspondiente para su plataforma. Puede utilizar la cadena de la ruta de dos formas para crear un FileName: usando el requerimiento Make en una clase FileName, o utilizando el requerimiento AsFileName en la cadena, para convertirla a un fichero FileName. Use el requerimiento Make en la clase LineFile o TextFile para crear un objeto Fichero. EL requerimiento Make necesita como parámetros un FileName y una enumeración que indica como quiere utilizar el fichero. Puede abrir un fichero ya sea LineFile o TexFile. Enumeraciones de fichero Los ficheros pueden abrirse para leer, escribir, modificar o añadir. Use la enumeración de FilePermEnum para especificar los permisos de un nuevo objeto fichero. Ambos, #FILE_PERM_WRITE y #FILE_PERM_APPEND abren un nuevo fichero o uno existente para escritura: la diferencia es que #FILE_PERM_WRITE borra lo que tenía escrito el fichero anteriormente, y #FILE_PERM_APPEND, no borra el contenido del fichero. #FILE_PERM_READ, sólo permite abrir un fichero existente. Para más información sobre los permisos de un fichero para lectura y escritura, vea la ayuda en línea de las enumeraciones #FILE_PERM_MODIFY y #FILE_PERM_CLEARMODIFY. Ficheros de texto Ejemplo de creación de un fichero de texto: theTfile = TextFile.Make (theWinFN, #FILE_PERM_WRITE) Utilizar FileDialog FileDialog visualiza una lista de ficheros y directorios en la caja de diálogo Crear o recuperar nombres de ficheros Show devuelve el fichero seleccionado ReturnFiles devuelve una lista de ficheros seleccionados Put se utiliza para crear ficheros nuevos Obtener un filename del usuario y crear un fichero de texto myFN= FileDialog.Show(“*.txt”,“Text File”,“Show Files”) theFile = TextFile.Make (myFN, #FILE_PERM_READ) Figura Utilizar FileDialog Un objeto FileDialog visualiza una lista de ficheros y directorios en una caja de diálogo. El requerimiento Show, ReturnFiles, y Put permiten al usuario crear un nuevo fichero, o seleccionar uno o varios ficheros. Existen varias razones para utilizar un FileDialog: puede evitarse escribir rutas sobre plataformas específicas tales que algunas pueden necesitar ser actualizadas (ej. Para una aplicación de plataforma híbrida o después de mover los datos), y es el usuario quien elige y da nombre a todos los ficheros. Show El requerimiento Show muestra al usuario la selección de un único fichero, y devuelve un objeto FileName. El requerimiento Show necesita tres parámetros: un patrón (Ej. *.ave), el nombre en la lista de ficheros de la lista de tipo desplegable, y un título para la caja de diálogo. ReturnFiles El requerimiento ReturnFiles permite al usuario seleccionar uno o más ficheros, de uno o más tipos. Devuelve una lista de FileNames seleccionados. ReturnFiles necesita cuatro parámetros: una lista de patrones (ej. *.ave, *.txt), una lista de nombres de los patrones en los ficheros de la lista de tipo desplegable (ej. Scripts (*.ave), TextFiles (*.txt), un título para la caja de diálogo, y un índice que indica el patrón por defecto. Put El requerimiento Put permite al usuario especificar un fichero de salida, y devuelve un FileName. Put necesita tres parámetros: una ruta por defecto para el fichero, un patrón, y un título para la caja de diálogo. Si el fichero especificado ya existe, se le requerirá al usuario que conteste a la pregunta “Replace Existing File? (¿Desea reemplazar el fichero existente?), con un yes o un no. Leer y escribir operaciones Leer elementos de un fichero theString = theLineFile.ReadElt theChar = theTextFile.ReadElt Escribir en un fichero theFile.IsWritable theLineFile.WriteElt (theString) theFile.Close Encontrar el número de elementos del fichero theFile.GetSize Manipular cadenas theString.BasicTrim (leftCharacters, rightCharacters) theString.Contains (anotherString) theString.Substitute (someString, anotherString) Manejar el puntero del fichero theFile.IsAtEnd theFile.GoToBeg theFile.GotoEnd theFile.SetPos (aNumber) theFile.GetPos Leer y escribir operaciones Los ficheros acceden a un elemento cada vez. Lea los ficheros con el requerimiento ReadElt. El requerimiento ReadElt devuelve tanto una línea completa de caracteres o como un único carácter, dependiendo de que el fichero sea un LineFile o un TextFile. Escribir ficheros Escriba los ficheros con el requerimiento WriteElt. Cuando escriba en ficheros, hay requerimientos que le permiten conocer qué tamaño tiene el fichero (GetSize), y si en el fichero se puede escribir (IsWritable). Después de escribir en un fichero, deberá cerrarlo. Use el requerimiento Close para cerrar el fichero. Manipular cadenas Después de leer una línea desde un LineFile, hay algunos requerimientos de manipulación de cadenas que puede usar para modificar la cadena. Diríjase con String en la ayuda en línea para obtener un listado completo de requerimientos. Puede también convertir una cadena a una lista y usar los requerimientos de una lista. Manejar el puntero del fichero Puede utilizar requerimientos para situar el puntero del fichero en el comienzo del fichero (GoToBeg), al final del fichero (GoToEnd), o en una posición especifica mediante un índice de posición que comienza a 0 (SetPos). También puede chequear cuando se haya leído el último registro (IsAtEnd). Leer el final del fichero theFN = “c:\work\data.txt”.AsFileName theLFile = LineFile.Make (theFN, #theFN, #FILE_PERM_READ) while (theLFile.IsAtEnd.Not) theString = theFile.ReadElt MsgBox.Info (“Reading...” ++ theString, “ end MsgBox.Info (“End of File”, “ theLFile.Close Figura Figura “) “) Leer el final del fichero Utilizando el bucle While, puede leer elementos desde el fichero hasta que se alcance el final del mismo. Puede usar el requerimiento IsAtEnd para chequear si el puntero de fichero está al final del fichero, y use este test como condición del bucle While. Cuando se alcanza el final del fichero, se devuelve Nil. También puede iniciar el bucle While con un Booleano y testear si cada elemento leído es igual a Nil. En ese caso, el Booleano habrá cambiado y el bucle se detendrá. Done = false while (done.not) theString = theFile.ReadElt if (theString <> nill) then MsgBox.Info(“Line #:“+(theLFile.GetPos-1).AsString else done = true MsgBox.Info (“end of File”, “ “) end end +NL+theString,“Reading”,” ”) Para dejar ver al usuario cada línea, o verificar que fichero se está leyendo correctamente, puede usar MsgBox con el requerimiento Info para visualizar la cadena que se está leyendo. Ejercicio A: Leer y escribir ficheros Paso 1 Iniciar ArcView y abrir un proyecto Paso 2 Leer líneas desde un fichero y escribirlas en un segundo fichero Paso 3 Almacenar entradas de usuario en un fichero de texto Paso 4 Leer desde varios ficheros y escribir en un fichero nuevo (opcional) Paso 5 Examinar y reformar cadenas Ejercicio A: Leer y escribir ficheros En este ejercicio, leerá y escribirá ficheros de texto. Obtendrá información desde el usuario, entonces cree un fichero y añada datos desde un fichero de texto. Paso 1 Iniciar ArcView y abrir un proyecto Si es necesario, inicie ArcView. Desde el menú File (Archivo), elija Open Project (Abrir Proyecto). Muévase al directorio exercice. Haga doble clic en exa.apr para abrir el proyecto de este ejercicio. Cuando se abra el proyecto, verá la ventana del proyecto. Paso 2 Leer líneas desde un fichero y escribirlos en un segundo fichero En este paso, creará dos ficheros. Como lee los registros desde la primera línea, los escribirá en el segundo fichero. Desde la ventana del proyecto, abra el Exercice EXA, Step 2. Examine el fichero de texto gisfile1.txt que aparece a continuación. Este es el fichero desde el que leerá. Almost 30 years ago, a number of geographers conceived a system for storing and organizing espatial information in a computer. Over the past decade, this growing technology has come to be know as Geographic Information System (GIS). Paralleling advancements in the technology has been the growth of GIS applications. From highquality cartography to land use planning, natural resource management, environmental assessment and planning, tax mapping, ecological research, emergency vehicle dispatch, demographic research, utilities, business applications, and more, GIS promises to be one of the largest computer applications ever to emerge. Cree una variable llamada readFN enviando a la clase FileName el requerimiento Make con la ruta $AVETRAIN/data/gisfile1.txt. Cree una variable llamada readFile enviando a la clase LineFile al requerimiento Make. Los parámetros que el requerimiento Make necesita son readFN y la enumeración para el permiso de lectura es #FILE_PERM_READ. Luego, cree un fichero en su directorio pavetemp en el que escribirá las líneas que lea desde gisfile1.txt. Cree una variable llamada writeFN enviando a la clase FileName el requerimiento Make con la cadena <ruta de pavetemp>/gisfile2.txt. Cree una variable llamada writeFile enviando a la clase LineFile el requerimiento Make. Los parámetros que el requerimiento Make necesita son writeFN y la enumeración para el permiso de escritura es #FILE_PERM_WRITE. Cree un bucle para leer todas las líneas en gisfile1.txt y escribirlas en gisfile2.txt. Construya un bucle While con la condición creada, enviando a readFile el requerimiento IsAtEnd con el requerimiento No. Defina la variable llamada theString enviando a readFile el requerimiento ReadElt para leer un elemento. Para escribir el elemento, envíe a writeFile el requerimiento writeElt con theString. Fin de la iteración. Después de leer y escribir, envíe a readFile y writeFile el requerimiento Close. Compile y ejecute el programa. Para examinar los resultados, desde la ventana del proyecto, abra el nuevo script. Utilice un nuevo script. Use el botón Load Text File (Cargar Fichero de Texto) para cargar gisfile2.txt desde su directorio pavetemp en el script. Figura Ahora compárelo con gisfile1.txt como se mostró al comienzo del paso (pág. A-16) Ahora, en lugar de escribir los nombres de los ficheros en el código del script, permitirá al usuario seleccionar un fichero para leer desde él y crear uno nuevo para escribir en él. Primero, comente las líneas que definen las variables readFN y writeFN. Luego, cree una caja de diálogo que permita al usuario buscar directorios y elegir desde una lista con todos los ficheros, los de extensión .txt. Cree una nueva variable readFN enviando FileDialog con el requerimiento Show. Para los parámetros de Show, utilice las cadenas *.txt para el patrón, TextFiles (*.txt) para el texto en la caja Type, y Select Files como título de la caja. Ahora cree una caja de diálogo que permita al usuario dar nombre al fichero de salida. También listará todos los ficheros que tengan extensión .txt. Cree un nuevo writeFN enviando FileDialog con el requerimiento Put. Como parámetros, use las cadenas <ruta de pavetemp>/newfile.txt con el requerimiento AsFileName como nombre del fichero por defecto, *.txt como patrón y CreateFile para el título de la caja. Compile y ejecute el script. En la caja de diálogo creada elija un fichero de texto bajo e l directorio $AVETRAIN /data para el fichero de entrada. En la caja de diálogo, cambie o deje el nombre por defecto del fichero de salida. Para examinar los resultados, desde la ventana de proyecto, abra el nuevo script. Use el botón Load Text File (Cargar Fichero de Texto) para cargar <ruta de pavetemp>/<su fichero > en el script. Paso 3 Almacenar entradas de usuario en un fichero de texto Pedirá al usuario la entrada de datos personalizados y los escribirá en un fichero. Utilizará una caja de mensaje YesNo para que el usuario conteste si quiere continuar introduciendo datos. Abra el script llamado Exercice EXA, Step 3, examine el código que hay ya en el script, el cual muestra en pantalla una caja de mensaje MultiInput. Cree este código en un ejercicio. theLabels = {“Company Name”,”Address”, “Phone number”) theDefaults = {“ESRI”, “380 New York Street”, “(909) 793-2853”) theList = MsgBox.MultiInput (“Enter Customer Data”,”Customer Database “, theLabels, theDefaults) Cree un fichero para escribir las entradas del usuario, cree una variable llamada theFN enviando la cadena <ruta de pavetemp>/customer.dat con el requerimiento AsFileName. Cree una variable llamada theWriteFile enviando el requerimiento Make a LineFile. El requerimiento Make necesita los parámetros theFN y la enumeración para el permiso de añadir al fichero #FILE_PERM_APPEND. Haga el bucle para preguntar al usuario. Cuando el usuario conteste yes, la entrada se visualizará. -Muévase a la línea después del comentario de la caja de entrada. Use el bucle While y como condición, envíe el requerimiento YesNo a MsgBox. Como mensaje use ¿Do yo want to add another Record?, como título use Customer Data y asigne por defecto el valor True. La caja MultiInput pregunta al usuario por el nombre de la compañía, la dirección y el número de teléfono, y crea una variable llamada theList (este código ya estaba en el script). Después de la línea que crea la variable theList, inserte una nueva línea. Ahora cree el código para escribir los nuevos datos al fichero de salida. Para escribir tres elementos desde una lista en el fichero, envíe el requerimiento WriteElt a theWriteFile. El parámetro para WriteElt necesita tres cadenas. Cree la primera cadena enviando el requerimiento Get a theList con el índice 0. Cree las otras dos cadenas de igual forma, usando los índices 1 y 2. Concatene las tres cadenas con ++. Fin del bucle While. Cuando el usuario conteste no, el fichero de texto se cerrará. Envíe el requerimiento Close a WriteFile. Compile y ejecute el script. Introduzca algunos registros personalizados en el formulario. Puede usar la tecla de tabulación <Tab> para moverse por las cajas de entrada. Examine los resultados, desde la ventana de proyecto, abra un nuevo script. Use el botón Load Text File para cargar <ruta de pavetemp>/customer.dat en el script. Ejecute el script de nuevo, añada alguno registros más. Cargue <ruta de pavetemp>/ customer.dat en el script de nuevo, y observe que los registros se han añadido correctamente (ej. El fichero no es borrado cada vez). Paso 4 Leer desde varios ficheros y escribir en un fichero nuevo (opcional) Escriba un script que lea las primeras líneas de una muestra de scripts y escriba la información de la cabecera en un fichero de salida. Abra el script, Exercice EXA, Step 4. Para crear una lista de ficheros (*.ave), cree una variable llamada scriptFNList y envíe a FileDialog el requerimiento ReturnFiles. Para la lista de patrones, use la cadena *.ave y para la lista de etiquetas use Avenue Scripts (*.ave). Debido a que podría tener múltiples patrones y etiquetas, sitúe cada una de esas cadenas en una lista ({}). El título de la caja de diálogo es Select Scripts, y use 0 para el patrón por defecto. Cree una variable llamada writeFN enviando al objeto FileName al requerimiento Make. pavetemp>/headers.txt. Use como parámetro la cadena <ruta de Cree una variable para el nuevo fichero llamada writeFile enviando a LineFile el requerimiento Make y la enumeración para el permiso de escritura es #FILE_PERM_WRITE. Cree una variable llamada writeFile enviando a la clase LineFile el requerimiento Make. Los parámetros que el requerimiento Make necesita son writeFN y la enumeración para el permiso de escritura es #FILE_PERM_WRITE. Cree un bucle que abra cada fichero para leer, creando una variable llamada readFile. Enviando el requerimiento Make a LineFile con scriptFN y #FILE_PERM_READ. Cree otro un bucle For Each que procese las cuatro primeras líneas (1..4) en cada fichero. Cree una variable llamada theString usando readFile con el requerimiento ReadElt. Envíe a writeFile el requerimiento writeElt con theString como parámetro. Fin de la iteración For Each Cierre readFile con el requerimiento Close. Fin del otro bucle For Each. Cierre el writeFile. Compile y ejecute el script. Muévase hasta $AVETRAIN/scripts elija unos ficheros de los que leerá sus cabeceras. Para examinar los resultados, desde la ventana de proyecto, abra un nuevo script. Utilice el botón Load Text File (Cargar Fichero de Texto) para cargar <ruta de pavetemp>/headers.txt en el script. Paso 5 Examinar y reformar cadenas En este paso, modifique el script creado en el paso 4 a un script con caracteres extra en la información de cabecera. Usando este script, puede crear un fichero de salida describiendo toda lo que hace la muestra de scripts. Se muestra a continuación, la parte superior de la información de la cabecera para una muestra de scripts de Avenue. Observe los caracteres especiales y las marcas de comentario. La información que describe lo que hace el script se encuentra en las diez primeras líneas. ‘ @(#) addgshp.ave 1.3 8/18/94 18:37:52 ‘ Name: AddGraphicShapesToView ‘ ‘Headline:A sample script wich demonstrates creating various GraphicShapes, ‘ changing symbology, and adding these to the GraphicList of a View. ‘ ‘Self: ‘ Desde la ventana del proyecto, abra Exercice EXA, Step 5. Modifique el bucle For Each. Para leer las diez primeras líneas, cambie el rango de 1..4 a 1..10. Después de leer el elemento (ReadElt), use un estamento If Then para chequear if theString contains la cadena Self. Then, si se cumple la condición del if, break sale del bucle de este script y va al siguiente script. Else, crea una variable llamada trimString y envía a theString el requerimiento BasicTrim acompañado con ‘ @(#) a la izquierda y nada a la derecha. Asigne de nuevo trimString, esta vez acompañada sólo con el apóstofe a la izquierda y nada a la derecha. Para el parámetro WriteElt, cambie theString a trimString. Find del estamento if Then Else. Compile y ejecute el script. Muévase al directorio $AVETRAIN /scripts y elija unos pocos ficheros para leer sus cabeceras. Para examinar los resultados, desde la ventana de proyecto, abra un nuevo script. Use el botón Load Text File (Cargar Fichero de Texto) para cargar <ruta de pavetemp>/headers.txt en el script. Fin A P É N D I C E B Comunicación con otro software Comunicación con otro software....................................................................... B-2 Ejecutar comandos del sistema.................................................................. Conexión a una base de datos SQL........................................................... B-4 B-6 Interaplicación de comunicación (IAC)............................................................. B-8 Servidor de aplicaciones a un cliente de ArcView...................................... B-10 Aplicaciones de un cliente a un servidor de ArcView................................. B-12 Llamada a Procedimientos Remotos (RPC)..................................................... B-14 Un cliente de ArcView con un servidor de ARC/INFO................................ B-16 Un servidor de ArcView y un cliente de ARC/INFO.................................... B-18 Ejercicio B1: Comunicación con ARC/INFO..................................................... B-21 Cambio de Datos Dinámico (DDE) ................................................................... Un cliente de ArcView con un servidor de Excel........................................ B-28 El DDEServer de ArcView.......................................................................... B-30 Ejercicio B2: Comunicación con Excel............................................................. B-33 B-26 Comunicación con otro software Ejecutar comandos del sistema Conexión a bases de datos SQL Usar protocolos de interaplicación Comunicación con otro software En esta sección, examinará una variedad de técnicas que permiten a ArcView GIS comunicarse con otras aplicaciones. Verá como Avenue puede enviar requerimientos a otros programas a través de la clase System, la clase SQLCon y las clases que soportan los protocolos RPC y DDE . Ejecutar comandos del sistema Ejemplos en Windows ‘ abre Excel con System.Execute (“c:\excel\excel.exe c:\sheet1.xls”) Ejecuta el registro de sonido System.Execute (“c:\soundrec.exe c:\windows\chimes.wav”) Ejemplos en UNIX ‘ Inicia ARC/INFO y ejecuta un programa AML System.EXecute (“arc \ &run xyz.zml &”) ‘ Ejecuta un fichero audio audioFile = “mycoice.zu” commandString = “cat home/” + audioFile + “/dev/audio &” System.Execute (commandString) Ejecutar comandos del sistema El requerimiento Execute en la clase System proporciona un significado dirigido al envíode una cadena de comando de una plataforma específica al sistema operativo. La cadena puede contener adicionalmente parámetros que requieren los comandos del sistema o aplicación. La Clase System La clase system proporciona otros requerimientos que permiten operaciones no definidas con consistencia mediante distintas plataformas. Todos los requerimientos se envían a la clase System. Por ejemplo, puede sonar un pitido (Beep) o un fichero con sonido (PlaySound). Puede chequear la información del sistema de igual modo que las variables del entorno utilizando GetEnvVars y SetEnvVars, tome el sistema operativo actual con GetOS, y la información sobre la memoria con GetAvailableMemory, IsMemoryAvailable y PrintMemory. Para más información sobre la pantalla, mire los requerimientos GetLook y SetLook, SetScreenSizeInches, ReturnScreenSizePixels y RefreshWindows. Para chequear las teclas pulsadas y el clic del ratón, mire los requerimientos IsAltKeyDown, IsControlKeyDown y IsDoubleClick. Conexión a una base de datos SQL Ejecutar bases de datos theSQLList = SQLCon.GetConnections mySQLCon=MsgBox.Choice(theSQLList,“Pick a database”, “SQL Connection”) Acceso a bases de datos mySQLCon = SQLCon.Find (“Oracle”) mySQLCon.Login (“user/password”) Crear una Vtab y una tabla sqlExp = “select * from t1.tab “ theVTab = VTab.MakeSQL (mySQLCon, sqlExp) theTable = Table.Make (theVTab) Enviar una expresión SQL al servidor ok = mySQLCon.ExecuteSQL (sqlxp) Conexión a una base de datos SQL Use la clase SQL para encontrar o consultar conexiones SQL. Puede tomar una lista de todas las bases de datos con GetConnections. Para crear la conexión, puede utilizar la lista, tomar una base de datos mediante su índice numérico, o permita al usuario que seleccione la base de datos desde una caja de mensaje. También puede usar el requerimiento Find para crear una conexión que proporcione un nombre de base de datos. Use el requerimiento Login para acceder al servidor con una cadena de entrada. Una vez que la conexión está hecha, defina una expresión de selección y cree una VTab con el requerimiento MakeSQL y la expresión. Entonces cree el documento tabla con la VTab. Enviar un comando al servidor SQL Envíe los procesos al servidor SQL utilizando el requerimiento ExecuteSQL. Puede usarla para seleccionar, actualizar, insertar o borrar información desde la base de datos SQL. Este requerimiento devuelve un booleano indicando si el proceso se realizó con éxito. Plataformas UNIX La interfaz de base de datos de ARC/INFO (DBI) se utiliza para conectar a bases de datos SQL en plataformas UNIX. el fichero $AVHOME/etc/default.db es el fichero de definición que contiene la información de conexión para cada base de datos. Plataformas PC (bajo Windows o NT) Los conductores de la base de datos relacional abierta (ODBC) se utilizan para conectar a bases de datos SQL. ESRI solo testea y soporta el paquete Intersolv DataDirect ODBC. EL conductor define las conexiones y métodos de acceso a registros. Los scripts que contienen la clase SQLCon o el requerimiento MakeSQL no pueden ejecutarse desde el editor de scripts. Debe asignar primero al script un botón o elección de menú. Interaplicación de comunicación (IAC) Establecer comunicación entre las aplicaciones cliente/servidor Un cliente hace un requerimientos a un servidor; el servidor contesta Protocolos de plataformas específicas Windows-Dynamic Data Exchange (DDE) UNIX - Llamadas a procedimientos remotos (RPC) Macintosh - eventos Apple y AppleScript Cliente Servidor requerimiento requerimiento respuesta respuesta Red Interaplicación de comunicación (IAC) La interaplicación de la comunicación (IAC) establece comunicación entre el cliente y las aplicaciones del servidor. La aplicación del servidor llama a funciones o requerimientos de datos desde la aplicación del servidor, y el servidor procesa el requerimiento y contesta al cliente. ArcView proporciona una plataforma específica con soporte para IAC en las siguientes plataformas: Intercambio Dinámico de Datos(DDE) para Windows Llamada a procedimientos remotos (RPC) para Unix Eventos Apple y AppleScripts para Macintosh Varias clases, tales como DDEClient, DDEServer, RPCClient y RPCServer,han sido implementadas para soportar estos protocolos de plataformas específicas. Servidor de aplicaciones a un cliente de ArcView Paquetes estadísticos Software de procesamiento de imágenes ARC/INFO GIS Servidor Hoja de cálculo Paquete Estadístico Procesamiento Imágenes Usuario ArcView Cliente ARC/INFO Hoja de Cálculo Servidor de aplicaciones a un cliente de ArcView Puede utilizar el cliente de ArcView para conectarse a una aplicación de un servidor que entienda el protocolo IAC. ArcView puede preguntar a un paquete estadístico para calcular sofisticadas estadísticas y devolver los resultados, o puede preguntar a un software de procesamiento de imágenes para manipular una imagen que va a ser usada como tema en ArcView. ARC/INFO puede ser usado para permitir operaciones GIS sofisticadas y generar nuevas fuentes de datos que pueden ser utilizadas por ArcView. ArcView puede pasar datos a una hoja de cálculo y tomar la ventaja de las funciones de manipulación de datos de una hoja de cálculo, entonces pasar los datos y cargarlos en un tabla de ArcView. Aplicaciones de un cliente a un servidor de ArcView Vehículo de rastreo Estaciones supervisoras Direcciones personalizadas Cliente Vehículo de rastreo Estaciones Supervisoras Direcciones Personalizadas Servidor ArcView Usuario Aplicaciones de un cliente a un servidor de ArcView Puede utilizar ArcView como un servidor a aplicaciones cliente. El cliente puede proporcionar a ArcView nuevas posiciones de un vehículo moviéndose en una vista. El cliente también puede estar actualizando los valores de los atributos que afectan a la simbología o clasificación de una entidad en una vista. Por ejemplo, una estación de tráfico supervisora recibe información actualizada sobre la cantidad de trafico a cada hora. Esta información podría ser enviada a ArcView y ArcView cambiaría el color de la entidad estación en la vista. O el cliente puede enviar a ArcView una dirección personalizada, y entonces ArcView devolver las coordenadas x e y de la dirección. Llamada a Procedimientos Remotos (RPC) Permite la comunicación entre clientes y servidores en plataformas UNIX Un servidor RPC se identifica por El nombre de la máquina servidor Número de identificación del servidor Número de versión El cliente usa esta información para establecer una conexión RPC El servidor RPC proporciona una serie de funciones al cliente Cada función se identifica con un procedimiento ID Llamada a Procedimientos Remotos (RPC) RPC es un protocolo de comunicación para ejecutar aplicaciones en plataformas UNIX. RPC permite a un servidor proporcionar una serie de funciones al cliente. El servidor y el cliente pueden se máquinas diferentes en una red. El servidor es identificado únicamente por tres componentes: el nombre anfitrión de la máquina en la que reside, un número ID del servidor, y un número de la versión del programa. El cliente usa esta información para establecer la conexión. Cada tipo de función que proporciona un servidor es identificada por un número de identificación del procedimiento. El comando de UNIX rpcinfo -p <nombre anfitrión> puede utilizarse para encontrar los posibles servidores en un anfitrión específico. Un cliente de ArcView con un servidor de ARC/INFO Funciones de un servidor ARC/INFO 1- ejecuta la cadena de comando 2- devuelve el estado del proceso especificado Establece el servidor ARC/INFO usando [ IACOPEN ] Devuelve información a la consola o fichero Arc: &set estatus := [ IACOPEN ] connect_files Host : rhino Program no : 40000000 Version no: 1 Establece el cliente ArcView client = RPCClient.Make (“rhino”, 0x40000000,1) Crea una cadena de comando y la ejecuta en el servidor theCommand = “intersect cov1 cov2 cov3” jobID = client.Execute (1, theCommand, theString) Chequea si el proceso ha finalizado jobStatus = client.Execute (2, jobID, String) if (jobStatus.Extract (0) = “DONE”) then MsgBox.Info (“ El proceso de ARC/INFO ha acabado...”,””) end Un cliente de ArcView con un servidor de ARC/INFO Puede usar ARC/INFO como un servidor RPC para un cliente ArcView. Los dos procedimientos que soporta ARC/INFO son la ejecución de la cadena de comando (procedimiento ID=1), y devolver el estado del proceso (procedimiento ID=2). Crear el servidor y cliente Primero cree el servidor ARC/INFO usando la función de AML [IACOPEN] que devuelve la información necesaria para el cliente de ArcView: el nombre anfitrión de la máquina del servidor, el número ID del servidor y el número de la versión del programa. Opcionalmente, esta información puede ser capturada en un fichero. Establezca un cliente de ArcView usando la clase RPCClient con el requerimiento Make y la información devuelta para estos parámetros. Cierre la conexión del cliente de ArcView con el requerimiento Close. Ejecutar un comando Cree una cadena de comando, entonces, use el requerimiento Execute para ejecutar el comando en el servidor. Los parámetros del requerimiento de Execute son, un número de procedimiento, una cadena de comando y la clase devuelta. Execute devuelve un Nil, cadena, booleano o número. El procedimiento requerido debe devolver datos que puedan ser convertidos a una de estas clases. Chequear si el proceso se ha completado En el siguiente ejemplo, ARC/INFO crea una nueva cobertura que usted quiere añadir como un tema de ArcView. Para averiguar si ARC/INFO ha completado el proceso, use el requerimiento Execute con el procedimiento ID-2. Compruebe que se devuelve la cadena DONE. Cuando el proceso se ha completado, puede añadir el nuevo tema. Error de chequeo El RPCClient tiene varios requerimientos de chequeo de errores, incluyendo GetErrorID, GetErrorMessage y HasError. Un servidor de ArcView y un cliente de ARC/INFO Funciones de un servidor ArcView 1- ejecución de script Establece ArcView como servidor RPCServer.Start (0x40000000,1) Establece ARC/INFO como cliente Arc: &s x [IACREQUEST %server% 1 “av.run (aScript, “”) “ stat) Desconecta ArcView como servidor RPCServer.Stop Un servidor de ArcView y un cliente de ARC/INFO Puede utilizar ArcView como un servidor RPC para un cliente ARC/INFO. Inicie el servidor de ArcView con el requerimiento Start en la clase RPCServer. Proporcione el servidor ID y el número de la versión como información de conexión. Sólo un servidor RPC puede existir para una aplicación en ArcView. Use RPCServer con el requerimiento Stop para detener el uso de ArcView como un servidor. Establezca el cliente ARC/INFO con la función de AML [IACCONNECT]. Ésta requiere información de conexión (la cual es creada por [IACOPEN], y un estado de conexión. [IACREQUEST] ejecuta un script en el servidor y devuelve una cadena que representa el último objeto creado. El servidor RPC de ArcView soporta una función, identificada por el número 1. Ejercicio B1: Comunicaión con ARC/INFO Paso 1 Iniciar ArcView y abrir un proyecto Paso 2 Examinar una muestra de scripts Paso 3 Asociar la conexión y los scripts del servidor con los botones Paso 4 Establecer el servidor ARC/INFO Paso 5 Enviar comandos al servidor desde un cliente Ejercicio B1: Comunicaión con ARC/INFO En este ejercicio, usará los scripts de Avenue para conectarse con ARC/INFO. Aprenderá como establecer a ArcView como cliente y a ARC/INFO como servidor. Paso 1 Iniciar ArcView y abrir un proyecto Si es necesario inicie ArcView. Desde el menú File (Archivo), elija Open Project (Abrir Proyecto). Muévase al directorio exercice. Haga doble clic en exb1.apr para abrir el proyecto para este ejercicio. Cuando se abra el proyecto, verá la vista Readlands con dos temas activos, Flood Zone y Landuse. Paso 2 Examinar una muestra de scripts Hay dos scripts en el proyecto. El script ConnectToAlServer conecta ARC/INFO como servidor; el script AlServer usa el servidor ARC/INFO para permitir la unión de las coberturas de polígonos Flood y Landuse. Los dos scripts se incluyen en la muestra de scripts proporcionados por ArcView. Para examinar estos scripts, vaya al menú Help (Ayuda) y haga clic en Help Topics (Ayuda de Temas) para abrir la ayuda de ArcView. Haga clic en Find (Encontrar) y teclee el nombre de cada uno de los scripts de la muestra: ConnectToAIServer y AIServer. Examine el código fuente para cada uno de esos scripts. Paso 3 Asociar la conexión y los scripts del servidor con los botones Los documentos scripts llamados ConnectToAIServer y AIServer han sido creados en su proyecto. Creará dos botones y asignará estos scripts con el evento Clic del botón. Abra la caja de diálogo de personalización y añada dos botones a la GUI de la vista. Añada los nuevos botones a la derecha del botón Help (Ayuda). Para el nuevo botón a la derecha, asígnele en la propiedad Icon el icono C y asóciele el script ConnectToAIServer con la propiedad Click. Para el nuevo botón a la izquierda, asígnele en la propiedad Icon el icono S y asóciele el script AIServer con la propiedad Click. Cierre la caja de diálogo de personalización. Paso 4 Establecer el servidor ARC/INFO Ahora iniciará ARC/INFO y usará una función del AML para dar el nombre anfitrión, el ID del servidor y el número de la versión. Muévase a la ventana de UNIX, y con el prompt del UNIX teclee arc para iniciar ARC/INFO. Promp de Unix :> arc Use el directivo &type con la función [ IACOPEN ] para iniciar el servidor de ARC/INFO, y cree un fichero llamado connect.iac que contenga la información de conexión: nombre anfitrión, número del programa y versión del programa. Arc: &type [IACOPEN] connect.iac Hsot: <su nombre> Program no : 40000000 Version no : 1 0 Si la segunda línea no es 0, se producirá un error; desconecte el servidor de ARC/INFO par teclear &Type [ IACCLOSE ]. Luego, editará el script AIServer y remplazará el nombre anfitrión (Rhino) con el suyo. Con la ventana del proyecto activa, haga clic en el icono Scripts, entonces haga doble clic en el script AIServer para abrirlo. Muévase a la primera línea después de los comentarios y cambie “rhino” por su anfitrión. Client = RPCClient.Make (“rhino”, 0x40000000,1) Guarde los cambios y compile es script. Paso 5 Enviar comandos al servidor desde un cliente Ponga activa la vista Redlands. Haga clic en el botón C para leer la conexión del fichero y establecer ARC/INFO como servidor. En la caja de diálogo de conexión, elija su fichero de conexión , connect.iac ( busque en su directorio home). Haga clic en el botón S para enviar a ARC/INFO el comando UNION para superponer los dos temas de polígonos activos. Llame a la cobertura de salida luflood. Haga clic en la caja de diálogo de sintaxis ARC/INFO. ArcView está ocupado hasta que ARC/INFO finaliza la unión de los dos temas de polígonos. El script AIServer encuentra las coberturas que fueron usadas para crear los temas landuse y flood. Si ejecuta el comando UNION de ARC/INFO, el cual superpone las coberturas y crea una nueva cobertura, se creará un tema de salida llamado luflood desde la nueva cobertura. Fin Cambio de Datos Dinámico (DDE) Permite el intercambio de datos entre dos aplicaciones de Windows El intercambio de datos se llama conversación Una conversación es únicamente identificada por el nombre de la aplicación y tema El tema describe el tipo de datos intercambiados Los datos han sido intercambiados son referidos como un item (campo). Cambio de Datos Dinámico (DDE) El Intercambio Dinámico de Datos (DDE) es un protocolo para transferir datos entre aplicaciones ejecutadas bajo Microsoft ® Windows. La aplicación cliente inicia un requerimiento y la aplicación servidor responde. El cliente y el servidor son referidos a la vez como destino y fuente. Una conversación DDE Las aplicaciones se intercambian información mediante una conversación. Cada conversación es únicamente definida por dos partes de información: la aplicación del servidor y el tema. El nombre de la aplicación es usualmente el nombre del fichero ejecutable, sin la extensión del fichero (ej. MSAccess para Microsoft Access ™). Los temas son categorías de datos que el servidor entiende. Cada servidor soporta varios temas; la mayoría de los servidores soporta el tema del sistema. Consulte su documentación de la aplicación para ver que temas soporta. Las partes de datos que se intercambian se llaman items (campos). Muestra de scripts DDE Use la etiqueta Find (Encontrar) en la ayuda de ArcView para localizar y examinar estos scripts: DDECreateSpreadsheet y GetDDESystemItems. Un cliente de ArcView con un servidor de Excel Establece el cliente ArcView y el servidor Excel exitClient = DDEClient.Make (“excel”, “system”) Inicia las siguientes transacciones ejecuta - provoca que el servidor ejecute un comando requiere- envía información desde el servidor al cliente poke - envía información desde el cliente al servidor Crea una hoja de cálculo ex1Client.Execute (“[ New (1,0,FALSE ]”) Recupera información desde la hoja de cálculo selection = ex1Client.REquest (“selection”) ‘ analiza el nombre de la hoja de cálculo spreadSheet = selection.Left (selection.IndexOf (“!”)) Inicia una nueva conversación con el nuevo tema asClient = DDEClient.Make (“excel”, spreadSheet) Envía un valor a Excel asClient.Poke(“R1C1”, “234567”) Un cliente de ArcView con un servidor de Excel Establezca el cliente de ArcView y la conversación con la clase DDEClient y el requerimiento Make. Use la aplicación y el tema para los parámetros de la nueva conversación. Para desconectar el cliente desde el servidor, use el requerimiento Close. Transacciones Use el DDEClient par iniciar una de las diversas transacciones. Execute hace que el servidor ejecute las cadenas de comando recibidas desde el cliente. Request y Poke transfieren datos. Request devuelve un campo del servidor al cliente. Poke envía un campo desde el cliente al servidor. Chequeo de errores El DDEClient tiene diversos requerimientos de chequeo de errores incluyendo GetErrorID, GetErrorMessage y HasError. Puede usarlos para chequear si la conexión se hizo con éxito con el siguiente código: exClient = DDEClient.Make ("Excel ", "System") if (exlClient.HasError ) then MsgBox.Error (exlClient.GetErrorMsg, "") exit end El DDEServer de ArcView El servidor de ArcView se inicia cuando se abre la aplicación Soporta los temas del sistema Soporta los campos de cadena El servidor DDE de ArcView soporta las siguientes transacciones: ejecuta - ArcView ejecuta las cadenas de comando desde el cliente requiere - ArcView devuelve los resultados del script al cliente poke- el cliente envía los datos para usar como entrada a un script El servidor de ArcView se detiene cuando la aplicación se cierra El DDEServer de ArcView Cuando se abre la aplicación en ArcView, el DDEServer de ArcView se inicia y llama a ArcView. Sólo hay un servidor de ArcView iniciado para la aplicación. El proyecto de arranque por defecto inicia el DDEServer y el proyecto por defecto de cierre para el DDEServer. El servidor de ArcView soporta sólo el tema System y el campo String. Transacciones El cliente puede iniciar uno de las diversas transacciones standard: Execute, Request, Poke y Advise. Execute hace que ArcView ejecute comandos recibidos en una cadena desde el cliente. Por ejemplo, Excel puede enviar un comando para ejecutar un script (av.Run). Si el script calcula un valor del registro, Request podría devolver el valor a Excel. Poke transfiere datos desde el cliente a ArcView. Por ejemplo, si el cliente es una aplicación que recoge las posiciones del GPS (Global Positioning System), podría pasarlas a ArcView y actualizar la posición del vehículo en la pantalla. Ejercicio B2: Comunicación con Excel Paso 1 Iniciar Excel y ArcView y abrir el proyecto. Paso 2 Crear una conexión con Excel y chequear los errores Paso 3 Proporcionar una lista de campos desde Excel y seleccionar uno para consultar Paso 4 Se necesita más información sobre el campo seleccionado Ejercicio B2: Comunicación con Excel En este ejercicio conectará con Excel y le enviará requerimientos para devolver una lista de campos. Entonces proporcionará información sobre los campo seleccionado desde la lista. Paso 1 Iniciar Excel y ArcView y abrir el proyecto. Inicie Excel desde el Administrador de programas mediante doble clic en el icono de Excel. Si es necesario, inicie ArcView. Desde el menú File (Archivo ) elija Open Project (Abrir Proyecto). Muévase al directorio exercice, con doble clic en exb2.apr para abrir el proyecto de este ejercicio. Cuando el proyecto se abra, verá abierto el script con título Exercice EXB2, Step 2. Paso 2 Crear una conexión con Excel y chequear los errores Con este script creará una conexión con Excel. Antes de pasar información a Excel, querrá verificar que la conexión se ha realizado correctamente. Cree una variable llamada sysClient enviando el requerimiento Make a DDEClient, usando como dos parámetros las cadenas Excel y System. Inicie un estamento If Then, utilizando sysClient.HasError como valor booleano. Informe del error enviando un requerimiento Error a MsgBox. Envíe el requerimiento GetErrorMsg a sysClient como primer parámetro, y una cadena vacía como el segundo. En este punto, salga del script y finalice el estamento If Them. Paso 3 Proporcionar una lista de campos desde Excel y seleccionar uno para consultar Una vez hecha la conexión a Excel, ArcView puede enviar un requerimiento y recibir información desde Excel sobre el requerimiento. Cree una variable llamada excelItems enviando el requerimiento Request a sysClient. Como parámetro envíe lacadena SysItems. ExcelItems es una cadena que contiene todos los campos que soporta Excel. Convertirá la cadena a una lista y la usará para hacer una selección desde una caja de mensaje. Cree una variable llamada selectItem enviando el requerimiento ListAsString a MsgBox. Como primer parámetro envíe excelItems al convertidor AsList. Como segundo parámetro, envíe la cadena Select an Item to Query, y como tercer parámetro, envíe la cadena Query Excel Items. Testee para ver si algún campo está seleccionado. Sino, detenga la ejecución del script. Utilice el estamento If con Item = nil como condición, Then Si la condición es true, salga del programa y finalice el estamento If Them. Paso 4 Se necesita más información sobre el campo seleccionado Una vez seleccionado un campo, puede necesitar información adicional sobre él desde Excel. Cree una variable llamada result enviando el requerimiento Request a sysClient. Use selectItem como parámetro. Cree resulttrans enviando el requerimiento Translate a result, con una cadena vacía concatenada con un carácter TAB como primer parámetro y dos concatenando NL (nueva línea) como segundo parámetro. Visualice el resultado enviando el requerimiento Report a MsgBox. Como primer parámetro, envíe reslttrans, y como segundo la variable selectItem. Cierre la conexión enviando el requerimiento Close a sysClient. Compile y ejecute el script. Elija un de los campos en la lista y lea la información sobre el campo seleccionado. Testee el script unas dos veces como información adicional sobre los campos del sistema Excel. Ahora compare su script con un script de muestra. Haga clic en Find en la ayuda de ArcView y teclee el nombre de su script: GetDDESystemItems. Este script es similar al que acaba de realizar usted. Fin