00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "ExNihiloNameSpace.h"
00025
00026 void ExNihilo::InitBasicObjectList(void)
00027 {
00028 float i;
00029 glNewList(GRILLE,GL_COMPILE);
00030 glDisable(GL_LIGHTING);
00031 glBegin(GL_LINES);
00032 glColor3f(1.0f,0.0f,0.0f);
00033 for ( i=-100;i<101;i+=2)
00034 {
00035 glVertex3f(0.0f, i, 100.0f);
00036 glVertex3f(0.0f, i,-100.0f);
00037 glVertex3f(0.0f, 100.0f, i);
00038 glVertex3f(0.0f,-100.0f, i);
00039 }
00040 glColor3f(0.0,1.0f,0.0f);
00041
00042 for ( i=-100;i<101;i+=2)
00043 {
00044 glVertex3f( 100.0f, i,0.0f);
00045 glVertex3f(-100.0f, i,0.0f);
00046 glVertex3f( i, 100.0f,0.0f);
00047 glVertex3f( i,-100.0f,0.0f);
00048 }
00049 glColor3f(0.0,0.0f,1.0f);
00050 for (i=-100;i<101;i+=2)
00051 {
00052 glVertex3f( 100.0f,0.0f, i);
00053 glVertex3f(-100.0f,0.0f, i);
00054 glVertex3f( i,0.0f, 100.0f);
00055 glVertex3f( i,0.0f,-100.0f);
00056 }
00057 glEnd();
00058 glColor3f(1.0,1.0f,1.0f);
00059 glEnable(GL_LIGHTING);
00060 glEndList();
00061
00062
00063 }
00064 void ExNihilo::DrawGrid(int size)
00065 {
00066 int i;
00067 glDisable(GL_LIGHTING);
00068 glBegin(GL_LINES);
00069 glColor3f(1.0f,0.0f,0.0f);
00070 for ( i=-size;i<size+1;i+=2)
00071 {
00072 glVertex3f(0.0f, i, size);
00073 glVertex3f(0.0f, i,-size);
00074 glVertex3f(0.0f, size, i);
00075 glVertex3f(0.0f,-size, i);
00076 }
00077 glColor3f(0.0,1.0f,0.0f);
00078
00079 for ( i=-size;i<size+1;i+=2)
00080 {
00081 glVertex3f( size, i,0.0f);
00082 glVertex3f(-size, i,0.0f);
00083 glVertex3f( i, size,0.0f);
00084 glVertex3f( i,-size,0.0f);
00085 }
00086 glColor3f(0.0,0.0f,1.0f);
00087 for (i=-size;i<size+1;i+=2)
00088 {
00089 glVertex3f( size,0.0f, i);
00090 glVertex3f(-size,0.0f, i);
00091 glVertex3f( i,0.0f, size);
00092 glVertex3f( i,0.0f,-size);
00093 }
00094 glEnd();
00095 }
00096
00097 void ExNihilo::ShowGlError(void)
00098 {
00099 switch(glGetError())
00100 {
00101 case GL_NO_ERROR:
00102 std::cout<<"No Error "<<std::endl;
00103 break;
00104 case GL_INVALID_OPERATION:
00105 std::cout<<"Error Invalid operation "<<std::endl;
00106 break;
00107 case GL_INVALID_VALUE:
00108 std::cout<<"Error Invalid value "<<std::endl;
00109 break;
00110 case GL_INVALID_ENUM:
00111 std::cout<<"Error Invalid enum "<<std::endl;
00112 break;
00113 case GL_STACK_OVERFLOW:
00114 std::cout<<"Error stack overflow "<<std::endl;
00115 break;
00116 case GL_STACK_UNDERFLOW:
00117 std::cout<<"Error stack underflow "<<std::endl;
00118 break;
00119 case GL_OUT_OF_MEMORY:
00120 std::cout<<"Error out of memory"<<std::endl;
00121 break;
00122 default:
00123 std::cout<<"Uknow error ?"<<std::endl;
00124
00125 }
00126
00127 }
00128
00129 int ExNihilo::GetResolutionX()
00130 {
00131 return glutGet(GLUT_WINDOW_WIDTH);
00132 }
00133 int ExNihilo::GetResolutionY()
00134 {
00135 return glutGet(GLUT_WINDOW_HEIGHT);
00136 }
00137
00138 void ExNihilo::RenderBitmapString(float x, float y, void *font,std::string string)
00139 {
00140 const char *c;
00141 glRasterPos2f(x, y);
00142 for (c=string.data(); *c != '\0'; c++)
00143 {
00144 glutBitmapCharacter(font, *c);
00145 }
00146 }
00147
00148 void ExNihilo::EnterOrthoMode(void)
00149 {
00150 glPushMatrix();
00151 glMatrixMode(GL_PROJECTION);
00152 glPushMatrix();
00153 glLoadIdentity();
00154 glOrtho( 0,glutGet(GLUT_WINDOW_WIDTH),glutGet(GLUT_WINDOW_HEIGHT),0,0,1);
00155 glMatrixMode(GL_MODELVIEW);
00156 glLoadIdentity();
00157 }
00158
00159 void ExNihilo::LeaveOrthoMode(void)
00160 {
00161 glMatrixMode( GL_PROJECTION );
00162 glPopMatrix();
00163 glMatrixMode( GL_MODELVIEW );
00164 glPopMatrix();
00165 }
00166
00167 void ExNihilo::WriteToScreen(float x,float y,std::string String)
00168 {
00169 ExNihilo::EnterOrthoMode();
00170 ExNihilo::RenderBitmapString(x,y,(void *)GLUT_BITMAP_HELVETICA_12,String);
00171 ExNihilo::LeaveOrthoMode();
00172 }
00173
00174 void ExNihilo::WriteToScreen(float x,float y,float r,float g,float b,std::string String)
00175 {
00176 ExNihilo::EnterOrthoMode();
00177 glPushAttrib(GL_ALL_ATTRIB_BITS);
00178 glDisable(GL_LIGHTING);
00179 glEnable(GL_BLEND);
00180 glEnable(GL_ALPHA);
00181 glBlendFunc(GL_ONE,GL_ONE);
00182 glEnable(GL_ALPHA_TEST);
00183 glAlphaFunc(GL_GREATER,0);
00184 glDisable(GL_DEPTH_TEST);
00185 glColor4f(r,g,b,1.0f);
00186 ExNihilo::RenderBitmapString(x,y,(void *)GLUT_BITMAP_HELVETICA_12,String);
00187 glPopAttrib();
00188 ExNihilo::LeaveOrthoMode();
00189
00190 }
00191
00192 void ExNihilo::WriteToScreen24(float x,float y,float r,float g,float b,std::string String)
00193 {
00194 ExNihilo::EnterOrthoMode();
00195 glPushAttrib(GL_ALL_ATTRIB_BITS);
00196 glDisable(GL_LIGHTING);
00197 glEnable(GL_BLEND);
00198 glEnable(GL_ALPHA);
00199 glBlendFunc(GL_ONE,GL_ONE);
00200 glEnable(GL_ALPHA_TEST);
00201 glAlphaFunc(GL_GREATER,0);
00202 glDisable(GL_DEPTH_TEST);
00203 glColor4f(r,g,b,1.0f);
00204 ExNihilo::RenderBitmapString(x,y,(void *)GLUT_BITMAP_TIMES_ROMAN_24,String);
00205 glPopAttrib();
00206 ExNihilo::LeaveOrthoMode();
00207
00208 }
00209
00210 void ExNihilo::DrawCadre(float x,float y,float lx,float ly,float r,float g,float b,float blend)
00211 {
00212 ExNihilo::EnterOrthoMode();
00213 glPushAttrib(GL_ALL_ATTRIB_BITS);
00214 glDisable(GL_LIGHTING);
00215 glEnable(GL_BLEND);
00216 glEnable(GL_ALPHA);
00217 glBlendFunc(GL_ONE,GL_ONE);
00218 glEnable(GL_ALPHA_TEST);
00219 glAlphaFunc(GL_GREATER,0);
00220 glDisable(GL_DEPTH_TEST);
00221 glColor4f(r,g,b,blend);
00222 glBegin(GL_QUADS);
00223 glVertex2f(x,y);
00224 glVertex2f(x,y+ly);
00225 glVertex2f(x+lx,y+ly);
00226 glVertex2f(x+lx,y);
00227 glEnd();
00228 glDisable(GL_BLEND);
00229 glDisable(GL_ALPHA);
00230 glEnable(GL_DEPTH_TEST);
00231 glBegin(GL_LINE_STRIP);
00232 glVertex2f(x,y);
00233 glVertex2f(x,y+ly);
00234 glVertex2f(x+lx,y+ly);
00235 glVertex2f(x+lx,y);
00236 glVertex2f(x,y);
00237 glEnd();
00238 glPopAttrib();
00239 ExNihilo::LeaveOrthoMode();
00240 }
00241
00242 std::string ExNihilo::ExtracValueFromSring(std::string buffstring,std::string start,std::string end)
00243 {
00244 char buffer[255];
00245 memset(buffer,0,255);
00246 try
00247 {
00248 buffstring.copy(buffer,buffstring.find(end,buffstring.find(start)+start.size())-buffstring.find(start)-start.size(),buffstring.find(start)+start.size());
00249 }
00250 catch(...)
00251 {
00252 throw ExCExpStringNotFound();
00253 }
00254 return buffer;
00255 }
00256
00257 int ExNihilo::ExtractIntValueFromSring(std::string buffstring,std::string start,std::string end)
00258 {
00259 char buffer[255];
00260 memset(buffer,0,255);
00261 try{buffstring.copy(buffer,buffstring.find(end,buffstring.find(start)+start.size())-buffstring.find(start)-start.size(),buffstring.find(start)+start.size());}
00262 catch(...){throw ExCExpStringNotFound();}
00263 return atoi(buffer);
00264 }
00265
00266 float ExNihilo::ExtractFloatValueFromSring(std::string buffstring,std::string start,std::string end)
00267 {
00268 char buffer[255];
00269 memset(buffer,0,255);
00270 try{buffstring.copy(buffer,buffstring.find(end,buffstring.find(start)+start.size())-buffstring.find(start)-start.size(),buffstring.find(start)+start.size());}
00271 catch(...){throw ExCExpStringNotFound();}
00272 return atof(buffer);
00273 }
00274
00275 std::string ExNihilo::ExtracStringValueFromFile(std::string FileName, std::string start,std::string end)
00276 {
00277 char buffer[255],b[256];memset(buffer,0,255);
00278 std::ifstream fin;
00279 std::string buffstring;
00280 fin.open(FileName.data(),std::ios::in);
00281 if(fin.is_open())
00282 {
00283 try
00284 {
00285 do
00286 {
00287 memset(b,0,255);
00288 fin.getline(b,256,'\n');
00289 buffstring=buffstring+b;
00290 }while(!fin.eof());
00291 fin.close();
00292 }catch(...){throw ExCExpFileReadError();}
00293 }else throw ExCExpFileNotFound();
00294 buffstring.copy(buffer,buffstring.find(end,buffstring.find(start)+start.size())-buffstring.find(start)-start.size(),buffstring.find(start)+start.size());
00295 return buffer;
00296 }
00297
00298 int ExNihilo::ExtractIntValueFromFile(std::string FileName, std::string start,std::string end)
00299 {
00300 return atoi(ExNihilo::ExtracStringValueFromFile(FileName,start,end).data());
00301 }
00302
00303 float ExNihilo::ExtractFloatValueFromFile(std::string FileName, std::string start,std::string end)
00304 {
00305 return atof(ExNihilo::ExtracStringValueFromFile(FileName,start,end).data());
00306 }
00307
00308 int ExNihilo::ExtracStringCommandFromString(std::string FileName,std::string command,std::string &TargetString)
00309 {
00310 return 1;
00311 }
00312
00313 int ExNihilo::ExtracStringCommandFromFile(std::string FileName,std::string command,std::string &TargetString)
00314 {
00315 char buffer[255],b[256];memset(buffer,0,255);
00316 std::ifstream fin;
00317 std::string buffstring;
00318 fin.open(FileName.data(),std::ios::in);
00319 if(fin.is_open())
00320 {
00321 try
00322 {
00323 do
00324 {
00325 memset(b,0,255);
00326 fin.getline(b,256,'\n');
00327 buffstring=buffstring+b;
00328 }while(!fin.eof());
00329 fin.close();
00330 }catch(...){throw ExCExpFileReadError();}
00331 }else throw ExCExpFileNotFound();
00332
00333 TargetString=buffer;
00334 return 1;
00335 }
00336
00337
00338 ExCAction ExtractActionFromString(std::string FileName,std::string command,std::string &TargetString)
00339 {
00340 ExCAction RetAction;
00341
00342 return RetAction;
00343 }
00344 void ExNihilo::AddKeyToBuffer(int key,std::string &buffer)
00345 {
00346 switch(key)
00347 {
00348 case KEYBOARD_DOWN_A:buffer.append("a");break;
00349 case KEYBOARD_DOWN_Z:buffer.append("z");break;
00350 case KEYBOARD_DOWN_E:buffer.append("e");break;
00351 case KEYBOARD_DOWN_R:buffer.append("r");break;
00352 case KEYBOARD_DOWN_T:buffer.append("t");break;
00353 case KEYBOARD_DOWN_Y:buffer.append("y");break;
00354 case KEYBOARD_DOWN_U:buffer.append("u");break;
00355 case KEYBOARD_DOWN_I:buffer.append("i");break;
00356 case KEYBOARD_DOWN_O:buffer.append("o");break;
00357 case KEYBOARD_DOWN_P:buffer.append("p");break;
00358 case KEYBOARD_DOWN_Q:buffer.append("q");break;
00359 case KEYBOARD_DOWN_S:buffer.append("s");break;
00360 case KEYBOARD_DOWN_D:buffer.append("d");break;
00361 case KEYBOARD_DOWN_F:buffer.append("f");break;
00362 case KEYBOARD_DOWN_G:buffer.append("g");break;
00363 case KEYBOARD_DOWN_H:buffer.append("h");break;
00364 case KEYBOARD_DOWN_J:buffer.append("j");break;
00365 case KEYBOARD_DOWN_K:buffer.append("k");break;
00366 case KEYBOARD_DOWN_L:buffer.append("l");break;
00367 case KEYBOARD_DOWN_M:buffer.append("m");break;
00368 case KEYBOARD_DOWN_W:buffer.append("w");break;
00369 case KEYBOARD_DOWN_X:buffer.append("x");break;
00370 case KEYBOARD_DOWN_C:buffer.append("c");break;
00371 case KEYBOARD_DOWN_V:buffer.append("v");break;
00372 case KEYBOARD_DOWN_B:buffer.append("b");break;
00373 case KEYBOARD_DOWN_N:buffer.append("n");break;
00374 case KEYBOARD_DOWN_M_A:buffer.append("A");break;
00375 case KEYBOARD_DOWN_M_Z:buffer.append("Z");break;
00376 case KEYBOARD_DOWN_M_E:buffer.append("E");break;
00377 case KEYBOARD_DOWN_M_R:buffer.append("R");break;
00378 case KEYBOARD_DOWN_M_T:buffer.append("T");break;
00379 case KEYBOARD_DOWN_M_Y:buffer.append("Y");break;
00380 case KEYBOARD_DOWN_M_U:buffer.append("U");break;
00381 case KEYBOARD_DOWN_M_I:buffer.append("I");break;
00382 case KEYBOARD_DOWN_M_O:buffer.append("O");break;
00383 case KEYBOARD_DOWN_M_P:buffer.append("P");break;
00384 case KEYBOARD_DOWN_M_Q:buffer.append("Q");break;
00385 case KEYBOARD_DOWN_M_S:buffer.append("S");break;
00386 case KEYBOARD_DOWN_M_D:buffer.append("D");break;
00387 case KEYBOARD_DOWN_M_F:buffer.append("F");break;
00388 case KEYBOARD_DOWN_M_G:buffer.append("G");break;
00389 case KEYBOARD_DOWN_M_H:buffer.append("H");break;
00390 case KEYBOARD_DOWN_M_J:buffer.append("J");break;
00391 case KEYBOARD_DOWN_M_K:buffer.append("K");break;
00392 case KEYBOARD_DOWN_M_L:buffer.append("L");break;
00393 case KEYBOARD_DOWN_M_M:buffer.append("M");break;
00394 case KEYBOARD_DOWN_M_W:buffer.append("W");break;
00395 case KEYBOARD_DOWN_M_X:buffer.append("X");break;
00396 case KEYBOARD_DOWN_M_C:buffer.append("C");break;
00397 case KEYBOARD_DOWN_M_V:buffer.append("V");break;
00398 case KEYBOARD_DOWN_M_B:buffer.append("B");break;
00399 case KEYBOARD_DOWN_M_N:buffer.append("N");break;
00400 case KEYBOARD_DOWN_0:buffer.append("0");break;
00401 case KEYBOARD_DOWN_1:buffer.append("1");break;
00402 case KEYBOARD_DOWN_2:buffer.append("2");break;
00403 case KEYBOARD_DOWN_3:buffer.append("3");break;
00404 case KEYBOARD_DOWN_4:buffer.append("4");break;
00405 case KEYBOARD_DOWN_5:buffer.append("5");break;
00406 case KEYBOARD_DOWN_6:buffer.append("6");break;
00407 case KEYBOARD_DOWN_7:buffer.append("7");break;
00408 case KEYBOARD_DOWN_8:buffer.append("8");break;
00409 case KEYBOARD_DOWN_9:buffer.append("9");break;
00410 case KEYBOARD_DOWN__:buffer.append("_");break;
00411 case KEYBOARD_DOWN_2POINTS:buffer.append(":");break;
00412 case KEYBOARD_DOWN_POINT:buffer.append(".");break;
00413 case KEYBOARD_DOWN_SPACE:buffer.append(" ");break;
00414 case KEYBOARD_DOWN_CTRL_U:buffer = "";break;
00415 default :break;
00416 }
00417 }
00418
00419 std::string ExNihilo::GetFileExtension(std::string FileName)
00420 {
00421 std::string ReturnString;
00422 0<FileName.find(".") ? (ReturnString=FileName.substr(FileName.find(".")+1,FileName.size()-FileName.find(".")-1)) : (ReturnString="BADEXTENSION");
00423 return ReturnString;
00424 }
00425
00426