src/rcrt/loaders/CameraLoader.cpp

Go to the documentation of this file.
00001 #include "CameraLoader.h"
00002 #include "conversion.hpp"
00003 
00004 using namespace std;
00005 
00006 namespace rcrt
00007 {
00008 
00009 CameraLoader::CameraLoader(string camFile):XMLLoader(camFile),initialised(false)
00010 {
00011 }
00012 
00013 CameraLoader::~CameraLoader()
00014 {
00015 }
00016 
00017 void CameraLoader::init()
00018 {
00019         initialised = true;
00020         nextStartTag("camera");
00021         name = parser.getAttributeValue("","name");
00022         nextStartTag("res");
00023         int resX = convertTo<int>(parser.getAttributeValue("","x"));
00024         int resY = convertTo<int>(parser.getAttributeValue("","y"));
00025         nextStartTag("angle");
00026         float angle = convertTo<float>(parser.getAttributeValue("","val"));
00027         camera.setResolution(resX, resY);
00028         camera.setAngle(angle);
00029 }
00030 
00031 Camera* CameraLoader::getCamera()
00032 {
00033         return &camera;
00034 }
00035 
00036 bool CameraLoader::nextFrame()
00037 {
00038         if(!initialised)
00039                 init();
00040         if(eof) return false;
00041         int eventType = parser.getEventType();
00042         string tagName = parser.getName();
00043         if(eventType == XmlPullParser::START_TAG &&
00044                         tagName == "frame"){
00045                 currentFrame = convertTo<int>(parser.getAttributeValue("","no"));
00046         } else {
00047                 eof = !nextStartTag("frame");
00048                 if(!eof) currentFrame = convertTo<int>(parser.getAttributeValue("","no"));
00049         }
00050         if(!eof){
00051                 nextStartTag("loc");
00052                 Point3D loc(convertTo<float>(parser.getAttributeValue("","x")),
00053                                 convertTo<float>(parser.getAttributeValue("","y")),
00054                                 convertTo<float>(parser.getAttributeValue("","z")));
00055                 nextStartTag("dir");
00056                 Vec3D dir(convertTo<float>(parser.getAttributeValue("","x")),
00057                                 convertTo<float>(parser.getAttributeValue("","y")),
00058                                 convertTo<float>(parser.getAttributeValue("","z")));
00059                 nextStartTag("up");
00060                 Vec3D up(convertTo<float>(parser.getAttributeValue("","x")),
00061                                 convertTo<float>(parser.getAttributeValue("","y")),
00062                                 convertTo<float>(parser.getAttributeValue("","z")));
00063         
00064                 camera.update(loc, dir, up);
00065                 return true;
00066         } else {
00067                 return false;
00068         }
00069 }
00070 
00071 bool CameraLoader::goToFrame(const int& n)
00072 {
00073         if(!initialised)
00074                 init();
00075         
00076         if(n < currentFrame)
00077                 return false;//TODO error handling?
00078         if(n == currentFrame)
00079                 return true;
00080         string tagName = parser.getName();
00081         while(currentFrame < n && !eof){
00082                 eof = !nextStartTag("frame");
00083                 currentFrame = convertTo<int>(parser.getAttributeValue("","no"));
00084         }
00085         if(!eof) {
00086                 nextStartTag("loc");
00087                 Point3D loc(convertTo<float>(parser.getAttributeValue("","x")),
00088                                 convertTo<float>(parser.getAttributeValue("","y")),
00089                                 convertTo<float>(parser.getAttributeValue("","z")));
00090                 nextStartTag("dir");
00091                 Vec3D dir(convertTo<float>(parser.getAttributeValue("","x")),
00092                                 convertTo<float>(parser.getAttributeValue("","y")),
00093                                 convertTo<float>(parser.getAttributeValue("","z")));
00094                 nextStartTag("up");
00095                 Vec3D up(convertTo<float>(parser.getAttributeValue("","x")),
00096                                 convertTo<float>(parser.getAttributeValue("","y")),
00097                                 convertTo<float>(parser.getAttributeValue("","z")));
00098         
00099                 camera.update(loc, dir, up);
00100                 return true;
00101         } else {
00102                 return false;
00103         }
00104 }
00105 
00106 
00107 }

Generated on Thu Jan 31 19:26:19 2008 for RenderingCompetitionRayTracer by  doxygen 1.5.3