You are on page 1of 76

Lava

Derechos Reservados
2009 Maptek
Todos los derechos reservados. Ninguna parte de este manual puede ser reproducido,
almacenado o transmitido por ningn medio de recuperacin electrnico, mecnico, fotocopiado,
registrado, o de otra manera sin el permiso escrito de Maptek Computacin Chile Ltda. No se
asume ninguna responsabilidad con respecto al uso de la informacin contenida adjunta. Aunque
se ha tomado la precaucin en la preparacin de este manual, el editor y autor(es) no asumen
ninguna responsabilidad de errores u omisiones. Maptek no se responsabiliza por daos o
perjuicios, directos o indirectos, que surjan del uso, interpretacin de la informacin contenida en
este manual.

info@maptek.cl
www.maptek.cl

Marcas
Debido a la naturaleza del material, muchos de los productos del hardware y de software se
mencionan por nombre. Las compaas que fabrican los productos demandan muchos de estos
nombres del producto como marcas registradas. No es la intencin de Maptek demandar estos
nombres o marcas registradas como propias.

Historial de Revisin
Mayo 2008

Introduccin

Contenidos
1

INTRODUCCIN ..................................................................................................................................................... 4

PERL ....................................................................................................................................................................... 5

MDULO LAVA .................................................................................................................................................... 21

MDULO VULCAN ............................................................................................................................................... 50

www.maptek.cl

Introduccin
La programacin de aplicaciones puede ser una tarea muy simple o muy compleja dependiendo del
tpico y de la factibilidad tcnica de lo que se quiere realizar, tanto en algortmica como de
herramientas de programacin.

Para el aprendizaje de las materias tratadas aqu no se requiere de conocimiento avanzados de


programacin ni de uso de Vulcan, pero depender de la habilidad y capacidad de estudio y
aprendizaje de cada alumno el nivel que pueda alcanzar.

El presente manual le entrega al lector las herramientas que le facilitarn el trabajo para la
implementacin de aplicaciones bajo el entorno Vulcan. Los contenidos abarcan desde el manejo
de archivos, modelos de bloques, bases de datos y objetos grficos de Vulcan

Los contenidos tratados corresponden a los mdulos ms comnmente usados e incluyen


imgenes, ejemplos y ejercicios de modo de hacer ms simple y didctico su aprendizaje.

Una vez finalizado este manual, el lector ser capaz de:

Crear y editar objetos grficos de Vulcan, lneas, polgonos, textos, triangulaciones.


Crear paneles personalizados.
Automatizacin de procesos batch.
Manipular archivos de texto.
Acceder y manipular modelo de bloques.
Acceder a datos de Bases de Datos Isis.
Creacin y modificacin de macros Vulcan.

Introduccin

Perl
1.1. Introduccin.
PERL (Practical Extraction and Report Language) es un lenguaje interpretado que tiene varias
utilidades, pero est principalmente orientado a la bsqueda, extraccin y formateado de archivos
de texto. Tambin es muy usado para manejo y gestin de procesos (estado de procesos, conteo y
extraccin de parmetros caractersticos, etc...).
Perl toma muchas caractersticas del C, como tambin del lenguaje interpretado AWK, sed, shell
(sh), Lisp entre otros. Estructuralmente, Perl est basado en un estilo de bloques como los del C o
AWK, y es muy usado por su flexibilidad en el procesamiento de texto y no tiene ninguna de las
limitaciones de los otros lenguajes de script.

1.2. Un primer ejemplo de programa.


Para ejecutar un programa en PERL debemos abrir la consola de comandos TShell de Vulcan Se
puede correr de dos formas
1.- Llamar desde la lnea de comandos al intrprete perl, pasando como parmetro el nombre
del programa.
perl primer.pl o bien $VULCAN_EXE/perl primer.pl
Se acostumbra poner la extensin pl a este tipo de script.
2.- Aadir en la primera lnea del programa lo siguiente:
#! c:/usr/bin/perl

www.maptek.cl

Cambiar los permisos del archivo fuente, para poderlo ejecutar. Esto se realiza mediante la
instruccin chmod:

chmod u+x primer.pl


A continuacin de la primera lnea del script escribiramos el programa en si, y una vez hecho esto
simplemente invocamos el nombre del programa (ahora ejecutable) directamente desde la lnea de
comandos.

primer.pl
Los caracteres #! sirven para denotar que lo que viene a continuacin hace referencia a un
intrprete de comandos. Como el intrprete perl se encuentra en los ejecutables de Vulcan se
puede crear una estructura de carpetas en el disco C, copiando el programa perl.exe all de modo
que est siempre disponible en un solo lugar (c:/usr/bin/).

Por ejemplo un script que muestre en la pantalla el mensaje Hola mundo


forma:

se hara de la siguiente

#! C:/usr/bin/perl
print "Hola mundo\n";
Nota: Al usar primera forma de correr el script no se requiere de la primera lnea de este programa.

1.3. Tipos de datos.


Perl tiene tres tipos de datos:
1.

Escalar.

2.

Array de escalares.

3.

Array asociativo de escalares.

Tipo Escalar.
El tipo escalar es denotado con un nombre de variable precedido de $. Puede almacenar un
nmero o un string. Por ejemplo:

$valor = 12;
$nombre = Juan;
$palabra = "Hola mundo\n";

Perl

Al usar comillas dobles se puede interpretar caracteres especiales del string al momento de ser
impresos, por ejemplo en pantalla:

print $palabra;
Tambin es posible definir varias variables al mismo tiempo mediante el uso de parntesis:

($nombre,$apellido,$edar) = ("Ferenando","Leiva",26);

Tipo Array de escalares.


El tipo de dato array de escalares es denotado mediante un nombre precedido del smbolo @.
Ejemplo de inicializacin de una variable de este tipo podra ser:

@paises = ("Chile","Peru","Bolivia","Argentina");
El nmero de elementos de un array de escalares se puede obtener de la siguiente manera:

$num_elementos = @paises;
o bien

$num_elementos = $#paises+1;
$# devuelve el ltimo ndice del array, y como el valor para el primer ndice es 0 el nmero de
elementos - 1 ser el ltimo valor permitido para indexar el array.

Para acceder al los elementos de un array se usa el ndice de la posicin donde se almacena el
dato (0 a n-1)

$segundo_elemento = $paises[1];
Se puede acceder a varios elementos de un array de la forma @nom_array[indice1,...,indicen]. Por
ejemplo:

print @paises[0,3];

www.maptek.cl

que es lo mismo que

$ultimo = $#paises; print @paises[0,$ultimo];


Imprimir el primer y ltimo elemento del array @paises.

Otra forma es usando el operador rango .. , si se quisiera imprimir todos los valores desde un
ndice i hasta un indice j se debe utilizar el siguiente formato @nom_variable[i..j], por ejemplo:

print

@paises[0..3];

Imprimir todos los elementos del array @paises.

Tipo Array asociativo de escalares.


Mediante este tipo de datos se puede acceder a un determinado elemento del array a travs de
una clave anteriormente definida, Este tipo de dato se denota mediante un nombre precedido con
el smbolo %. Por ejemplo:

%precio=("manzana",50,"pera",70,"ciruela",20);
Para acceder a un elemento de un array asociativo se debe utilizar el siguiente formato
@nom_arrayt { clave }. Por ejemplo:

$numero_peras = 10;
$valor_total = @precio{"pera"} * $numero_peras;

1.4. Sintaxis general.


Todas las instrucciones de PERL deben terminar en ";".
Por ejemplo

$nombre = Me llamo Juan\n; print $nombre;


Las nicas cosas que deben de ser declaradas en PERL son los formatos de salida o reportes y las
subrutinas.
Todas las variables creadas y no inicializadas tienen como valor por defecto nulo o cero.
Los comentarios deben ir precedidos del smbolo #.

Perl

Sentencias de control condicionales e iterativas


El uso de las sentencias de control condicionales e iterativas se usa para alterar el flujo de un
programa.
Se entiende por BLOQUE a todo conjunto de sentencias que se encuentren entre dos llaves, por

{$nombre = Me llamo Juan\n;print $nombre;}


Se entiende como EXPRESION a toda expresin cuya evaluacin resulte ser un valor booleano, es
decir, verdadero o falso. En PERL se considera como verdadero todo valor no nulo.

1.5. Sintaxis esquemas condicionales.


Dentro de los primeros tenemos los siguientes formatos:

if (EXPRESION) BLOQUE. Un ejemplo de uso podra ser:

print "\n\nPENSANDO UN NUMERO ....\n";


