CONTROL DE CONTENIDOS.

CONTROL DE LA APLICACIÓN
CREAR DATOS VARIABLES
CONTROL DE COMPONENTES
CONTROL DE SECUENCIAS

La lista de datos para control contiene 4 opciones. Al pulsar una cualquiera aparecerán los datos seleccionables para insertar en la zona inferior derecha. Para retroceder al nivel anterior encontrará en primer lugar la opción "Atrás...". Los tipos de datos que podemos asignar a estas opciones se indican entre paréntesis y su significado ya se ha explicado en el tema "Revisión del programa", en el apartado sobre programación. Las opciones que aparecen en mayúsculas abren nuevas opciones y las que aparecen en minúsculas se podrán insertar directamente en el programa, para lo cual se pulsará la opción para seleccionarla y a continuación se pulsará de nuevo en el lugar que se quiera fijar (siempre en la zona derecha por ser la destinada para control de datos). En "CONTROL DE LA APLICACIÓN" encontraremos opciones que son típicas de la aplicación como pueda ser el dimensionado del panel en el que se verán los contenidos, salir de la aplicación y otras. En "CONTROL DE COMPONENTES" encontraremos todos los que existan en la aplicación, añadiendose automáticamente a la lista todos los que construyamos nuevos. Las secuencias tienen opciones en este apartado con el fin principal de ser controladas externamente, como por ejemplo arrancarlas sin importar la transición inicial o resetearlas (activar solo la etapa 0 y desactivar las demás).

Las opciones para crear variables, las de control de componentes y secuencias se complementan con sus correspondientes datos de consulta. Puede ser de utilidad tener presentes ambas opciones, por lo que se añade el siguiente enlace con el tema 5: Datos de consulta.

CONTROL DE LA APLICACIÓN.

ATRAS...
(número) ciclos por segundo (0 a 40)
(número) anchura del panel del programa
(número) altura del panel del programa
(número) tipo de cursor (0 a 13)
(número) X actualización panel programa
(número) Y actualización panel programa
(número) ancho actualización panel programa
(número) alto actualización panel programa
(número) X relativa del contenido
(número) Y relativa del contenido
(número) escala del contenido
(bool) configurar impresión panel programa
(bool) imprimir panel programa
(texto) nombre de otra aplicación del mismo directorio
(bool) ejecutar aplicación
(texto) ruta de página web
(bool) abrir página Web
(bool) Salir del programa
(bool) mantener fondo
(número) Seleccionar subrutina
(bool) ejecutar subrutina seleccionada
(número) alejamiento del observador
(número) X absoluta del observador
(número) Y absoluta del observador

Con este conjunto de opciones se controlan aspectos generales no relacionados con los componentes. "ciclos por segundo" sirve para definir el número de veces que se ejecutará el ciclo de programa en cada segundo. Con valor 0 se detiene el generador de impulsos y el ciclo solo se ejecuta cuando se pulsa alguna tecla o el ratón, esto es suficiente si la aplicación no incluye animación ni otras acciones que deban progresar por sí solas. Con un valor mayor que 0 se arranca el generador de impulsos que ejecuta el ciclo de programa a intervalos regulares de tiempo. Si se mantiene dibujándose todos o gran número de elementos de la aplicación, la actualización de la pantalla consume un tiempo demasiado grande y la frecuencia de ejecución del ciclo puede ser significativamente menor que el valor establecido. Entre las opciones de control se encuentra la de dibujar o no dibujar cada elemento y será recomendable tenerlo en cuenta. Existen otras formas de reducir el tiempo de actualización de pantalla que pronto veremos en este mismo apartado.

