VisualVisitor.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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* , core::objectmodel::BaseObject* ) {}
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 }
00115
00116 }
00117
00118 #endif