$numero = int (rand(9) + .5);
print "Adivina el nmero pensado (1 a 10): ";
$entrada = <STDIN>;
$entrada = int($entrada);
if($entrada == $numero)
{print "Has acertado.\n";}
if($entrada > $numero){print "El numero es mayor que
el pensado.\n";}
if($entrada < $numero)
{print "El numero es menor que el pensado.\n";}
print "\nEL NUMERO PENSADO ERA: ",$numero,"\n\n";

if (EXPRESION) BLOQUE else BLOQUE. Por ejemplo:

print "\n\nPENSANDO UN NUMERO ....\n";


$numero = int (rand(9) + .5);
print "Adivina el nmero pensado (1 a 10): ";
$entrada = <STDIN>;

www.maptek.cl

$entrada = int($entrada);
if($entrada == $numero)
{print "Has acertado.\n";}
elsif($entrada > $numero)
{print "El numero es mayor que el pensado.\n";}
Else {print "El numero es menor que el pensado.\n";}
print "\nEL NUMERO PENSADO ERA: ",$numero,"\n\n";
En lugar de if podemos usar unless que tiene el significado contrario.

1.6. Sintaxis esquemas iterativos.


while (EXPRESION) BLOQUE . Mientras se cumpla la condicin EXPRESION se ejecutar todo lo
que haya en BLOQUE. Por ejemplo;

print "\n\nPENSANDO UN NUMERO ....\n";


$numero = int (rand(9) + .5);
$entrada = -1;
while ($entrada != $numero){
print "Adivina el nmero pensado (1 a 10): ";
$entrada = <STDIN>;
$entrada = int($entrada);
if($entrada == $numero){
print "Has acertado.\n";}
elsif($entrada > $numero)
{print "El numero es mayor que el pensado.\n";}
Else {print "El numero es menor que el pensado.\n";}}
print "\nEL NUMERO PENSADO ERA: ",$numero,"\n\n";
Se puede usar until en lugar de while, que tiene el efecto contrario a ste. Si lo que se desea es
hacer la primera comparacin despus de la primera iteracin se puede usar un esquema iterativo
do BLOQUE until o do BLOQUE while.
for (EXPRESION1; EXPRESION2; EXPRESION3)

10

Perl

Se isa igual que en C. Por ejemplo

@valores = (35..70);
print "\nValores del arreglo:\n";
for($i=0;$i<@valores;$i++)
{print "Valor ",$i+1,"=",$valores[$i],"\n";}
Y por ltimo tenemos:

foreach var (array) BLOQUE


Con este esquema se obtiene cada uno de los valores que contiene array que son depositaos en
la variable var. Por ejemplo:

@valores = (35..70);
print "\nValores del arreglo:\n";
foreach $val (@valores)
{print "$val \n";}

1.7. Subrutinas.
Otro aspecto de inters en PERL es la definicin y manejo de subrutinas.
El formato de declaracin de una subrutina es:
sub NOMBRE BLOQUE
Ejemplo:

sub saludo{print

"Hola\n";}

Para llamar a la subrutina existen varias formas:


nombre_de_la_subrutina();
o
do nombre_de_la_subrutina();
o
&nombre_de_la_subrutina;

www.maptek.cl

11

Las tres formas producen el mismo resultado con la excepcin de que en el caso de la ltima no es
necesario poner los parntesis. Si se necesita pasar argumentos, estos deben ir entre los
parntesis, y sern almacenados en el array de escalares @_, es decir para saber el nmero y el
valor de los argumentos pasados a una subrutina hay que leer de este array predefinido.

Por ejemplo:

sub muestra_valor
{local ($string)=@_;print ($string;}
muestra_valor ("Hola\n");
La funcin local() sirve para declarar variables locales a la subrutina, sin embargo se puede haber
referencias directamente el array @_.
Por defecto las rutinas retornan la ltima expresin evaluada, pero se puede devolver
explcitamente un o ms valores usando return.

Se puede pasar un arreglo como parmetro de la siguiente forma;

sub muestra_valores
{my ($mensaje,@datos) = @_;print $mensaje;foreach $val (@datos)
{print "$val \n";}} @valores = (35..70);
muestra_valores ("Valores del arreglo:\n",@valores);

1.8. Operadores.
Gran parte de los operadores de PERL son heredados del lenguaje C. Tiene una gran variedad y
se usan igual que en todos los lenguajes y se utilizan principalmente para realizar operaciones
aritmticas y lgicas.
Se puede clasificar a los operadores en los siguientes tipos:

Operadores de comparacin: se usan para comparar dos expresiones y el resultado puede ser
lgico numrico. Los siguientes son los operadores de comparacin:

Compara dos valores iguales. Devuelve un valor lgico verdadero cuando son iguales y falso en
caso contrario

if ($radio == 1) { ...}
si el valor almacenado en $radio es uno entonces entrar en el BLOQUE entre parntesis.
eq Se usa igual que == pero para expresiones tipo string.

12

Perl

!= Es el caso opuesto a ==, es decir, compara si dos expresiones son distintas.

if ($radio != 1) { ...}
Entra al bloque si los valores son diferentes
ne Se usa igual que != pero para expresiones tipo string.

< Retorna un valor lgico verdadero el valor numrico de la expresin de la izquierda es menor que
el valor de la expresin de la derecha, en caso contrario retorna falso.

if ($radio < 1) { ...}


Ejecuta las instrucciones entre parntesis si el valor de $radio es inferior que 1.

> Es el comparador inverso de <. Retorna verdadero si la expresin numrica de la izquierda es


mayor que el de la derecha, retorna false en otro caso:
if ($radio > 1) { ...}
Ejecuta las instrucciones entre parntesis si el valor de $radio es mayor a 1.

<= ,>= Los operadores <= y >= adems verifican la condicin de igualdad

lt , gt Son los equivalentes de < y > para los tipos de dato no numricos, como las cadenas. Por
ejemplo lt devuelve verdadero si el orden de la cadena de la izquierda es menor que el de la
cadena de la derecha, y gt que devuelve cierto si la cadena de la izquierda es mayor que el orden
de la cadena de la derecha.

le , ge Son los equivalentes de <= y >= para los tipos de dato no numricos

cmp Se usa para comparar caracteres. Retorna 0 si los caracteres comparados son iguales, 1 si la
cadena de la derecha se encuentra al comienzo de la de la izquierda, y -1 en el caso contrario:

'one' cmp 'one'

retorna

'one dog ' cmp 'one'

retorna

'dog one' cmp 'one'

retorna -1

'es diferente' cmp 'one'

retorna -1

<=> Se usa para comparar valores numricos, retornando 0 cuando son iguales, 1 cuando el
termino de la derecha es menor que el de la izquierda y -1 en el caso contrario.
=~ Se usa en las expresiones regulares para indicar la presencia de un patrn de comparacin
dentro de una variable que contiene una cadena de caracteres:

if ($var =~/pepe/) { ...}


Verifica si la cadena 'pepe' se encuentra dentro de $var y si es as, ejecuta el cdigo entre llaves.
!~. Verifica la no existencia del patrn de bsqueda en una cadena:

if ($var !~/pepe/) { ...}

www.maptek.cl

13

Si la cadena 'pepe' no est en $var se ejecuta el cdigo entre llaves.

Operadores de asignacin: se usan para dar valores a cualquier tipo de variables validas en
PERL.
= Se utiliza para asignar a la variable que se encuentra a la izquierda del operador el valor de la
expresin de la derecha.

$nombre = 'Juan Soto';


Asigna la cadena 'Juan Soto' a la variable $nombre.

=~ A parte de la funcin de verificacin de existencia de un patrn dentro de una cadena que


anteriormente se explic, este operador dentro de una expresin regular de sustitucin se utiliza
para sustituir un patrn de comparacin por otra cadena:

$var =~ s/one/uno/;
Se reemplaza la ocurrencia de la cadena 'one' por la cadena 'uno'.

Operadores aritmticos: Se utilizan para realizar las operaciones aritmticas necesarias en el


manejo de las expresiones. Adems de los operadores aritmticos comunes como +(suma), (resta), *(multiplicacin) y /(divisin), PERL incluye los siguientes operadores:
** Se emplea para obtener la potencia de un valor numrico, por ejemplo:

$var = 3;
$var**2;
El valor almacenado en var es 9.

. Se utiliza para concatenar dos cadenas de caracteres. Por ejemplo:


$var = 'Juan';
$var . ' Soto';
var contendr la cadena Juan Soto

x Multiplica n veces la cadena de caracteres especificada, por ejemplo:

'ja' x 3;
Expresa una cadena de 6 caracteres: jajaja.

% Se usa para obtener el mdulo de la divisin entre dos nmeros, ejemplo:

$var = 5 % 2;
El valor que se asigna a var es 1.

| Permite realizar una operacin binaria 'o' entre 2 valores numricos, por ejemplo

$var = 3 | 2;

14

Perl

El valor que se asigna a la variable es 3.

& Permite realizar una operacin binaria 'y' entre 2 valores numricos, por ejemplo:

$var = 3 & 2;
El valor asignado es 2.

El operador = est muy relacionado con los operadores aritmticos de modo que es posible
combinarlos siguiendo el siguiente formato:

$variable (operador aritmtico)= expresin;


Con esto se logra realizar la operacin aritmtica, y posteriormente asignar el valor a la variable,
como por ejemplo:
$var = 5;
$var += 6;
A $var se asigna 5 luego se suma el valor de $var ms 6 y el resultado se asigna a $var, es decir
11.

$var = Juan;
$var .= Soto;
El valor de la variable ser Juan Soto.

Operadores lgicos o relacionales: permiten relacionar dos o ms expresiones condicionales


para determinar si el resultado lgico es verdadero o falso. Estos son los diferentes operadores
lgicos de Perl:
| Se utiliza en las expresiones regulares como operador lgico 'o', de modo que retorna verdadero
siempre que cualquiera de los patrones de bsqueda que componen la expresin sea cierto y falso
cuando los dos son falsos. Por ejemplo

if ($var !~/pepe | juan/) { ...}


El cdigo entre llaves se ejecuta si en la cadena que se encuentra dentro de la variable no existe
una ocurrencia igual a 'pepe' o igual a 'juan'.
Tambin se usa para unir dos expresiones condicionales, por ejemplo:

if ($var == 6 | $var < 3) { ...}


Ejecuta el cdigo entre llaves si la variable es igual a 6 o menor que 3.

|| Tambin representa la operacin lgica 'o' pero en este caso se utiliza sobre instrucciones y no
sobre expresiones regulares.
& Trabaja como un operador lgico 'y' en expresiones regulares, permite confrontar 2 patrones, por
ejemplo:

if ($var =~ /pepe & juan/) { ...}

www.maptek.cl

15

El cdigo entre parntesis se ejecuta si dentro de la variable existe una ocurrencia de la cadena
'pepe' y otra de la cadena 'juan'. Tambin se utiliza para comparar expresiones condicionales.
&& Trabaja como un operador lgico 'y', pero slo sobre instrucciones y no sobre expresiones
regulares.
! Con este operador se puede realizar una evaluacin negativa de la expresin, por ejemplo:
if (!$var) { ...}
Entra al bloque si la variable var es nulo o 0.

Operadores de Archivo: Se utilizan para verificar en el sistema operativo los permisos de un


archivo, o su naturaleza de ejecucin, etc.

-r : indica si el archivo tiene permiso de lectura.

-W : indica si el archivo tiene permiso de escritura.

-T : indica si el archivo es de tipo texto.

-e : indica si el archivo existe.

-z : indica si el archivo tiene tamao 0.

-s : indica si el archivo es mayor que 0.

-f : indica si el archivo es plano.

-d : indica si se trata de un directorio.

-M : indica el nmero dias despus de la ltima modificacin

-B : indica si el archivo es binario.

-t : indica si el archivo esta abierto en un terminal.

16

Perl

1.9. Variables predefinidas.


El siguiente es un listado de los nombres especiales ms usados que incluye PERL:
"$_" contiene el contenido del ltimo registro ledo de un archivo.
"$. " contiene el nmero de la ltima lnea leda de un archivo.
"$/ " separador de campo para la entrada.
"$," separador de campo para la salida, aplicable a print.
"$\ " separador de registro para la salida, aplicable a print.
"$~" contiene el nombre del formato o reporte definido para la salida actual.
"$^" contiene el nombre de la cabecera de formato o reporte definido para la salida actual.
"$$" nmero de proceso perl scripts que se esta ejecutando actualmente.
"$&" representa el valor de la ltima cadena de caracteres comparada exitosamente.
"$`" y "$'" estos dos trminos se utilizan conjuntamente para separar cadenas de caracteres
comparadas exitosamente.
"$!" contiene el valor actual de ERRNO, es decir, el ltimo error acontecido.
"$0" contiene el nombre del archivo que hemos dado a nuestro perl script.
"$[" contiene el valor del primer ndice de una array de escalares, por defecto es 0.
"$<" uid real del proceso actual.
"$>" uid efectivo del proceso actual.
"$(" gid real del proceso actual.
"$)" gid efectivo del proceso actual.
@ARGV contiene los parmetros pasados a nuestro perl script.

1.10. Funciones.
El siguiente es un listado con algunas de las funciones ms utilizadas:

abs: devuelve el valor absoluto de la expresin pasada.


chmod: cambia los permisos de los archivos dados.
chop: recorta y retorna el ltimo carcter de una cadena.
chown: cambia el propietario de los archivos dados.
close : cierra un archivo.
cos: devuelve el coseno del ngulo dado en radianes.
defined: sirve para comprobar si existe una variable, formato, subrutina, etc..
delete: borra un valor de un array asociativo a travs de su clave.
die: imprime en la salida del error estndar un mensaje pasado como parmetro cuando ocurre un
error en la ejecucin de una sentencia.

www.maptek.cl

17

eof: retorna verdadero si el final del archivo dado.


eval: evala la expresin pasada como si se tratase de un pequeo programa perl.
exec: ejecuta lo que pasemos como parmetro y sale del programa.
exit: hace que salgamos del perl script devolviendo al sistema operativo el valor pasado como
argumento.
exp: retorna el nmero e elevado a la potencia pasada como parmetro.
fileno: devuelve el descriptor del manejador del archivo pasado como parmetro.
fork: realiza una llamada fork.
getc: lee el siguiente caracter del archivo especificado.
hex: devuelve el valor decimal del numero hexadecimal pasado como parmetro.
index: devuelve la posicin de la primera ocurrencia de una cadena en otra.
int: devuelve la parte entera del parmetro pasado.
join: une las cadenas pasadas como argumento con un separador tambin pasado como
argumento.
keys: devuelve todas las claves de un array asociativo.
length: devuelve la longitud en caracteres del parmetro pasado.
local: declara como locales las variables pasadas como argumentos.
log: devuelve el logaritmo del nmero dado.
mkdir: crea un directorio en el camino dado.
oct: devuelve el valor decimal del numero octal pasado como parmetro.
open: abre el archivo dado asocindole un manejador de archivo especificado tambin como
parmetro.
pop: retorna y borra el ltimo elemento del array dado.
print: muestra en la salida standard o en el archivo especificado la expresin dada.
printf: permite formatear expresiones que se muestra en la salida standard o en el archivo.
push: aade el valor dado al final del array pasado como parmetro.
rand: devuelve un numero aleatorio entre 0 y el valor pasado como argumento.
read: lee un determinado nmero de caracteres desde el archivo pasado como argumento.
rename: sirve para renombrar un archivo.
require: sirve para incluir cdigo externo en nuestro guin.
return: devuelve un valor desde una subrutina.
rmdir: borra un directorio.
seek: sita un puntero a archivo en un lugar determinado.
select: sirve para seleccionar el manejador de archivo que ser utilizado por defecto para la salida
de los comandos o funciones que no especifiquen un determinado manejador de archivo como
parmetro.
shift: devuelve el primer valor del array dado borrndolo posteriormente.
sin: devuelve el seno del ngulo pasado en radianes.
sleep: causa que el perl script o guin se detenga el nmero de segundos especificados.

18

Perl

sort: ordena el array dado.


split: divide una cadena en subcadenas segn el separador especificado.
sqrt: devuelve la raiz cuadrada del nmero pasado.
system: igual que exec pero no se sale del perl script.
tell: devuelve la posicin actual del puntero a archivo del manejador de archivo especificado.
values: devuelve todos los valores del array asociativo dado.
write: escribe un registro con formato en el archivo asociado a ese formato.
%ENV array asociativo que contiene las variables de entorno bajo el que se ejecuta nuestro perl
script.

1.11. Referencias.
Esta seccin fue elaborada en base a manuales y referencias de Perl tomadas de Internet

http://www.perl.com/
http://www.ulpgc.es/otros/tutoriales/perl/indice.htm
http://perldoc.perl.org/index-functions.html
http://kataix.umag.cl/~mmarin/topinf/perl.html
http://www.htmlpoint.com/perl/index.html

www.maptek.cl

19

20

Perl

Mdulo LAVA
2.1. Introduccin.
Lava es un mdulo creado por Maptek para ser usado en scripts Perl. Este mdulo entrega
acceso a funciones y objetos dentro del entorno grfico de Vulcan, Envisage. Tambin permite
acceder y modificar modelos de bloques, bases de datos ISIS, adems de la edicin y creacin de
triangulaciones.
Varias de las opciones que actualmente incorpora nuestro software fueron en su inicio scripts lava,
por ejemplo: Pit Optimiser. Contact Profile. Chornos Gantt Chart, Flag 2D Polygons, Direccional
Variography, Export Block Model to 4X, etc. Las que fueron desarrolladas localmente para luego
ser probadas e incorporadas definitivamente en Vulcan.
Actualmente este mdulo es usado en la automatizacin de procesos del usuario mediante el uso
de Macros.
Dada esta potencialidad es que permanentemente Maptek ha fomentado el uso de Lava entre sus
clientes.

2.2. Estructura.
Dado que Lava es un mdulo para ser usado en un script perl. Siempre debe ser declarado al
principio del script. As es como se declara:

use Lava
La estructura de un script lava es la misma que la de un script perl.
La extensin que se usa para los lava scripts es .lava, y puede ser ejecutado desde el men
File/Lava. El hecho de que un script lava es bsicamente un script perl trae como consecuencia de
que sea posible ejecutar scripts perl desde el mismo men, con la diferencia que debe ser
cambiada la extensin pl por lava.

www.maptek.cl

21

En esta seccin usaremos la siguiente estructura para la elaboracin de scripts lava:

Cabecera

La idea de tener una cabecera es bsicamente por un tema de orden y seguimiento de los cambios
realizados a cada script.

######################################################
# Nombre

: mi_script.lava

# Propsito: Ejemplo de script lava


# Creacion : 21-Mayo-2008
# Autor

: Nelson Gonzlez Yentzen

# Lugar
: Maptek Oficina Via del Mar Modificado # Modifid
26-Mayo-2008 NGY Nueva rutina AutoBMF
# Modifid

: 24-Mayo-2008 NGY Agrega use strict

#
######################################################
Declaracin de mdulos incluidos

use Lava;
use Win32::OLE;
use strict;
use vulcan;

Declaracin de variables globales;

A continuacin se declaran las variables que sern visibles y modificables en cualquier lugar del
script. Por ejemplo:

my $variable1;
my @array1;

22

Mdulo LAVA

Declaracin de subrutinas

sub subroutine1
{my ($var1,$arr1) = @_;my $result = -1;..return($result);}
Parte principal del script

En esta seccin es donde se lleva el control de flujo principal del programa. Por ejemplo

My $value1 = subroutine1 ($var1,@array1);


Esta forma de estructurar el script es igual que la usada en el lenguaje C, sin embargo no existe
una regla para ello, por lo que las subrutinas podran estar declaradas al final del script.

2.3. Funciones
Lava::Version
Esta funcin determina la versin actual de Lava.

$version = Lava::Version();
Lava::Show
Muestra temporalmente el mensaje guardado en $message

Lava::Show($message);$msg : Texto a ser desplegado


Lava::Message
Despliega el mensaje guardado en pantalla espera que el usuario presione el botn OK

$msg = Peoceso finalizado.;Lava::Message($msg);


Lava::Error
Despliega un mensaje de error, espera que el usuario presione el botn OK.

$msg = Error cargando datos;Lava::Error ($msg);

www.maptek.cl

23

Lava::Report
Despliega un mensaje de texto en la ventana de reporte

Lava::Report($meg);$msg : Texto a ser desplegado en el reporte


Lava::Project
Retorna el cdigo de proyecto actual.

$project = Lava::Project();
Lava::Environment
Retorna el cdigo de ambiente actual

$envir = Lava::Environment();
Lava::Current_BModel
Retorna el nombre del modelo de bloques actualmente abierto o un string vaco si no hay modelo
de bloques abierto.

$nombre_bm = Lava::Current_BModel($modo)

$nombre_bm : contiene nombre de modelo de bloques actualmente abierto (si es


aplicable).$modo: modo de retornar el nombre (0 = retorna el nombre con la ruta
completa, 1 = slo el nombre).
Nota: $nombre_bm ser un string nulo si no hay modelo de bloques abierto.

Lava::Object_Visibility
Cambia la visibilidad de un objeto, usando el segmento grfico que lo identifica ($seg).
Lava::Object_Visibility($seg,$modo)
$seg : segment grfico del objeto
$modo : modo de visibilidad (0=visible,1=sombreado,2=invisible)
Lava::View
Esta funcin despliega un mensaje

Lava::View($msg)
$msg : Texto a ser desplegado

24

Mdulo LAVA

2.4. Clases
Existen tres tipos de clases, clases Lava (que solo pueden ser usadas dentro de Envisage), clases
Vulcan (que pueden ser usadas fuera de Envisage) y la clase Triangulacin, que al igual que las
clases Vulcan, puede ser usada fuera de Envisage.

2.5. Clases Lava


2.5.1. Lava::Panel

Se utiliza para crear paneles en el ambiente de Envisage. Slo puede ser abierto un panel a la vez

Mtodos
El constructor crea una nueva instancia de Lava::Panel e inicialzalo valores requeridos. No es
posible un nuevo panel si uno est abierto.

$panel = new Lava::Panel;


$panel: nueva instancia de la clase Lava::Panel

execute
Levanta el panel creado

$panel->execute($titulo);
$titulo: Texto que se despliega en la barra superior del panel

text
Crea una lnea de texto en el panel

$panel->text($text);
$text: Texto que se desplegar dentro del panel

tem

www.maptek.cl

25

Crea una caja de edicin para tomar diferentes tipos de datos

$panel->item($label,$variable,$length);
$label: Etiqueta del componente a desplegar
$variable: variable donde se guardar el valor ledo
$length: largo del campo

numeric
Crea una caja de edicin para tomar datos de tipo numrico

$panel->numeric($label,$variable,$length,$decimals);
$label: Etiqueta del componente a desplegar
$variable: Variable numrica donde se guardara el valor ledo
$length: nmero de elementos del campo
$decimals: nmero de decimales del valor ledo

Ejemplo:

$edad="21";
$panel->numeric("Ingresa tu edad,\$edad,3,0);

colour
Permite seleccionar un color desde la paleta de colores

$panel->colour($label,$variable);
$label: Etiqueta del componente a desplegar
$variable: Variable entera donde se guardar el nmero del color seleccionado (1-32)

line

26

Mdulo LAVA

Permite seleccionar un tipo de lnea

$panel->line($label,$variable);
$label: Etiqueta del componente a desplegar
$variable: variable entera donde se guardar el nmero del tipo de lnea seleccionado

pattern
Permite seleccionar un tipo de pattern

$panel->pattern($label,$variable);
$label: Etiqueta del componente a desplegar
$variable: Variable entera donde se guardara el numero del pattern seleccionado (1-32)

on_side
Indica que el elemento previamente definido en el panel va a la derecha del que fue establecido
antes que l.

$panel->on_side;
pick_list
Este mtodo siempre va acompaando a un mtodo item. Permite seleccionar un archivo de un
grupo de archivos en un directorio especfico.

$panel->pick_list($dir,$file_ext, $remueve_ext);
$dir: Directorio donde se buscaran los archivos (ejemplo: .)
$file_ext: Tipo de archivos a mostrar en la lista
$remueve_ext: Especifica si se oculta la extensin (0=no, 1=si)

Ejemplo:

$image = "fase.gif";
$panel->item("Enter image name",\$image);
$panel->pick_list(".","*.gif;*.rgb",1);

pick_list_data

www.maptek.cl

27

Permite seleccionar un elemento de un array. Al igual que el anterior siempre va acompaando a


un mtodo tem

$panel->pick_list_data(@array);
@array: Conjunto de todo tipo de valores
logical_button
Crea una casilla de verificacin (tick) en el panel

$panel->logical_button($label,$variable);
$label: Etiqueta del componente a desplegar
$variable: Asume un 1 si se selecciona y 0 en caso contrario

radio_button
Crea un radio button. Al activarse uno de los radio buttons en un panel todos los
otros con el mismo grupo son desactivados.

$panel->radio_button($rnum,$label,$variable);
$rnum: Nmero que identifica al grupo de botones
$label: Etiqueta del componente a desplegar
$variable: Al activarse el botn asume el valor 1, en caso contrario 0

if; y endif
Utilizado conjuntamente con logical_button y radio_button, indica que la parte contenida entre estos
dos mtodos depende de la seleccin del botn previamente definido

new_page
Permite dividir el panel en dos o ms paneles.

28

Mdulo LAVA

begin_indent; y end_indent;
Indenta los elementos definidos dentro de estos.
Ejemplo:

# Variables globales #
my $true = 1;
my $false = 0;
my $invalidval = -9999;
my $bigvalue = 10000000000.0;
my @expantypes = ("Use the major part of the polygon",
"Use the minor part of the polygon",
"Always ask me which part to use");
##################
my $panel;
#

Variables de criterio de trabajo

my $crteline = $true;
my $crtepoly = $true;
my $expancrit = $expantypes[0];
# Variables para las lineas
my $lncol = 7;
my $lntyp = 0;
my $lngrp = "";
my $lnnam = "";
# Variables para los poligonos de trabajo
my $wrkpollncol = 2;
my $wrkpollntyp = 20;
# Variables para los lineas de trabajo
my $wrklncol = 6;
my $wrklntyp = 20;
# Variables de layers
my $lay = "TU_LineLay";

my $cllay = $true;

my $tmplay = "TU_TempLay";
# Metodo para la fusion de poligonos
my $method = ;
my $polymerge = $false;
my $boundary_method = $true;
my $Bcdeginterv = 9.0;

www.maptek.cl

29

my $Bcradius = 0.05;
my $rcf_method = $false;
my $min_ang = 90.0;
my $conv_fence = $false;
my $fustol = 0.0;
my $svpolylay = $false;
my $fustol1 = 0.05;
my $fustol2 = 0.05;
# Layer donde seran guardados los resultados
my $polylay = "TU_PolyLay";
my $clpolylay = $true;
my $panel = new Lava::Panel;
$panel = new Lava::Panel;

$panel->text("

SOFTWARE VULCAN - TOE UPDATE");

$panel->text("

Version $version");

$panel->text("");
$panel->logical_button("Building-Fusioning polygons",\$crtepoly);
$panel->if;
$panel->begin_indent;
$panel->radio_button(2,"Boundary connection",\$boundary_method);
$panel->radio_button(2,"Polygon merge",\$polymerge);
$panel->end_indent;
$panel->begin_indent;
$panel->logical_button("Save in layer",\$svpolylay);
$panel->end_indent;
$panel->if;
$panel->item("",\$polylay,10);
$panel->on_side;
$panel->end_indent;
$panel->text(" ");
$panel->on_side;
$panel->logical_button("

Clear before",\$clpolylay);

$panel->on_side;
$panel->endif;
$panel->endif;

30

Mdulo LAVA

$panel->text("");
$panel->logical_button("Create expansion lines",\$crteline);
$panel->if;
$panel->item("

Expansion criteria",\$expancrit,33);

$panel->pick_list_data(@expantypes);
$panel->colour("

Line ",\$lncol);

$panel->line("

",\$lntyp);

$panel->on_side;
$panel->item("

Group",\$lngrp,10);

$panel->on_side;
$panel->item("

Name",\$lnnam,10);

$panel->on_side;
$panel->item("

Layer",\$lay,10);

$panel->text(" ");
$panel->on_side;
$panel->logical_button("

Clear before",\$cllay);

$panel->on_side;
$panel->text(" ");
$panel->logical_button("Display remaining polygons",\$dspremaining);
$panel->on_side;
$panel->endif;
$panel->text("");
$panel->text("Temporal - Working Parameters");
$panel->item("Working layer",\$tmplay,10);
$panel->text("Polygons");
$panel->colour("",\$wrkpollncol);
$panel->on_side;
$panel->line("

",\$wrkpollntyp);

$panel->on_side;
$panel->text("

Lines");

$panel->on_side;
$panel->colour("",\$wrklncol);
$panel->on_side;
$panel->line("

",\$wrklntyp);

$panel->on_side;
$panel->execute("Maptek Chile Application") or exit;

Resultados:

www.maptek.cl

31

32

Mdulo LAVA

2.5.2. Lava::Obj

Permite la creacin de objetos, los que pueden ser agregados a Envisage

Mtodos

El constructor crea la instancia de la clases Lava::Obj e inicializa las variables necesarias. Si se le


agrega text el objeto ser tipo texto sino ser polgono (lnea).
$my_obj = new LavaObj [text];$obj: nueva instancia de la clase Lava::Obj

Name
Nombre del objeto

[$objname] =$obj-> name([$newname]);


$objname: contiene el nombre del objeto
$newname: renombra el objeto al ponerse en esta forma

De esta forma el nombre del mtodo indica el atributo del objeto en si


name:

Nombre (texto)

description: Descripcin (texto)


group: Grupo (texto)
primitive: Primitiva (ver referencias)
control: Control (ver referencias)
colour: Color (entero)
line: Tipo de lnea (entero)
pattern: Tipo de pattern (entero)
closed: Cerrado/Abierto (1:Cerrado 0:Abierto)
feature: Feature (ver referencias)

[$objdesc] = $obj->description([$newdesc]);
[$objgroup] = $obj->group([$newgroup]);
[$primitiva] = $obj->primitive([$newprimitive]);
[$objcontrol] = $obj->control ([$newcontrol]);
[$objcolour] = $obj->colour ([$newcolour]);
[$objline] = $obj->line([$newline]);
[$objpattern] = $obj->pattern([$newpattern]);

www.maptek.cl

33

[$objclosed] = $obj->closed([$newclosed]);
[$objfeature] = $obj->feature([$newfeature]);

Coordinates
Coordenadas espaciales del objeto

($coords) = $obj->coordinates([$new_coords])
Ejemplo:

$coords = $obj->coordinates();
($x,$y,$z,$w) = $coords->i(0)
primera coordenada del objeto

($text) = $obj->text($newtext)
$text contiene el puntero del texto del objeto

Ejemplo
Dibujar un triangulo en el plano XY

($poly[0][0], $poly[0][1], $poly[0][2]) = (0,0,0);


($poly[1][0], $poly[1][1], $poly[1][2]) = (0,1,0);
($poly[2][0], $poly[2][1], $poly[2][2]) = (1,1,0);
# se crea el objeto
$obj = new Lava::Obj;
$newcoords = $obj->coordinates;
$obj->name(name);
$obj->colour(1);
$obj->line(0);
$obj->group(group1);
$obj->closed(1);
for ($p=0 ; $p<3; $p++)
{$newcoords->i($p,$poly[$p][0], $poly$p][1], $poly[$p][2], 0,1);}

34

Mdulo LAVA

# anora se agrega el objeto en el layer

$layer->add($obj);

2.5.3. Lava::Coord
El objeto Lava::Coord encapsula un arreglo de registros de coordenadas. En el punto anterior se
mostr cmo se tratan tales registros. Los objetos textos solo usan la primera coordenada para
definir su posicin (registro 0, o coordenada 0).
Mtodos:

($coord) = new Lava::Coord


$coord: nueva instancia creada de un objeto Lava::Coord
Un objeto Lava::Coord vaco puede ser creado usando este mtodo. Este paso usualmente no es
utilizado porque el objeto Lava::Coord es automticamente creado cuando se crea un objeto
Lava::Obj y usualmente se adquiere una referencia a ste del objeto Lava::Obj.
i
Permite acceder a una coordenada, tanto para examinarla como para setearla.

([$x,$y,$z,$w,$t,$name]) = $coords>i($i[,$n_x[,$n_y[,$n_z[,$n_w[,$n_t[,$n_name]]]]]])
$x: Si $n_x no es puesto, $x = valor X de la i-sima coordenama.

$y: Si $n_x no es puesto, $y = valor Y de la i-sima coordenama.

$z: Si $n_x no es puesto, $z = valor Z de la i-sima coordenama.

$w: Si $n_x no es puesto, $w = valor W de la i-sima coordenama.

$t : Si $n_x no es puesto, $t = Tipo de la i-sima coordenada.

$Name: Si $n_x no es puesto, $name = Nombre de la i-sima coordenada.

$i: Especifica que coordenada est siendo seteada/examinada.

$n_x: Si es suministrada, setea el valor X de la i-sima coordenada.

www.maptek.cl

35

$n_y: Si es suministrada, setea el valor Y de la i-sima coordenada.

$n_z: Si es suministrada, setea el valor Z de la i-sima coordenada.

$n_w: Si es suministrada, setea el valor W de la i-sima coordenada.

$n_t: Si es suministrada, setea el Tipo de la i-sima coordenada.

$n_x: Si es suministrada, setea el Nombre de la i-sima coordenada.

n
Entrega el nmero de coordenadas vlidas

($n) = $coords->n
$n: Nmero de coordenadas contenidas

2.5.4. Lava::Text

Crea objetos tipo texto. En general es preferible usar la opcin de crear el objeto como el paso
anterior.

Mtodos
[$text_instance] = new Lava::Text() $text_instance: nueva instancia de la clase Lava::Text

Al igual que el tipo Lava::Obj el nombre del mtodo indica el atributo del objeto en si
angle: ngulo del texto
height: Altura
size: Tamao de fuente
font: Tipo de fuente
scale: Escala
Estos atributos dependen mucho de la fuente utilizada (ver referencias)

[$angle]
[$height]
[$size]
[$font]
[$scale]

36

=
=
=
=
=

angle([$newangle])
height([$newheight])
size([$newsize])
font([$newfont])
scale([$newscale])

Mdulo LAVA

Ejemplo:

$obj = new Lava::Obj "text";


$obj->name(Objeto texto);
$obj->colour(2);
$obj->group("hole_ang");
$text = $obj->text;
$text->font(4);
$text->size(0.05);
$text->height(0.5);
for ($i=0; $i<3;$i++)
{
$msg = hola.$i;
$text->i($i,$msg);
}
# ubicacin del texto
$obj->coordinates->i(0,100,200,300, 0, 1);
$layer->add($obj);

2.5.5. Lava::Layer

Permite la creacin de capas (layers)

Mtodos
El constructor crea una nueva instancia de Lava::Layer e inicialzalo los valores necesarios.

$layer = new Lava::Layer [$nom],[$desc],["clear"];

www.maptek.cl

37

$layer: nueva instancia de la clase panel panel


$nom: Nombre del layer
$descn: Descripcion;
"clear": Indica que se limpiara al momento de crear o abrir

is_valid
Indica si el layer es vlido

($valid) = $layer->is_valid()
add
Agrega un objeto (de tipo Lava::Obj) al layer

$layer->add($my_obj);
$my_obj: Objeto a ser agregado

2.5.6. Lava::Point

Permite seleccionar puntos dentro del ambiente grafico

$point = new Lava::Point($msg);


$point: nueva instancia de la clase Lava::Point
$msg: Mensaje a ser desplegado en la barra de dilogo al momento de solicitar el punto

Mtodos
is_valid
Retorna verdadero si el punto es vlido o no

$result = $point->is_valid();
$result: indica si el punto es vlido o no

38

Mdulo LAVA

get
Toma el punto de envisage

($result) = $point->get();
$result indica si el usuario selecciono o no un punto

position
Retorna las coordenadas X,Y,Z del punto seleccionado

($x,$y,$z) = $point->position();
$X,$Y,$Z: coordenadas del punto pinchado

Ejemplo

my $point = new Lava::Point("Select a point");


my $x,$y,$z;
($x,$y,$z) = $point->position if ($point->get);
2.5.7. Lava::Selection

Permite seleccionar objetos del ambiente grafico 3D.

$sel = new Lava::Selection ([$prompt[,$flags]]);


$prompt: mensaje a desplegar en la barra de dialogo
$flags: opciones de seleccin: (multi: seleccin mltiple;
shadow: ensombrece lo seleccionado;
points: realza los puntos de la seleccin)

www.maptek.cl

39

Ejemplo:

a)$sel = new Lava::Selection Select any object;


$sel: objeto seleccionado

b)$sel = new Lava::Selection Select the objects,multi;


Este es un tipo de seleccin mltiple (multi) y se desplegar el panel popup tpico de seleccin de
objetos. Requiere de algunos mtodos para recorrer la seleccin de objetos.

Mtodos
has_more
Indica que la seleccin corresponde a un objeto valido
next
Avanza al siguiente objeto en la seleccin
is_first
Indica si el objeto es el primero en la lista de seleccin
id
Identificador unico del objeto seleccionado
layer
Nombre del layer del que proviene el objeto seleccionado
replace
Reemplaza los atributos de los objetos (name,group,colour,line,pattern,etc) en caso de ser
modificados

Ejemplos:

a)

Cambia el color de los objetos seleccionados y borra el nombre

$sel = new Lava::Selection Select the objects,multi,shadow;


while ($sel->has_more())
{
$color = $sel ->colour();
$color += 1 if ($color < 30);
$sel->colour($color);
$sel->name();
$sel->replace();

40

Mdulo LAVA

$sel->next();}
b)

Escrito de otro modo

for ($sel = new Lava::Selection Select the


objects,multi,shadow; $sel->has_more();$sel->next)
{$color = $sel ->colour();
$color += 1 if ($color < 30);
$sel->colour($color);
$sel->name();
$sel->replace();}
2.1.7. Lava::TriSelection

Permite seleccionar y editar triangulaciones cargadas en el ambiente grafico.

($trisel) = new Lava::TriSelection [$prompt]:


$trisel: triangulacion seleccionada
$prompt: mensaje de seleccin

Mtodos
is_valid
Indica si el usuario ha seleccionado una triangulacin
($result) = $trisel->is_valid()
$result: Tiene 1 si es vlida y 0 en caso contrario

name
Nombre de la triangulacin seleccionada. El nombre incluye la ruta completa donde se encuentra.

($name) = $trisel->name()

www.maptek.cl

41

Index
ndice de la triangulacin. Nmero nico que la identifica de entre todas las triangulaciones
cargadas

($index) = $trisel->index()
triangulation
Retorna la estructura de la triangulacin

($triangulation) = $trisel->triangulation;
$triangulation: recibe las estructuras de la triangulacin seleccionada (puntos e ndices);

replace
Guarda la triangulacin seleccionada y la carga nuevamente en Envisage

$trisel->replace()
Ejemplo

# Debe cargar al menos un triangulacin en Envisage


# Muestra los atributos de la triangulacin y la traslada de lugar
use Lava;
# Lava::TriSelection
($trisel) = new Lava::TriSelection "Seleccione la Triangulation";
$valid = $trisel->is_valid();
printf Is valid = %d\n,$valid);
$name = $trisel->name();
printf Name = %s\n,$name;
$index = $trisel->index();
printf Indice = %d,$index;

42

Mdulo LAVA

# Toma los indices de los tringulos


$triang = $trisel->triangulation;
$points = $triang->points();
printf Number of points = %d\n,$points;
$triangles = $triang->triangles();
printf Number of triangles = %d\n,$triangles;
$moveX = 200;
$moveY = 200;
$moveZ = 200;
for ($i=0;$i<$points;$i++)
{($x,$y,$z) = $triang->point($i);
$x += $moveX;
$y += $moveY;
$z += $moveZ;
$triang->point($i,$x,$y,$z);
printf "\nPoint %d = %.3f

%.3f

%.3f",$i,$x,$y,$z;}

for ($i=0;$i<$triangles;$i++)
{($i1,$i2,$i3) = $triang->triangle($i);
printf "\nTriangle %d = %d

%d

%d",$i,$i1,$i2,$i3;}

$trisel->replace();
2.5.8. Lava::Contourer

Permite crear contornos de triangulaciones. Se necesita que este una triangulacin cargada en el
ambiente 3D.

Ejemplo

use Lava;$trisel = new Lava::TriSelection;if($trisel->is_valid){


# Toma el nombre de la triangulacin
# que se necesita
# para crear el contorno
$name=$trisel->name();

www.maptek.cl

43

# Crea el objeto contorno


$contourer = new Lava::Contourer($name);
$layer = new Lava::Layer("CONTOURS");
$valid=1;
#Select some Z levels ...
while($valid)
{$point=new Lava::Point("Select level");
$point->get();
if ($valid=$point->is_valid())
{my ($x,$y,$z)=$point->position();
$obj=$contourer->create_contour($z);
$obj->colour(3);
$obj->line(0);
$obj->pattern(0);
$n = $obj->coordinates->n;
Lava::Message("Countor wuth $n pts Z=$z");
$layer->add($obj);}}}

2.6. Clase Triangulation


Permite abrir triangulaciones desde archivo, modificarlas o crear triangulaciones nuevas.

($triangulation) = new Triangulation [$name];


$triangulation recibe la estructura de la triangulacin seleccionada
$name es el nombre de la triangulacin a abrir

Mtodos

is_valid
Retorna si la triangulacin es vlida o no

($valid) = $triangulation->is_valid;
$valid: Es 1 cuando una triangulacin ha sido correctamente leida o seteada

44

Mdulo LAVA

points
Entrega el nmero de puntos de la triangulacin

($npoints) = $triangulation->points
$npoints: Contiene nmero de puntos en la triangulacin

triangles
Retorna el nmero de tringulos

($ntriangles) = $triangulation->triangles
$ntriangles: Contiene el nmero de tringulos de la triangulacin

point
Permite acceder a un punto de la triangulacin

([$x,$y,$z]) = $triangulation->point($i[,$newx[,$newy[,$newz]]]])
$i: numero del punto en la triangulacin
$x,$y,$z: coordenadas del punto $i de la triangulacin
$newx,$newy,$newz: nuevas coordenadas para el punto

triangle
Permite acceder al ndice (ndice en la lista de puntos) de los vrtices de un triangulo de la
triangulacin

([$i1,$i2,$i3]) = $triangulation>triangle($i[,$newi1[,$newi2[,$newi3]]]])
$i: numero del triangulo en la triangulacin
$i1,$i2,$i3: ndices de los vrtices del triangulo $i en la triangulacin
$newx,$newy,$newz: nuevos ndices para el triangulo

read
Permite leeri una triangulacin de un disco. Si no se pone el nombre entonces es usado el nombre
entregado al constructor.

$triangulation->read([$name])
$name:Nombre de la triangulacin a ser leda

www.maptek.cl

45

write
Este mtodo escribe una triangulacin a disco. Si no se pone el nombre entonces es usado el
nombre entregado al constructor.

$triangulation->write ([$name])
$name: nombre de la triangulacion a ser guardada en disco

Ejemplos:

a)

# Abriendo desde archivo


use Lava;
#($trisel) = new Triangulation
# ("C:/cursolava/ejercicios/lava.00t");
# o bien
($trisel) = new Triangulation ("lava.00t");
($valid) = $trisel->is_valid();
printf Is valid = %d\n,$valid;
($points) = $trisel->points();
printf Points = %d\n,$points;
($triangles) = $trisel->triangles();
printf Triangles = %d\n,$triangles;
for ($i=0;$i<$points;$i++)
{
($x,$y,$z) = $trisel->point($i);
printf "\n%.3f

%.3f

%.3f",$x,$y,$z;

}
for ($i=0;$i<$triangles;$i++)
{
($x,$y,$z) = $trisel->triangle($i);

46

Mdulo LAVA

printf "\n%d

%d

%d",$x,$y,$z;}

b)
# Creando una nueva triangulacion
use Lava;
($newtri) = new Triangulation;
$newtri->points(10);
$newtri->point(0,91718.514,61917.882,2300.000);
$newtri->point(1,91718.514,61917.882,2400.000);
$newtri->point(2,92014.099,62666.965,2300.000);
$newtri->point(3,92014.099,62666.965,2400.000);
$newtri->point(4,92155.817,62395.675,2300.000);
$newtri->point(5,92155.817,62395.675,2400.000);
$newtri->point(6,92580.973,62448.314,2300.000);
$newtri->point(7,92580.973,62448.314,2400.000);
$newtri->point(8,92597.169,62011.011,2300.000);
$newtri->point(9,92597.169,62011.011,2400.000);
$newtri->triangles(16);
$newtri->triangle(0,0,1,2);
$newtri->triangle(1,0,1,9);
$newtri->triangle(2,0,2,4);
$newtri->triangle(3,0,4,8);
$newtri->triangle(4,0,8,9);
$newtri->triangle(5,1,2,3);
$newtri->triangle(6,1,3,5);
$newtri->triangle(7,1,5,9);
$newtri->triangle(8,2,3,4);
$newtri->triangle(9,3,4,5);
$newtri->triangle(10,4,5,6);
$newtri->triangle(11,4,6,8);
$newtri->triangle(12,5,6,7);
$newtri->triangle(13,5,7,9);
$newtri->triangle(14,6,7,8);
$newtri->triangle(15,7,8,9);
$newtri->write("nelson.00t");

www.maptek.cl

47

48

Mdulo LAVA

www.maptek.cl

49

Mdulo Vulcan
3.1. Introduccin.
Las clases Vulcan para Lava han sido diseadas para trabajar desde fuera de Envisage, es decir,
podemos acceder al modelo de bloque o las base de datos Isis, sin necesidad que se ejecute
dentro de envisage.
Dentro de estas clases se encuentran la clase Block Model (vulcan::block_model), la case Isis data
base (vulcan::isisdb) la clase para Map file (vulcan_mapio) y la clase de triangulacin
(vulcan::triangulation).
Para usar estas clases es necesario agregar la instruccin de uso de la clase en la parte superior
del archivo.

use vulcan;

3.2. Clases
3.2.1. Clase Block Model

La clase block model incluye mtodos para abrir, acceder, recorrer, obtener informacin, obtener
valores de campos y escribir en el modelo de bloques.

Mtodos:

50

Mdulo Vulcan

Acceder a un modelo de bloque:

Sintaxis:

$bm = new vulcan::block_model(name, mode);


Donde:
name es el nombre del modelo de bloques
mode es el modo de apertura del modelo de bloques.

El modo de apertura es r (read) para lectura y w (write) para escritura.

Ejemplo:

$bm = new vulcan::block_model(model.bmf, r);


Con la instruccin anterior abrimos, en modo de lectura, un modelo de bloques llamado model.bmf

Cerrar un modelo de bloque

Sintaxis:

$bm->close();
Obtener informacin sobre los campos y el modelo de bloque en general.

Obtener la lista de campos que contiene el modelo de bloques

Sintaxis:

$bm->field_list();
Obtener la lista de campos numricos del modelo

Sintaxis:

$bm->field_list_numbers();

www.maptek.cl

51

Obtener la lista de campos textos del modelo

Sintaxis:

$bm->->field_list_string();
Verifica si un texto es un campo vlido en el modelo de bloques

Sintaxis:

$bm->is_field(name);
Donde:
name es el nombre del campo a consultar.

Verifica si un campo es numrico

Sintaxis:

$bm->is_number(name);
Donde:
name es el nombre del campo a consultar.

Verifica si un campo es de tipo texto

Sintaxis:

$bm->is_string(name);
Donde:
name es el nombre del campo a consultar.

Obtiene la extensin del bloque actual en coordenadas relativas

Sintaxis:

$bm->model_extent();

52

Mdulo Vulcan

Obtiene el origen del modelo de bloques en coordenadas reales

Sintaxis:

$bm->model_origin();

Obtiene la orientacin del modelo de bloques

Sintaxis:

$bm->model_orientation();
Para un modelo no rotado estos ngulos son 90 0

Obtiene el nmero de subesquemas del modelo de bloques

Sintaxis:

$bm->model_n_schemas();

Obtiene el k-simo esquema del modelo de bloques


Sintaxis:

$bm->model_schema_extent(k);
Donde:
k corresponde al nmero del k-simo esquema

Obtiene el tamao de bloques del k-simo esquema del modelo de bloques

Sintaxis:

$bm->model_schema_size(k);

www.maptek.cl

53

Donde:
k corresponde al nmero del k-simo esquema

El resultado es una lista de 6 nmeros, los primeros 3 corresponden al tamao mnimo en X, Y, Z.


Los restantes valores corresponden a los tamaos mximos de los bloques en las direcciones X, Y,
Z.

Obtiene el valor de una variable del bloque actual

Sintaxis:

$bm->get(name);
Donde:
name es el nombre del campo a consultar.

Obtiene el valor de texto de una variable en el bloque actual

Sintaxis:

$bm->get_string(name);
Donde:
name es el nombre del campo a consultar.

Obtiene multiples valores para variables en el bloque actual

Sintaxis:

$bm->get_multiple( \@vl );
Donde:
V1 es la lista de campos a consultar.

Asigna un valor a una variable

Sintaxis:

$bm->put(name, value);

54

Mdulo Vulcan

Donde:
name es el nombre del campo a escribir.
value es el valor numrico a escribir

Asigna un valor a una variable de tipo texto

Sintaxis:

$bm->put_string(name, value);
Donde:
name es el nombre del campo a escribir.
value es el valor texto a escribir

Escribe el bloque actual

Sintaxis:

$bm->write();
Avanza al siguiente bloque

Sintaxis:

$bm->next();
Si es necesario, actualiza el bloque actual antes de pasar al siguiente.

Verifica si se encontr el fin del archivo (End Of File)

Sintaxis:

$bm->eof();
Mueve el cursor al primer bloque.

Sintaxis:

$bm->rewind();

www.maptek.cl

55

Obtiene la posicin actual del bloque

Sintaxis:

$bm->get_position();
Mueve el cursor a la posicin especificada

Sintaxis:

$bm->set_position(pos);
Busca el bloque definido por las coordenadas (x, y, z)

Sintaxis:

$bm->find_xyz(x,y,z);
Donde:
x, y, z es la coordenada relativa al modelo

Busca el bloque definido por las coordenadas (x, y, z)

Sintaxis:

$bm->world_xyz(x,y,z);
Donde:
x, y, z es la coordenada real

Mtodos de conversin

Convierte coordenadas relativas al modelo en coordenadas reales

Sintaxis:

$bm->to_world(x,y,z);
Donde:
x, y, z es la coordenada que se desea convertir.

56

Mdulo Vulcan

Convierte coordenadas reales en coordenadas relativas al modelo

Sintaxis:

$bm->to_model(x,y,z);
Donde:
x, y, z es la coordenada que se desea convertir.

Mtodos asociados a la seleccin de bloques.

Crear una seleccin de bloques

Sintaxis:

$bm->select(expresion);
La expresin sigue la norma de la seleccin de bloques utilizada por los programas externos de
modelo de bloques.

Ejemplos de expresiones:

-C \'density eq 2.5\'
Selecciona bloques de acuerdo a una condicin. En este caso significa que selecciona bloques
cuya densidad es igual a 2.5

-t tri.00t
Selecciona bloques que estn dentro de una triangulacin

www.maptek.cl

57

Los parmetros de seleccin son los siguientes:

-v <variable> [value]

Selecciona por variable.

-t <triangulation>

Selecciona por slido (Triangulacin).

-n <top surface>

Superficie superior.

-u <lower surface>

Superficie inferior.

-O

Incluye bloques fuera de la triangulacin.

-bm <xl, xt, yl, yt, zl, zt>

Seleccin usando una caja con coordenadas relativas


al modelo.

-bw <xl, xt, yl, yt, zl, zt>

Seleccin usando una caja con coordenadas reales.

-C <condition>

Seleccin utilizando una expresin condicional.

-X

Usa volmenes proporcionales cuando se utiliza


seleccin por slidos.

Obtiene la extensin del bloque actual

Sintaxis:

$bm->match_extent();
Si el mtodo de seleccin utiliza proporcin en slidos (-X), la extensin ser menor que la
extensin del bloque actual. El volumen de la extensin es igual al volumen de la interseccin del
bloque y la triangulacin.

Obtiene la extension del bloque actual

Sintaxis:

$bm->block_extent();

Almacena la seleccin actual y comienza una nueva seleccin

Sintaxis:

$bm->push_select(selection);
El cursor es posicionado en el primer bloque del criterio de seleccin

58

Mdulo Vulcan

Recupera la seleccin almacenada

Sintaxis:

$bm->pop_select();
El cursor se ubica en el bloque en el cual se llamo al mtodo push_select y se recupera el criterio
de seleccin almacenado.
Las selecciones pueden ser anidadas hasta en 5 niveles.
Un uso tpico de estos mtodos es buscar bloques cercanos a un bloque dentro de la seleccin
creada.

Ejemplo:

Use vulcan;
my $bm = new vulcan::block_model("n1.bmf", "w");
# Seleccion de bloques dentro del solido.
$bm->select("-t abc.00t");
for(; !$bm->eof(); $bm->next())
{$bm->put("density", 2.5);}

www.maptek.cl

59

3.2.2. Clase IsisDB


Una base de datos Isis consiste en una secuencia de registros. Cada registro tiene un tipo, el cual
especifica a que tabla pertenece, en otras palabras, que campos tiene un registro. Los registros
estn agrupados en objetos. Un objeto es un conjunto de registros que pertenecen a una clave en
particular. Una clave es un conjunto de valores del campo de clave primaria (la primera tabla
definida en el diseo). Como ejemplo podemos mencionar una base de datos de sondajes, en la
cual cada sondaje es un objeto y las claves corresponden al campo HOLEID de la tabla collar.

Es muy importante el orden de los registros en la base de datos. Un objeto comienza con un
registro de cabecera simple (un registro cuyo tipo es la primera tabla en el diseo) y continua con
los restantes registros hasta que se encuentra con el prximo registro de cabecera o el fin de la
base de datos.

Mtodos.

Abrir o crear una base de datos

Sintaxis:

$db = new vulcan::isisdb(name, mode, env);


Donde:
name es el nombre de la base de dato mode del modo en el que se abrir la base de datos. r
para solo lectura y w para lectura/escritura.
env es el nombre del ambiente

60

Mdulo Vulcan

Verifica si la base de datos se abri correctamente

Sintaxis :

$db->is_open();
Este mtodo debe ser llamado inmediatamente despus de la instruccin new
vulcan::isisdb para verificar que la base de datos se ha abierto correctamente.
Cierra la base de datos

Sintaxis:

$db->close();
Si esta instruccin no se ejecuta antes de salir del script los cambios realizados no sern
guardados.

Obtiene una lista con las tablas

Sintaxis:

$db->table_list();
Obtiene una lista de los campos de una tabla

Sintaxis:

$db->field_list(table);
Donde:
Table es la tabla a consultar.

Obtiene el ndice de un campo

Sintaxis:

$db->field_index(field, table);

www.maptek.cl

61

Donde:
Field es el nombre del campo a consultar.
Table es la tabla en donde pertenece el campo.

El mtodo retorna el ndice del campo partiendo desde 1. Si el campo no existe el mtodo retorna 1.

Obtiene una lista de los campos numricos

Sintaxis:

$db->field_list_numbers(table);
Donde:
Table es la tabla a consultar.

Obtiene una lista de los campos de textos

Sintaxis:

$db->field_list_strings(table);
Donde:
Table es la tabla a consultar.

Elimina el registro actual

Sintaxis:

$db->delete_record()
Si el registro es un registro cabecera, al eliminarlo genera que todos los registros que estn a
continuacin pasen a pertenecer al objeto previo. Debido a este comportamiento es necesario
tener cuidado al eliminar registros. Se recomienda utilizar delete_key() si se desea eliminar todo el
objeto. El mtodo retorna 0 si el registro se elimin correctamente.

Elimina todos los registros de un objeto.

Sintaxis:

$db->delete_key(key)

62

Mdulo Vulcan

Donde:
Key es la clave del objeto que se desea eliminar.

Calcula la clave del objeto actual.

Sintaxis:

$db->determine_key()
Calcula internamente la clave del objeto actual si el registro actual es un registro de cabecera. El
valor de la clave del objeto puede ser recuperado utilizando get_key(). Este procedimiento es til al
usar find_key() con patrones. Al llamar a determine_key() y get_key() retornarn el nombre de la
clave del objeto que se encontr.

Obtiene la clave del objeto actual.

Sintaxis:

$db->get_key()
Se debe invocar primero el mtodo determine_key() cuando el registro actual apunte a un registro
de cabecera. Por ejemplo inmediatamente despus de llamar a find_key().

Verifica si existe un campo.

Sintaxis:

$db->is_field(field, table);
Donde:
Field es el nombre del campo a consultar.
Table es la tabla en donde pertenece el campo.

Verifica si un campo es numrico

Sintaxis:

$db->is_number(field, table);
Donde:
Field es el nombre del campo a consultar.
Table es la tabla en donde pertenece el campo.

www.maptek.cl

63

Verifica si un campo es te tipo texto

Sintaxis:

$db->is_string(field, table);
Donde:
Field es el nombre del campo a consultar.
Table es la tabla en donde pertenece el campo.

Obtiene el valor de un campo numrico

Sintaxis:

$db->get(field);
$db->get(index);
Donde
Field es el nombre del campo a consultar.
Index es el ndice del campo a consultar.

Este mtodo no puede ser utilizado en campos no numricos.

Obtiene el valor de un campo no numrico

Sintaxis:

$db->get_string(field);
$db->get_string(index);
Donde
Field es el nombre del campo a consultar.
Index es el ndice del campo a consultar.

Si este mtodo se utiliza con un campo numrico el valor retornado ser la representacin de texto
del nmero.

64

Mdulo Vulcan

Obtiene un conjunto de valores de campos numricos

Sintaxis:

$db->get_multiple( \@vl );
Donde
v1 es una lista con los nombres de los campos que se desean recuperar.

Este mtodo fallar si algunos de los campos en la lista es no numrico.

Obtiene un conjunto de valores de campos no numricos

Sintaxis:

$db->get_multiple_string( \@vl );
Donde
v1 es una lista con los nombres de los campos que se desean recuperar.

Si este mtodo se utiliza con un campo numrico el valor retornado ser la representacin de texto
del nmero.

Actualiza un campo numrico.

Sintaxis:

$db->put(field, value);
$db->put(index, value);
Donde
Field es el nombre del campo a consultar.
Index es el ndice del campo a consultar.
Value es el valor a actualizar el campo.

Este mtodo fallar si el campo es no numrico.

www.maptek.cl

65

Actualiza un campo no numrico.

Sintaxis:

$db->put_string(field, value);
$db->put_string(index, value);
Donde
Field es el nombre del campo a consultar.
Index es el ndice del campo a consultar.
Value es el valor a actualizar el campo.

Si el valor es numrico, el mtodo convierte el valor a su representacin de texto.

Mueve a la siguiente posicin el registro actual.

Sintaxis:

$db->next();
Si el siguiente registro es un registro vlido, el mtodo retorna el valor 0. Si al mover el cursor los
datos del registro han sido modificados, stos sern actualizados automticamente en la base de
datos.

Obtiene el nombre de la tabla del registro actual.

Sintaxis:

$db->get_table_name();
Actualiza el nombre de la tabla del registro actual.

Sintaxis:

$db->put_table_name();

Guarda el buffer en el registro actual.

Sintaxis:

$db->write();

66

Mdulo Vulcan

Agrega un nuevo registro al final de la base de datos

Sintaxis:

$db->append();
Este mtodo slo se debe emplear cuando se agregan nuevos objetos, en general, es bastante
difcil determinar a cual objeto pertenece el nuevo registro. Utilice insert_after() e insert_before()
para insertar registros en objetos existentes.

Insertar un nuevo registro despus del registro actual.

Sintaxis:

$db->insert_after();
Inserta un nuevo registro antes del registro actual.

Sintaxis:

$db->insert_before();
Hay que tener precaucin al utilizar este mtodo. Se debe verificar que no se encuentre en un
registro de cabecera. Al utilizar este mtodo en dicho registro, el registro se crear en el objeto
anterior.

Verificar el fin de la base de datos.

Sintaxis:

$db->eof();

Obtiene la posicin del registro actual


Sintaxis:

$db->get_position();
Este mtodo se puede utilizar al estilo de marcadores, para volver ms tarde a una posicin
determinada.

www.maptek.cl

67

Ubica a la base de datos en el primer registro

Sintaxis:

$db->rewind();
Si la base de datos no contiene datos, el mtodo eof() retornar verdadero.

Mueve la posicin actual a una predeterminada

Sintaxis:

$db->set_position(pos);
Donde
Pos es una posicin obtenida con el mtodo get_position().

Bajo ninguna circunstancia se debe dar una posicin obtenida de otra forma.

Mueve el cursor al registro cabecera con la clave dada.

Sintaxis:

$db->find_key(key);
Donde:
Key es la clave que se desea buscar.

La clave puede ser el nombre completo o usar caracteres comodines.

Los caracteres vlidos son:

reemplaza 0 o ms caracteres
%

reemplaza un carcter.

El mtodo retorna 0 si fue exitoso.

68

Mdulo Vulcan

Mueve el cursor al siguiente objeto

Sintaxis:

$db->next_key(key);
Donde:
Key es la clave del objeto

El mtodo retorna 0 si fue exitoso.

Mueve el cursor al siguiente registro del objeto

Sintaxis:

$db->next_same_key();
El mtodo devuelve 0 si la posicin resultante es un registro del mismo objeto. En otras
circunstancias el estado de la base de datos pasar a EOD (end of data) o el mtodo eof()
retornar verdadero.

Agrega el buffer a un nuevo registro del la tabla

Sintaxis:

$db->append_buffer(table, buffer);
Donde:
Table es la tabla en la que se agregar el registro
Buffer es un buffer obtenido con get_buffer().

El registro se crear al final de la base de datos. El registro pertenecer al ltimo objeto de la base
de datos, de tal manera que este mtodo debe usarse cuando se agregan nuevos objetos. Este
mtodo en conjunto con get_buffer() se utilizan para copiar registros a un nuevo objeto.

Obtiene un buffer desde la base de datos

Sintaxis:

$db->get_buffer();

www.maptek.cl

69

El buffer devuelto es binario y no puede ser manipulado. Se debe recuperar el tipo de tabla
correspondiente al buffer usando get_table_name() y almacenar ambos valores para ser usados en
conjunto con el mtodo append_buffer()

Ejemplo

use vulcan;
# abrir la base de datos para lectura
my $db = new vulcan::isisdb("thordemo.dhd","r","krj");
die "Could not open database\n" unless $db->is_open();
# Obtiene una lista de tablas del diseo
my @tables = $db->table_list();
# Loop a travs de las tablas
foreach $t ( @tables )
{
# Obtiene los campos por cada tabla
@fl = $db->field_list($t);
# Imprime las tablas y campos
print "table $t: fields ";
foreach $f ( @fl ) { print "$f "; }
print "\n";}
# Posiciona la base de datos en el primer registro
$db->rewind();
# Lee secuencialmente todos los registros
for (; !$db->eof(); $db->next())
{
# Imprime el HOLEID y DEPTH si el registro viene de
# la table COLLAR
if( $db->get_table_name() eq "COLLAR" )
{print $db->get_string("HOLEID"), " ", $db->get("DEPTH"), "\n";}}
# Cierra la base de datos
$db->close();

70

Mdulo Vulcan

3.2.3. Clase Mapio


La clase mapio nos da acceso a los archivos map y los datos contenidos en el.

Mtodos.

Abrir o crear un archivo map

Sintaxis:

$db = new vulcan::mapio(name, mode, env, proj);


Donde:
name es el nombre del archivo map
mode es el modo en el que se abrir el archivo. r para solo lectura y w para lectura/escritura.
env es el nombre del ambiente. En el caso del mapfile se deja en blanco.
Proj es el nombre del proyecto. En el caso de un mapfile se deja en blanco.

Obtiene la lista de tablas.

Sintaxis:

$db->table_list();
En el caso del mapfile esta lista solo correponde al texto data

Obtiene los campos de la tabla

Sintaxis:

$db->field_list();
Obtiene una lista de los campos numricos

Sintaxis:

$db->field_list_numbers(table);
Donde:
Tabla es el nombre de la tabla de la que se quiere obtener informacin

www.maptek.cl

71

Obtiene una lista de los campos no numricos

Sintaxis:

$db->field_list_string(table);
Donde:
Tabla es el nombre de la tabla de la que se quiere obtener informacin

Test if a field exists

Sintaxis:

$db->is_field(name, table);
Donde:
Tabla es el nombre de la tabla de la que se quiere obtener informacin
Field nombre del campo que se quiere probar

Verifica si un Campo es numrico

Sintaxis:

$db->is_number(name, table);
Donde:
Name nombre del campo que se desea probar.
Tabla es el nombre de la tabla de la que se quiere obtener informacin

Verifica es un campo es no numrico

Sintaxis:

$db->is_string(name, table);
Donde:
Name nombre del campo que se desea probar.
Tabla es el nombre de la tabla de la que se quiere obtener informacin

72

Mdulo Vulcan

Obtiene el valor numrico de un campo

Sintaxis:

$db->get(name);
Donde:
Name nombre del campo que se desea obtener el valor.

Obtiene el valor no numrico de un campo

Sintaxis:

$db->get_string(name);
Donde:
Name nombre del campo que se desea obtener el valor.

Obtiene una lista de valores

Sintaxis:

$db->get_multiple( \@vl );
Donde
v1 es una lista con los nombres de los campos que se desean recuperar.

Actualiza el valor de un campo numrico

Sintaxis:

$db->put(name, value);
Donde:
Name nombre del campo que se desea probar.
Value es el valor con el cual se actualizar el campo.

www.maptek.cl

73

Actualiza el valor de un campo no numrico

Sintaxis:

$db->put_string(name, value);
Donde:
Name nombre del campo que se desea probar.
Value es el valor con el cual se actualizar el campo.

Mueve el cursor al siguiente registro

Sintaxis:

$db->next();
Obtiene el tipo de table actual

Sintaxis:

$db->get_table_type();
Actualiza el tipo de tabla actual.

Sintaxis:

$db->put_table_type();
Escribe el bloque actual

Sintaxis:

$db->write();
Agrega al final de la base de datos

Sintaxis:

$db->append();

74

Mdulo Vulcan

Verifica si se encontr el fin de archivo

Sintaxis:

$db->eof();
Obtine la posicin del registro actual

Sintaxis:

$db->get_position();
Mueve el cursor al primer registro de la base de datos
Sintaxis:

$db->rewind();
Mueve el cursor de la base de datos a una posicin definida

Sintaxis:

$db->set_position(pos);
Mueve el cursor a una clave dada (group id)

Sintaxis:

$db->find_key(key);
Mueve el cursor al siguiente registro

Sintaxis:

$db->next_key(key);
Mueve el cursor a la siguiente tabla

Sintaxis:

$db->next_same_key();

www.maptek.cl

75

Ejemplo:

use vulcan;
my $db = new vulcan::mapio("arcabc.map","r","","arc");
my @recs = $db->table_list();
foreach $r ( @recs )
{@fl = $db->field_list($r);print "table $r\n";foreach $f (@fl)
{print "

FIELD ", $r, " ", $f, "\n";}}for(; !$db->eof(); $db-

>next()){print
$db->get("X"), " ",
$db->get("Y"), " ",
$db->get("Z"), " ",
$db->get("W"), "\n";}

76

Mdulo Vulcan

You might also like