Documentation


Octree.h

Go to the documentation of this file.
00001 /***************************************************************************
00002                           x3d_octree.h  -  description
00003                              -------------------
00004     begin                : Tue Mar 23 2004
00005     copyright            : (C) 2004 by Mathieu Coquerelle
00006     email                : mathieu.coquerelle@imag.fr
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #ifndef X3D_OCTREE_H
00019 #define X3D_OCTREE_H
00020 
00021 #include "octree_instanciation.h"
00022 
00023 
00024 
00025 namespace animal
00026 {
00027 namespace octree
00028 {
00029 
00030 enum { OCTREE_DM_NOTHING=0, OCTREE_DM_VERTICES=1, OCTREE_DM_FRAMES=2 };
00031         
00032         class Octree : 
00033             public TempOctree
00034         {
00035             public:
00036                 Octree( Vec3d bboxMin, Vec3d bboxMax, MFVec3f *points, MFVec3f normals, unsigned int nMaxPointsPerCell = 1 );
00037                 ~Octree( );
00038 
00039                 
00040                 
00041                 unsigned int getNMaxPointsPerCell();
00047                 void setNMaxPointsPerCell( unsigned int n );
00048 
00049                 
00053                 void setPositionMethod( int m );
00054                 int getPositionMethod() const;
00055                 
00056                 
00057                 //void subdivide( Cell *cell );
00061                 void subdivideDeformed( Cell *cell );
00062                 
00063                 
00067                 void subdivideRecDeformed( Cell *cell );
00068 
00069                                     
00073                 void simplify( Cell *cell );
00074 
00075                 
00079                 static void updateFrame( Cell *cell );
00080                 static void updateFrames( Cell *cell );
00081                 void updateFrames( ConstrainedVertex* vertex, Cell *cell, unsigned int vPos );
00082                 void updateCellFrames( Cell *cell );
00083                 
00084                 
00085                 void movedRecLeaves( Cell *cell );
00086                 static void moved( Cell *cell );
00087                 
00088                 void structureChangedRecLeaves( Cell *cell );
00089                 static void structureChanged( Cell *cell );
00090                 
00091                 
00095                 static void updateVertexInformationsRec( Cell *cell );
00096                 static void updateVertexInformationsRecLeaves( Cell *cell );
00097                 static void updateVertexInformations( Cell *cell );
00098                 
00099                 void updateCellsData( Cell *cell );
00100                 
00101                 static void updateInfluenceMapsRecLeaves( Cell *cell );
00102                 static void updateInfluenceMaps( Cell *cell );
00103                 
00104                 
00105                 
00106                 void directManipulation( SFVec3fCellConstrained* vertex, Vec3d newPosition );
00107                 
00108 
00109                 std::vector<Vec3d> getNormals() const;
00110                 OctreeDataPoints& getMeshVertices();
00111 
00112                 // Wether to update or not the frames
00113 //              void setFreeVertices( bool );
00114                 void setFreeFrames( bool );
00115                 bool haveFreeFrames( ) const { return _freeFrames; };
00116                 
00117                 //
00118                 // Manipulate on VERT and/or FRAMES
00119                 //
00120                 void setDMMethod( int method );
00121 
00122             private:
00123                 int createOctree( Cell *cell, std::deque<SFVec3f*> pointsIn );
00124                 
00125                 int createOctree( Cell *cell );
00126                 
00127                 unsigned int _nMaxPointsPerCell;
00128 
00129                 void updateHierarchy( Cell *cell );             
00130                 
00131                 int _optionPositionMethod;
00132                 
00133                 bool isLeaf( Cell *cell ) { return cell->isLeaf(); };
00134                 
00135                 // true means do optimise on vertices
00136 //              bool _DMVertices;
00137                 bool _freeFrames;
00138                 
00139                 int _DMMethod;
00140                 
00141                 
00142 
00143             public:
00144                                 
00145 
00146         };
00147         
00148 static inline bool isLeaf( Cell *cell ) { return cell->isLeaf(); };
00149 
00153 Cell* getVertexFreeCell( Cell* cStart, const ConstrainedVertex* cv );
00154 
00155 
00156 
00157 }
00158 }
00159 
00160 
00161                 
00162 #endif
00163  
00164 

Generated on Thu Dec 23 13:52:26 2004 by doxygen 1.3.6