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 #include "ModelViewTraverser.h" 00014 00017 #include "nvsgcommon.h" 00018 00019 #include "ModelViewTraverser.h" 00020 #include "nvsg/ViewState.h" 00021 00022 namespace nvtraverser { 00023 00025 00032 class AppTraverser : public ModelViewTraverser 00033 { 00034 public: 00036 NVSG_API AppTraverser(); 00037 00038 protected: 00040 NVSG_API virtual ~AppTraverser(); 00041 00043 NVSG_API virtual void doApply( const nvsg::ViewState *viewState, const nvsg::Scene *scene ); 00044 00045 // handler routine overrides 00046 NVSG_API virtual void handleGeoNode( const nvsg::GeoNode *p ); 00047 NVSG_API virtual void handleAnimatedTransform( const nvsg::AnimatedTransform *p ); 00048 NVSG_API virtual void handleAnimatedQuads( const nvsg::AnimatedQuads *p ); 00049 NVSG_API virtual void handleAnimatedTriangles( const nvsg::AnimatedTriangles *p ); 00050 NVSG_API virtual void handleSkinnedTriangles( const nvsg::SkinnedTriangles *p ); 00051 NVSG_API virtual void handleCgFx( const nvsg::CgFx *p ); 00052 NVSG_API virtual void handleHighlightBox( const nvsg::HighlightBox *p, const nvsg::GeoSet * geoSet); 00053 00054 // traverseLight override 00055 NVSG_API virtual void traverseLight( const nvsg::LightSource *p ); 00056 00057 // data accessible for derived classes 00058 bool m_bApplyingCgFx; 00059 size_t m_animationFrame; 00060 00061 private: 00062 // Some data to cache so we can decide if we really have to apply the animation data. 00063 // This does not help to prevent from unneeded traversal steps since we can't 00064 // decide for derived classes. 00065 const nvsg::ViewState * m_pLastViewState; 00066 const nvsg::Scene * m_pLastScene; 00067 size_t m_lastAnimationFrame; 00068 bool m_bApplyAnimationKey; 00069 00070 private: 00071 // Calculate the bounding box of a geometry. 00072 NVSG_API void calcHighlightBox( 00073 const nvsg::HighlightBox *p // HighlightBox to hold box dimensions 00074 , const nvsg::GeoSet *geo // geometry to be highlighted 00075 ); 00076 00077 }; 00078 00079 }