Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

SimpleX3DGLScene.cpp

Go to the documentation of this file.
00001 #include "SimpleX3DGLScene.h"
00002 #include "DefaultLoader.h"
00003 #include "BboxUpdater.h"
00004 #include "GLConverter.h"
00005 #include "GLUpdater.h"
00006 #include "GLRenderer.h"
00007 #include "MemReleaser.h"
00008 #include "Scene.h"
00009 #include "GLScene.h"
00010 #include "Bbox.h"
00011 
00012 #include <iostream>
00013 #include <time.h>
00014 
00015 using namespace std;
00016 using namespace X3DTK;
00017 
00018 SimpleX3DGLScene::SimpleX3DGLScene()
00019 : s(0), gs(0)
00020 {
00021   _loader = new DefaultLoader();
00022   _bboxupdater = new BboxUpdater();
00023   _converter = new GLConverter();
00024   _renderer = new GLRenderer();
00025   _releaser = new MemReleaser();
00026 }
00027 
00028 SimpleX3DGLScene::~SimpleX3DGLScene()
00029 {
00030   _releaser->release(s);
00031   _releaser->release(gs);  
00032   s = 0;
00033   gs = 0;
00034 
00035   delete _loader;
00036   delete _bboxupdater;
00037   delete _converter;
00038   delete _renderer;
00039   delete _releaser;
00040 }
00041 
00042 void SimpleX3DGLScene::setLoader(X3DLoader *loader)
00043 {
00044   _loader = loader;
00045 }
00046 
00047 void SimpleX3DGLScene::setBboxUpdater(X3DBboxUpdater *bboxUpdater)
00048 {
00049   _bboxupdater = bboxUpdater;
00050 }
00051 
00052 void SimpleX3DGLScene::setGLCreator(X3DGLCreator *creator)
00053 {
00054   _converter->setGLCreator(creator);
00055 }
00056 
00057 void SimpleX3DGLScene::setGLUpdater(X3DGLUpdater *updater)
00058 {
00059   _converter->setGLUpdater(updater);
00060 }
00061 
00062 void SimpleX3DGLScene::setGLRenderer(X3DGLRenderer *renderer)
00063 {
00064   _renderer = renderer;
00065 }
00066 
00067 void SimpleX3DGLScene::setMemReleaser(X3DMemReleaser *memReleaser)
00068 {
00069   _releaser = memReleaser;
00070 }
00071   
00072 void SimpleX3DGLScene::load(const char *file)
00073 {
00074   _releaser->release(s);
00075   _releaser->release(gs);  
00076 
00077   cout << "loading..." << endl;
00078   clock_t begin = clock();
00079   
00080   s = _loader->load(file);
00081   
00082   clock_t end = clock();
00083   cout << "loaded in " << (end - begin)/1000 << endl;
00084  
00085   _bboxupdater->update(s, true);
00086 
00087   if (s != 0)
00088   {
00089     SFVec3f center = s->getBboxCenter();
00090     SFVec3f size = s->getBboxSize();
00091 
00092     SFVec3f A = center + 0.5f*size;
00093     SFVec3f B = center - 0.5f*size;
00094 
00095     if (A.x < B.x)
00096     {
00097       min.x = A.x;
00098       max.x = B.x;
00099     }  
00100     else
00101     {
00102       min.x = B.x;  
00103       max.x = A.x;
00104     }  
00105   
00106     if (A.y < B.y)
00107     {
00108       min.y = A.y;
00109       max.y = B.y;
00110     }  
00111     else
00112     {
00113       min.y = B.y;  
00114       max.y = A.y;
00115     }
00116   
00117     if (A.z < B.z)
00118     {
00119       min.z = A.z;
00120       max.z = B.z;
00121     }  
00122     else
00123     {
00124       min.z = B.z;  
00125       max.z = A.z;
00126     }  
00127    
00128     gs = _converter->convert(s);
00129   }
00130 }
00131 
00132 void SimpleX3DGLScene::draw()
00133 {
00134   _renderer->render(gs);
00135 }
00136 
00137 void SimpleX3DGLScene::release()
00138 {
00139   _releaser->release(s);
00140   _releaser->release(gs);
00141   s = 0;
00142   gs = 0;  
00143 }

Generated on Wed May 14 10:03:11 2003 for X3DToolKit by doxygen1.3