PrintVisitor.cpp
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 #include <sofa/simulation/common/PrintVisitor.h>
00026 #include <sofa/helper/Factory.h>
00027 #include <sofa/simulation/common/Node.h>
00028
00029 namespace sofa
00030 {
00031
00032 namespace simulation
00033 {
00034
00035
00036 template<class T>
00037 void PrintVisitor::processObject(T obj)
00038 {
00039 std::cout << ' ' << obj->getName() << '(' << sofa::helper::gettypename(typeid(*obj)) << ')';
00040 }
00041
00042 template<class Seq>
00043 void PrintVisitor::processObjects(Seq& list, const char* name)
00044 {
00045 if (list.empty()) return;
00046 for (int i=0;i<=level;i++)
00047 std::cout << "| ";
00048 std::cout << name << ":";
00049
00050
00051 for (typename Seq::iterator it = list.begin(); it != list.end(); ++it)
00052 {
00053 typename Seq::value_type obj = *it;
00054 this->processObject<typename Seq::value_type>(obj);
00055 }
00056 std::cout << std::endl;
00057 }
00058
00059 Visitor::Result PrintVisitor::processNodeTopDown(simulation::Node* node)
00060 {
00061 for (int i=0;i<level;i++)
00062 std::cout << "| ";
00063 std::cout << "+-";
00064 std::cout << node->getName()<<std::endl;
00065 ++level;
00066 processObjects(node->mechanicalState,"MechanicalState");
00067 processObjects(node->mechanicalMapping,"MechanicalMapping");
00068 processObjects(node->solver,"Solver");
00069 processObjects(node->mass,"Mass");
00070 processObjects(node->topology,"Topology");
00071 processObjects(node->forceField,"ForceField");
00072 processObjects(node->interactionForceField,"InteractionForceField");
00073 processObjects(node->constraint,"Constraint");
00074 processObjects(node->contextObject,"ContextObject");
00075
00076 processObjects(node->mapping,"Mapping");
00077 processObjects(node->behaviorModel,"BehaviorModel");
00078 processObjects(node->visualModel,"VisualModel");
00079 processObjects(node->collisionModel,"CollisionModel");
00080 processObjects(node->collisionPipeline,"CollisionPipeline");
00081 processObjects(node->unsorted,"unsorted");
00082
00083 return RESULT_CONTINUE;
00084 }
00085
00086 void PrintVisitor::processNodeBottomUp(simulation::Node* )
00087 {
00088 --level;
00089 }
00090
00091 }
00092
00093 }
00094