Está en la página 1de 27

UNIVERSIDAD AUTNOMA TOMS FRAS

FACULTAD DE INGENIERA
CARRERA DE INGENIERA CIVIL

DESARROLLO DE UNA APLICACIN WINDOWS


PARA LA VISUALIZACIN AXONOMTRICA Y
PROYECCIN DIDRICA DE POLIEDROS

Potos, Febrero 2013

CONTENIDO
RESUMEN EJECUTIVO......................................................................................iii
INTRODUCCIN............................................................................................... 4
1.1

Antecedentes.......................................................................................................... 4

1.2

Descripcin del Problema.......................................................................................4

1.3

Objetivo.................................................................................................................. 4

1.4

Justificacin............................................................................................................ 4

1.5

Delimitacin........................................................................................................... 5

DESARROLLO DEL PROYECTO...........................................................................6


1.6

Anlisis del Problema..............................................................................................6

1.6.1

Compresin del problema.................................................................................6

1.6.2

Identificacin de Entradas y Salidas.................................................................6

1.6.3

Procesos de Transformacin de Datos...............................................................6

1.7

Diseo de la aplicacin...........................................................................................7

1.7.1

Diagramas de Flujo........................................................................................... 7

1.8

Prueba de Escritorio................................................................................................7

1.9

Codificacin............................................................................................................ 7

1.9.1

Variables Principales......................................................................................... 7

1.9.2

Transformaciones.............................................................................................. 8

1.9.3

Ventana Principal.............................................................................................. 9

1.9.4

Ventana Datos................................................................................................21

1.9.5

Ventana Ingresar Lnea...................................................................................23

1.9.6

Configuracin Vista......................................................................................... 24

1.9.7

Configuracin Parmetros...............................................................................25

1.9.8

Acerca De....................................................................................................... 26

1.9.9

Ayuda............................................................................................................. 26

BIBLIOGRAFA...............................................................................................27

NDICE DE FIGURAS

RESUMEN EJECUTIVO

La aplicacin de tecnologa informtica tanto en la educacin, como en el ejercicio


profesional de un Ingeniero Civil es de vital importancia. En los tiempos actuales nos
encontramos inundados del uso de esta tecnologa en prcticamente todos los aspectos
de nuestra vida. De este modo el dominio de su aplicacin prctica no es ms una opcin,
puesto que el desaprovecharla significa una desventaja real frente a aquellos que
aprovechan la automatizacin y la facilitacin en todos los procesos constructivos, desde
el diseo, hasta la administracin de la construccin de una obra civil, y su posterior
mantenimiento.
En este sentido, como parte del aprendizaje de una parte de esta tecnologa, como es la
programacin de ordenadores, se implementa este proyecto con el objetivo, por una
parte, de aplicar los conocimientos adquiridos a lo largo del estudio en la carrera, y por
otro disear un prototipo de una herramienta que sirva de apoyo en la enseanza de la
materia de Geometra Descriptiva. Una materia, cuyos conceptos, determinan en gran
modo la habilidad del ingeniero en la visualizacin, la comprensin del espacio fsico, y el
diseo de sus proyectos.
Se espera cumplir el objetivo mediante el diseo e implementacin de un prototipo,
haciendo uso las tcnicas de programacin aprendidas en la materia, y otro material
adquirido en materias previas de la carrera, como lgebra Matricial, Clculo II, o la propia
Geometra Descriptiva.
El proyecto tuvo un tiempo de desarrollo de 32 horas, distribuidas a los largo de una
semana de trabajo sin horarios regulares. Para el mismo se uso un ordenador porttil con
una instalacin funcional del Framework .NET 4, el entorno de desarrollo Visual Studio
2010 en su versin Ultimate, y las herramientas ofimticas Word, y Excel, todas
herramientas Microsoft.

INTRODUCCIN
I

Antecedentes

II

La visualizacin de objetos tridimensionales es un tema ampliamente estudiado en el rea de


la Computacin Grfica, cuyos frutos son visibles en la paquetes CAD (Computer Aided Design)
muy usados en todas las reas de la industria, como tambin en la animacin de pelculas, una
industria de gran auge en la actualidad.

III Bsicamente, el proceso de visualizacin tridimensional consiste en efectuar de manera


adecuada el modelado de un objeto, y su posterior tratamiento para poder representarlo en
dos dimensiones, que son los que poseen, por ejemplo, un plano de diseo, o una pantalla de
ordenador.
IV Actualmente, existe suficiente literatura sobre el tema, donde claramente se puede observar la
aplicacin de matrices y sus transformaciones sobre vectores que representan puntos en el
sistema coordenado, para la manipulacin de los distintos modos de visualizacin y
proyeccin.

V Descripcin del Problema


VI Durante el estudio de la materia de Geometra Descriptiva, en las primeras fases se complica
la compresin de las proyecciones de objetos en el Sistema Didrico, debido a que para el
estudiante

no

resulta

fcil

visualizar

mentalmente

el

mismo,

para

llevarlo

sus

correspondientes representaciones proyectadas. De este modo, se considera que una


herramienta visual que permite una rpida impresin en pantalla de las mismas para modelos
previamente determinados, pueden servir, por un lado, durante el desarrollo de la clase, con la
implementacin de ejemplos, y por otro, en el tiempo de estudio propio del estudiante como
ayuda durante la resolucin de ejercicios.

VII

Objetivo

VIII Desarrollar una aplicacin Windows Forms, programado en el lenguaje Visual Basic .NET para el
Framework .NET 4, que permita la visualizacin de las proyecciones didricas, y la vista
axonomtrica de una poliedro definido mediante vrtices y aristas.

IX Justificacin
X

Sin lugar a dudas, la educacin es el pilar del desarrollo de un pas. La educacin de un


ingeniero en sus primeras etapas, determinar su xito futuro, pues es donde se establecen los
4

fundamentos de la capacidad de aprendizaje y compresin del espacio de trabajo que


arrastraran a lo largo de toda su carrera profesional, lo que hace importante el brindar las
herramientas necesarias, que apoyen positivamente en este proceso.

XI Delimitacin
XII Debido al muy corto periodo de desarrollo disponible para este proyecto, se considera que falta
mucho para cumplir satisfactoriamente con el objetivo planteado, sin embargo se considera
que el prototipo es un buen medio para mostrar el potencial que representa el mismo.
XIII Este prototipo consiste en la visualizacin de segmentos de lneas rectas, definidas mediante
un punto inicial y otro final del trazado, mismas que pueden formar polgonos, y poliedros. Esta
visualizacin consiste en el trazado de la las proyecciones correspondientes as Sistema
Didrico: vista horizontal, vista frontal, y vista lateral.
XIV Adems de una visualizacin axonomtrica del objeto definido, misma que puede variar el
ngulo respecto al punto de visin desde donde se visualiza el objeto de acuerdo a una
rotacin positiva o negativa para los ejes X, Y, Z, siendo para las dos primeras de revoluciones
completas y para esta ltima, limitada al valor absoluto de 60.
XV Del mismo modo, se permite una rotacin del objeto mismo respecto a los ejes cartesianos,
con su consiguiente variacin de proyecciones.
XVI Finalmente, le prototipo cuenta con una variedad de opciones, respecto a los parmetros de
visualizacin, almacenamiento de modelos definidos, y mens que buscan facilitar el manejo
de la herramienta.
XVII

DESARROLLO DEL PROYECTO


XVIII Anlisis del Problema
XIX En este apartado de hace un anlisis del problema que se pretende resolver.
I

Compresin

del

XX El problema consiste en que dados los vrtices de un poliedro en un sistema de coordenadas


real, determinar su representacin en el sistema didrico y axonomtrico.
II

Identificacin

de

Entradas

XXI Se identificaron las siguientes entradas:


o

La lista de vrtices, que definen el poliedro. Estas se representan mediante un vector de


3 elementos, correspondientes su posicin el sistema coordenado cartesiano en tres

dimensiones (x, y, z), mismo que re entiende como una representacin en el espacio real.
La lista de aristas, lo componen los pares de vrtices que definen un segmento de lnea,
adems cada arista puede poseer un color propio, de modo que su identificacin en las

proyecciones sea mucho ms clara.


El color; correspondiente a varios aspectos de la visualizacin, como el fondo del rea de
dibujo, el de las aristas del poliedro, entre otras.

III Procesos
XXII

de

Transformacin

de

Desde la lectura de las listas de vrtices y de aristas, hasta la impresin en pantalla de los

resultados proyectados, se esperan seguir los siguientes procesos:

o
o
o
o
o

Lectura de vrtices y aristas


Edicin de vrtices y aristas
Clculo de los nuevos vrtices de proyeccin didrica
Clculo de los nuevos vrtices de proyeccin axonomtrica
Impresin en Pantalla de las aristas en base a los nuevos vrtices

XXIII
XXIV Diseo de la aplicacin
XXV

Se especifica el algoritmo, representados mediante Diagramas de Flujo, para los procesos

de transformacin de datos previamente especificados, los mismos que pueden ser


subdivididas en ms de una subrutinas.

IV Diagramas

de

XXVI (Falta)
XXVII
XXVIII

Prueba de Escritorio
(Falta)

XXIX Codificacin
XXX

La codificacin se realiz en el IDE (Integrated DEvelopment Enviroment Entorno de

Desarrollo Integrado) Visual Studio 2010 Ultimate, y en el lenguaje de programacin Visual


Basic .NET.
XXXI

El proyecto se denomin: Visualizacin3D, y en la misma se implementaron los siguientes

componentes (Ventanas, y mdulos) de acuerdo a su funcionalidad, o como se consider


adecuado:
V

Variables

