Documentation


myGLRendererGroupingVisitor.cpp

Go to the documentation of this file.
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 */

Generated on Thu Dec 23 13:52:26 2004 by doxygen 1.3.6