Cuando tengamos varias aplicaciones abiertas que funcionen con un número de ciclos mayor que 0, es posible que su actividad llegue a suponer una pesada carga para el procesador del ordenador, ya que tendrá que dividir su tiempo para satisfacer muchas demandas. En la siguiente imagen se muestra un modo de parar automáticamente la actividad de una aplicación cuando pasen 10 segundos sin pulsar una tecla o el ratón, siempre y cuando se programe en el bloque de ejecución permanente, de forma que se compruebe continuamente si la condición se cumple. El significado de los bloques se encuentra en el tema 9 Bloques insertables pero veremos aquí los que intervienen en el ejemplo: En la primera entrada del bloque TOF llega un estado verdadero cuando se pulse cualquier tecla o uno de los botones del ratón (los bloques OR lo garantizan). Si esto se cumple, el bloque TOF transmite verdadero o valor 1, el producto resulta 15 y la actividad se desarrolla a esa velocidad. Cuando se suelte la tecla o el ratón, la primera entrada del bloque TOF pasa a ser falsa, pero este bloque mantiene activa su salida tanto tiempo como se indique en su segunda entrada, expresado en centésimas de segundo. Por lo tanto, la actividad se mantiene a razón de 15 ciclos por segundo hasta que pasen 10 segundos desde que se suelta la tecla o el ratón. Transcurrido ese tiempo, el producto será 0 y la actividad se detiene.

Con la anchura y altura del panel del programa se determina el tamaño del recuadro en el que se desarrollará la aplicación. Probablemente, el tamaño que se asigna por defecto sea pequeño o grande, de modo que existe este recurso para modificarlo. No se ha previsto que este tamaño se pueda modificar durante la edición y es posible que en alguna aplicación se nos quede pequeño. Si esto nos ocurre, podemos programar el tamaño deseado en el bloque de ejecución única y ejecutar la simuación para que el panel adopte el nuevo tamaño. Una vez hecho pararemos la simulación y el problema se habrá resuelto. El bloque de programa más adecuado para programar el tamaño del panel es el de ejecución única, porque no es razonable cambiarlo durante la ejecución de la aplicación. AutoJava comprueba si esto se ha programado en el bloque de ejecución única y en caso afirmativo ajusta el tamaño de la ventana para que se corresponda con el tamaño del panel.

Existe una relación entre el número de ciclos por segundo y el ajuste de la ventana: Si en el bloque de ejecución única no se programa un número de ciclos mayor que 0, la actividad de la aplicación estará anulada hasta que se pulse con el ratón y entonces se ajustará la ventana al tamaño programado. Pero si se ha puesto un número de ciclos mayor que cero, la ventana se ajustará inmediatamente, en el momento que se ejecute. En el caso de ejecutar la aplicación como applet en un documento html, el tamaño ya habrá añadido automáticamente en el código que ejecuta el applet, este tamaño no se puede modificar mientras se ejecuta el applet porque se define en el documento html y no en el programa

El tipo de cursor del ratón es por defecto el 0, correspondiente a una flecha inclinada. Cuando se asigne otro valor, el cursor cambia y se mantiene su nuevo aspecto hasta que se ejecute otra asignación (o la misma) con un valor distinto. El cursor que normalmente se asigna cuando el ratón pasa por una opción pulsable es el 12, que corresponde a una mano con el dedo índice extendido. Si a un elemento le hemos asignado alguna tarea cuando se pulse, sabremos si el ratón está encima consultando el dato del elemento que informa sobre ello y si la consulta es verdadera podemos asignar el valor 12 al tipo de cursor para que el usuario sepa que es una opción pulsable. Lógicamente, si el número de ciclos por segundo es 0, la aplicación no tendrá actividad y no comprobará si el cursor pasa sobre la opción pulsable, por lo tanto, si queremos visualizar contínuamente el cambio de cursor, el número de ciclos debe ser mayor que 0.

En la siguiente imagen vemos que si el ratón está sobre el elemento "boton00" del componente "borrar00", la primera consulta resultará verdadera o valor 1. Entonces el producto será igual a 12 y el cursor cambiará a tener el aspecto de una mano con el dedo extendido. Si la consulta es falsa o valor 0, el producto será 0 y el cursor volverá a ser una punta de flecha. Si se pulsa el elemento "botón00" se ejecutará la subrutina 5, que será donde se haya programado lo que deba ejecutarse cuando se pulse el botón. Para que las acciones descritas funcionen deberán haberse puesto en un bloque de programa que tenga el control, como sería la etapa activa de una secuencia o si se prefiere, de forma ininterrumpida si se pone en el bloque de ejecución permanente. Así mismo, para que el cursor cambie cuando se pase el ratón sobre el botón, el número de ciclos debe ser mayor que 0 porque sinó no se ejecuta el código que se muestra y el cursor no cambiará.

