00001 //=========================================================================== 00002 //= octree_n.h Diciembre de 1999 = 00003 //=-------------------------------------------------------------------------= 00004 //= Definicion de la clase estructural de OCTREE (NODO_OCTREE) = 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 #ifndef __NODO_OCTREE__ 00023 #define __NODO_OCTREE__ 00024 00025 #include "jed_defs.h" 00026 #include "toolkits/geom/geometria.h" 00027 00028 class NODO_OCTREE { 00029 private: 00030 BOOLEAN relleno; 00031 NODO_OCTREE *hijos; 00032 00033 void compactar(void); 00034 00035 public: 00036 void init(void); 00037 void calcular(GEOMETRIA *Fuente, int nivel, VECTOR origen, double lado); 00038 #ifdef GL_ENABLED 00039 void pintar_gl(VECTOR origen, double lado); 00040 #endif 00041 void elim(void); 00042 void leer(FILE *fd); 00043 void escribir(FILE *fd); 00044 }; 00045 00046 extern int OFFSET_octree; 00047 extern BYTE BYTE_octree; 00048 00049 inline char 00050 leer_elemento_octree(FILE *fd) 00053 { 00054 char d; 00055 00056 if ( (OFFSET_octree % 4) == 0) lea_BYTE(&BYTE_octree, fd); 00057 switch ( OFFSET_octree ) { 00058 case 0: d = (char)((BYTE_octree & 0xC0) >> 6); break; 00059 case 1: d = (char)((BYTE_octree & 0x30) >> 4); break; 00060 case 2: d = (char)((BYTE_octree & 0x0C) >> 2); break; 00061 case 3: d = (char)((BYTE_octree & 0x03)); break; 00062 default: d = 3; break; 00063 } 00064 OFFSET_octree++; 00065 if ( OFFSET_octree >= 4 ) OFFSET_octree = 0; 00066 00067 return d; 00068 } 00069 00070 inline void 00071 escribir_elemento_octree(FILE *fd, int elem) 00075 { 00076 //char d[4] = {'*', '-', '(', ')'}; 00077 //fprintf(fd, "%c", d[elem]); 00078 BYTE n; 00079 00080 n = (BYTE)((elem & 0x03) << 2*(3-OFFSET_octree)); 00081 BYTE_octree |= n; 00082 00083 OFFSET_octree++; 00084 00085 if ( OFFSET_octree >= 4 ) { 00086 fwrite(&BYTE_octree, sizeof(BYTE), 1, fd); 00087 BYTE_octree = 0x00; 00088 OFFSET_octree = 0; 00089 } 00090 } 00091 00092 #endif // __NODO_OCTREE__ 00093 00094 //=========================================================================== 00095 //= EOF = 00096 //=========================================================================== 00097 00098