00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "ExManagerCam.h"
00024
00025 ExManagerCam::ExManagerCam(void)
00026 {
00027 Guard(ExManagerCam::ExManagerCam(void))
00028 m_CurrentCam=0;
00029 m_multiview=false;
00030 itcount=0;
00031 UnGuard
00032 }
00033
00034
00035 ExManagerCam::~ExManagerCam(void)
00036 {
00037 Guard(ExManagerCam::~ExManagerCam(void))
00038 UnGuard
00039 }
00040
00041 ExCCamera * ExManagerCam::GetCurrentCam(void)
00042 {
00043 Guard(ExCCamera * ExManagerCam::GetCurrentCam(void))
00044 int i=0;
00045 for(m_ItVecCamera=m_VecCamera.begin();m_ItVecCamera!=m_VecCamera.end();m_ItVecCamera++,i++)
00046 {
00047 if(m_ItVecCamera->GetId()==m_CurrentCam)
00048 {
00049 return &m_VecCamera.at(i);
00050 }
00051 }
00052 UnGuard
00053 return NULL;
00054 }
00055
00056 void ExManagerCam::NextCam(void)
00057 {
00058 Guard(void ExManagerCam::NextCam(void))
00059 int i=0;
00060 for(m_ItVecCamera=m_VecCamera.begin();m_ItVecCamera!=m_VecCamera.end();m_ItVecCamera++,i++)
00061 {
00062 if(m_ItVecCamera->GetId()==m_CurrentCam)
00063 {
00064 m_ItVecCamera++;
00065 if(m_ItVecCamera==m_VecCamera.end())
00066 {
00067 m_ItVecCamera=m_VecCamera.begin();
00068 }
00069 m_CurrentCam=m_ItVecCamera->GetId();
00070 }
00071 }
00072 UnGuard
00073 }
00074
00075 void ExManagerCam::PrevCam(void)
00076 {
00077 Guard(void ExManagerCam::PrevCam(void))
00078 int i=0;
00079 for(m_ItVecCamera=m_VecCamera.begin();m_ItVecCamera!=m_VecCamera.end();m_ItVecCamera++,i++)
00080 {
00081 if(m_ItVecCamera->GetId()==m_CurrentCam)
00082 {
00083 if(m_ItVecCamera==m_VecCamera.begin())
00084 {
00085 m_ItVecCamera=m_VecCamera.end()-1;
00086 }else
00087 {
00088 m_ItVecCamera--;
00089 }
00090 m_CurrentCam=m_ItVecCamera->GetId();
00091 }
00092 }
00093 UnGuard
00094 }
00095
00096 void ExManagerCam::SetCurrentCam(ExNihilo::ExId Id)
00097 {
00098 Guard(void ExManagerCam::SetCurrentCam(ExNihilo::ExId Id))
00099
00100 m_CurrentCam=Id;
00101 UnGuard
00102 }
00103
00104
00105 void ExManagerCam::Reset(void)
00106 {
00107 Guard(void ExManagerCam::Reset(void))
00108 m_VecCamera.clear();
00109 Init();
00110
00111 UnGuard
00112 }
00113
00114 bool ExManagerCam::Init(std::string FileName)
00115 {
00116 Guard(bool ExManagerCam::Init(std::string FileName))
00117
00118 return true;
00119 UnGuard
00120 }
00121
00122 void ExManagerCam::Init(void)
00123 {
00124 Guard(void ExManagerCam::Init(void))
00125 m_MultSlot1=NewObject();
00126 m_MultSlot2=NewObject();
00127 m_MultSlot3=NewObject();
00128 m_MultSlot4=NewObject();
00129 UnGuard
00130 }
00131
00132 ExNihilo::ExId ExManagerCam::NewObject(void)
00133 {
00134 Guard(ExNihilo::ExId ExManagerCam::NewObject(void))
00135 char *Name;
00136 ExCCamera Camera1;
00137 Name= new char[strlen("CAMERA ")+3];
00138 sprintf(Name,"CAMERA %d",m_VecCamera.size()+1);
00139 Camera1.SetIdName(ManagerId->GetNewIdName(Name));
00140 Camera1.SetPosition(0.0f,2.0f,0.0f);
00141 m_VecCamera.push_back(Camera1);
00142 m_CurrentCam=Camera1.GetId();
00143 return m_CurrentCam;
00144 UnGuard
00145 }
00146
00147 ExNihilo::ExId ExManagerCam::Add(ExCCamera Object)
00148 {
00149 Guard(ExNihilo::ExId ExManagerCam::Add(ExCCamera Object))
00150 return m_CurrentCam;
00151 UnGuard
00152 }
00153
00154
00155
00156 ExCCamera * ExManagerCam::Get(std::string Name)
00157 {
00158 Guard(ExCCamera * ExManagerCam::Get(std::string Name))
00159 int i=0;
00160 for(m_ItVecCamera=m_VecCamera.begin();m_ItVecCamera!=m_VecCamera.end();m_ItVecCamera++,i++)
00161 {
00162 if(m_ItVecCamera->GetName()==Name)
00163 {
00164 return &m_VecCamera.at(i);
00165 }
00166 }
00167 return NULL;
00168 UnGuard
00169 }
00170
00171
00172 ExCCamera * ExManagerCam::Get(ExNihilo::ExId Id)
00173 {
00174 Guard(std::vector<ExCCamera>::iterator ExManagerCam::Get(ExNihilo::ExId Id))
00175 int i=0;
00176 for(m_ItVecCamera=m_VecCamera.begin();m_ItVecCamera!=m_VecCamera.end();m_ItVecCamera++,i++)
00177 {
00178 if(m_ItVecCamera->GetId()==Id)
00179 {
00180 return &m_VecCamera.at(i);
00181 }
00182 }
00183 return NULL;
00184 UnGuard
00185 }
00186
00187
00188
00189
00190 bool ExManagerCam::Remove(ExNihilo::ExId Id)
00191 {
00192 Guard(bool ExManagerCam::Remove(ExNihilo::ExId Id))
00193 for(m_ItVecCamera=m_VecCamera.begin();m_ItVecCamera!=m_VecCamera.end();m_ItVecCamera++)
00194 {
00195 if(m_ItVecCamera->GetId()==Id)
00196 {
00197 m_VecCamera.erase(m_ItVecCamera);
00198 return true;
00199 }
00200 }
00201 return false;
00202 UnGuard
00203 }
00204
00205
00206 ExNihilo::ExId ExManagerCam::GetIdByName(std::string Name)
00207 {
00208 Guard(ExId ExManagerCam::GetIdByName(std::string Name))
00209 for(m_ItVecCamera=m_VecCamera.begin();m_ItVecCamera!=m_VecCamera.end();m_ItVecCamera++)
00210 {
00211 if(m_ItVecCamera->GetName()==Name)
00212 {
00213 return m_ItVecCamera->GetId();
00214 }
00215 }
00216 return -1;
00217 UnGuard
00218 }
00219
00220
00221 std::string ExManagerCam::GetNameById(ExNihilo::ExId Id)
00222 {
00223 Guard(std::string ExManagerCam::GetNameById(ExNihilo::ExId Id))
00224 for(m_ItVecCamera=m_VecCamera.begin();m_ItVecCamera!=m_VecCamera.end();m_ItVecCamera++)
00225 {
00226 if(m_ItVecCamera->GetId()==Id)
00227 {
00228 return m_ItVecCamera->GetName();
00229 }
00230 }
00231 return NULL;
00232 UnGuard
00233 }
00234
00235 void ExManagerCam::Draw(int x,int y)
00236 {
00237 Guard(void ExManagerCam::Draw(int x,int y))
00238 if(!m_multiview)
00239 {
00240 glMatrixMode(GL_PROJECTION);
00241 glLoadIdentity();
00242 glViewport(0,0,x,y);
00243 gluPerspective(GetCurrentCam()->GetZoom(),
00244 (1.0f *x/y),
00245 GetCurrentCam()->GetClipNear(),
00246 GetCurrentCam()->GetClipFar());
00247 glMatrixMode(GL_MODELVIEW);
00248 glLoadIdentity();
00249 GetCurrentCam()->Draw();
00250 }else
00251 {
00252 int width = glutGet(GLUT_WINDOW_WIDTH);
00253 int height = glutGet(GLUT_WINDOW_HEIGHT);
00254 width = (width+1)/2;
00255 height = (height+1)/2;
00256 bool perspective=false;
00257 float ratio = (float)width/height;
00258 switch(itcount)
00259 {
00260 case 0:
00261 glViewport(0, 0, width, height);
00262 glMatrixMode(GL_PROJECTION);
00263 glLoadIdentity();
00264 gluOrtho2D(0, width, 0, height);
00265 glMatrixMode(GL_MODELVIEW);
00266
00267 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00268 glViewport(0, 0, width, height);
00269 glScissor(0, 0, width, height);
00270
00271 glMatrixMode(GL_PROJECTION);
00272
00273 if (perspective)
00274 gluPerspective(60, ratio, 1, 256);
00275 else
00276 glOrtho(-ratio, ratio, -ratio, ratio, 1, 256);
00277 glMatrixMode(GL_MODELVIEW);
00278 glLoadIdentity();
00279 Get(m_MultSlot1)->Draw();
00280 break;
00281 case 1:
00282 glViewport(width, 0, width, height);
00283 glScissor(width, 0, width, height);
00284
00285 glMatrixMode(GL_PROJECTION);
00286
00287 if (perspective)
00288 gluPerspective(60, ratio, 1, 256);
00289 else
00290 glOrtho(-ratio, ratio, -ratio, ratio, 1, 256);
00291 glMatrixMode(GL_MODELVIEW);
00292 glLoadIdentity();
00293 Get(m_MultSlot2)->Draw();
00294 break;
00295 case 2:
00296 glViewport(0, height, width, height);
00297 glScissor(0, height, width, height);
00298
00299 glMatrixMode(GL_PROJECTION);
00300
00301 if (perspective)
00302 gluPerspective(60, ratio, 1, 256);
00303 else
00304 glOrtho(-ratio, ratio, -ratio, ratio, 1, 256);
00305 glMatrixMode(GL_MODELVIEW);
00306 glLoadIdentity();
00307 Get(m_MultSlot3)->Draw();
00308 break;
00309 case 3:
00310 glViewport(width, height, width, height);
00311 glScissor(width, height, width, height);
00312
00313 glMatrixMode(GL_PROJECTION);
00314
00315 if (perspective)
00316 gluPerspective(60, ratio, 1, 256);
00317 else
00318 glOrtho(-ratio, ratio, -ratio, ratio, 1, 256);
00319 glMatrixMode(GL_MODELVIEW);
00320 glLoadIdentity();
00321 Get(m_MultSlot4)->Draw();
00322 break;
00323 }
00324 itcount++;
00325 }
00326 UnGuard
00327 }
00328