X, Y, ancho y alto de actualización del panel del programa está relacionado directamente con el ahorro de tiempo en la actualización de la pantalla. Definen un recuadro en el que la pantalla se actualizará, dejando intacto el resto. Lógicamente, si la animación sólo sucede en una pequeña zona, no vale la pena actualizar todo el panel completo y con ello ahorraremos tiempo.

Con las coordenadas relativas del contenido podemos desplazar el origen de representación, haciendo que todo el contenido de la aplicación se desplace. Con la asignación de escala hacemos que todo el contenido cambie de tamaño. Los límites de este valor están entre 0.05 y 20, de forma que un valor fuera de estos límites equivale a uno de ellos. El desplazamiento y escalado se anulan con valores 0 y 0 para las coordenadas y 1 para la escala.

Asignando verdadero a la opción para configurar impresión se mostrará un cuadro para establecer los márgenes y para especificar posición del papel vertical o apaisado. Cuando se cierre el cuadro, se muestran los márgenes en pantalla hasta que la opción se haga falsa de nuevo. Si quiere mostrar los márgenes permanentemente, mantenga la opción siempre verdadera. Dependiendo del tipo de orientación elegido, el contorno del papel y su zona imprimible se mostrarán en pantalla en vertical o en horizontal. De forma similar, la opción para imprimir abrirá el cuadro de impresión de la impresora que tenga instalada (si recibe estado verdadero), desde el que puede imprimirse el contenido que se encuentre dentro de los márgenes. Para asegurar que todo entra en la zona imprimible puede hacerse de dos formas: Habiendo dibujado o posicionado todo en la zona imprimible o bien desplazándolo a la zona imprimible antes de proceder con la impresión. Todo el contenido o incluso componente por componente puede ser desplazado por programa, de modo que no debería presentar ningún problema. Por ejemplo, si ponemos un botón para imprimir, lo primero que haríamos al pulsarlo sería desplazar lo que fuera necesario y a continuación hacer verdadera la opción para imprimir. Nótese que programar estas opciones significa ponerlas a disposición del usuario de la aplicación, no se necesita programarlas si lo que se quiere es imprimir desde AutoJava, pues existen entre las opciones de la pestaña "Archivo" para imprimir el contenido de la simulación o el de cualquier bloque de programa. También hay que hacer notar que la impresión no funcionará en un applet de la versión 1.0 y que en la versión 1.3 existen algunas características que pudieran ser causa de una impresión defectuosa. Estas características son la transparencia y el antialias, de modo que se recomienda hacer las pruebas oportunas y si causan problemas se deberían anular dichas características para poder imprimir correctamente.

Si la aplicación en curso la hemos creado en el directorio de un proyecto que ya contiene otra aplicación podemos especificar el nombre de la aplicación que ya existe con la opción "nombre de otra aplicación del mismo directorio" mediante un texto que contenga solamente el nombre de la aplicación (sin ruta de acceso ni extensión del archivo) y ejecutarla haciendo verdadera la opción para ejecutar aplicación. En el caso de crear un applet con la aplicación para ejecutarla en un documento html, la aplicación ejecutada reemplaza a la original en el mismo documento. Esto se ha hecho así para reducir el tiempo de carga al abrirlo desde internet porque el código fuente es el mismo para todas las aplicaciones y al ejecutar otra desde la que tengamos abierta, su carga se limita a los datos concretos de la aplicación, no las clases con el código fuente que ya estará cargado. De esta forma es posible desarrollar largos contenidos a base de aplicaciones que se vayan ejecutando una tras otra en el mismo espacio de la página Web, si bien el recuadro en el que se ejecutarán será el de la aplicación de arranque, sin admitir cambio posterior.

Las opciones "ruta de página web" y "abrir página web" facilitan abrir una página web desde nuestro programa o applet. Si la aplicación la ejecutamos como programa (el archivo de extensión jar que se crea al guardar la aplicación) solo funcionará si el sistema es Windows porque solo se ha previsto el uso del nagegador de Microsoft para abrir documentos html. Si la aplicación se ejecuta como applet, ya estará abierto un navegador (sea cual sea) y puesto que la página se abrirá en ese entorno no existirán problemas a menos que se haya especificado incorrectamente la ruta para encontrarla. La ruta de una página web puede ser absoluta como http://es.yahoo.com o http://es.geocities.com/miespacioweb. También puede ser relativa como ./tema2/apartado1.html donde el punto representa la ruta del documento html original, tema2 un directorio y apartado1.html el documento que se abrirá. En el tema 10: Crear una página web encontrará información más detallada sobre páginas web, cómo crearlas y cómo ponerlas en internet.

