DOCUMENTACPON DEE PROYECTO148.206.53.84/tesiuami/UAM0918.pdf · prototipos de funciones...

22
DOCUMENTACPON DEE PROYECTO: EDITOR EN 2 DIMENSIONES

Transcript of DOCUMENTACPON DEE PROYECTO148.206.53.84/tesiuami/UAM0918.pdf · prototipos de funciones...

DOCUMENTACPON

DEE PROYECTO:

EDITOR EN 2 DIMENSIONES

ASESOR:

LIC. ALEJANDRO MARTINEZ YAÑEZ

INTEGRANTES:

AGUILAR SANCHEZ ELIZABETH

ROMERO ZALDIVAR PATRICIA

TORRES VIGIL LAURA ALICIA

DESCNPCION

DE LA

ESTRUCTURA UTILIZADA

i

?

Se tiene una estructura como sigue:

Un nods con 4 campos: - Seleccion (de tipo entero) , contiene el nimero de identificador de la figura, es

decir, si se eligió un tpibgulo en la caja de herramientas entonces selección tendrá un 50, si se eligió UPI circdo, tendrá un 49, y así con la línea y el cuadro.

- fig , es un apuntador a TPoliehA, este apuntador sirve para accesaT a la clase TPoliedE.

- sig , es un apuntador de tipo nodo, el cual apunta al siguiente nodo de la lista.

- ant, es un apuntador de tipo nodo, apunta al nodo anterior de la lista.

Una clase Lista, en esta clast! se tiene como públicos 3 apuntadores a la estructura nodo y son: *Ini, *Fin y "App. h y Fin apuntan al principio y fin-al de la lista respectivamente. App es un apuntador que se utiliza para apuntar a alghn nodo de la lista. Tiene un constructor y un destructor. También aquí se encuentran las funciones de 'Inserta', 'DibujaFiguras', 'AbrirArchivo' y 'Desaparece'.

Una clase Thlatriz, la cual tiene el nimero de renglones (nReng), ntmero de columnas (nCol), los valores de l a matriz , (valores), las funciona ResemaMemoria y LiberaMemoria. además del c.onstructor, destructor y prototipos de funciones relacionadas con las matrices, es decir, la suma, multiplicación , resta y asignación ectre matrices. Todo esto se encuentra en modo 'públicos'.

La clase TFigura, l a cual tiene copno modo protegido al color (de tipo entero) y como públicos a las funciones Rota, Traslada, E,scala, Deforma, Refleja y ObjetoAPantalla.

La clase TPoJiedro, que se deriva de l a ckse TFigwa, esta clase contiene dos apuntadores (Puntos y AwPuntos) que apuntan a una estructura de tipo TMatriz esto nos sirve para acc,esa.r a los datos y funciones miembro de esta como son, principalmente, el número de renglones y el número de columnas. También tiene a l a variable "dimensión" (puede ser 2 6 3) , a "numpuntos" (ntimero de puntos), que como su nombre l o dice, es el n h e r o de puntcs de una figura. Nosotros asignamos a c,ada figura m número de puntos igual a su número de vértices + 1, es decir, para un triángulo, que tiene 3 vértices entonces "numpuntos" se& de 4 donde el primero y rhltlmo puntos son iguales.

Otra variable es "colorrelleno" (de tipo entero).

L

L

i

i

También en su definición tiene como públicos a las funciones Rota, Traslada, Escala, Deforma, Refleja y BbjetoAPantalla.

Grificamente l a estructura se veria de la siguiente forma:

nodo

DESCRIPCION

DE LAS

CLASES DE C++ PARA WINDOWS

Dentro del programa existen diversas clases que se derivan de estructuras ya hechas en C++ p a a Wind.ows, tal es el caso de TProgr'mWindow, por ejemplo. El acceso al administrador del sistema se logra con ayuda del apuntador global Thesystem. La inicialización de este apuntador se realiza en la clase de la ventana principal TProgramWindow. El constructor de esta clase deberá definir el apuntador del administrador del sistema para todo el sistema, de la forma siguiente:

