Taller
>> Taller >> Arrays Dinámicos en Fenix by Danko >> Cap. 3, Trabajando con arrays dinámicos.

Vamos a hacer un ejemplo de lo que podría ser una forma para trabajar con arrays dinámicos de enteros cómoda e intuitivamente. Éste método lo uso a modo de ejemplo, pero seguramente se pueden desarrollar métodos más apropiados. Para empezar necesitaremos crear un bloque type:

......type i_array
..........pointer el;     // éste será el puntero donde almacenemos el puntero devuelto por alloc
..........len;     // longitud del array, para poder hacer por ejemplo un for (i=0;i
..........st = 0;     // para controlar si ya se ha reservado memoria para el array
......END

Ahora crearemos unas funciones para trabajar con este tipo de datos que hemos creado.

......PROCESS i_dim(i_array pointer var, int elements);
......BEGIN
..........var.el = alloc(elements*4);     // reservamos memoria para los elementos (*4 porque sizeof(int)=4)
..........var.len = elements;
..........memset(var.el,0,elements*4);     // inicializamos los elementos a 0
......END

Como veis, este proceso no tiene ningún misterio. Hemos tenido que usar un parámetro de tipo i_array pointer para poder pasar las variables de tipo i_array por referencia.

Ahora la rutina para redimensionar:

......PROCESS i_redim(i_array pointer var, int elements);
......BEGIN
..........var.el = realloc(elements*4);     // como se ha explicado antes...
..........var.len = elements;
......END

Que tampoco tiene nada de especial...

Si queremos evitar algunos errores (por ejemplo que se reserve memoria cuando ya ha sido reservada, o que se redimensione sin haber reservado) haremos uso de la variable st del tipo i_array.

Los procesos quedarían así:

......PROCESS i_dim(i_array pointer var, int elements);
......BEGIN
..........if (!(var.st))     // si var.st==0 (no se ha reservado memoria todavía)
..........var.len = elements;
..........memset(var.el,0,elements*4);     // inicializamos los elementos a 0
......END

3- Ahora procederemos a levantar la mesa y ponerle 4 patas redondas. Como hemos hecho con la lámpara o con la cámara, moveremos el trozo de madera éste. Lo tenemos que levantar un par de cuadros aproximadamente. Por última vez diré cómo se mueve un objeto: lo escogemos, apretamos la “g” y movemos el ratón hacia arriba, hasta tener el objeto donde queremos, entonces clicamos con el botón derecho y listo. Ahora empezaremos por hacer la primera pata. Las otras 3 serán una copia de ésta. Empezamos por tener todo el objeto cogido, apretamos espacio, add >> mesh >> cylinder. Una vez hecho veremos un cilindro, que no está ni a su medida apropiada ni a su ángulo apropiado. Primero, antes que todo, empezaremos por las dimensiones. Tendrían que ser de un cuadro (apretamos “s” y movemos el ratón hacia él hasta tener un diámetro de mas o menos un cuadro). Ahora lo giraremos, con una vista frontal (núm.: 1), apretaremos “r” y moveremos el cilindro hasta que nos quede vertical, o sea, haya girado noventa grados. Después alargaremos este cilindro pulsando “Tab”, que nos queden todos los vértices lilas, apretamos la “b” y, manteniendo apretado el botón izquierdo, hacemos un cuadro que quede dentro los vértices de la parte de arriba y dejamos de apretar. Movemos estos puntos apretando la “g”, unos dos cuadritos, para que queden mas o menos a la misma altura que la parte de debajo del trozo de madera. Después de tenerlos en su lugar apretamos dos veces “Tab” y hacemos lo mismo con los de debajo, unos dos cuadritos también, más bien dicho lo mismo que a arriba, pero abajo. Una vez tengamos esto hecho veremos que el cilindro tiene las líneas paralelas y así no es como son las mesas. Sin dejar los vértices de abajo, sólo poniéndolos en su lugar, apretamos “s” y lo encogemos un poco. Una vez hecho esto, la pata no tiene material y seria muy cutre. Nos volvemos a poner donde os dije que hicierais un nuevo material, os ponéis al guión ese y, en vez de coger un nuevo material, cogéis el material que ya habíais hecho. Ahora vamos a alisar un poco el material, ya que si movéis la pata donde la podáis ver al renderizar con F12, veréis que está muy cuadriculada. Nos vamos a uno de los botones de abajo. Éste es un botón que se ve un cuadrado con los vértices de amarillo. Cuando lo escogéis veréis que los botones cambian. Debajo de donde estaba este botón, abajo del todo, pero en la misma columna, veremos dos botones que pone un “et smoth” y el otro “set solid”. Tenéis que apretar el “et smoth”, que tendría que ser “set smoth”. Sobre todo tenéis que tener la pata elegida entera. Ahora está lista para duplicar esta patita. Primero pondremos la patita en su lugar. Como podréis comprobar, con las dimensiones que os he ido dando yo no queda muy bonito, pero podéis cambiarlas, no os obligo a nada, sois libres. Una vez la pata esté donde tenga que estar apretáis “shift+d”. Veréis que se pone blanca la patita, pero no os preocupéis, movéis el ratón hasta tener esta otra patita en el lugar que le corresponda. Aconsejaría moverlas por la vista superior. Si probáis comprobaréis que la luz ahora es insuficiente, tendremos que poner un par de lámparas más, muy bien situadas. Primero movería esta lámpara que tenemos encima de la mesa, centradita, y un poco lejos. Ahora pondremos el par de lámparas más, yo os aconsejaría ponerlas debajo de la mesa, delante, y una a cada lado, como veréis en la figura:


Así es como lo tendríamos que tener.

4- Aún queda un cuarto paso para la gente que sea más precisa. Esta mesa está flotando. Tendríamos que poner un suelo, ¿no? Es muy fácil hacer un suelo, sólo tienes que poner un plano: add>>mesh>>plane, apretar “Tab”, engrandecerlo hasta tener unas dimensiones considerables y generar un material con otro color, para que quede el suelo. Para ir bien se tendría que hacer aplicando una textura, pero aún tengo que consultar mucha cosa.