La opción para salir del programa hace que la aplicación finalice (cuando la opción reciba verdadero). Esto no es imprescindible porque siempre se puede salir pulsando el botón que existe en la barra de título de las ventanas, pero tal vez prefiera presentar esta opción al usuario por medio de un botón o similar.

Por defecto, el fondo de los contenidos se borra cada vez que se actualiza la pantalla y todo lo que deba estar presente ha de dibujarse en todos los ciclos de programa. Si algún contenido es estático no hay razón para mantenerlo en estado dibujable porque aumenta el tiempo de actualización de la pantalla. Con la opción "mantener fondo" lo que hacemos es que no se borre el fondo que hubiera quedado del ciclo anterior y el contenido estático seguirá presente sin necesidad de dibujarlo (cada componente y elemento admiten control de su dibujado). Cuando el fondo se mantiene, al mover algún contenido sobre el fondo irán quedando copias pegadas que no se borran, ya que el fondo del ciclo anterior no se borra. Por una parte este efecto es indeseable pero se le pueden sacar ventajas interesantes, por ejemplo, al cambiar el contenido de un texto y colocarlo en otra posición, dicho texto presentará dos informaciones diferentes, es decir, un solo elemento o un solo componente servirá para representar informaciones o dibujos en diferentes posiciones de la pantalla. Si debajo de un contenido animado dibujamos un rectángulo lleno, entonces no importa que el fondo se mantenga, ya que el rectángulo borrará el contenido anterior.

Las 3 últimas opciones, referentes al observador, permiten posicionar el punto del observador en las 3 coordenadas, siendo el alejamiento con signo contrario a la coordenada Z, ya que el eje Z apunta hacia el interior de la pantalla y el observador estará fuera, siempre con alejamiento positivo. Mover el punto del observador es similar a ver lo que nos rodea mientras caminamos: Si estamos muy cerca de algo lo veremos pasar con rapidez y si estamos lejos lo vemos casi como algo estático.

CREAR DATOS VARIABLES.

ATRAS...
(bool) Nueva variable verdadera o falsa
(número) Nueva variable numérica
(texto) Nueva variable de texto
(punto) Nuevo punto X,Y

En el tema 5 Datos de consulta ya se ha tratado el tema de las variables. Con las opciones presentes es como pueden crearse nuevas variables. Cada vez que creamos una nueva se añade a la lista de opciones automáticamente, así podemos asignar otro valor a la misma variable cuantas veces necesitemos a lo largo del programa. También se añade a la lista de variables en las opciones de consulta de datos para poder repetir la consulta en cualquier parte.

CONTROL DE SECUENCIAS.

ATRAS...
(número) seleccionar secuencia
(número) seleccionar etapa
(bool) forzar activación de etapa
(bool) reset secuencia seleccionada
(bool) ver secuencia seleccionada en funcionamiento

En el tema 5 "Datos de consulta" ya se ha tratado en parte el tema de consulta y control de secuencias. Como se deduce de las opciones presentes, cualquier etapa de una secuencia podrá ser forzada en su activación, seleccionando previamente secuencia y etapa y haciendo verdadera al opción que la activa. La aplicación más razonable es que este procedimiento se aplique para arrancar una secuencia desde cualquier lugar del programa (activando la etapa siguiente a la 0). Así la secuencia se comporta como un subprograma que puede ser llamado desde cualquier punto. Puesto que una secuencia se ejecuta a la vez que otros contenidos, tal vez se necesite detener su ejecución en cualquier momento, esto lo conseguimos asignando verdadero a su opción de reset, que activará su etapa 0 y desactivará todas las demás.