TProgramWindow::TPrograrnWindow(PT~VVindowsObjectAParent, LPSTR Title) : TWindow(AParent,Title)

Thesystem = new TSysternManager(tlzis); {

1

Cuando se termina una aplicación se debe eliminar el objeto TSystemManager. Esto se logra dentro de la función miembro Canclose() de TProgramT?tkdow. El &digo quedaría de la siguiente manera:

BOOL TProgramWindow::CanClose()

delete Thesystem; return 1;

1 La clase TSystemManager depende de la ventma principal para actualizar la línea de estado, esto es debido a que la función Point es quien se encarga de hacer el dibujo. E+stenzManager necesita de unmedio que le permita el acceso a la ventana principal, por lo que al constructor de TSvstemMamxer se le pasa un apuntador a la ventana del constructor TProgram Wijzdorv. TSvstemManuger guarda este apuntador para usarlo posteriormente.

TSystemM,anager::TSystemManager(TProgramWindow* window)

//Guardar el apuntador hacia la ventana principal programwindow window; //Inicializar el administrador del sistema TheSystem = this; ToolPalette = O; toolSelected = O;

En este constructor tambikn se encuentran inicializados a O dos apuntadores. Uno, ToolPalette, que es un apuntador que apunta a TToolPaletteDiaIog, el cual está

definido dentro de la clase TSystemhrianager como publico. Otro, toolSelected, el cual es un apuntador a TTQoI definido dentro de la clase TSystcmM.anager.

La mayor parte del trabajo en el programa se hace mediante el administrador del sistema. hay que coordinar varios objetos del sistema dt' alguna mmera. Se cuenta con un menú, una linea de estado, una paleta de herramientas y w1 cursor de sistema. El a+ninistrador del sistema se encarga de l a coordiaación de todas estas actividades del sistema.

Por ejemplo, cuando se escoge una herramienta determinada, se modifican tanto la línea de estado como el cwsor del sistema, con el administrador del sistema se logra esta funcion.

Cada botón en l a caja de herramientas se define como una clase, así, para el botón que tiene una linea se define la clase TLinea, lo mismo se hace para los demás botones de la caja.

Dentro de l a clase TToolPaletteDialog, que se deriva de TDialcg, se definen apunatdores a cada una de las clases de la linea, cuadro, escala, marca, etc. ~ como sigue:

class TToolPaletteDialog: public TCialog

TLinea* Linea; TCuadro* Cuadro; TCirculo* Circulo;

TEscala" Escala; TDeforma* Deforma;

TMarca* Marcar; TCorta* Cortar;

A cada uno de estos apuntadores se les debe dar memoria esto se logra en el constructor de la clase 'TTooPaletteDialog de la siguiente manera:

TToolPaletteDialog::TToolPaletteDiaiog(PTWindowsObject AParent) : TDialog (AParent, "DIALOG " 1")

Linea =; new TLinca(this, ID LINEA); Cuadro = new TCuadro(thls, ID-CUr?lDRO);

I

TProgramWindow Esta clase se deriva de TWindow. Aqui se encuentra la función miembro Paint, la cual se encarga de dibujar las figuras, principalmente. También es aquí donde se encuentran los prototipos para accesar a cada opción del menk Es decir, para accesar a la opción Imprimir del menú de Archivo se teclea ALT-A + I estas teclas las capta CM FIRST y'se asockan con cada identificador de las opciones, en este caso, se asocia con el identificad0r.de Imprimir (IDM TMPRIMIR). TWindow es una ventana clase de propósito general cuyas instancias pueden representar menus, pop-up, o ventanas hijas de una aplicación. L,as instancias de TWindow pueden desplegar gráficas.

-

-

TUserApplicahA Es la principal clase de aplicación que tiene a su cargo el control de todas las ventanas, las cajas de diálogo y otros objetos de su aplicación. Todo programa OWL debe construirse con base en una clase de aplicación derivada de la clase OWL TApplication. Se puede poner cualquier nornbri: a la clase de aplicación derivada de TApplication.

El programa de aplicación interectuará a Yavés de la función de usuario TLJserAppIication::InitMainWindow(), que a su vez crea la instancia dc una ventana de usuario asigada dinimicamente.

Se define la función virtual InitMainWindow() en la clase TLIXserApplication y se devuelve un apuntador a la ventana principal del usuario. Por omisión InitMainWindow devuelve un apuntador a la \-cntana llevando por nombre el de la apticación.

i

TOwnerDrawRadioButton El constructor de esta clase recibe apuntadores de los recursos de mapas de bits necesarios mientras se dibuja el botón de radio y almacenas los manejadores (handles) de los mapas de bits en las variables miembro hNormal y hChecked. Como se manipula m control con dibujos del usuario, éste envía a su ancestro m mensaje WM DRAWITEM. Las cajas de diálogo atrapan este mensaje e invocan una de las funciones virtuales TControl: ODADrawEntire( ...), ODASelect(. . .) u ODAFocus(. . .). I31 propósito de estas furciones es el de instruir al control sobre la forma de presentación de sí mismo.

-

.. . ..

DESCRPPCION

DE LAS

FUNCIONES UTILIZADAS

FUNCIONES DE PROYECTO.CPP

Borra() Es función miembro de TProgamWindow y llama al procedimiento Borrado(HWND hWin).

Borrads (WND hWin) Lo que hace es eliminar al nodo de la lista, este nodo es aquel que tiene la in€omación de la figura que se marcó para borrarla. Para realizar la eliminación del nodo sc actualizan los apuntadores y se llama ala función delete de C-t+. Después de el iminar e! nodo, es decir, de el iminar la figura, se llama de nuevo a InvalidateReg el cual llama a la función Paint y dentro de ésta se llama a DibujaFiguras, ksta recorre la lista ligada y dibuja Io que tenga en ella, y como anteriormente se eliminó el nodo de l a figura que se deseaba borrar, ya no aparece en la lista entonces no la dibuja y por l o tanto la borra. No regresa nada.

Cortar(TMessage&) Es función miembro de TProgramWindow, llama a la función Cortando(HWND W i n d ) .

Cortmdo(WWND HWind) En esta función se utiliza la variable "\-ertices" que e5 un apuntador a double donde se almacenan los valores de la matriz. Esto es necesario pues "valoresff es bidimensional y "vertices", unidimensional, y para llarnar a la función Inserta se requiere de un apuntador a double unidimensional. Y al llamar a Inserta se crea un nuevo nodo en la lista auxiliar apuntada por AuxCortar que es de tipo Lista, y se copia l a información al nuevo nodo. Después se llama a la función Borrado para eliminar el nodo a cortar de la lista principal, pero su información ya se guardó en un nodo de la lista auxiliar para posteriormente, si el usuario desea utilizar Ia función Pegar que se encuentra en la c,aja de herramientas o en el menú de Edición. No regresa nada.

1

!,

* NOTA .- En Cortar y Borrar se elimina el nodo de la figura que se marcó pero la diferencia es que en Borrar se elimina el rrodo y se vuelve a pintar lo que hay en la lista y en Cortar, antes de eliminar el nodo. ce copia su contenido a una lista

auxiliar apuntada por *AuxCorta, dec,pués se elimina de la lista principal y ésta se vuelve a pintar. Se tiene almacenado en un nodo de la lista auxiliar la informacih de la figura. Esto sirve para la utilización de la función Pegar, es decir, a la hora de cortar la figura &a se guarda en un 'portapapeles' (lista auxiliar) para después utilizar éste 'portapapeles' y pegar lo que había ahí. En Bcrrar no se utiliza ningún 'portapapeles', ahí es donde radica la diferencia entre cortar y borrar.

LhpiaRegion(Q Se tiene un arreglo global de tamaño 4 de tipo double ( Region[4] ). Aquí lo que se hace es asignar a cada elemento del arreglo un cero (O). No regresa nada.

Marca() Para marcar una figura lo que hace el usuario es dar un click del mouse en la parte superior izquierda de la figura y otro en la parts inferior derecha, estos 2 clicks se guradan en el arreglo Region, esto se realiza en la función HandlteLeftMIouseButtonDown, es decir, al monlento de dar un click. En seguida se l l a m a Marca() que verifica que cada virtice de la figura sea mayor o igual que el punto (x,y) del primer click y sea menor o igual que el punto (x2,y2) del segundo click, con esto se asegura que la figura se emuentre dentro del área que forman los dos clicks del mouse.

-/+ (?í2,y2)

Si esto ocurre, se prende la bandera (la cual es local) y el nodo e5 apuntado por Figuras->App (apuntador global). Esto se realiza mientras la lista no sea nula. No regresa nada.

Copiando(nodo *Temp, TMessage& Msg) Es llamada dentro de MandleLeftMouselDaattonDown si es que Figuras->App tiene algo, es decir, si alguna figura ha sido marcada. Copiando l lama a la

función Obtiene-Puntos - Copia y con los puntos obtenidos los inserta en la lista. Posteriormente se libera la memoria ocupada por los puntos. No regresa nada.

IlandleLeftMouseButtonDown(TMessage& Msg) Es función miembro de l a clase TTcol. Cada vez que se da un ciick al botón izquierdo del mouse se llama a esta función. primero se obtiene el identificador del objeto que se haya escogido con el mouse por medio de Getld y lo devuelve en '2, variable de tipo entero. Las líneas que se encuentran dentro de lá condición: "if (i == 47)", es decir, 5' es igual al identificador de la línea, corresponden primero a que se obtienen los 2 primeros puntos del click del mouse y después al segundo click del mouse setraza la linea del primer punto a este último. Si se da otro click, la línea es trazada del último punto a este nuevo y así sucesivamente, guardándose en un nodo las 2 coordenadas de los puntos de los extremes de la línea de los dos clicks del mouse. Si 5' es el identificador de un círculo, un cuadro o un triángulo se llama a Obtiene Puntos para generar la figura estándar y pintarla donde el usuario haya dado click en la pantalla de dibujo. Se inserta en la lista la ifonnación de la figura elegida y posteriormente se libera la memoria obtenida con Libera-Puntos. Si ahora 5' tiene el identificador de "marcar" se verifica que el primer elemento del arreglo Region sea cero, si es así, quiere decir que se deben obtener los 2 puntos del click del mouse. Caso contarric, quiere decir que ya se obtuvieron estos puntos y ahora se obtienen los 2 puntos del segundo click del mouse, y se llama a Marca la cual verifica que los puntos de la figura se encuentren dentro de estos 2 clicks. En seguida se limpia el arreglo con LimpiaRegion. Si el identifícador es el de ''pegar" de la caja de herramientas o del menú, entonces, primero se debe verificar si existe algo en AuxCorta ya que este apuntador apunta a la figura que antes fue cortada y guardada en esta lista auxiliar para su posterior utilización y se llama a Copiando. Si Figuras no es nulo, se obtiene el dispositivo de contexto y se llama a DibujaFigura para dibujar lo que exista en la lista.

LimpiarPantalla() Función miembro de TPromamWindow. Llama a Desaparece y después a ZnvalidateRect para que éste a su vez pinte lo que haya en la lista, por medio de DibujaFigura, la cual es nula y por lo tanto no pinta nada. No regresa nada.

i t

Wotacion() Función miembro de TProgramWindow. Para llamar a Rota se verifica que alguna figura esté apuntada por Figuras->App, esto quiere decir que la figura ha sido seleccionada y se puede aplicar la Rotación. Para dibujarla se llama a DibujaFigura, antes se obtiene el HDC y después de dibujarla se libera. Se manda a nulo Fibwas->App pues ya se realizó la operación al objeto marcado.

Reflexion() Fun.ción miembro de TPro2ramWindow. Para llamar a Refleja se verifica que algwa figura esté apuntada por Figuras->App, esto quiere decir que la figura ha sido seleccionada y se puede aplicar la Reflexión. Para dibujarla se llama a DibujaFigwa, antes se obtiene el HDC y despuis de dibujarla se libera. Se menda a nulo Figuras->App pues ya se realizó la operación al objeto marcado.

Trasiacion() Función miembro de TPromamWindow. Para llamar a Traslada se verifica que alguna figura esté apuntada por Figuras->App, esto quiere decir que la figura ha sido seleccionada y se puede aplicar la Traslación. Para dibujarla se llama a DibujaFigura, antes se obtiene el HDC y después de dibujarla se libera. Se manda a nulo Figuras->App pues ya se realizó la operación al objeto marcado.

Copia() Miembro de TProg-ramWindow. 4 'identifica' (variable global) se le asigna el número que corresponde a la opción copia del men6 Edición. Con esto se tiene un número en la variable 'identifica' y cuando se vaya a la opción copiar dentro de HandleLeftMouseButtonDown se llama a Copiando la cual realiza la tarea de copiar la figura elegida.

Pegar(TMessage& Msg) Función miembro de TProgamWindm. El identificador de la opción pegar del menú Edición se guarda en 'identifica' para cuando se vaya a la opción pegar en HandleLeftMouseButtonDown después se llame a Copiando pero copia lo que se encuentra en la lista auxiliar apuntada por AusCorta. I

!

Deforrrnacion() Es miembro de TPromamwindow. Llama a Deformar con el manejador de la ventana HWND.

Escalamiento() FunciCn miembro de TPromamWindow. Llama a Escalar con el parárnetro HWhTD.

I)eTormar(PW7C1'NaiD hWin) Primero se obtiene el HDC y despuks se crea una caja de diálogo para recibir los datos de la deformación que desee el usuario, los cuales son dos,, el deformamiento en x y el deformamiento en y. Estos datos se reciben como cadenas por lo que hay que convertirlos a entero, esto se logra con la función " utoi de C++. Después se llama a Deforma COI? estos dos parámetros y posteriormente a DibujaFigura para que lo pinte en la pantalla. Se libera el HDC; y como la información del nodo apuntado por Figuras->App ya se &l id , entonces este apuntador se manda a nulo. Si en Figuras->App no hay nada quiere decir que nunguna i'igura ha sido marcada para aplicarle la deformación y por lo tanto se manda un mcnsaje de en or,

Escalar(HWND hWin) Primero se obtiene el HDC y después se crea una caja de diálogo para recibir el dato del escalamiento que desee el usuario. Este dato se recibe como cadena por lo que hay que convertirlo a entero, esto se logra con la funcibn de C++. Después se llama a Escala con este parámetro y posteriomente a DibujaFigura para que lo dibuje en la pantalla. Se libera el HDC; y como la información del nodo apuntado por Figu.ras->App ya se utilizb, entonces este apmtador se manda a nulo. Si en Figuras->App no hay nada quiere decir que nunguna figura ha sido marcada para aplicarle e1 escalamiento y por lo t'mto se manda un mensaje de error.

* OBSERVACPON .- Para Guardar, Cexrra, Salir y Abrir se necesita una bandera que indique si en el archivo que se está realizando ha sufrido un cambio, $:S

decir, si el archivo se guarda y después se elige la opción Salir en esta no debe aparecer el mensEje que dice si se desea guardar el archivo, sólo se c i m a y listo. Caso contrario, si no se ha guardado el archivo al e,jecutar l a opcibn de Salir

b

f

debe aparecer este mensaje preguntando si se desea guardar el archivo. Esta es la tarea de l a bandera ASalvat- de tipo entero y que debe ser global.

Guardar() Es miembro de TPro.pm\Vindow. Primero se prende la bandera ASaivar y se llama a CajaGuardar, la cual se encarga de realiza;. la operación de guardar el ardhivo.

@errar() Mielnbro de TrZ_romamWindoy. Para cerrar un a r c h w priemero se verifica que la bandera esti encendida pues esto quiere decir que ya se guardó el archivo entonces se puede cerrar. Se llama a Desaparece pues se debe limpiar la lista y despuks a InvaZidoteReci para que pinte lo que hay en la lista que no es nada.

Abrir() Se llama a la caja de diálogo de "Abrir" de C++ para Windows. Como AbrirArchivo es una función miembro de Lista se crea i;l apuntador a esta estructura (aux) y se apunta a Figuras. Por medio de aux se llama 3

AbrirArchivo (ya descrita dentro de las funciones de Util.1-I) Cora los parhetros aux, el nombre del archwo a abrir y el manejador de l a ventana, que en este caso es MVindo (de tipo HWND). Por idtimo se llama a Irzvalidatet~i.

CajaGuardar(HWND HWindo) Se llama a la caja de diálogo de "Guardar un archivo" de C++ para Windows. Se apunta un apuntador de tipo nodo a Figuras->Ini, es decir, al inicio de la Lista principal y se llama a Guardar-Archivo con este apuntador, el nombre del archivo y el manejador de la ventana.

Nuevo() Es miembro de TPromamLVindow. S610 se llama a Desaparece y a Invalidatcliect. Con esto se tiene una p'antalla limpia donde el usuario pueda dibujar y en l a Lista no hay nada para posteriormente insertas los dibujos que el usuaxio diseñe.

Salir() Es miembro de TProgarnWindow. Primero se debe cersiorarse que el archivo actualmente abierto esté guardado, si no es así y la lista no es nula, entonces se manda u 1 1 mensaje advirtiendo al usuario que su archvo no ha sido guardado y preguntando si desea hacerlo. Si la respuesta es afirmativa se llama a CajaGuardar. En otro caso se llama a CIoseWindow de C++ para Windows que cierra la ventana y se sale del editor.

FUNCIONES DE UTIL.14

"Obtiene-Puntos(int seileccion,int& num,TMessage& Msg) Según la figura que se haya seleccionado la función se va a, ya sea círculo, triángulo, línea o cuadro. Lo que hace es utilizar un apuntador local de tipo double (Funtm) y asigna a cada elemento del arreglo las coordenadas del mouse, esto es, en PuntoslO] se guarda la coordenada x del mouse, eE Puntos[ 11, la Coordenada y, en Puntos[2] se asigna un valor igual a la coordenada x del mouse menos 20 (puede ser cualquier valQr, no necesariamente 20) y así sucesivamente hasta el iiltimo elemento del arreglo. Esto es para la formación de una f i p r a estándar. Si la figura elegida file un triángulo entonces Puntos tendrá S elementos (0..7), si fue un cutrcZro tendrá 10 elementos (0..9), si fue línea sólo tendrá 2 elementos (O.. 1). Lo que regresa es Puntos.

"Obtiene Puntos-Copia(nodo "aux, TMessage& Msg) Como-la funci6n Obtiene-Puntos da como resultado una figura estándar no se puede utilizar esto a la hora de copiar pues si se eligió un triángulo para copiarlo y fue previamente escahdo, el resultado sería la copia de la figura p x o sin la reciente transfomación, lo cual es erróneo. Para solucionar esto se encuentra esta función que, restando a cada punto los valores de la matriz, se obtiene el resultado deseado. Regresa 'Puntos' que, es un apuntador a double.

DibujaFigusas(HDC hdc) Es función miembro de la estructura Lista. Inicializa un apuntador de tipo nodo al principio de la lista y recorre la lista mientras ésta no sea nula Ilamándo a DibujaFigura; la cual realiza la función de dibujar las figuras, no se hace directamente pues esto causa la llamada a LnvalidatcRect y éste a Paint más veces de lo necesario y en lo que repercute es que se tiene el dispositivo de contexto (HDC) cuando no es necesario, esto también ocasiona que a la hora de dibujar en pantalla se hace más lento. Por esto se llama a DibujaFigura y éste se encarga de tomar el HDC y liberarlo inmediatamente después de haberlo utilizado. No regresa nada.

DibujaFigura(HI)C hdc, nodo *aux) Al llamar a esta función uno de sus parámetros es el HDC el cual se obtiene con la futlci6n GetDC de C++ en ese momento, y se libera después de llamar a DibujaFigura. Con esto se logra que el HDC esté libre para después utilizarlo cuando sea necesario y no hacer un uso inapropiado del mismo. No regresa nada.

LiberaPuntos(doub1e *Puntos) Si 'Puntos' tiene algo se borra y se manda a nulo. Se regresa 'Puntos'.

*CreaNodo(int S, int nurn, double *Vertices) Se utiliza un apuntador de tipo nodo (Am) al cual se le da memoria y en el campo 'selección' se le asigna lo que haya en 'S'. Se da memoria a Aux->fig y como en Vertices' están los valores de la matriz pero en un aneglo unidimensional, entonces se copian a valores (que se encuentra en A~x.->fig-~P~ntos->valores[][]). Los apuntadores anterior (ant) y siguiente (sig) se mandan a nulo. Se regresa Aux.

Lista::Lis&a() Es el constructor de la Lista donde los apuntadores Ini, Fin y App se mandan a nulo.

Lista::-Lista() Es el destructor de la Lista, borra los nodos de la lista empezando por el fin de la misma.

i c i

Inserta(int S, int num, double "Vertices) Inserta cada nodo al final de la Lista verificmdo si el nodo a insertar es el primero o no para realizar los cambios necesarios, cs decir, si es el primero, a Ini (Apuntador al inicio de l a Lista) se apunta a un nodo que se le da memoria con la función CreaNsdo. Ini y Fin apuntan a1 mismo elemento. Si no es e2 primero, entonces se inserta al final de la lista (apuntado por Fin->sig). El apuntador Fin->sig->ant se apunta a Fin y Fin a Fin->sig. Con Fin->sig->mt = Fin se crea la liga que va del nodo final a1 pcnúltimo nodo. No regresa nada.

Desaparece0 Funcibn miembro de Lista, Se utliliza para eliminar todo lo que haya en la Lista, se borra a Puntos y AuxPuntos. Los apuntadores h i Fin y App se mandan a nulo, No regresa nada.

GuardarArchivo(nod0 *aux, LPSTR NomArch, HWND hwin) Se crea un archivo binario para escritura y se copia la idormación de cada nodo de la lista, tal como la selección, el n h e r o de puntos d ela figura y los valores de éstos. Ya que es un archvo bina-io se copia con la función E de C-t+. Si ocurre al@ fallo al crear el archivo se manda un mensaje de error con MessageBoZ de C++ para Windows.

AbrirArchivo(Lista *aux, LPSTR NcmArch, HWND hwin) Esta funcibn es miembro de la estructura Lista ya que para abrir un archivo y tomar la información de éste se tiene que vaciar dicha información en la lista ligada para despuks seguir con la ejecución del editor. Para abrir una archivo se utiliza la función fopen de C.++ y mientras no sea fin de archvo se obtiene caracter por caracter (los cuales están en código ASCII) y se guarda en una variable. Primero se lee la selección (se obtienen los caracteres en el mismo orden en que se guardaron) , es decir, si fue un triángulo, cuadro, etc. y se guarda en la varible de tipo entero lb'; después se obtiene el segundo cnracter que corresponde al número de puntos (el cual es el número de vértices de la figura + 1) y por W r n o se deben obtener los valores, para esto se utiliza un ciclo para ir leyendo uno a uno los valores. El ciclo va de cero al número de puntos multiplicado por 2, pues cada vértice tiene 2 puntos (x y y) y éstos son los valorss que se guardan en la variable Id'. Posteriormente, se insertan estos datos en l a lista principal para después seguir modificando las figuras del dibujo si se desea. En este procedimiento hay un renglón que dice: "if c 1 ' I , esta condición es por si en 'c' se guarda basura. Ya que IC' sólo puede tener valores positivos mayor que 1, pues el mínimo sería 2 (de la linea), entinces se logra l a validación con esta condición. Si existe un e m r al abrir el archivo se manda un mensaje de error.

L

,

i

BIBLIOGRAFHA:

- Faison, Ted. Borland C+" 3. I . Pro.gramación Orientada a Objetos. Prentice Iiall, Mkxico, 1993.

- Watt, Alan. 3D Computer Graphics. Segunda Edicl6n. Addison-Wesley, Inglaterra, 1993.

- Objectwindows LJser's Guide. Manuales de Tw-bo C++ 3.1 de Borlandc.