XXXII En este mdulo se declaran como pblicas todas las variables que son comunes a todos los
procesos del programa.
XXXIII Module VariablesPublicas
XXXIV
XXXV
'Variables Globales
XXXVI
Public numVertices As Integer 'Nmero de vrtices definidos por el usuario
XXXVII
Public numAristas As Integer 'Nmero de aristas definidas por el usuario
XXXVIII
Public tabVertices(100, 2) As Single
'Tabla de los vrtice
XXXIX
Public tabAristas(100, 5) As Integer
'Tabla de aristas
XL
Public tabVerticesAux(100, 2) As Single 'Tabla auxiliar de los vrtices
XLI
Public tabAristasAux(100, 4) As Integer 'Tabla auxiliar de aristas
XLII
Public tabVerticesVista(100, 2) As Single 'Tabla de vrtices para proyeccin
XLIII Public tabVerticesAxonom(100, 2) As Single 'Tabla de vertices axonomtricos
XLIV
XLV
'Preferencias
XLVI 'Colores
XLVII
Public colorFondo As New Drawing.Color()
XLVIII
Public colorLapiz As New Drawing.Color()
XLIX Public colorCoor As New Drawing.Color()
L
Public oPen As New Pen(Color.WhiteSmoke, 2)
LI
Public fuenteCoor As New Font("verdana", 8)
LII
LIII
'Ubicacin del centro en las proyecciones
LIV
Public centroX As New Single
LV
Public centroZ As New Single
LVI
Public centroY As New Single
LVII
LVIII
Public longitudFlecha As New Single
LIX
LX
'Vista Axonomtrica
LXI
Public camaraX As Single
LXII
Public camaraY As Single
LXIII Public camaraZ As Single
LXIV Public anguloRotacion As Single
LXV
LXVI Public escalaX As Single

LXVII
Public escalaY As Single
LXVIII
Public escalaZ As Single
LXIX Public factorZoom As Single
LXX
LXXI Public oTiempo As Timer
LXXII
Public oTiempoStop As Boolean
LXXIII
Public oTiempoIzquierda As Boolean
LXXIV
Public oTiempoDerecha As Boolean
LXXV
LXXVI
End Module

VI Transformacione
LXXVII Es el mdulo donde se declaran subrutinas (funciones y procedimientos) que se usan con
frecuencia a los largo de la ejecucin del programa, y donde se encuentran principalmente las
funciones para la manipulacin de vectores y matrices, como para las transformaciones de
rotacin de la vista axonomtrica.
LXXVIII Module Transformaciones
LXXIX
Public Sub RotacionDirX(ByRef P1 As Single(,), ByVal angulo As Single)
LXXX
'Rotacin del objeto en la direccin X
LXXXI
Dim aux(1) As Single
LXXXII
For i = 1 To numVertices
LXXXIII
aux(0) = P1(i, 1) * Math.Cos(angulo) + P1(i, 2) * (-Math.Sin(angulo))
LXXXIV
aux(1) = P1(i, 1) * Math.Sin(angulo) + P1(i, 2) * Math.Cos(angulo)
LXXXV
P1(i, 1) = aux(0)
LXXXVI
P1(i, 2) = aux(1)
LXXXVII
Next
LXXXVIII
End Sub
LXXXIX
Public Sub RotacionDirY(ByRef P1 As Single(,), ByVal angulo As Single)
XC
'Rotacin del objeto en la direccin Y
XCI
Dim aux(1) As Single
XCII
For i = 1 To numVertices
XCIII
aux(0) = P1(i, 2) * Math.Sin(angulo) + P1(i, 0) * Math.Cos(angulo)
XCIV
aux(1) = P1(i, 2) * Math.Cos(angulo) - P1(i, 0) * Math.Sin(angulo)
XCV
P1(i, 0) = aux(0)
XCVI
P1(i, 2) = aux(1)
XCVII
Next
XCVIII
End Sub
XCIX
Public Sub RotacionDirZ(ByRef P1 As Single(,), ByVal angulo As Single)
C
'Rotacin del objeto en la direccin Z
CI
Dim aux(1) As Single
CII
For i = 1 To numVertices
CIII
aux(0) = P1(i, 0) * Math.Cos(angulo) - P1(i, 1) * Math.Sin(angulo)
CIV
aux(1) = P1(i, 0) * Math.Sin(angulo) + P1(i, 1) * Math.Cos(angulo)
CV
P1(i, 0) = aux(0)
CVI
P1(i, 1) = aux(1)
CVII
Next
CVIII
End Sub
CIX
Public Sub EscalamientoUniformeDir(ByRef P1 As Single(,), ByVal s As Single, ByRef P2 As Single(,))
CX
For i = 0 To numVertices
CXI
For j = 0 To 2
CXII
P2(i, j) = P1(i, j) * s
CXIII
Next
CXIV
Next
CXV End Sub
CXVI
Public Function ProductoVectorialCruz(ByVal u As Single(), ByVal v As Single()) As Single()
CXVII
'Producto cruz de dos vectores
CXVIII
Dim res(2) As Single
CXIX
res(0) = (u(1) * v(2) - u(2) * v(1))
CXX
res(1) = -(u(0) * v(2) - u(2) * v(0))
CXXI
res(2) = (u(0) * v(1) - u(1) * v(0))
CXXII
Return res
CXXIII
End Function
CXXIV
Public Function NormaVector(ByVal u As Single()) As Single
CXXV
'Norma de un vector
CXXVI
Dim norma As Single

CXXVII
norma = Math.Sqrt((u(0) ^ 2) + (u(1) ^ 2) + (u(2) ^ 2))
CXXVIII
Return norma
CXXIX
End Function
CXXX
Public Function ProductoMatrizVector(ByVal vector As Single(), ByVal Matriz As Single(,)) As Single()
CXXXI
Dim res(2) As Single
CXXXII
For i = 0 To 2
CXXXIII
res(i) = 0
CXXXIV
For j = 0 To 2
CXXXV
res(i) = res(i) + Matriz(i, j) * vector(j)
CXXXVI
Next
CXXXVII
Next
CXXXVIII
Return res
CXXXIX
End Function
CXL
Public Function ProductoMatricial(ByVal matriz1 As Single(,), ByVal matriz2 As Single(,)) As Single(,)
CXLI
Dim res(2, 2) As Single
CXLII
For i = 0 To 2
CXLIII
For j = 0 To 2
CXLIV
res(i, j) = 0
CXLV
For k = 0 To 2
CXLVI
res(i, j) = res(i, j) + matriz1(i, k) * matriz2(k, j)
CXLVII
Next
CXLVIII
Next
CXLIX
Next
CL
Return res
CLI
End Function
CLII End Module

VII Ventana
CLIII

Esta es la ventana principal de todo el proyecto, la primera en ejecutarse, y es donde se

concentran muchas de las subrutinas que hacen posible el funcionamiento del programa,
siendo algunas de estas:
o
o

Load: Se establecen los parmetros de visualizacin a su valor por defecto.


Renderizar: Calcula los valores de los nuevos vrtices de proyeccin para las 3 vistas

didricas.
Renderizado Axonomtrico: Calcula los valores de los nuevos vrtices para la vista

axonomtrica.
Abrir Archivo: Permite al usuario especificar un nuevo archivo de vrtices y aristas, lee los

datos del mismo, y los asigna al las matrices correspondientes.


Guardar Archivo: Imprime los valores de las matrices de vrtices y aristas en un archivo,

cuyo nombre puede ser especificado por el usuario.


Restaurar: Restaura todos los valores de los vrtices y aristas al valor originalmente ledo

o al ltimo guardado.
Limpiar: Limpia todo rastro de vrtices y aristas.

CLIV
CLV Imports System.Drawing
CLVI Imports System.Drawing.Drawing2D
CLVII
Imports System.IO
CLVIII
CLIXPublic Class VentanaPrincipal
CLX
CLXI Private Sub VentanaPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
CLXII
CLXIII
Me.AddOwnedForm(VentanaDatos)
CLXIV
colorFondo = Color.FromArgb(45, 45, 45)
CLXV
colorCoor = Color.CadetBlue
CLXVI
colorLapiz = Color.White

CLXVII
CLXVIII
numVertices = 0
CLXIX
numAristas = 0
CLXX
CLXXI
'Inicializacin del centro en las proyecciones
CLXXII
'Vista del primer cuadrante
CLXXIII
centroX = 250
CLXXIV
centroY = 50
CLXXV
centroZ = 230
CLXXVI
longitudFlecha = 200
CLXXVII
CLXXVIII
'Inicializar vector unitario de la Cmara Axonomtrica
CLXXIX
camaraX = Math.PI / 4
CLXXX
camaraY = Math.PI / 4
CLXXXI
camaraZ = Math.PI / 4
CLXXXII
anguloRotacion = Math.PI / 12 '15
CLXXXIII
escalaX = 1
CLXXXIV
escalaY = 1
CLXXXV
escalaZ = 1
CLXXXVI
factorZoom = 0.1
CLXXXVII
oTiempoStop = False
CLXXXVIII
oTiempoIzquierda = False
CLXXXIX
oTiempoDerecha = False
CXC
CXCI
End Sub
CXCII
CXCIII
'Insertar un vrtice en la tabla(matriz) de vertices
CXCIV
Private Sub vertice(ByVal pos As Integer, ByVal x As Single, ByVal y As Single, ByVal z As Single)
CXCV
'Introduce un vertice en la lista correspondiente, en la posicin indicada
CXCVI
tabVertices(pos, 0) = x
CXCVII
tabVertices(pos, 1) = y
CXCVIII
tabVertices(pos, 2) = z
CXCIX
tabVerticesAux(pos, 0) = x
CC
tabVerticesAux(pos, 1) = y
CCI
tabVerticesAux(pos, 2) = z
CCII
End Sub
CCIII
CCIV
'Insertar un arista en la tabla(matriz) de aristas
CCV Private Sub arista(ByVal pos As Integer, ByVal a1 As Integer, ByVal a2 As Integer, ByVal red As Integer, ByVal green
As Integer, ByVal blue As Integer)
CCVI
'Introduceuna arista en la lista correspondiente, en la posicin indicada
CCVII
tabAristas(pos, 0) = a1
CCVIII
tabAristas(pos, 1) = a2
CCIX
tabAristas(pos, 2) = red
CCX
tabAristas(pos, 3) = green
CCXI
tabAristas(pos, 4) = blue
CCXII
tabAristasAux(pos, 0) = a1
CCXIII
tabAristasAux(pos, 1) = a2
CCXIV
tabAristasAux(pos, 2) = red
CCXV
tabAristasAux(pos, 3) = green
CCXVI
tabAristasAux(pos, 4) = blue
CCXVII
End Sub
CCXVIII
CCXIX
'Procedimientos de Renderizado
CCXX
Public Sub Renderizar()
CCXXI
CCXXII
'Crear y preparar los espacios de dibujo para las vistas
CCXXIII
Dim vistaFrontal As Graphics = vFrontal.CreateGraphics()
CCXXIV
Dim vistaHorizon As Graphics = vHorinzon.CreateGraphics()
CCXXV
Dim vistaPerfil As Graphics = vPerfil.CreateGraphics()
CCXXVI
CCXXVII
'Limpiar todo lo anterior
CCXXVIII
Label1.BackColor = colorFondo
CCXXIX
Label2.BackColor = colorFondo
CCXXX
Label3.BackColor = colorFondo
CCXXXI
Label4.BackColor = colorFondo
CCXXXII
fondoTituloVA.BackColor = colorFondo
CCXXXIII
fondoTituloVH.BackColor = colorFondo
CCXXXIV
fondoTituloVF.BackColor = colorFondo
CCXXXV
fondoTituloVP.BackColor = colorFondo
CCXXXVI
vistaFrontal.Clear(colorFondo)

