VisualVisitor.h

Go to the documentation of this file.
00001 /******************************************************************************
00002 *       SOFA, Simulation Open-Framework Architecture, version 1.0 beta 3      *
00003 *                (c) 2006-2008 MGH, INRIA, USTL, UJF, CNRS                    *
00004 *                                                                             *
00005 * This library is free software; you can redistribute it and/or modify it     *
00006 * under the terms of the GNU Lesser General Public License as published by    *
00007 * the Free Software Foundation; either version 2.1 of the License, or (at     *
00008 * your option) any later version.                                             *
00009 *                                                                             *
00010 * This library is distributed in the hope that it will be useful, but WITHOUT *
00011 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       *
00012 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
00013 * for more details.                                                           *
00014 *                                                                             *
00015 * You should have received a copy of the GNU Lesser General Public License    *
00016 * along with this library; if not, write to the Free Software Foundation,     *
00017 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.          *
00018 *******************************************************************************
00019 *                               SOFA :: Modules                               *
00020 *                                                                             *
00021 * Authors: The SOFA Team and external contributors (see Authors.txt)          *
00022 *                                                                             *
00023 * Contact information: contact@sofa-framework.org                             *
00024 ******************************************************************************/
00025 #ifndef SOFA_SIMULATION_TREE_VISUALACTION_H
00026 #define SOFA_SIMULATION_TREE_VISUALACTION_H
00027 
00028 #include <sofa/simulation/common/Node.h>
00029 #include <sofa/simulation/common/Visitor.h>
00030 #include <sofa/core/VisualModel.h>
00031 #include <sofa/helper/system/gl.h>
00032 #include <iostream>
00033 #include <sofa/defaulttype/VecTypes.h>
00034 #include <sofa/defaulttype/RigidTypes.h>
00035 
00036 using std::cerr;
00037 using std::endl;
00038 
00039 namespace sofa
00040 {
00041 
00042 namespace simulation
00043 {
00044 
00045 class VisualVisitor : public Visitor
00046 {
00047 public:
00048     virtual void processVisualModel(simulation::Node* node, core::VisualModel* vm) = 0;
00049     virtual void processObject(simulation::Node* /*node*/, core::objectmodel::BaseObject* /*o*/) {}
00050 
00051     virtual Result processNodeTopDown(simulation::Node* node)
00052     {
00053         for_each(this, node, node->object, &VisualVisitor::processObject);
00054         for_each(this, node, node->visualModel, &VisualVisitor::processVisualModel);
00055         return RESULT_CONTINUE;
00056     }
00057 
00060     virtual const char* getCategoryName() const { return "visual"; }
00061 };
00062 
00063 class VisualDrawVisitor : public VisualVisitor
00064 {
00065 public:
00066     typedef core::VisualModel::Pass Pass;
00067     Pass pass;
00068     bool hasShader;
00069     VisualDrawVisitor(Pass pass = core::VisualModel::Std)
00070     : pass(pass)
00071     {
00072     }
00073     virtual Result processNodeTopDown(simulation::Node* node);
00074     virtual void processNodeBottomUp(simulation::Node* node);
00075     virtual void fwdVisualModel(simulation::Node* node, core::VisualModel* vm);
00076     virtual void processVisualModel(simulation::Node* node, core::VisualModel* vm);
00077     virtual void processObject(simulation::Node* node, core::objectmodel::BaseObject* o);
00078     virtual void bwdVisualModel(simulation::Node* node, core::VisualModel* vm);
00079 };
00080 
00081 class VisualUpdateVisitor : public VisualVisitor
00082 {
00083 public:
00084     virtual void processVisualModel(simulation::Node*, core::VisualModel* vm);
00085 };
00086 
00087 class VisualInitVisitor : public VisualVisitor
00088 {
00089 public:
00090     virtual void processVisualModel(simulation::Node*, core::VisualModel* vm);
00091 };
00092 
00093 class VisualComputeBBoxVisitor : public Visitor
00094 {
00095 public:
00096   double minBBox[3];
00097   double maxBBox[3];
00098     VisualComputeBBoxVisitor();
00099     
00100     virtual void processMechanicalState(simulation::Node*, core::componentmodel::behavior::BaseMechanicalState* vm);
00101     virtual void processVisualModel(simulation::Node*, core::VisualModel* vm);
00102 
00103     virtual Result processNodeTopDown(simulation::Node* node)
00104     {     
00105       for_each(this, node, node->mechanicalState, &VisualComputeBBoxVisitor::processMechanicalState);
00106       for_each(this, node, node->visualModel,     &VisualComputeBBoxVisitor::processVisualModel);
00107       
00108       return RESULT_CONTINUE;
00109     }
00110     
00111     
00112 };
00113 
00114 } // namespace simulation
00115 
00116 } // namespace sofa
00117 
00118 #endif

Generated on Sun Nov 23 04:05:47 2008 for Sofa by  doxygen 1.5.7.1