Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

cubo.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= cubo.cc                                          Julio - agosto de 1998 =
00003 //=-------------------------------------------------------------------------=
00004 //= Definiciones de la clase CUBO                                           =
00005 //=-------------------------------------------------------------------------=
00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00013 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00014 //=-------------------------------------------------------------------------=
00015 //= Autor original: Oscar J. Chavarro G.  A.K.A. JEDILINK. Copyright (c),   =
00016 //= 1997 - 2003, oscarchavarro@hotmail.com                                  =
00017 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia   =
00018 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la  =
00019 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. =
00020 //===========================================================================
00021 
00022 #include "toolkits/geom/geometria.h"
00023 
00024 #ifdef VEL_ROSITA
00025     #include "toolkits/geom/cubo.h"
00026 #endif
00027 
00028 #include <stdio.h>
00029 
00030 //===========================================================================
00031 //= Clase CUBO                                                              =
00032 //===========================================================================
00033 
00034 CUBO::CUBO(double l)
00035 {
00036     _lado = l;
00037     imagen = NULL;
00038 }
00039 
00040 CUBO::~CUBO()
00041 {
00042     if ( imagen ) delete imagen;
00043 }
00044 
00045 double
00046 CUBO::lado(void)
00047 {
00048     return _lado;
00049 }
00050 
00051 void
00052 CUBO::set_lado(double l)
00053 {
00054     _lado = l;
00055 }
00056 
00057 void
00058 CUBO::anexar_textura(IMAGEN *img)
00059 {
00060     if ( imagen ) delete imagen;
00061     imagen = img;
00062 }
00063 
00064 int
00065 CUBO::clasificar_punto(VECTOR p)
00072 {
00073     double l = _lado/2;
00074 
00075     if ( p.x > -l + EPSILON && p.y + EPSILON > -l && p.z > -l + EPSILON &&
00076          p.x < l - EPSILON && p.y < l - EPSILON && p.z < l - EPSILON ) {
00077         return 1;
00078       }
00079       else if ( 
00080          p.x < -l - EPSILON || p.y - EPSILON < -l || p.z < -l - EPSILON ||
00081          p.x > l + EPSILON || p.y > l + EPSILON || p.z > l + EPSILON ) {
00082         return -1;
00083       }
00084       else {
00085         return 0;
00086       }
00087     ;
00088 }
00089 
00090 
00091 void
00092 CUBO::minmax(VECTOR *min, VECTOR *max)
00093 {
00094     min->x = -_lado/2;
00095     min->y = -_lado/2;
00096     min->z = -_lado/2;
00097     max->x = _lado/2;
00098     max->y = _lado/2;
00099     max->z = _lado/2;
00100 }
00101 
00102 #ifdef GL_ENABLED
00103 
00104 void
00105 CUBO::pintar_gl(CALIDAD_VISUAL *Calidad, MATERIAL* Material,
00106                 CAMARA * /*Camara*/)
00107 {
00108     if ( Calidad->con_cajas && !Calidad->con_bordes ) PINTAR_MINMAX_GL();
00109 
00110     //- Pintado de bordes --------------------------------------------------
00111     COLOR cb(1, 0, 0);
00112 
00113     if ( Calidad->con_bordes ) {
00114         Calidad->activar_bordes_gl(cb, Material);
00115         pintar_cubo(_lado);
00116     }
00117 
00118     //- Pintado de caras ---------------------------------------------------
00119     COLOR c(1, 1, 1);
00120 
00121     if ( Calidad->con_caras ) {
00122         Material->activar_gl();
00123         Calidad->activar_caras_gl(c, Material);
00124 
00125         if ( imagen && Calidad->con_textura ) {
00126             imagen->activar_gl();
00127             glEnable(GL_TEXTURE_2D);
00128             Calidad->activar_textura_gl();
00129           }
00130           else if ( Calidad->con_caustics ) {
00131             Calidad->activar_textura_gl();
00132           }
00133           else {
00134             glDisable(GL_TEXTURE_2D);
00135         }
00136 
00137         ACTIVAR_POLYGON_OFFSET();
00138         pintar_cubo_solido(_lado);
00139         DESACTIVAR_POLYGON_OFFSET();
00140     }
00141     glDisable(GL_TEXTURE_2D);
00142 }
00143 #endif
00144 
00145 void
00146 CUBO::pintar_aqz(FILE *fd)
00147 {
00148     fprintf(fd, "    // Pilas: No hay pintar_aqz... \n");
00149     fprintf(fd, "    geometria ESFERA 1 \"\"\n");
00150 }
00151 
00152 void
00153 CUBO::pintar_povray(FILE *fd)
00154 {
00155     double l2 = _lado/2;
00156 
00157     fprintf(fd,
00158         "box {\n"
00159         "    <%f, %f, %f>, <%f, %f, %f>\n",
00160         -l2, -l2, -l2, l2, l2, l2
00161     );
00162 }
00163 
00164 GEOMETRIA *
00165 CUBO::crear_copia(void)
00166 {
00167     CUBO *c;
00168 
00169     c = new CUBO(_lado);
00170     if ( !c ) return NULL;
00171 
00172     (*c) = (*this);
00173 
00174     if ( imagen ) {
00175         c->imagen = imagen->copie();
00176         if ( !c->imagen ) {
00177             fprintf(stderr,
00178             "<CUBO> Warning: no se pudo replicar una textura.\n");
00179             fflush(stderr);
00180         }
00181     }
00182 
00183     return (GEOMETRIA *)c;
00184 }
00185 
00186 //===========================================================================
00187 //= EOF                                                                     =
00188 //===========================================================================
00189 

Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.