10

CCXXXVII
CCXXXVIII
CCXXXIX
CCXL
CCXLI
CCXLII
CCXLIII
CCXLIV
CCXLV
CCXLVI
CCXLVII
CCXLVIII
CCXLIX
CCL
CCLI
CCLII
CCLIII
CCLIV
CCLV
CCLVI
CCLVII
CCLVIII
CCLIX
CCLX
CCLXI
CCLXII
CCLXIII
CCLXIV
CCLXV
CCLXVI
CCLXVII
CCLXVIII
CCLXIX
CCLXX
CCLXXI
CCLXXII
CCLXXIII
CCLXXIV
CCLXXV
CCLXXVI
CCLXXVII
CCLXXVIII
CCLXXIX
CCLXXX
CCLXXXI
CCLXXXII
CCLXXXIII
CCLXXXIV
CCLXXXV
CCLXXXVI
CCLXXXVII
CCLXXXVIII
CCLXXXIX
CCXC
CCXCI
CCXCII
CCXCIII
CCXCIV
CCXCV
CCXCVI
CCXCVII
CCXCVIII
CCXCIX
CCC
CCCI
CCCII
CCCIII
CCCIV
CCCV
CCCVI
CCCVII

vistaHorizon.Clear(colorFondo)
vistaPerfil.Clear(colorFondo)
'Definicin de variables auxiliares durante el renderizado
Dim vertice1 As Integer
Dim vertice2 As Integer
Dim x1, x2, y1, y2, z1, z2 As Single
Dim flecha As New Pen(colorCoor, 1)
Dim brochaCoor As New SolidBrush(colorCoor)
flecha.EndCap = LineCap.ArrowAnchor
Dim E(3, 3) As Single
'matriz de escala
E = {{escalaX, 0, 0}, {0, escalaY, 0}, {0, 0, escalaZ}}
Dim vertice(2) As Single
For i = 1 To numVertices
vertice(0) = tabVertices(i, 0)
vertice(1) = tabVertices(i, 1)
vertice(2) = tabVertices(i, 2)
vertice = ProductoMatrizVector(vertice, E)
tabVerticesVista(i, 0) = vertice(0)
tabVerticesVista(i, 1) = vertice(1)
tabVerticesVista(i, 2) = vertice(2)
Next
'Dibujar las flechas de coordenadas de las vistas: Frontal, Horizontal y de Perfil
'Vista frontal
vistaFrontal.DrawLine(flecha, centroX, centroZ, centroX, centroZ - longitudFlecha)
vistaFrontal.DrawLine(flecha, centroX, centroZ, centroX - longitudFlecha, centroZ)
vistaFrontal.DrawString("x", fuenteCoor, brochaCoor, centroX - longitudFlecha - 15, centroZ - 10)
vistaFrontal.DrawString("z", fuenteCoor, brochaCoor, centroX - 5, centroZ - longitudFlecha - 20)
'Vista Horizontal
vistaHorizon.DrawLine(flecha, centroX, centroY, centroX, centroY + longitudFlecha)
vistaHorizon.DrawLine(flecha, centroX, centroY, centroX - longitudFlecha, centroY)
vistaHorizon.DrawString("x", fuenteCoor, brochaCoor, centroX - longitudFlecha - 15, centroY - 10)
vistaHorizon.DrawString("y", fuenteCoor, brochaCoor, centroX - 5, centroY + longitudFlecha + 5)
'Vista de Perfil
vistaPerfil.DrawLine(flecha, centroY, centroZ, centroY, centroZ - longitudFlecha)
vistaPerfil.DrawLine(flecha, centroY, centroZ, centroY + longitudFlecha, centroZ)
vistaPerfil.DrawString("y", fuenteCoor, brochaCoor, centroY + longitudFlecha + 5, centroZ - 10)
vistaPerfil.DrawString("z", fuenteCoor, brochaCoor, centroY - 5, centroZ - longitudFlecha - 20)
'Renderizar Vista Frontal
For i = 1 To numAristas
vertice1 = tabAristas(i, 0)
vertice2 = tabAristas(i, 1)
'Ajustes para la visualizacin en la vista frontal
x1 = centroX - tabVerticesVista(vertice1, 0)
x2 = centroX - tabVerticesVista(vertice2, 0)
z1 = centroZ - tabVerticesVista(vertice1, 2)
z2 = centroZ - tabVerticesVista(vertice2, 2)
colorLapiz = Color.FromArgb(tabAristas(i, 2), tabAristas(i, 3), tabAristas(i, 4))
vistaFrontal.DrawLine(New Pen(colorLapiz, 2), New Point(x1, z1), New Point(x2, z2))
'Visualizacin de los nmeros de los vrtices (en proceso de desarrollo)
'If vertice1 Mod 2 = 0 Then
' If vertice1 <> 0 Then
'
vistaFrontal.DrawString(Str(vertice1), fuenteCoor, brochaCoor, x1, z1)
' End If
'Else
' vistaFrontal.DrawString(Str(vertice1), fuenteCoor, brochaCoor, x1 + 10, z1 + 10)
'End If
Next
'Renderizar Vista Horizontal
For i = 1 To numAristas
vertice1 = tabAristas(i, 0)
vertice2 = tabAristas(i, 1)
'Ajustes para la visualizacin en la vista horizontal
x1 = centroX - tabVerticesVista(vertice1, 0)
x2 = centroX - tabVerticesVista(vertice2, 0)

11

CCCVIII
y1 = centroY + tabVerticesVista(vertice1, 1)
CCCIX
y2 = centroY + tabVerticesVista(vertice2, 1)
CCCX
colorLapiz = Color.FromArgb(tabAristas(i, 2), tabAristas(i, 3), tabAristas(i, 4))
CCCXI
vistaHorizon.DrawLine(New Pen(colorLapiz, 2), New Point(x1, y1), New Point(x2, y2))
CCCXII
CCCXIII
'Visualizacin de los nmeros de los vrtices (en proceso de desarrollo)'If vertice1 < 4 Then
CCCXIV
' If vertice1 <> 0 Then
CCCXV
'
vistaHorizon.DrawString(Str(vertice1), fuenteCoor, brochaCoor, x1, y1)
CCCXVI
' End If
CCCXVII
'Else
CCCXVIII
' vistaHorizon.DrawString(Str(vertice1), fuenteCoor, brochaCoor, x1 + 10, y1 + 10)
CCCXIX
'End If
CCCXX
Next
CCCXXI
CCCXXII
'Renderizar Vista de Perfil
CCCXXIII
For i = 1 To numAristas
CCCXXIV
vertice1 = tabAristas(i, 0)
CCCXXV
vertice2 = tabAristas(i, 1)
CCCXXVI
'Ajustes para la visualizacin en la vista de perfil
CCCXXVII
y1 = centroY + tabVerticesVista(vertice1, 1)
CCCXXVIII
y2 = centroY + tabVerticesVista(vertice2, 1)
CCCXXIX
z1 = centroZ - tabVerticesVista(vertice1, 2)
CCCXXX
z2 = centroZ - tabVerticesVista(vertice2, 2)
CCCXXXI
colorLapiz = Color.FromArgb(tabAristas(i, 2), tabAristas(i, 3), tabAristas(i, 4))
CCCXXXII
vistaPerfil.DrawLine(New Pen(colorLapiz, 2), New Point(y1, z1), New Point(y2, z2))
CCCXXXIII
CCCXXXIV
'Visualizacin de los nmeros de los vrtices (en proceso de desarrollo)
CCCXXXV
'If vertice1 Mod 2 = 0 Then
CCCXXXVI
' If vertice1 <> 0 Then
CCCXXXVII
'
vistaPerfil.DrawString(Str(vertice1), fuenteCoor, brochaCoor, y1, z1)
CCCXXXVIII
' End If
CCCXXXIX
'Else
CCCXL
' vistaPerfil.DrawString(Str(vertice1), fuenteCoor, brochaCoor, y1 + 10, z1 + 10)
CCCXLI
'End If
CCCXLII
Next
CCCXLIII
colorLapiz = Color.WhiteSmoke
CCCXLIV
RenderizadoAxonomtrico()
CCCXLV
CCCXLVI
'Liberar recursos de los objetos Graphic
CCCXLVII
vistaFrontal.Dispose()
CCCXLVIII
vistaHorizon.Dispose()
CCCXLIX
vistaPerfil.Dispose()
CCCL
End Sub
CCCLI
CCCLII
Public Sub RenderizadoAxonomtrico()
CCCLIII
CCCLIV
'Crear y preparar los espacios de dibujo para las vistas
CCCLV
Dim vistaAxonom As Graphics = vAxon.CreateGraphics()
CCCLVI
CCCLVII
'Limpiar todo lo anterior
CCCLVIII
vistaAxonom.Clear(colorFondo)
CCCLIX
CCCLX
'Definicin de variables auxiliares durante el renderizado
CCCLXI
Dim vertice1 As Integer
CCCLXII
Dim vertice2 As Integer
CCCLXIII
Dim y1, y2, z1, z2 As Single
CCCLXIV
Dim flecha As New Pen(colorCoor, 1)
CCCLXV
Dim brochaCoor As New SolidBrush(colorCoor)
CCCLXVI
Dim centroAxonX, centroAxonZ As Single
CCCLXVII
centroAxonX = 249
CCCLXVIII
centroAxonZ = 239
CCCLXIX
flecha.EndCap = LineCap.ArrowAnchor
CCCLXX
CCCLXXI
'Calculo de las coordenadas para la visualizacin axonomtrica
CCCLXXII
For i = 1 To numVertices
CCCLXXIII
tabVerticesAxonom(i, 0) = tabVertices(i, 0)
CCCLXXIV
tabVerticesAxonom(i, 1) = tabVertices(i, 1)
CCCLXXV
tabVerticesAxonom(i, 2) = tabVertices(i, 2)
CCCLXXVI
Next
CCCLXXVII
CCCLXXVIII
'Cambio al sistema coordenado axonomtrico

