Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

StrippingTraverser.h

Go to the documentation of this file.
00001 // Copyright NVIDIA Corporation 2002-2004
00002 // TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
00003 // *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
00004 // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
00005 // AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
00006 // BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
00007 // WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
00008 // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
00009 // ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
00010 // BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES 
00011 
00012 #pragma once
00013 
00015 #include  <list>
00016 #include  <set>
00017 
00018 #include "nvsgcommon.h"
00019 
00020 #include  "nvsg/nvsg.h"
00021 #include  "nvsg/Face.h"
00022 #include  "nvtraverser/Traverser.h"
00023 
00024 namespace nvtraverser
00025 {  
00026 
00028 
00030   class StrippingTraverser : public Traverser
00031   {
00032     public:
00034       NVSG_API StrippingTraverser(void);
00035 
00037 
00038       void  getMinimalLengths( size_t &triStripLength, size_t &quadStripLength ) const;
00039 
00041 
00042       void  setMinimalLengths( size_t triStripLength, size_t quadStripLength );
00043 
00044     protected:
00046       NVSG_API virtual ~StrippingTraverser(void);
00047 
00049       NVSG_API virtual void  handleAnimatedQuads( 
00050         const nvsg::AnimatedQuads *p      
00051       );
00052 
00054       NVSG_API virtual void  handleAnimatedTriangles( 
00055         const nvsg::AnimatedTriangles *p  
00056       );
00057 
00059       NVSG_API virtual void  handleGeoNode( 
00060         const nvsg::GeoNode *p            
00061       );
00062 
00064       NVSG_API virtual void  handleQuads(
00065         const nvsg::Quads *p              
00066       );
00067 
00069       NVSG_API virtual void  handleSkinnedTriangles(
00070         const nvsg::SkinnedTriangles *p   
00071       );
00072 
00074       NVSG_API virtual void  handleTriangles(
00075         const nvsg::Triangles *p          
00076       );
00077 
00078     private:
00079       void    addQuadStrip( const std::list<unsigned int> &vertexList );
00080       void    addTriangle( const nvsg::IndexSet &strip, size_t i0, size_t i1, size_t i2 );
00081       void    addTriStrip( const std::list<unsigned int> &vertexList );
00082       void    clearFaceData( void );
00083       void    connectFaces( const nvsg::Face3 *faces, size_t fi, size_t i0, size_t i1 );
00084       void    connectFaces( const nvsg::Face4 *faces, size_t fi, size_t i0, size_t i1 );
00085       void    copyVertexAttributeData( const nvsg::GeoSet *pFrom, nvsg::GeoSet *pTo );
00086       void    cutConnections( const std::list<size_t> &list, size_t vpf );
00087       void    determineList( const nvsg::Face3 *faces, size_t fi, size_t le, std::list<size_t> &faceList,
00088                              std::list<unsigned int> &vertexList );
00089       void    determineList( const nvsg::Face4 *faces, size_t fi, size_t le, std::list<size_t> &faceList,
00090                              std::list<unsigned int> &vertexList );
00091 
00092     private:
00093       std::vector<size_t>                m_faceConnectionCounts;
00094       std::vector<size_t>                m_faceConnections;
00095       std::set<size_t>                   m_faceSets[5];
00096       size_t                             m_minimalQuadStrip;
00097       size_t                             m_minimalTriStrip;
00098       std::vector<nvsg::Face4>                 m_quads;
00099       std::vector<nvsg::IndexSet>              m_strips;
00100       std::vector<nvsg::Face3>                 m_triangles;
00101       std::vector<std::list<size_t> >    m_verticesToFaceLists;
00102 
00103       std::vector<std::pair<const nvsg::Quads*,std::pair<const nvsg::QuadStrips*,const nvsg::Quads*> > >         m_quadReplaces;
00104       std::vector<std::pair<const nvsg::Triangles*,std::pair<const nvsg::TriStrips*,const nvsg::Triangles*> > >  m_triReplaces;
00105   };
00106 
00107   inline  void StrippingTraverser::getMinimalLengths( size_t &triStripLength, size_t &quadStripLength ) const
00108   {
00109     triStripLength  = m_minimalTriStrip;
00110     quadStripLength = m_minimalQuadStrip;
00111   }
00112 
00113   inline  void  StrippingTraverser::setMinimalLengths( size_t triStripLength, size_t quadStripLength )
00114   {
00115     m_minimalTriStrip   = triStripLength;
00116     m_minimalQuadStrip  = quadStripLength;
00117   }
00118 }

Generated on Tue Mar 1 13:19:19 2005 for NVSGSDK by NVIDIA