• Ejemplos con «docBase»

    En las escenas que utilizan imágenes, macros y/o ficheros puede utilizarse en el código de la escena el parámetro «docBase» con objeto de localizar estos archivos (ver detalle en el artículo Copiar y pegar escenas en html). Aquí podemos observar diferentes ejemplos de esta utilidad con cada uno de los tipos de archivo antes mencionado:

    1. Acceso a imágenes y archivos de audio

    2. Acceso a macros

    3. Acceso a ficheros de manera estática o dinámica con _GetValues_ 

    4. Acceso a ficheros de manera dinámica

    5. Acceso a matrices con _GetValues_  y con _GetMatrix_

    6. Acceso a matrices de manera dinámica

     

    Puede descargar las páginas con los ejemplo anteriores desde este enlace.

  • Ficheros y matrices

    En el apartado de definiciones, se documenta el tema de matrices, cuyos elementos tienen unos valores que se pueden asignar de varias maneras. Una primera es asignando los valores en la misma definición de la matriz; otra es asignando los valores a través de un algoritmo lo cual es especialmente necesario y recomendable en el caso de matrices de gran tamaño que puedan generarse matemáticamente y una última opción es a través de un fichero o archivo de texto.

    Carga estática con el parámetro archivo en la definición de una matriz

    El objeto matriz cuenta con un parámetro que está etiquetado como archivo, pero NO ESTÁ OPERATIVO, en próximas versiones del editor de configuración éste campo no aparecerá.

    Definición de una matriz mediante un archivo

    Definición de una matriz mediante un archivo

    La carga de datos en una matriz a partir de ficheros se efectúa siempre de manera dinámica utilizando las funciones que se describen a continuación.

    Carga dinámica de una matriz con la función _GetValues_

    Una posibilidad para efectuar la carga de una matriz de manera dinámica, es decir, accediendo a diferentes ficheros según se desee, es utilizando la función _GetValues_ cuya sintaxis es

    _GetValues_(fichero,matriz)

    fichero será una cadena de caracteres entre comillas simples, por ejemplo ‘datos/datos1.txt’, o una variable que contenga una cadena y que referencie el path localizador del archivo.

    matriz será una cadena de caracteres entre comillas simples, por ejemplo ‘matriz1’, o una variable que contenga una cadena. Esa cadena es la etiqueta que aparece en el fichero de datos a cargar y ha de coincidir con ella o bien, si se especifica la cadena nula o una variable con ese valor ignorará dicha etiqueta.

    Esta opción es igual que la carga dinámica de un vector (consultar este artículo) y lo único que varía es la asignación que se realiza en este caso a los elementos de una matriz y en el otro sob los elementos de un vector

    En la escena siguiente (puede descargarla desde aquí) se cargan los datos de una matriz denominada matra partir de los datos almacenados en tres ficheros ‘datos1a.txt’, ‘datos2a.txt’ y ‘datos3a.txt’.

    En la opción «Leer vector variables 1» el archivo usado es filename1=’datos1a.txt’ cuyo contenido es

    fichero datos1a.txt

    fichero datos1a.txt

    y donde podemos observar la etiqueta <matr1>

    Análogamente tenemos los archivos filename2=’datos2a.txt’ y filename3=’datos3a.txt’

    ficheros datos2a.txt y datos3a.txt

    ficheros datos2a.txt y datos3a.txt

    El código que permite la lectura de esos archivos es el siguiente

    Lectura de una matriz desde un fichero con _GetValues_

    Lectura de una matriz desde un fichero con _GetValues_

    En él podemos observar como al seleccionar la primera opción del menú (menu=1) se accede a _GetValues_(filename1,’matr1′) donde filename1=’datos1a.txt’ y en el contenido de ese archivo se usa la etiqueta <matr1>.

    Para la siguiente opción la llamada es _GetValues_(filename2, ‘matr1’) donde filename2=’datos2a.txt’ y la etiqueta es también ‘matr1’ que coincide con la etiqueta usada en dicho fichero (podría ser también una variable cuya valor fuera ‘matr1’.

    Y en la tercera opción se usa _GetValues_(filename3, ”) donde filename3=’datos3a.txt’ y en matriz se indica la cadena nula, es decir, que se ignore la etiqueta <NoUsado> especificada en datos3a.txt (podría ser otra etiqueta no necesariamente NoUsado).

    En cada uno de esos archivos se efectúa una asignación a las variables que se han denominado aux1, aux2, aux3, aux4, aux5 y aux6 que son las que en el código de la escena se asignan a los elementos de la matriz matr11, es decir, que se usan como variables de paso.

    Carga dinámica de una matriz con la función _Load_ y _StrToMatrix_

    La sintaxis de la función _Load_ es

    variable=_Load_(fichero)

    donde fichero es una cadena de caracteres que proporciona la dirección donde se ubica el fichero a cargar y variable es la que variable a la que se asigna el contenido de ese fichero como una cadena de caracteres.

    Una vez asignado el contenido a dicha variable, la función _StrToMatrix_ (variable,matriz‘) asigna los valores a cada elemento de la matriz etiquetada como matriz.

    Hay que señalar que el contenido del fichero ha de contener una primera línea con la etiqueta <matriz> y finalizar con la etiqueta </matriz>.

    En la siguiente escena puede comprobar el funcionamiento de estas funciones (puede descargarse aquí).

    El archivo usado en la escena anterior es el siguiente:

    fichero que contiene los elementos de una matriz

    fichero que contiene los elementos de una matriz

    en él podemos observar las etiquetas y el script para inscrustarlo en el código html y que sea accesible en local.

    Carga dinámica de un vector con la función _GetMatrix_

    La sintaxis de esta función es _GetMatrix_(fichero,’matriz‘) donde fichero es una cadena de caracteres que proporciona la dirección donde se ubica el fichero a cargar y matriz es la etiqueta de la matriz en la que se desean cargar sus elementos. Esa etiqueta ha de ir entre comillas simples y ha de coincidir con la etiqueta que aparece en el contenido del fichero que se está leyendo. Su efecto es equivalente a _Load_ y _StrToMatrix_ de la sección anterior. También en la escena de esa sección puede observar el funcionamiento de esta función.

    Guardar vectores en un fichero

    Para esta funcionalidad consulte el artículo Guardar ficheros.

  • Guardar ficheros

    El contenido de una cadena de caracteres puede guardarse en un fichero usando la función _Save_. Así pues, toda aquella información generada en una escena y que se desee guardar externamente puede archivarse sin más que organizarla como una cadena de caracteres y usar dicha función.

    Guardar un vector en un fichero

    En la escena siguiente (puede descargarla desde aquí), si en el menú selecciona la opción «Guardar» obtendrá un fichero, que se guardará en su ordenador, su contenido es una cadena de caracteres que se ha preparado concatenando el contenido de los elementos de un vector separándolos cada uno con el carácter «nueva línea». La ubicación de almacenamiento del fichero se gestionará y realizará por el navegador, no es posible gestionarlo desde DescartesJS.

    La sintaxis de la función _Save_ es

    _Save_(fichero,texto)

    donde fichero es una cadena de caracteres entre comillas simples, o una variable cuyo valor  es una cadena, que contiene el nombre del fichero que se desea guardar, y texto es la cadena de caracteres a guardar en ese fichero.

    En la imagen siguiente podemos observar la definición de una función guardar() que prepara la cadena donde se concatenan los valores del vector denominado vect1.

    Concatenación en una cadena de caracteres

    Concatenación en una cadena de caracteres

    y en la función inicializar()

    Función _Save_

    Función _Save_

    cuando la opción de menú toma el valor 2 (Guardar) se procede a guardar el texto que se ha preparado en el archivo de nombre ‘salida.txt’ según se indica en la instrucción

    _Save_(‘salida.txt’, texto)

    Como alternativa se dispone de una función específica que nos permite convertir un vector en una cadena, se trata de _VectorToStr_ cuya sintaxis es

    _VectorToStr_(‘vector‘)

    y donde vector es el nombre del vector que tendrá que ir entre comillas simples. Esta función concatena la etiqueta <vector>, el contenido de los elementos del vector separados por el carácter nueva línea y finalmente la etiqueta </vector>. Si se especifica el valor de vector.long_usada concatenará sólo los elementos de vector cuyo índice es inferior a ese valor y si no concatena todos los elementos de ese vector.

    En la siguiente escena puede observarse el resultado de esta función en un vector denominado V.

    (puede descargarla desde aquí)

    Guardar una matriz en un fichero

    De manera análoga pueden guardarse los elementos de una matriz sin más que concatenarlos en una cadena de caracteres y usar la función _Save_ descrita anteriormente. Es la opción segunda en la escena siguiente, la cual puede descargar desde aquí.

    También se dispone de una función análoga que convierte una matriz en una cadena _MatrixToStr_ cuya sintaxis es

    _MatrixToStr_(‘matriz‘)

    donde pueden usarse las variables matriz.filas_usadas y matriz.columnas_usadas para restringir el rango de elementos que se desean guardar en dicha cadena. Es lo programado en la opción tercera del menú de la escena anterior. En ella, al seleccionar esa opción, se ejecuta una función que se ha denominado MatrixToStr() y cuya definición es la reflejada en la siguiente imagen.

    Guardar una matriz con _MatrixToStr_

    Guardar una matriz con _MatrixToStr_

    El fichero que se genera para  la matriz

    MtoS3

    es

    fichero generado con _MatrixToStr_

    fichero generado con _MatrixToStr_

  • Relación de macros del sistema

    Hay que documentar los macros del sistema (antiguo banco de macros en documentación v4).

    Para conocer el código de una macro del sistema puede acceder al servidor de distribución de Descartes:
    En ese directorio tiene un subdirectorio macros en el que puede navegar y también el fichero macros.zip si desea descargarlo y usarlas en local. En ambos puede observar cuatro carpetas: g2d, g3d, g2d_jar y g3d_jar. Las macros incluidas en las carpetas con sufijo _jar son las que están incluidas en el archivo Descartes.jar del editor de configuración y aunque algunas coinciden en el nombre con las incluidas en las otras carpetas que no tienen sufijo su contenido no siempre es coincidente. Es necesario abordar un proceso de comparación y depuración.
  • Macros en el intérprete DescartesJS

    El intérprete de DescartesJS reconoce y ejecuta las macros publicadas en un servidor, accediendo en línea; sin embargo, cuando ejecutamos una escena en nuestro equipo (en local), el intérprete no reconoce las macros. Esto es una limitación propia de JavaScript en relación a la lectura de ficheros en local.

    Por ejemplo las dos escenas siguientes ha de verlas adecuadamente desde nuestro blog. Son escenas que utilizan una macro de usuario denominada sombras.txt cuyo objetivo es dibujar un par de sombras en las esquinas de la escena, y hay un control que cambia la trasparencia de esa sombra. Sin embargo si descarga esas escenas y las ejecuta en local en la primera no observará las sombras y en la segunda sí.

     escena6.html  escena7.html

    Las escenas anteriores puede descargarlas desde este enlace e identificar el archivo correspondiente con el nombre indicado

    ¿Cómo podemos ejecutar los macros en local?

    Para poder ejecutar una macro en local es necesario que el código de ésta esté incorporado en el código html de la página que contiene la escena que llama a esa macro. Para ello, es necesario incorporar un «script» en ese archivo html siguiendo el siguiente esquema:


    <script type=»descartes/macro» id=»direccionamiento del macro usado en la escena«>

    Contenido del fichero de la macro, es decir, la macro en sí

    </script>


    En el siguiente vídeo, puedes observar lo que acontece y el procedimiento para subsanarlo:

     

    Para conocer el código de una macro del sistema puede acceder al servidor de distribución de Descartes:
    En ese directorio tiene un subdirectorio macros en el que puede navegar y también el fichero macros.zip si desea descargarlo y usarlas en local. En ambos puede observar cuatro carpetas: g2d, g3d, g2d_jar y g3d_jar. Las macros incluidas en las carpetas con sufijo _jar son las que están incluidas en el archivo Descartes.jar del editor de configuración y aunque algunas coinciden en el nombre con las incluidas en las otras carpetas que no tienen sufijo su contenido no siempre es coincidente. Es necesario abordar un proceso de comparación y depuración.

     

    Hemos de indicar que en las macros del sistema podemos detectar algunas en las que en una misma línea aparecen descritos dos objetos. Por ejemplo:

    id=’azul’ expresión=’0′ evaluar=’una-sola-vez’ constante=’si’ tipo=’segmento’ expresión='(0,0,0)(a,b,c)’ color='(rojo,verde,azul)’ ancho=’3′

    Esto no presenta ningún problema en el intérprete Java, pero sí para DescartesJS, pues éste espera una definición por línea y tienen prioridad las definiciones que tienen el atributo tipo. Es un detalle a observar si detectamos que alguna macro no nos funciona. Si detecta esta circunstancia, por favor, haga un comentario para proceder a su arreglo. Y téngalo también presente en sus macros de usuario.