12

CCCLXXIX
Dim N(2), V(2), U(2) As Single
CCCLXXX
Dim unitN(2), unitV(2), unitU(2) As Single
CCCLXXXI
Dim normaN, normaV, normaU As Single
CCCLXXXII
CCCLXXXIII
N = {Math.Cos(camaraX), Math.Sin(camaraY), Math.Sin(camaraZ)} 'Nuevo eje X - vista
axonometrica
CCCLXXXIV
V = {0, 0, 1} 'Nuevo eje Z - vista axonometrica
CCCLXXXV
U = {0, 0, 0} 'Nuevo eje Y - vista axonometrica
CCCLXXXVI
normaN = NormaVector(N)
CCCLXXXVII
normaV = NormaVector(V)
CCCLXXXVIII
U = ProductoVectorialCruz(V, N)
CCCLXXXIX
normaU = NormaVector(U)
CCCXC
For i = 0 To 2
CCCXCI
unitN(i) = N(i) / normaN
CCCXCII
unitU(i) = U(i) / normaU
CCCXCIII
Next
CCCXCIV
unitV = ProductoVectorialCruz(unitN, unitU)
CCCXCV
Dim R(2, 2), E(2, 2), T(2, 2), M(2, 2) As Single
CCCXCVI
'matriz de escalado
CCCXCVII
E = {{escalaX, 0, 0}, {0, escalaY, 0}, {0, 0, escalaZ}}
CCCXCVIII
'Matriz de rotacin axonomtrica
CCCXCIX
R = {{unitN(0), unitN(1), unitN(2)}, {unitU(0), unitU(1), unitU(2)}, {unitV(0), unitV(1), unitV(2)}}
CD
'Matriz de transformacin del sistema coordenado al de vista axonomtrica
CDI
M = ProductoMatricial(R, E)
CDII
Dim vertice(2) As Single
CDIII
For i = 1 To numVertices
CDIV
vertice(0) = tabVertices(i, 0)
CDV
vertice(1) = tabVertices(i, 1)
CDVI
vertice(2) = tabVertices(i, 2)
CDVII
vertice = ProductoMatrizVector(vertice, M)
CDVIII
tabVerticesAxonom(i, 0) = vertice(0)
CDIX
tabVerticesAxonom(i, 1) = vertice(1)
CDX
tabVerticesAxonom(i, 2) = vertice(2)
CDXI
Next
CDXII
CDXIII
'Dibujar lasflechas de las coordenadas
CDXIV
Dim flechaX(3), flechaY(3), flechaZ(3) As Single
CDXV
CDXVI
flechaX = {200, 0, 0, 1}
CDXVII
flechaY = {0, 200, 0, 1}
CDXVIII
flechaZ = {0, 0, 200, 1}
CDXIX
CDXX
flechaX = ProductoMatrizVector(flechaX, M)
CDXXI
flechaY = ProductoMatrizVector(flechaY, M)
CDXXII
flechaZ = ProductoMatrizVector(flechaZ, M)
CDXXIII
CDXXIV
vistaAxonom.DrawLine(flecha, centroAxonX, centroAxonZ, centroAxonX + flechaX(1), centroAxonZ flechaX(2))
CDXXV
vistaAxonom.DrawLine(flecha, centroAxonX, centroAxonZ, centroAxonX + flechaY(1), centroAxonZ flechaY(2))
CDXXVI
vistaAxonom.DrawLine(flecha, centroAxonX, centroAxonZ, centroAxonX + flechaZ(1), centroAxonZ flechaZ(2))
CDXXVII
vistaAxonom.DrawString("x", fuenteCoor, brochaCoor, centroAxonX + flechaX(1), centroAxonZ - flechaX(2))
CDXXVIII
vistaAxonom.DrawString("y", fuenteCoor, brochaCoor, centroAxonX + flechaY(1), centroAxonZ - flechaY(2))
CDXXIX
vistaAxonom.DrawString("z", fuenteCoor, brochaCoor, centroAxonX + flechaZ(1) - 5, centroAxonZ - flechaZ(2)
- 20)
CDXXX
CDXXXI
CDXXXII
'Vista Axonomtrica
CDXXXIII
For i = 1 To numAristas
CDXXXIV
vertice1 = tabAristas(i, 0)
CDXXXV
vertice2 = tabAristas(i, 1)
CDXXXVI
'Ajustes para la visualizacin en la vista axonomtrica
CDXXXVII
'x1 = centroxx - tabVerticesAxonom(vertice1, 0)
CDXXXVIII
'x2 = centroxx - tabVerticesAxonom(vertice2, 0)
CDXXXIX
'Vista en el plano UV
CDXL
y1 = centroAxonX + tabVerticesAxonom(vertice1, 1)
CDXLI
y2 = centroAxonX + tabVerticesAxonom(vertice2, 1)
CDXLII
z1 = centroAxonZ - tabVerticesAxonom(vertice1, 2)
CDXLIII
z2 = centroAxonZ - tabVerticesAxonom(vertice2, 2)
CDXLIV
colorLapiz = Color.FromArgb(tabAristas(i, 2), tabAristas(i, 3), tabAristas(i, 4))

13

CDXLV
vistaAxonom.DrawLine(New Pen(colorLapiz, 2), New Point(y1, z1), New Point(y2, z2))
CDXLVI
If vertice1 <> 0 Then
CDXLVII
vistaAxonom.DrawString(Str(vertice1), fuenteCoor, brochaCoor, y1, z1)
CDXLVIII
End If
CDXLIX
Next
CDL
colorLapiz = Color.WhiteSmoke
CDLI
CDLII
vistaAxonom.Dispose()
CDLIII
End Sub
CDLIV
CDLV
Private Sub btnVistaIsomtrica_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnVistaIsomtrica.Click
CDLVI
camaraX = Math.PI / 4
CDLVII
camaraY = Math.PI / 4
CDLVIII
camaraZ = Math.PI / 4
CDLIX
Renderizar()
CDLX
End Sub
CDLXI
CDLXII
Private Sub btnDefinirObjeto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnDefinirObjeto.Click
CDLXIII
CDLXIV
Me.AddOwnedForm(VentanaDatos)
CDLXV
VentanaDatos.Show()
CDLXVI
End Sub
CDLXVII
CDLXVIII Private Sub btnVisualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnVisualizar.Click
CDLXIX
Renderizar()
CDLXX
End Sub
CDLXXI
CDLXXII
'Procedimientos para la manipulacin de la cmara
CDLXXIII Private Sub btnRotarIzquierda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotarIzquierda.Click
CDLXXIV
camaraX = camaraX + anguloRotacion
CDLXXV
camaraY = camaraY + anguloRotacion
CDLXXVI
RenderizadoAxonomtrico()
CDLXXVII
End Sub
CDLXXVIII
CDLXXIX Private Sub btnRotarDerecha_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotarDerecha.Click
CDLXXX
camaraX = camaraX - anguloRotacion
CDLXXXI
camaraY = camaraY - anguloRotacion
CDLXXXII
RenderizadoAxonomtrico()
CDLXXXIII
End Sub
CDLXXXIV
CDLXXXV
Private Sub btnRotarIzquierdaPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnRotarIzquierdaPlay.Click
CDLXXXVI
If oTiempoDerecha = True Then
CDLXXXVII
oTiempoDerecha = False
CDLXXXVIII
oTiempo.Stop()
CDLXXXIX
oTiempo.Enabled = False
CDXC
End If
CDXCI
If oTiempoIzquierda = False Then
CDXCII
oTiempo = New Timer()
CDXCIII
oTiempo.Interval = 100 ' se ejecutar cada dcima de segundo
CDXCIV
AddHandler oTiempo.Tick, AddressOf RotarIzquierda_Tick ' le asignamos un manipulador para el evento
Tick
CDXCV
oTiempoStop = False
CDXCVI
oTiempoIzquierda = True
CDXCVII
oTiempo.Start() ' arrancamos el temporizador
CDXCVIII
End If
CDXCIX
End Sub
D
DI
Private Sub btnRotarDerechaPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotarDerechaPlay.Click
DII
If oTiempoIzquierda = True Then
DIII
oTiempoIzquierda = False
DIV
oTiempo.Stop()
DV
oTiempo.Enabled = False
DVI
End If
DVII
If oTiempoDerecha = False Then

14

