00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "toolkits/geom/geometria.h"
00023
00024 #ifdef VEL_ROSITA
00025 #include "toolkits/geom/flecha.h"
00026 #endif
00027
00028 #include <stdio.h>
00029
00030
00031
00032
00033
00034 FLECHA::FLECHA(double l_flecha,double l_punta,double g_cuerpo,double g_punta)
00035 : _punta(g_punta, 0, l_punta),
00036 _cuerpo(g_cuerpo, g_cuerpo, l_flecha-l_punta)
00037 {
00038 largo_flecha = l_flecha;
00039 largo_punta = l_punta;
00040 grosor_cuerpo = g_cuerpo;
00041 grosor_punta = g_punta;
00042 }
00043
00044 FLECHA::~FLECHA()
00045 {
00046 ;
00047 }
00048
00049 void
00050 FLECHA::minmax(VECTOR *min, VECTOR *max)
00051 {
00052 double r = MAXIMO(grosor_cuerpo, grosor_punta);
00053
00054 min->x = -largo_flecha/2;
00055 min->y = -r;
00056 min->z = -r;
00057 max->x = largo_flecha/2;
00058 max->y = r;
00059 max->z = r;
00060 }
00061
00062 #ifdef GL_ENABLED
00063 void
00064 FLECHA::pintar_gl(CALIDAD_VISUAL *Calidad, MATERIAL* Material,
00065 CAMARA * )
00069 {
00070 glPushMatrix();
00071
00072 VECTOR p1(-largo_flecha/2, 0, 0), p2(largo_flecha/2, 0, 0);
00073
00074 glShadeModel(GL_FLAT);
00075
00076 if ( Calidad->con_cajas ) PINTAR_MINMAX_GL();
00077
00078
00079 COLOR cb(1, 0, 0);
00080
00081 if ( Calidad->con_bordes ) {
00082 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
00083 Calidad->activar_bordes_gl(cb, Material);
00084 PINTAR_VECTOR_GL(p1, p2, grosor_cuerpo, largo_punta, grosor_punta);
00085 }
00086
00087
00088 COLOR c(1, 1, 1);
00089
00090 if ( Calidad->con_caras ) {
00091 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
00092 Material->activar_gl();
00093 Calidad->activar_caras_gl(c, Material);
00094 if ( Calidad->con_caustics ) {
00095 Calidad->activar_textura_gl();
00096 }
00097 ACTIVAR_POLYGON_OFFSET();
00098 PINTAR_VECTOR_GL(p1, p2, grosor_cuerpo, largo_punta, grosor_punta);
00099 DESACTIVAR_POLYGON_OFFSET();
00100 }
00101
00102 glPopMatrix();
00103 }
00104 #endif
00105
00106 void
00107 FLECHA::pintar_aqz(FILE *fd)
00108 {
00109 fprintf(fd, " // Pilas: No hay pintar_aqz... \n");
00110 fprintf(fd, " geometria ESFERA 1 \"\"\n");
00111 }
00112
00113 void
00114 FLECHA::pintar_povray(FILE *fd)
00115 {
00116 VECTOR p1(-largo_flecha/2, 0, 0), p2(largo_flecha/2, 0, 0);
00117 PINTAR_VECTOR_POVRAY(fd, p1, p2, grosor_cuerpo, largo_punta, grosor_punta);
00118 }
00119
00120 void
00121 FLECHA::anexar_textura(IMAGEN * )
00122 {
00123 ;
00124 }
00125
00126 int
00127 FLECHA::clasificar_punto(VECTOR )
00128 {
00129 return -1;
00130 }
00131
00132 GEOMETRIA *
00133 FLECHA::crear_copia(void)
00134 {
00135 return NULL;
00136 }
00137
00138
00139
00140
00141