Por último, la opción para ver secuencia en funcionamiento abrirá una ventana que simulará cómo evoluciona su ejecución marcándose con color verde la etapa o etapas activas, exactamente igual que la creada en el entorno de programación. Si los comentarios de etapas y transiciones los creamos enfocados al futuro usuario del programa, estaremos aportando un recurso útil para comprender conceptos, ver con facilidad lo que debe hacerse para llegar a un objetivo, etc. Curiosamente, la lógica que resuelve un problema debe servir para que otros comprendan el problema y las secuencias facilitan ambas cosas simultáneamente.

CONTROL DE COMPONENTES.

ATRAS...
APLICACIÓN COMO COMPONENTE
COMPONENTE...
COMPONENTE...

En esta opción encontraremos los componentes que tengamos abiertos en la aplicación (indicado con puntos suspensivos en la lista anterior). Al pulsar uno de ellos veremos las opciones de control que le correspondan, que veremos más adelante. "APLICACIÓN COMO COMPONENTE" tiene utilidad si pretendemos crear un componente con la aplicación abierta, es decir, si estamos creando un componente con programa propio que podamos abrir en otras aplicaciones. Pulsando esta opción se accede a las informaciones que el componente podrá transmitir, las cuales podemos crear líbremente, con un texto cualquiera con el fin de expresar su significado. Cuando se utilize el componente (después de haber sido creado), estas opciones servirán para recibir información del componente.

APLICACIÓN COMO COMPONENTE.

ATRAS...
(bool) Nueva salida verdadera o falsa
(número) Nueva salida numérica
(texto) Nueva salida de texto

En el apartado "APLICACIÓN COMO COMPONENTE" del tema 5 Datos de consulta ya se ha explicado todo lo relativo a crear un componente con la aplicación abierta. Las presentes opciones son las que dotarán al futuro componente de informaciones de salida para consulta en aplicaciones en las que abramos el componente creado. Al pulsar una de las opciones se abre un cuadro para introducir un texto (breve) que defina la salida y luego lo insertamos en la zona inferior derecha. La nueva salida se añade a la lista para poderla usar en cualquier otra parte del programa.

DATOS DE CONTROL DE COMPONENTES CON PROGRAMA.

ATRAS...
(bool) ejecutar o no programa de....
(número) desplazamiento en X para....
(número) desplazamiento en Y para....
dato personalizado....
dato personalizado....

En el apartado "DATOS DE CONSULTA DE COMPONENTES CON PROGRAMA" del tema 5 Datos de consulta ya se ha explicado todo lo relativo al uso de componentes con programa. A diferencia de la consulta de datos, en el control de datos sí existen algunas opciones por defecto. La opción "ejecutar o no programa de...." (los puntos suspensivos serían el nombre del componente) es la más importante, ya que sin ella solo tendríamos un componente estático que no desarrollaría ninguna actividad, ya que su programa solo se ejecuta si esta opción se hace verdadera. Si el componente deberá funcionar contínuamente, el bloque de programa más adecuado para colocar esta opción de ejecución será el bloque de ejecución permanente. Las opciones de desplazamiento permitirán controlar la posición en que se verá el componente, sin necesidad de haber programado en el componente el control de posición de sus contenidos. Las opciones personalizadas serán las que se hayan creado expresamente para el componente durante la construcción de la aplicación con la que se haya creado el componente.

Cuando un componente con programa se abre dentro de una aplicación, se solicita si deberá ejecutarse en una ventana propia o dentro de la ventana de la aplicación. En caso de seleccionar "sin ventana", aún se pedirá determinar si tendrá un fondo propio. Sin fondo propio, el contenido que muestre quedará superpuesto sobre el contenido de otros componentes que se encuentren primero en la lista de componentes, sin el rectángulo de fondo, como si éste se hubiera recortado y eliminado. Con fondo propio, se verá el rectángulo de fondo sobre los componentes que se encuentren antes en la lista. Sin ventana, el componente se verá afectado por la posición y escala que se aplique en la aplicación, como un componente cualquiera. Es posible que un componente contenga a otro y este a otro...con cualquier nivel de jerarquía, aunque esta posibilidad pudiera llegar a confundir al usuario y no sea muy recomendable.