DVIII
oTiempo = New Timer()
DIX
oTiempo.Interval = 100 ' se ejecutar cada dcima de segundo
DX
AddHandler oTiempo.Tick, AddressOf RotarDerecha_Tick ' le asignamos un manipulador para el evento Tick
DXI
oTiempoStop = False
DXII
oTiempoDerecha = True
DXIII
oTiempo.Start() ' arrancamos el temporizador
DXIV
End If
DXV End Sub
DXVI
DXVII
Private Sub RotarIzquierda_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
DXVIII
camaraX = camaraX + Math.PI / 60
DXIX
camaraY = camaraY + Math.PI / 60
DXX
RenderizadoAxonomtrico()
DXXI
If oTiempoStop = True Then
DXXII
oTiempoStop = False
DXXIII
oTiempo.Stop()
DXXIV
oTiempo.Enabled = False
DXXV
End If
DXXVI
End Sub
DXXVII
DXXVIII
Private Sub RotarDerecha_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
DXXIX
DXXX
camaraX = camaraX - Math.PI / 60
DXXXI
camaraY = camaraY - Math.PI / 60
DXXXII
RenderizadoAxonomtrico()
DXXXIII
If oTiempoStop = True Then
DXXXIV
oTiempoStop = False
DXXXV
oTiempo.Stop()
DXXXVI
oTiempo.Enabled = False
DXXXVII
End If
DXXXVIII End Sub
DXXXIX
DXL
Private Sub Stop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStopDerecha.Click,
btnStopIzquierda.Click
DXLI
oTiempoStop = True
DXLII
oTiempoDerecha = False
DXLIII
oTiempoIzquierda = False
DXLIV
End Sub
DXLV
DXLVI
Private Sub btnRotarArriba_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotarArriba.Click
DXLVII
camaraZ = camaraZ + anguloRotacion
DXLVIII
If Math.Abs(camaraZ) > (Math.PI / 2) Then
DXLIX
camaraZ = Math.PI / 2
DL
End If
DLI
RenderizadoAxonomtrico()
DLII
End Sub
DLIII
DLIV
Private Sub btnRotarAbajo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotarAbajo.Click
DLV
camaraZ = camaraZ - anguloRotacion
DLVI
If Math.Abs(camaraZ) > (Math.PI / 2) Then
DLVII
camaraZ = -Math.PI / 2
DLVIII
End If
DLIX
RenderizadoAxonomtrico()
DLX
End Sub
DLXI
DLXII
Private Sub btnAlejar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnAlejar.Click
DLXIII
escalaX = escalaX - factorZoom
DLXIV
escalaY = escalaY - factorZoom
DLXV
escalaZ = escalaZ - factorZoom
DLXVI
Renderizar()
DLXVII
End Sub
DLXVIII
DLXIX
Private Sub btnAcercar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnAcercar.Click
DLXX
escalaX = escalaX + factorZoom
DLXXI
escalaY = escalaY + factorZoom
DLXXII
escalaZ = escalaZ + factorZoom
DLXXIII
Renderizar()

15

DLXXIV
End Sub
DLXXV
DLXXVI
'Restaurar los datos originales del ltimo guardado o creado
DLXXVII
Private Sub btnRestaurarDatos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRestaurarDatos.Click
DLXXVIII
DLXXIX
'Valores originales de los vertices
DLXXX
For i = 0 To numVertices
DLXXXI
tabVertices(i, 0) = tabVerticesAux(i, 0)
DLXXXII
tabVertices(i, 1) = tabVerticesAux(i, 1)
DLXXXIII
tabVertices(i, 2) = tabVerticesAux(i, 2)
DLXXXIV
Next
DLXXXV
DLXXXVI
'Valores originales de las aristas
DLXXXVII
For i = 0 To numAristas
DLXXXVIII
tabAristas(i, 0) = tabAristasAux(i, 0)
DLXXXIX
tabAristas(i, 1) = tabAristasAux(i, 1)
DXC
tabAristas(i, 2) = tabAristasAux(i, 2)
DXCI
tabAristas(i, 3) = tabAristasAux(i, 3)
DXCII
tabAristas(i, 4) = tabAristasAux(i, 4)
DXCIII
Next
DXCIV
Renderizar()
DXCV
End Sub
DXCVI
DXCVII
'Restaurar los parametros de visualizacion y renderizado
DXCVIII
Private Sub btnRestaurar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRestaurar.Click
DXCIX
DC
'Colores por defecto
DCI
colorFondo = Color.FromArgb(45, 45, 45)
DCII
colorCoor = Color.CadetBlue
DCIII
colorLapiz = Color.White
DCIV
DCV
'Inicializacin del centro en las proyecciones
DCVI
'Vista del primer cuadrante
DCVII
centroX = 250
DCVIII
centroY = 50
DCIX
centroZ = 230
DCX
longitudFlecha = 200
DCXI
DCXII
'Inicializar vector unitario de la Cmara Axonomtrica
DCXIII
camaraX = Math.PI / 4
DCXIV
camaraY = Math.PI / 4
DCXV
camaraZ = Math.PI / 4
DCXVI
anguloRotacion = Math.PI / 12 '15
DCXVII
escalaX = 1
DCXVIII
escalaY = 1
DCXIX
escalaZ = 1
DCXX
factorZoom = 0.1
DCXXI
DCXXII
'Centro de Proyecciones 2D
DCXXIII
centroX = 250
DCXXIV
centroY = 50
DCXXV
centroZ = 230
DCXXVI
Renderizar()
DCXXVII
End Sub
DCXXVIII
DCXXIX
'Limpiar todos los datos de vrtices y aristas
DCXXX
Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnLimpiar.Click
DCXXXI
For i = 0 To numVertices
DCXXXII
tabVertices(i, 0) = 0
DCXXXIII
tabVertices(i, 1) = 0
DCXXXIV
tabVertices(i, 2) = 0
DCXXXV
Next
DCXXXVI
For i = 0 To numAristas
DCXXXVII
tabAristas(i, 0) = 0
DCXXXVIII
tabAristas(i, 1) = 0
DCXXXIX
tabAristas(i, 2) = 0
DCXL
tabAristas(i, 3) = 0
DCXLI
tabAristas(i, 4) = 0

16

DCXLII
Next
DCXLIII
Renderizar()
DCXLIV
End Sub
DCXLV
DCXLVI
'Rotaciones del objeto sobre los ejes
DCXLVII
Private Sub btnRotacionXpos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotacionXpos.Click
DCXLVIII
RotacionDirX(tabVertices, anguloRotacion)
DCXLIX
Renderizar()
DCL
End Sub
DCLI
DCLII
Private Sub btnRotacionXneg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotacionXneg.Click
DCLIII
RotacionDirX(tabVertices, -anguloRotacion)
DCLIV
Renderizar()
DCLV
End Sub
DCLVI
DCLVII
Private Sub btnRotacionYpos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotacionYpos.Click
DCLVIII
RotacionDirY(tabVertices, anguloRotacion)
DCLIX
Renderizar()
DCLX
End Sub
DCLXI
DCLXII
Private Sub btnRotacionYneg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotacionYneg.Click
DCLXIII
RotacionDirY(tabVertices, -anguloRotacion)
DCLXIV
Renderizar()
DCLXV
End Sub
DCLXVI
DCLXVII
Private Sub btnRotacionZpos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotacionZpos.Click
DCLXVIII
RotacionDirZ(tabVertices, anguloRotacion)
DCLXIX
Renderizar()
DCLXX
End Sub
DCLXXI
DCLXXII
Private Sub btnRotacionZneg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnRotacionZneg.Click
DCLXXIII
RotacionDirZ(tabVertices, -anguloRotacion)
DCLXXIV
Renderizar()
DCLXXV
End Sub
DCLXXVI
DCLXXVII
'Respuesta a los mens en la barra superior
DCLXXVIII
Private Sub AbrirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles AbrirToolStripMenuItem.Click
DCLXXIX
Dim myDialog As New OpenFileDialog()
DCLXXX
' configurar el cuadro de dilogo por cdigo
DCLXXXI
myDialog.Title = "Seleccionar archivo a leer"
DCLXXXII
myDialog.InitialDirectory = "C:\"
DCLXXXIII
myDialog.Filter = "Archivo GeoDes (*.g3d)|*.g3d"
DCLXXXIV
myDialog.Multiselect = False
DCLXXXV
myDialog.ShowDialog()
DCLXXXVI
DCLXXXVII
If myDialog.FileNames.Length > 0 Then
DCLXXXVIII
'lectura
DCLXXXIX
Dim srLector As StreamReader = New StreamReader(myDialog.FileName)
DCXC
Dim Linea As String
DCXCI
Dim vertice(2), arista(5) As String
DCXCII
Dim ContadorLin As Integer = 1
DCXCIII
numVertices = srLector.ReadLine()
DCXCIV
numAristas = srLector.ReadLine()
DCXCV
For i = 1 To numVertices
DCXCVI
Linea = srLector.ReadLine()
DCXCVII
If Linea Is Nothing Then
DCXCVIII
Exit For
DCXCIX
End If
DCC
vertice = Linea.Split("/")
DCCI
tabVertices(i, 0) = Convert.ToSingle(vertice(0))
DCCII
tabVertices(i, 1) = Convert.ToSingle(vertice(1))
DCCIII
tabVertices(i, 2) = Convert.ToSingle(vertice(2))
DCCIV
Next
DCCV
For i = 1 To numAristas

17

