AnimaL |
Tutorial |
Documentation |
00001 #include "myGLBbox.h" 00002 #include "myGLRendererStateVariables.h" 00003 #include "myGLRendererGroupingVisitor.h" 00004 00005 #include <X3DTK/private/GL_Group.h> 00006 #include <X3DTK/private/GL_StaticGroup.h> 00007 #include <X3DTK/private/GL_Transform.h> 00008 00009 00010 //#include <animal/X3DTK/X3D/frameNode/frameNode.h> 00011 00012 #include <iostream> 00013 #include <cmath> 00014 00015 using namespace std; 00016 00017 namespace X3DTK 00018 { 00019 namespace GL 00020 { 00021 00022 MyRendererGroupingVisitor::MyRendererGroupingVisitor() 00023 : GroupingVisitor() 00024 { 00025 define(Recorder<Transform>::getEnterFunction(&MyRendererGroupingVisitor::enterTransform)); 00026 define(Recorder<Transform>::getLeaveFunction(&MyRendererGroupingVisitor::leaveTransform)); 00027 00028 // defineEnterFunction(&MyRendererGroupingVisitor::enterTransform); 00029 // defineLeaveFunction(&MyRendererGroupingVisitor::leaveTransform); 00030 // defineEnterFunction(&MyRendererGroupingVisitor::enterFrameNode); 00031 // defineLeaveFunction(&MyRendererGroupingVisitor::leaveFrameNode); 00032 } 00033 00034 void MyRendererGroupingVisitor::enterTransform(Transform *T) 00035 { 00036 // StateVariables assignation. 00037 MyRendererStateVariables * stateVariables = Singleton<MyRendererStateVariables>::getInstance(); 00038 X3D::X3DNode * X3D_N = T->getX3DReference (); 00039 if (X3D::X3DBoundedObject * X3DBN = dynamic_cast<X3D::X3DBoundedObject *>(X3D_N)) 00040 { 00041 if (stateVariables->boundedObject==X3DBN) 00042 { 00043 GL::MyGLBbox bbox; 00044 bbox.setSize(X3DBN->getBBoxSize()); 00045 bbox.setCenter(X3DBN->getBBoxCenter()); 00046 bbox.draw(); 00047 } 00048 } 00049 glMatrixMode(GL_MODELVIEW); 00050 glPushMatrix(); 00051 glMultMatrixf(&T->getTransformMatrix().front()); 00052 } 00053 00054 void MyRendererGroupingVisitor::leaveTransform(Transform *) 00055 { 00056 glMatrixMode(GL_MODELVIEW); 00057 glPopMatrix(); 00058 } 00059 00060 //void MyRendererGroupingVisitor::enterFrameNode(GLFrameNode *T) 00061 //{ 00062 // X3D::X3DNode * X3D_N = T->getX3DReference (); 00063 // if (X3D::FrameNode * E = dynamic_cast<X3D::FrameNode *>(X3D_N)) 00064 // { 00065 // glMatrixMode(GL_MODELVIEW); 00066 // glPushMatrix(); 00067 // glMultMatrixd(E->matrix()); 00068 // SFVec3f scale = E->getScale(); 00069 // glScalef(scale.x, scale.y, scale.z); 00070 // SFRotation rot = E->getScaleOrientation(); 00071 // glRotatef(rot.angle*180/M_PI, rot.x, rot.y, rot.z); 00072 // } 00073 // //std::cerr<<"MyRendererGroupingVisitor::enterFrameNode"<<std::endl; 00074 // 00075 //} 00076 // 00077 //void MyRendererGroupingVisitor::leaveFrameNode(GLFrameNode * T) 00078 //{ 00079 // //std::cerr<<"MyRendererGroupingVisitor::leaveFrameNode"<<std::endl; 00080 // 00081 // T->draw(); 00082 // 00083 // // StateVariables assignation. 00084 // MyRendererStateVariables * stateVariables = GraphTraversal::getInstanceOf<MyRendererStateVariables>(); 00085 // X3D::X3DNode * X3D_N = T->getX3DReference (); 00086 // if (X3D::X3DBoundedObject * X3DBN = dynamic_cast<X3D::X3DBoundedObject *>(X3D_N)) 00087 // { 00088 // if (stateVariables->boundedObject==X3DBN) 00089 // { 00090 // GL::MyGLBbox bbox; 00091 // bbox.setSize(X3DBN->getBBoxSize()); 00092 // bbox.setCenter(X3DBN->getBBoxCenter()); 00093 // bbox.draw(); 00094 // } 00095 // } 00096 // 00097 // glMatrixMode(GL_MODELVIEW); 00098 // glPopMatrix(); 00099 //} 00100 00101 } 00102 } 00103 00104 /* 00105 RendererGroupingVisitor::RendererGroupingVisitor() 00106 : GroupingVisitor() 00107 { 00108 define(Recorder<Transform>::getEnterFunction(&RendererGroupingVisitor::enterTransform)); 00109 define(Recorder<Transform>::getLeaveFunction(&RendererGroupingVisitor::leaveTransform)); 00110 } 00111 00112 void RendererGroupingVisitor::enterTransform(Transform *T) 00113 { 00114 glMatrixMode(GL_MODELVIEW); 00115 glPushMatrix(); 00116 glMultMatrixf(&T->getTransformMatrix().front()); 00117 } 00118 00119 void RendererGroupingVisitor::leaveTransform(Transform *) 00120 { 00121 glMatrixMode(GL_MODELVIEW); 00122 glPopMatrix(); 00123 } 00124 */