Si se ejecuta en una ventana propia tendrá su propio tamaño y su propio generador de impulsos para definir el número de veces que se ejecutará por segundo (tal como se haya programado el componente). Pero su ventana no aparecerá necesariamente cuando la aplicación se ejecute, esto se determina con la opción "ejecutar o no programa de...", de manera que la ventana no aparece hasta que se ejecute esta opción y reciba un estado verdadero. La posibilidad de decidir por programa si se ejecuta o no un componente hace posible presentar al usuario solamente los contenidos que necesite, por ejemplo, abrir o no una ventana de ayuda sobre un tema determinado o cualquier otra aplicación auxiliar. Cuando un componente con ventana propia deja de estar seleccionado por pulsar sobre otra ventana, su actividad se detiene automáticamente para no sobrecargar de trabajo al procesador. Sin embargo, es posible mantener su actividad si se controla desde la aplicación principal. Para ello basta con que se ejecute repetidamente la opción "ejecutar o no programa de..." con asignación verdadera, es decir, si el componente ya no se ejecuta por sus propios medios, puede ser forzado a hacerlo con la frecuencia impuesta por la aplicación principal. Hacer esto impide que la ventana del componente se pueda cerrar, ya que si se mantiene verdadera la opción que lo ejecuta se abrirá de nuevo cuando sea cerrada. Por lo tanto, si debe dejarse libertad al usuario para cerrarla, es necesario no mantener verdadera la asignación o impedir que se ejecute, poniéndola por ejemplo en una etapa que solo se active con determinadas condiciones.

DATOS DE CONTROL DE COMPONENTES EDITABLES.

ATRAS...
CONTROL DE ELEMENTOS
(número) definir paso actual de...
(bool) Dibujar o no dibujar componente...
(número) asignar coordenada X relativa a...
(número) asignar coordenada Y relativa a...
(número) ángulo alfa de rotación del plano de ...(3D)
(número) ángulo beta de inclinación del plano de...(3D)
(número) ángulo gamma (rotación en plano) de...(3D)
(número) desplazamiento en X de...(3D)
(número) desplazamiento en Y de...(3D)
(número) desplazamiento en Z de...(3D)
(bool) habilitar perspectiva en polilineas de...(3D)

Las opciones anteriores corresponden a un componente editable (extensión gra). Si el componente ha sido creado con una aplicación (extensión pgn), las opciones que aparecerían aquí serían las entradas que se hubieran programado para él cuando fué creado. La opción para definir el paso del componente le lleva directamente al paso que se asigne con un dato numérico.

Podremos controlar el paso haciéndolo avanzar, retroceder o en cualquier orden. Con cada cambio en el paso asignado, el componente mostrará todo lo que se haya definido como visible en el paso concreto y todo lo que sea forzado a dibujarse aunque no se haya definido como visible al editarlo.

La opción para dibujar o no dibujar el componente permite decidir sobre qué contenidos son mostrados en pantalla. Si lo declaramos falso (no dibujar) pero se mantiene el fondo (una opción de control de la aplicación) puede mantenerse dibujado tal como se encontrara la última vez que hubiera sido dibujado, siempre que otros contenidos no se solapen, ya que lo borrarían. Las dos últimas opciones permiten desplazar al componente respecto de la posición en la que fué dibujado en su edición. Como ya se explicó en el tema5 "Datos de consulta", el desplazamiento tiene lugar en el sistema de referencia que resulte de aplicar la cadena de transformaciones que pueda tener asignada.

Las opciones en las que aparece 3D entre paréntesis se han explicado en el apartado de edición en 3D en el tema 3 sobre edición de componentes Edición en tres dimensiones. Es conveniente haber comprendido los conceptos relacionados para controlar por programa estos datos de control. La opción "habilitar perspectiva en polilineas" permite que las lineas abiertas y las mallas del componente se dibujen en perspectiva. Los componentes que se utilicen para representar algo en tres dimensiones deberían contener solo esos dos tipos de elementos (además de transformaciones si es el caso), ya que los demás elementos no se dibujarán si el componente tiene la perspectiva habilitada.

La opción "CONTROL DE ELEMENTOS" presentará la lista de todos los elementos que contenga el componente. Cuando se pulse uno de los elementos aparecerán las opciones de control correspondientes, dependiendo del tipo de elemento. Dado que la cantidad de opciones es muy numerosa, se dedica para ello el siguiente tema.