DCCVI
Linea = srLector.ReadLine()
DCCVII
If Linea Is Nothing Then
DCCVIII
Exit For
DCCIX
End If
DCCX
arista = Linea.Split("/")
DCCXI
tabAristas(i, 0) = Convert.ToSingle(arista(0))
DCCXII
tabAristas(i, 1) = Convert.ToSingle(arista(1))
DCCXIII
tabAristas(i, 2) = Convert.ToSingle(arista(2))
DCCXIV
tabAristas(i, 3) = Convert.ToSingle(arista(3))
DCCXV
tabAristas(i, 4) = Convert.ToSingle(arista(4))
DCCXVI
Next
DCCXVII
DCCXVIII
'Guardando datos para un eventual Restaurado
DCCXIX
For i = 0 To numVertices
DCCXX
tabVerticesAux(i, 0) = tabVertices(i, 0)
DCCXXI
tabVerticesAux(i, 1) = tabVertices(i, 1)
DCCXXII
tabVerticesAux(i, 2) = tabVertices(i, 2)
DCCXXIII
Next
DCCXXIV
For i = 0 To numAristas
DCCXXV
tabAristasAux(i, 0) = tabAristas(i, 0)
DCCXXVI
tabAristasAux(i, 1) = tabAristas(i, 1)
DCCXXVII
tabAristasAux(i, 2) = tabAristas(i, 2)
DCCXXVIII
tabAristasAux(i, 3) = tabAristas(i, 3)
DCCXXIX
tabAristasAux(i, 4) = tabAristas(i, 4)
DCCXXX
Next
DCCXXXI
DCCXXXII
DCCXXXIII
srLector.Close()
DCCXXXIV
'Actualizar el Nombre del formulario principal
DCCXXXV
Me.Text = Split(myDialog.SafeFileName, ".")(0) & " - Visualizacin 3D y Proyeccin Didrica"
DCCXXXVI
Renderizar()
DCCXXXVII
End If
DCCXXXVIII
End Sub
DCCXXXIX
DCCXL
Private Sub GuardarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles GuardarToolStripMenuItem.Click
DCCXLI
Dim myDialog As New SaveFileDialog()
DCCXLII
myDialog.Filter = "Archivo GeoDes (*.g3d)|*.g3d"
DCCXLIII
myDialog.FilterIndex = 2
DCCXLIV
myDialog.ValidateNames = True
DCCXLV
myDialog.ShowDialog()
DCCXLVI
myDialog.CheckFileExists = True
DCCXLVII
DCCXLVIII
If myDialog.FileNames.Length > 0 Then
DCCXLIX
Using writer As StreamWriter = New StreamWriter(myDialog.FileName)
DCCL
writer.WriteLine(numVertices)
DCCLI
writer.WriteLine(numAristas)
DCCLII
For i = 1 To numVertices
DCCLIII
writer.WriteLine(tabVertices(i, 0).ToString() & "/" & tabVertices(i, 1).ToString() & "/" & tabVertices(i,
2).ToString())
DCCLIV
tabVerticesAux(i, 0) = tabVertices(i, 0)
DCCLV
tabVerticesAux(i, 1) = tabVertices(i, 1)
DCCLVI
tabVerticesAux(i, 2) = tabVertices(i, 2)
DCCLVII
Next
DCCLVIII
For i = 1 To numAristas
DCCLIX
writer.WriteLine(tabAristas(i, 0).ToString() & "/" & tabAristas(i, 1).ToString() & "/" & tabAristas(i,
2).ToString() & "/" & tabAristas(i, 3).ToString() & "/" & tabAristas(i, 4).ToString())
DCCLX
tabAristasAux(i, 0) = tabAristas(i, 0)
DCCLXI
tabAristasAux(i, 1) = tabAristas(i, 1)
DCCLXII
tabAristasAux(i, 2) = tabAristas(i, 2)
DCCLXIII
tabAristasAux(i, 3) = tabAristas(i, 3)
DCCLXIV
tabAristasAux(i, 4) = tabAristas(i, 4)
DCCLXV
Next
DCCLXVI
writer.Close()
DCCLXVII
End Using
DCCLXVIII
'Actualizar el Nombre del formulario principal
DCCLXIX
Me.Text = Split(Split(myDialog.FileName, "\")(Split(myDialog.FileName, "\").Length - 1), ".")(0) & " Visualizacin 3D y Proyeccin Didrica"
DCCLXX
myDialog.Dispose()
DCCLXXI
End If
DCCLXXII
End Sub

18

DCCLXXIII
DCCLXXIV
Private Sub VistaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles VistaToolStripMenuItem.Click
DCCLXXV
Me.AddOwnedForm(ConfiguracionVista)
DCCLXXVI
ConfiguracionVista.Show()
DCCLXXVII
End Sub
DCCLXXVIII
DCCLXXIX
Private Sub ParmetrosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ParmetrosToolStripMenuItem.Click
DCCLXXX
Me.AddOwnedForm(ConfiguracionParametros)
DCCLXXXI
ConfiguracionParametros.Show()
DCCLXXXII
End Sub
DCCLXXXIII
DCCLXXXIV
Private Sub VerAyudaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles VerAyudaToolStripMenuItem.Click
DCCLXXXV
Me.AddOwnedForm(Ayuda)
DCCLXXXVI
Ayuda.Show()
DCCLXXXVII
End Sub
DCCLXXXVIII
DCCLXXXIX
Private Sub AcercaDeGeodesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles AcercaDeGeodesToolStripMenuItem.Click
DCCXC
Me.AddOwnedForm(AcercaDe)
DCCXCI
AcercaDe.Show()
DCCXCII
End Sub
DCCXCIII
DCCXCIV
Private Sub CuboToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CuboToolStripMenuItem.Click
DCCXCV
numVertices = 8
DCCXCVI
numAristas = 12
DCCXCVII
vertice(1, 0, 0, 0)
DCCXCVIII
vertice(2, 0, 100, 0)
DCCXCIX
vertice(3, 100, 100, 0)
DCCC
vertice(4, 100, 0, 0)
DCCCI
vertice(5, 0, 0, 100)
DCCCII
vertice(6, 0, 100, 100)
DCCCIII
vertice(7, 100, 100, 100)
DCCCIV
vertice(8, 100, 0, 100)
DCCCV
arista(1, 1, 2, 255, 255, 255)
DCCCVI
arista(2, 2, 3, 255, 255, 255)
DCCCVII
arista(3, 4, 3, 255, 255, 255)
DCCCVIII
arista(4, 4, 1, 255, 255, 255)
DCCCIX
arista(5, 1, 5, 255, 255, 255)
DCCCX
arista(6, 2, 6, 255, 255, 255)
DCCCXI
arista(7, 3, 7, 255, 255, 255)
DCCCXII
arista(8, 4, 8, 255, 255, 255)
DCCCXIII
arista(9, 8, 5, 255, 255, 255)
DCCCXIV
arista(10, 6, 7, 255, 255, 255)
DCCCXV
arista(11, 5, 6, 255, 255, 255)
DCCCXVI
arista(12, 7, 8, 255, 255, 255)
DCCCXVII
Renderizar()
DCCCXVIII
End Sub
DCCCXIX
DCCCXX Private Sub PirmideToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles PirmideToolStripMenuItem.Click
DCCCXXI
numVertices = 5
DCCCXXII
numAristas = 8
DCCCXXIII
vertice(1, 0, 0, 0)
DCCCXXIV
vertice(2, 0, 100, 0)
DCCCXXV
vertice(3, 100, 100, 0)
DCCCXXVI
vertice(4, 100, 0, 0)
DCCCXXVII
vertice(5, 50, 50, 100)
DCCCXXVIII
arista(1, 1, 2, 255, 255, 255)
DCCCXXIX
arista(2, 2, 3, 255, 255, 255)
DCCCXXX
arista(3, 4, 3, 255, 255, 255)
DCCCXXXI
arista(4, 4, 1, 255, 255, 255)
DCCCXXXII
arista(5, 1, 5, 255, 255, 255)
DCCCXXXIII
arista(6, 2, 5, 255, 255, 255)
DCCCXXXIV
arista(7, 3, 5, 255, 255, 255)
DCCCXXXV
arista(8, 4, 5, 255, 255, 255)
DCCCXXXVI
Renderizar()
DCCCXXXVII
End Sub

19

DCCCXXXVIII
DCCCXXXIX
'Cambio de los centros de proyeccin 2D
DCCCXL
Private Sub btnCentroXpos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnCentroXpos.Click
DCCCXLI
centroX = centroX - 10
DCCCXLII
Renderizar()
DCCCXLIII
End Sub
DCCCXLIV
DCCCXLV
Private Sub btnCentroXneg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnCentroXneg.Click
DCCCXLVI
centroX = centroX + 10
DCCCXLVII
Renderizar()
DCCCXLVIII
End Sub
DCCCXLIX
DCCCL
Private Sub btnCentroYneg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnCentroYneg.Click
DCCCLI
centroY = centroY - 10
DCCCLII
Renderizar()
DCCCLIII End Sub
DCCCLIV
DCCCLV
Private Sub btnCentroYpos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnCentroYpos.Click
DCCCLVI
centroY = centroY + 10
DCCCLVII
Renderizar()
DCCCLVIII
End Sub
DCCCLIX
DCCCLX
Private Sub btnCentroZpos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnCentroZpos.Click
DCCCLXI
centroZ = centroZ - 10
DCCCLXII
Renderizar()
DCCCLXIII
End Sub
DCCCLXIV
DCCCLXV
Private Sub btnCentroZneg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnCentroZneg.Click
DCCCLXVI
centroZ = centroZ + 10
DCCCLXVII
Renderizar()
DCCCLXVIII
End Sub
DCCCLXIX
DCCCLXX
DCCCLXXI
'Eventos que se activan cuando el mouse pasa sobre un control del formulario
DCCCLXXII
Private Sub vHorinzon_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles vHorinzon.MouseEnter
DCCCLXXIII
ToolStripStatusLabel1.Text = "VISTA HORIZONTAL"
DCCCLXXIV
End Sub
DCCCLXXV
DCCCLXXVI
Private Sub vHorinzon_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles vHorinzon.MouseLeave
DCCCLXXVII
ToolStripStatusLabel1.Text = ""
DCCCLXXVIII
End Sub
DCCCLXXIX
DCCCLXXX
Private Sub vFrontal_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles vFrontal.MouseEnter
DCCCLXXXI
ToolStripStatusLabel1.Text = "VISTA FRONTAL"
DCCCLXXXII
End Sub
DCCCLXXXIII
DCCCLXXXIV
Private Sub vFrontal_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles vFrontal.MouseLeave
DCCCLXXXV
ToolStripStatusLabel1.Text = ""
DCCCLXXXVI
End Sub
DCCCLXXXVII
DCCCLXXXVIII
Private Sub vAxon_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
vAxon.MouseEnter
DCCCLXXXIX
ToolStripStatusLabel1.Text = "VISTA AXONOMTRICA"
DCCCXC
End Sub
DCCCXCI
DCCCXCII
Private Sub vAxon_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
vAxon.MouseLeave
DCCCXCIII
ToolStripStatusLabel1.Text = ""
DCCCXCIV
End Sub
DCCCXCV

20

DCCCXCVI
Private Sub vPerfil_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
vPerfil.MouseEnter
DCCCXCVII
ToolStripStatusLabel1.Text = "VISTA DE PERFIL"
DCCCXCVIII
End Sub
DCCCXCIX
CM
Private Sub vPerfil_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
vPerfil.MouseLeave
CMI
ToolStripStatusLabel1.Text = ""
CMII End Sub
CMIII
CMIV
Private Sub btnRotarIzquierda_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnRotarIzquierdaPlay.MouseEnter
CMV
ToolStripStatusLabel1.Text = "ROTAR LA CMARA POR LA IZQUIERDA"
CMVI
End Sub
CMVII
CMVIII
Private Sub btnRotarIzquierda_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnRotarIzquierdaPlay.MouseLeave
CMIX
ToolStripStatusLabel1.Text = ""
CMX End Sub
CMXI
CMXII
Private Sub btnRotarDerecha_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnRotarDerechaPlay.MouseEnter
CMXIII
ToolStripStatusLabel1.Text = "ROTAR LA CMARA POR LA DERECHA"
CMXIV
End Sub
CMXV
CMXVI
Private Sub btnRotarDerecha_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnRotarDerechaPlay.MouseLeave
CMXVII
ToolStripStatusLabel1.Text = ""
CMXVIII
End Sub
CMXIX
CMXX
Private Sub btnIngresarLinea_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnIngresarLinea.Click
CMXXI
Me.AddOwnedForm(VentanaIngresarLnea)
CMXXII
VentanaIngresarLnea.Show()
CMXXIII
End Sub
CMXXIV
CMXXV End Class

VIII

Ventana

CMXXVI

En esta ventana el usuario, puede ver en una matriz, todos los datos de los vrtices

y de las aristas previamente especificadas, es decir, las actuales. A su vez, la permite editar
estos valores.
CMXXVII Public Class VentanaDatos
CMXXVIII
CMXXIX
Private Sub VentanaDatos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
CMXXX
'Formateando el DataGridView correspondiente a la tabla de vertices
CMXXXI
With dgvVertices
CMXXXII
.RowCount = numVertices + 1
CMXXXIII
.ColumnCount = 3
CMXXXIV
.RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
CMXXXV
.RowHeadersWidth = 50
CMXXXVI
.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
CMXXXVII
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
CMXXXVIII
.AllowUserToDeleteRows = False
CMXXXIX
.AllowUserToAddRows = False
CMXL
.Columns(0).Name = "X"
CMXLI
.Columns(0).Width = 68
CMXLII
.Columns(1).Name = "Y"
CMXLIII
.Columns(1).Width = 68
CMXLIV
.Columns(2).Name = "Z"
CMXLV
.Columns(2).Width = 68
CMXLVI
End With
CMXLVII
CMXLVIII
'Enumeracin de las cabeceras de las filas
CMXLIX
For Each row As DataGridViewRow In dgvVertices.Rows

21

CML
row.HeaderCell.Value = String.Format("{0}", row.Index + 1)
CMLI
Next
CMLII
CMLIII
'Formateando el DataGridView correspondiente la tabla de aristas
CMLIV
With dgvAristas
CMLV
.RowCount = numAristas + 1
CMLVI
.ColumnCount = 5
CMLVII
.RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
CMLVIII
.RowHeadersWidth = 50
CMLIX
.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
CMLX
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
CMLXI
.AllowUserToDeleteRows = False
CMLXII
.AllowUserToAddRows = False
CMLXIII
.Columns(0).Name = "Vertice 1"
CMLXIV
.Columns(0).Width = 42
CMLXV
.Columns(0).DefaultCellStyle.BackColor = Color.WhiteSmoke
CMLXVI
.Columns(1).Name = "Vertice 2"
CMLXVII
.Columns(1).Width = 42
CMLXVIII
.Columns(1).DefaultCellStyle.BackColor = Color.WhiteSmoke
CMLXIX
.Columns(2).Name = "Rojo"
CMLXX
.Columns(2).Width = 40
CMLXXI
.Columns(3).Name = "Verde"
CMLXXII
.Columns(3).Width = 40
CMLXXIII
.Columns(4).Name = "Azul"
CMLXXIV
.Columns(4).Width = 40
CMLXXV
End With
CMLXXVI
CMLXXVII
'Enumeracin de las cabeceras de las filas
CMLXXVIII
For Each row As DataGridViewRow In dgvAristas.Rows
CMLXXIX
row.HeaderCell.Value = String.Format("{0}", row.Index + 1)
CMLXXX
Next
CMLXXXI
CMLXXXII
'Cargar Datos Existentes
CMLXXXIII
For i = 1 To numVertices
CMLXXXIV
dgvVertices(0, i - 1).Value = tabVertices(i, 0)
CMLXXXV
dgvVertices(1, i - 1).Value = tabVertices(i, 1)
CMLXXXVI
dgvVertices(2, i - 1).Value = tabVertices(i, 2)
CMLXXXVII
Next
CMLXXXVIII
For i = 1 To numAristas
CMLXXXIX
dgvAristas(0, i - 1).Value = tabAristas(i, 0)
CMXC
dgvAristas(1, i - 1).Value = tabAristas(i, 1)
CMXCI
dgvAristas(2, i - 1).Value = tabAristas(i, 2)
CMXCII
dgvAristas(3, i - 1).Value = tabAristas(i, 3)
CMXCIII
dgvAristas(4, i - 1).Value = tabAristas(i, 4)
CMXCIV
Next
CMXCV
CMXCVI
dgvVertices.RowCount = numVertices
CMXCVII
dgvAristas.RowCount = numAristas
CMXCVIII
End Sub
CMXCIX
M
Private Sub dgvVertices_CellEndEdit(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvVertices.CellEndEdit
MI
Dim fila, columna As Integer
MII
columna = dgvVertices.CurrentCell.ColumnIndex 'Columna de la celda editada
MIII
fila = dgvVertices.CurrentCell.RowIndex + 1
'Fila de la celda editada
MIV
'Asignacin del valor editado a su lugar correspondiente en la lista de Vertices
MV
tabVertices(fila, columna) = dgvVertices.CurrentCell.Value
MVI
'Actualizar visualizacion al terminar de editar cada dato
MVII
VentanaPrincipal.Renderizar()
MVIII
End Sub
MIX
MX
Private Sub dgvAristas_CellEndEdit(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvAristas.CellEndEdit
MXI
Dim fila, columna As Integer
MXII
columna = dgvAristas.CurrentCell.ColumnIndex 'Columna de la celda editada
MXIII
fila = dgvAristas.CurrentCell.RowIndex + 1
'Fila de la celda editada
MXIV
'Asignacin del valor editado a su lugar correspondiente en la lista de Aristas
MXV
tabAristas(fila, columna) = dgvAristas.CurrentCell.Value
MXVI
'Actualizar visualizacion al terminar de editar cada dato
MXVII
VentanaPrincipal.Renderizar()
MXVIII
End Sub

22

MXIX
MXX Private Sub VentanaDatos_ResizeEnd(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.ResizeEnd
MXXI
dgvAristas.Height = Me.Height - 70
MXXII
dgvVertices.Height = Me.Height - 70
MXXIII
End Sub
MXXIV End Class

IX Ventana

Ingresar

MXXV Esta ventana es muy importante, porque le permite al usuario definir los datos de un
vrtice, como tambin la creacin de nuevos puntos, con los cuales especificar a su vez,
nuevos vrtices. Tambin se puede especificar el color para el vrtice que se est creando.
MXXVI Public Class VentanaIngresarLnea
MXXVII
Private Sub VentanaIngresarLnea_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
MXXVIII
picColorLinea.BackColor = colorLapiz
MXXIX
For i = 1 To numVertices
MXXX
cboPuntoInicial.Items.Add(i)
MXXXI
cboPuntoFinal.Items.Add(i)
MXXXII
Next
MXXXIII
cboPuntoInicial.DropDownStyle = ComboBoxStyle.DropDownList
MXXXIV
cboPuntoFinal.DropDownStyle = ComboBoxStyle.DropDownList
MXXXV
End Sub
MXXXVI
MXXXVII
Private Sub cboPuntoInicial_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cboPuntoInicial.SelectedIndexChanged
MXXXVIII
Dim i As Integer
MXXXIX
i = cboPuntoInicial.SelectedItem
MXL
lblPuntoInicial.Text = "( " & Str(tabVertices(i, 0)) & " , " & Str(tabVertices(i, 1)) & " , " & Str(tabVertices(i, 2)) & " )"
MXLI
End Sub
MXLII
MXLIII
Private Sub cboPuntoFinal_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cboPuntoFinal.SelectedIndexChanged
MXLIV
Dim i As Integer
MXLV
i = cboPuntoFinal.SelectedItem
MXLVI
lblPuntoFinal.Text = "( " & Str(tabVertices(i, 0)) & " , " & Str(tabVertices(i, 1)) & " , " & Str(tabVertices(i, 2)) & "
)"
MXLVII
End Sub
MXLVIII
MXLIX
Private Sub btnInsertarPunto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnInsertarPunto.Click
ML
If txtCoorX.Text = "" Or txtCoorY.Text = "" Or txtCoorZ.Text = "" Then
MLI
MsgBox("Debe especificar las tres coordenadas")
MLII
Exit Sub
MLIII
End If
MLIV
If Not IsNumeric(txtCoorX.Text) Or Not IsNumeric(txtCoorY.Text) Or Not IsNumeric(txtCoorZ.Text) Then
MLV
MsgBox("Se requieren nmeros")
MLVI
Exit Sub
MLVII
End If
MLVIII
numVertices = numVertices + 1
MLIX
tabVertices(numVertices, 0) = Val(txtCoorX.Text)
MLX
tabVertices(numVertices, 1) = Val(txtCoorY.Text)
MLXI
tabVertices(numVertices, 2) = Val(txtCoorZ.Text)
MLXII
tabVerticesAux(numVertices, 0) = Val(txtCoorX.Text)
MLXIII
tabVerticesAux(numVertices, 1) = Val(txtCoorY.Text)
MLXIV
tabVerticesAux(numVertices, 2) = Val(txtCoorZ.Text)
MLXV
lblNumVertice.Text = "Nmero de Vertice: " & Str(numVertices)
MLXVI
'Aadir el nuevo punto en la lista de vrtices disponibles
MLXVII
cboPuntoInicial.Items.Add(numVertices)
MLXVIII
cboPuntoFinal.Items.Add(numVertices)
MLXIX
End Sub
MLXX
MLXXI
Private Sub btnInsertarSegmento_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnInsertarSegmento.Click
MLXXII
Dim puntoInicial, puntoFinal As Integer
MLXXIII
puntoInicial = cboPuntoInicial.SelectedItem

23

MLXXIV
puntoFinal = cboPuntoFinal.SelectedItem
MLXXV
numAristas = numAristas + 1
MLXXVI
tabAristas(numAristas, 0) = puntoInicial
MLXXVII
tabAristas(numAristas, 1) = puntoFinal
MLXXVIII
tabAristas(numAristas, 2) = colorLapiz.R
MLXXIX
tabAristas(numAristas, 3) = colorLapiz.G
MLXXX
tabAristas(numAristas, 4) = colorLapiz.B
MLXXXI
tabAristasAux(numAristas, 0) = puntoInicial
MLXXXII
tabAristasAux(numAristas, 1) = puntoFinal
MLXXXIII
tabAristasAux(numAristas, 2) = colorLapiz.R
MLXXXIV
tabAristasAux(numAristas, 3) = colorLapiz.G
MLXXXV
tabAristasAux(numAristas, 4) = colorLapiz.B
MLXXXVI
VentanaPrincipal.Renderizar()
MLXXXVII
End Sub
MLXXXVIII
MLXXXIX
Private Sub picColorLinea_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
picColorLinea.Click
MXC
Dim MyDialog As New ColorDialog()
MXCI
If (MyDialog.ShowDialog() = Windows.Forms.DialogResult.OK) Then
MXCII
colorLapiz = Color.FromArgb(MyDialog.Color.R, MyDialog.Color.G, MyDialog.Color.B)
MXCIII
picColorLinea.BackColor = colorLapiz
MXCIV
End If
MXCV
End Sub
MXCVI End Class

MXCVII
X

Configuracin

MXCVIII

En esta ventana, se permite al usuario especificar sus preferencias respecto a los

colores de: El fondo en las reas de dibujo, el lpiz por defecto con el que se dibujan las
aristas, y el color de las flechas que muestran las coordenadas x, y, z en el rea de dibujo.
MXCIX Public Class ConfiguracionVista
MC
MCI
Private Sub ConfiguracionVista_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
MCII
picFondo.BackColor = colorFondo
MCIII
picLapiz.BackColor = colorLapiz
MCIV
picCoor.BackColor = colorCoor
MCV End Sub
MCVI
MCVII
Private Sub picFondo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
picFondo.Click
MCVIII
Dim MyDialog As New ColorDialog()
MCIX
Dim red, green, blue As Integer
MCX
If (MyDialog.ShowDialog() = Windows.Forms.DialogResult.OK) Then
MCXI
red = MyDialog.Color.R
MCXII
green = MyDialog.Color.G
MCXIII
blue = MyDialog.Color.B
MCXIV
colorFondo = Color.FromArgb(red, green, blue)
MCXV
picFondo.BackColor = colorFondo
MCXVI
VentanaPrincipal.Renderizar()
MCXVII
End If
MCXVIII
End Sub
MCXIX
MCXX
Private Sub picLapiz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picLapiz.Click
MCXXI
Dim MyDialog As New ColorDialog()
MCXXII
Dim red, green, blue As Integer
MCXXIII
If (MyDialog.ShowDialog() = Windows.Forms.DialogResult.OK) Then
MCXXIV
red = MyDialog.Color.R
MCXXV
green = MyDialog.Color.G
MCXXVI
blue = MyDialog.Color.B
MCXXVII
colorLapiz = Color.FromArgb(red, green, blue)
MCXXVIII
picLapiz.BackColor = colorLapiz
MCXXIX
End If
MCXXX
End Sub

24

MCXXXI
MCXXXII Private Sub picCoor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picCoor.Click
MCXXXIII
Dim MyDialog As New ColorDialog()
MCXXXIV
Dim red, green, blue As Integer
MCXXXV
If (MyDialog.ShowDialog() = Windows.Forms.DialogResult.OK) Then
MCXXXVI
red = MyDialog.Color.R
MCXXXVII
green = MyDialog.Color.G
MCXXXVIII
blue = MyDialog.Color.B
MCXXXIX
colorCoor = Color.FromArgb(red, green, blue)
MCXL
picCoor.BackColor = colorCoor
MCXLI
VentanaPrincipal.Renderizar()
MCXLII
End If
MCXLIII
End Sub
MCXLIV End Class

MCXLV
XI Configuracin
MCXLVI

Esta es una ventana donde se facilita al usuario la edicin de varios parmetros

concernientes a los clculos de los vrtices de proyeccin, tales como:


o
o
o
o

El
El
El
El

centro (x, y, z) de las proyecciones respecto a su rea de dibujo correspondiente.


punto (x, y, z) desde donde se visualiza la vista axonomtrica.
ngulo de rotacin para la manipulacin animada de la vista axonomtrica.
factor de escalamiento para alejar o acercar la vista respecto a todas las proyecciones.

MCXLVII Public Class ConfiguracionParametros


MCXLVIII
MCXLIX
MCL Private Sub ConfiguracionParametros_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
MCLI
txtX2D.Text = Str(centroX)
MCLII
txtY2D.Text = Str(centroY)
MCLIII
txtZ2D.Text = Str(centroZ)
MCLIV
txtXaxon.Text = Str(camaraX)
MCLV
txtYaxon.Text = Str(camaraY)
MCLVI
txtZaxon.Text = Str(camaraZ)
MCLVII
txtAnguloRot.Text = Str(anguloRotacion)
MCLVIII
txtFactorZoom.Text = Str(factorZoom)
MCLIX
End Sub
MCLX
MCLXI
Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnGuardar.Click
MCLXII
If txtAnguloRot.Text = "" Or txtFactorZoom.Text = "" Or txtX2D.Text = "" Or txtY2D.Text = "" Or txtZ2D.Text =
"" Or txtXaxon.Text = "" Or txtYaxon.Text = "" Or txtZaxon.Text = "" Then
MCLXIII
MsgBox("Se requieren todos los datos")
MCLXIV
Exit Sub
MCLXV
End If
MCLXVI
centroX = Val(txtX2D.Text)
MCLXVII
centroY = Val(txtY2D.Text)
MCLXVIII
centroZ = Val(txtZ2D.Text)
MCLXIX
camaraX = Val(txtXaxon.Text)
MCLXX
camaraY = Val(txtYaxon.Text)
MCLXXI
camaraZ = Val(txtZaxon.Text)
MCLXXII
anguloRotacion = Val(txtAnguloRot.Text)
MCLXXIII
factorZoom = Val(txtFactorZoom.Text)
MCLXXIV
End Sub
MCLXXV End Class

XII Acerca
MCLXXVI

Despliega una ventana con una breve informacin respecto al programa.

MCLXXVII
MCLXXVIII

Public Class AcercaDe

25

MCLXXIX
Private Sub AcercaDe_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
MCLXXX
TextBox1.TextAlign = HorizontalAlignment.Left
MCLXXXI
TextBox1.Text = "This program is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version."
MCLXXXII
TextBox1.Text = TextBox1.Text + vbCrLf
MCLXXXIII
TextBox1.Text = TextBox1.Text + "This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more details. "
MCLXXXIV
TextBox1.Text = TextBox1.Text + vbCrLf
MCLXXXV
TextBox1.Text = TextBox1.Text + "You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."
MCLXXXVI
Button1.Focus()
MCLXXXVII
End Sub
MCLXXXVIII
MCLXXXIX
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
MCXC
Me.Close()
MCXCI
End Sub
MCXCII End Class

XIII

Ayud

MCXCIII

Esta ventana despliega un espacio donde se informa al usuario acerca de las

funcionalidades de este prototipo, y es accesible desde el men superior en la ventana


principal.
MCXCIV

BIBLIOGRAFA
MCXCV

Blanco, Luis Miguel. 2002. Programacin en Visual Basic .NET. Madrid : Grupo

Eidos, 2002. 84-88457-53-7.


MCXCVI

Foley, James D, y otros. 1990. Computer Graphics: Principles and Practice. 2nd.

New York : Addison-Wesley, 1990. 0201121107.


MCXCVII

Hearn, Donald y Baker, M. Pauline. 1996. Computer Graphics - C Version. 2nd.

New York : Prentice Hall, 1996. 0135309247.


MCXCVIII

Pressman, Roger S. 2005. Software Engineering: A Practitioner's Approach. [ed.]

Elizabeth A. Jones. 6th Edition. New York City : McGraw-Hill, 2005. 0-07-285318-2.

MCXCIX
MCC
MCCI

26

También podría gustarte