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

cilindro.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= cilindro.cc                                           Noviembre de 1999 =
00003 //=-------------------------------------------------------------------------=
00004 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00005 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00006 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00007 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00008 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00009 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00010 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00011 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00012 //=-------------------------------------------------------------------------=
00013 //= Autor original: Oscar J. Chavarro G.  A.K.A. JEDILINK. Copyright (c),   =
00014 //= 1997 - 2003, oscarchavarro@hotmail.com                                  =
00015 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia   =
00016 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la  =
00017 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. =
00018 //===========================================================================
00019 
00020 #include "toolkits/geom/geometria.h"
00021 
00022 #ifdef VEL_ROSITA
00023     #include "toolkits/geom/cilindro.h"
00024 #endif
00025 
00026 #include <stdio.h>
00027 
00028 //===========================================================================
00029 //= Constantes y macros                                                     =
00030 //===========================================================================
00031 
00032 #define PINTAR_CILINDRO_GL()                                    \
00033         glPushMatrix();                                         \
00034         glTranslated(0, 0, -_altura/2);                         \
00035         gluCylinder(Textura_glu, _radio1, _radio2, _altura,     \
00036             meridianos, paralelos);                             \
00037         glRotated(180, 1, 0, 0);                                \
00038         gluDisk(Textura_glu, 0, _radio1, meridianos, 1);        \
00039         glPopMatrix();                                          \
00040         glPushMatrix();                                         \
00041         glTranslated(0, 0, _altura/2);                          \
00042         gluDisk(Textura_glu, 0, _radio2, meridianos, 1);        \
00043         glPopMatrix();
00044 
00045 //===========================================================================
00046 //= Clase CILINDRO                                                            =
00047 //===========================================================================
00048 
00049 CILINDRO::CILINDRO(double r1, double r2, double h)
00050 {
00051     _radio1 = r1;
00052     _radio2 = r2;
00053     _altura = h;
00054 
00055     #ifdef GL_ENABLED
00056     Textura_glu = gluNewQuadric();
00057     paralelos = 10;
00058     meridianos = 16;
00059     imagen = NULL;
00060     #endif
00061 }
00062 
00063 CILINDRO::~CILINDRO()
00064 {
00065     if ( imagen ) delete imagen;
00066     #ifdef GL_ENABLED
00067     if ( Textura_glu ) gluDeleteQuadric(Textura_glu);
00068     #endif
00069 }
00070 
00071 void CILINDRO::valores(double *r1, double *r2, double *h)
00072 {
00073     (*r1) = _radio1;
00074     (*r2) = _radio2;
00075     (*h) = _altura;
00076 }
00077 
00078 void CILINDRO::set_valores(double r1, double r2, double h)
00079 {
00080     _radio1 = r1;
00081     _radio2 = r2;
00082     _altura = h;
00083 }
00084 
00085 void
00086 CILINDRO::anexar_textura(IMAGEN *img)
00087 {
00088   #ifdef GL_ENABLED
00089     if ( imagen ) delete imagen;
00090     imagen = img;
00091   #endif
00092 }
00093 
00094 int
00095 CILINDRO::clasificar_punto(VECTOR /*p*/)
00104 {
00105     return 1;
00106 }
00107 
00108 void
00109 CILINDRO::minmax(VECTOR *min, VECTOR *max)
00110 {
00111     double mmx;
00112 
00113     mmx = MAXIMO(_radio1, _radio2);
00114 
00115     min->x = -mmx;
00116     min->y = -mmx;
00117     min->z = -_altura/2;
00118     max->x = mmx;
00119     max->y = mmx;
00120     max->z = _altura/2;
00121 }
00122 
00123 #ifdef GL_ENABLED
00124 
00125 void
00126 CILINDRO::pintar_gl(CALIDAD_VISUAL *Calidad, MATERIAL* Material, 
00127                     CAMARA * /*Camara*/)
00128 {
00129     //gluQuadricDrawStyle(Textura_glu, GLU_SILHOUETTE); // Y esta vaina que?
00130 
00131     //- Pintado de bordes --------------------------------------------------
00132     COLOR cb(1, 0, 0);
00133 
00134     if ( Calidad->con_bordes ) {
00135         Calidad->activar_bordes_gl(cb, Material);
00136         // Voy a poner caras
00137         gluQuadricDrawStyle(Textura_glu, (GLenum)GLU_LINE);  
00138         gluQuadricOrientation(Textura_glu, (GLenum)GLU_OUTSIDE);
00139         gluQuadricNormals(Textura_glu, (GLenum)GLU_FLAT);
00140         gluQuadricTexture(Textura_glu, GL_FALSE);
00141 
00142         PINTAR_CILINDRO_GL();
00143     }
00144 
00145     if ( Calidad->con_cajas ) PINTAR_MINMAX_GL();
00146 
00147     //- Pintado de caras ---------------------------------------------------
00148     COLOR c(1, 1, 1);
00149 
00150     if ( Calidad->con_caras ) {
00151         Material->activar_gl();
00152 
00153         // Voy a poner caras
00154         gluQuadricDrawStyle(Textura_glu, (GLenum)GLU_FILL);  
00155 
00156         gluQuadricOrientation(Textura_glu, (GLenum)GLU_OUTSIDE);
00157         //gluQuadricOrientation(Textura_glu, (GLenum)GLU_INSIDE);
00158 
00159         Calidad->activar_caras_gl(c, Material);
00160 
00161         switch ( Calidad->calidad_caras ) {
00162           case CVC_CONSTANTE: gluQuadricNormals(Textura_glu, (GLenum)GLU_FLAT);
00163             break;
00164           case CVC_SHADE:
00165             gluQuadricNormals(Textura_glu, (GLenum)GLU_SMOOTH);
00166             break;
00167           case CVC_FLAT: default:
00168             gluQuadricNormals(Textura_glu, (GLenum)GLU_FLAT);
00169             break;
00170         }
00171 
00172         if ( imagen && Calidad->con_textura ) {
00173             imagen->activar_gl();
00174             gluQuadricTexture(Textura_glu, GL_TRUE);
00175             glEnable(GL_TEXTURE_2D);
00176             Calidad->activar_textura_gl();
00177           }
00178           else if ( Calidad->con_caustics ) {
00179             gluQuadricTexture(Textura_glu, GL_TRUE);
00180             Calidad->activar_textura_gl();
00181           }
00182           else {
00183             gluQuadricTexture(Textura_glu, GL_FALSE);
00184             glDisable(GL_TEXTURE_2D);
00185         }
00186 
00187         ACTIVAR_POLYGON_OFFSET();
00188         PINTAR_CILINDRO_GL();
00189         DESACTIVAR_POLYGON_OFFSET();
00190         glDisable(GL_TEXTURE_2D);
00191     }
00192 
00193 }
00194 #endif
00195 
00196 void
00197 CILINDRO::pintar_aqz(FILE *fd)
00198 {
00199     fprintf(fd, "    // Pilas: No hay pintar_aqz... \n");
00200     fprintf(fd, "    geometria ESFERA 1 \"\"\n");
00201 }
00202 
00203 void
00204 CILINDRO::pintar_povray(FILE *fd)
00205 {
00206     fprintf(fd,
00207         "cone {\n"
00208         "    <0, 0, %f>, %f\n"
00209         "    <0, 0, %f>, %f\n",
00210         -_altura/2, _radio1, _altura/2, _radio2
00211     );
00212 }
00213 
00214 GEOMETRIA *
00215 CILINDRO::crear_copia(void)
00216 {
00217     CILINDRO *e;
00218 
00219     e = new CILINDRO(_radio1, _radio2, _altura);
00220     if ( !e ) return NULL;
00221 
00222     (*e) = (*this);
00223 
00224     #ifdef GL_ENABLED
00225     e->Textura_glu = gluNewQuadric();
00226 
00227     if ( imagen ) {
00228         e->imagen = imagen->copie();
00229         if ( !e->imagen ) {
00230             fprintf(stderr,
00231             "<CILINDRO> Warning: no se pudo replicar una textura.\n");
00232             fflush(stderr);
00233         }
00234     }
00235     #endif
00236 
00237     return (GEOMETRIA *)e;
00238 }
00239 
00240 //===========================================================================
00241 //= EOF                                                                     =
00242 //===========================================================================
00243 

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.