raSystem  1.0 bata
raUtility.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
5  bool g_IfAktive = false;
6 
7  namespace Util
8  {
9  raString raFile::raRemoveDir(raString Filename)
10  {
11  int iLastBackSlash;
12  int iChar;
13 
14  // Letzten Back-Slash ("\") suchen
15  iLastBackSlash = -1;
16  iChar = 0;
17  while(Filename[iChar] != 0)
18  {
19  if(Filename[iChar] == '\\') iLastBackSlash = iChar;
20  iChar++;
21  }
22 
23  // String ab dem letzten Back-Slash plus 1 zurückliefern
24  return raString(Filename.c_str() + iLastBackSlash + 1);
25  }
26 
27  raString raFile::raGetFilenameExtension(raString Filename)
28  {
29  int iLastDot;
30  int iChar;
31 
32  // Letzten Punkt (".") im Dateinamen suchen
33  iLastDot = -1;
34  iChar = 0;
35  while(Filename[iChar] != 0)
36  {
37  if(Filename[iChar] == '.') iLastDot = iChar;
38  iChar++;
39  }
40  // String ab dem letzten Punkt plus 1 zurückliefern
41  return raString(Filename.c_str() + iLastDot + 1).c_str();
42  }
43  BOOL raFile::raFileExists(raString Filename)
44  {
45  // Versuchen, die Datei zu öffnen
46  FILE* pFile = fopen(Filename.c_str(), "rb");
47  if(pFile) fclose(pFile);
48 
49  // pFile = NULL: Datei existiert nicht (oder Fehler), ansonsten existiert sie.
50  return pFile != NULL;
51  }
52  DWORD raFile::raGetFileSize(raString Filename)
53  {
54  FILE *pFile;
55  long length;
56 
57  if(!raFileExists(Filename))
58  {
59  return 0;
60  }
61  else
62  {
63  pFile=fopen(Filename.c_str(),"rb");
64  fseek(pFile,0,SEEK_END);
65  length=ftell(pFile);
66  fclose(pFile);
67  }
68 
69  return length;
70  }
71  }
72  RAPI bool raCloseEngine(void)
73  {
74  CoUninitialize();
76 
77  return true;
78  }
80  {
81  char buf[260];
82  GetCurrentDirectory(260, buf);
83  RASYSTEMPATH = raString(buf);
84 
85  RINFO("raSystem 1.08 Beta On " + raGetWinVersion() + "\n" );
86  RINFO("Current Path: " + RASYSTEMPATH + "\n");
87 
88  System::raInitLog("./raLog/raslog.html");
89  RINFO("Set Log output to: " + raString("./raLog/raslog.html"));
90 
91  raIni *conf = new raIni();
92 
93  if(conf->Open("./raConfig/config.ini"))
94  {
96  }
97  else
98  {
100  }
101 
102  if(CoInitializeEx(NULL, COINIT_SPEED_OVER_MEMORY) == S_OK)
103  ROK("CoInitializeEx");
104 
105  srand(timeGetTime());
106  ROK("srand");
107 
108  int iCPU = omp_get_num_procs();
109  omp_set_num_threads(iCPU);
110 
111  return true;
112  }
114  {
115  OSVERSIONINFO info;
116  OSVERSIONINFOEX ex;
117 
118  ZeroMemory( &info, sizeof( OSVERSIONINFO ) );
119  ZeroMemory( &ex, sizeof( OSVERSIONINFOEX ) );
120  info.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
121  ex.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX );
122 
123  GetVersionEx( &info );
124  GetVersionEx( ( OSVERSIONINFO * ) &ex );
125 
126  if( info.dwMajorVersion == 6 && info.dwMinorVersion == 0 && ex.wProductType == VER_NT_WORKSTATION )
127  return "(6.0) Windows Vista";
128 
129  if( info.dwMajorVersion == 6 && info.dwMinorVersion == 1 && ex.wProductType == VER_NT_WORKSTATION )
130  return "(6.1) Windows 7";
131 
132  return "Windows";
133  }
135  {
136  MEMORYSTATUS lpBuffer;
137  lpBuffer.dwLength = sizeof(MEMORYSTATUS);
138  GlobalMemoryStatus (&lpBuffer);
139 
140  return lpBuffer.dwTotalPhys/1024/1024;
141  }
143  {
144  #ifndef WIN64
145  /* RdTSC:
146  ReaD Time Stamp Counter :: Wird pro Takt um 1 erhöht
147  */
148  #define RdTSC __asm _emit 0x0f __asm _emit 0x31
149 
150  __int64 cyclesStart = 0, cyclesStop = 0;
151  unsigned __int64 nCtr = 0, nFreq = 0, nCtrStop = 0;
152 
153  if(!QueryPerformanceFrequency((LARGE_INTEGER *) &nFreq)) return 0;
154  QueryPerformanceCounter((LARGE_INTEGER *) &nCtrStop);
155 
156  nCtrStop += nFreq;
157 
158  _asm
159  {// Abrufen der Clock-Cycles für den Startwert
160  RdTSC
161  mov DWORD PTR cyclesStart, eax
162  mov DWORD PTR [cyclesStart + 4], edx
163  }
164 
165  do
166  {
167  QueryPerformanceCounter((LARGE_INTEGER *) &nCtr);
168  }while (nCtr < nCtrStop);
169 
170  _asm
171  {// Nochmals Abruf der Clock-Cycles nach einer Sekunde
172  RdTSC
173  mov DWORD PTR cyclesStop, eax
174  mov DWORD PTR [cyclesStop + 4], edx
175  }
176 
177  return ((float)cyclesStop-(float)cyclesStart) / 1024 / 1024;
178  #else
179  return 0.0f;
180  #endif
181  }
182  RAPI void raSetAktive(bool Aktive)
183  {
184  g_IfAktive = Aktive;
185  }
186  RAPI bool raIsAktive(void)
187  {
188  return g_IfAktive;
189  }
190  RAPI int raGetRandInt(int min, int max)
191  {
192  return rand() / RAND_MAX * (max - min) + min;
193  }
194 
195  RAPI float raGetRandFloat(float min, float max)
196  {
197  return (float)rand() / RAND_MAX * (max - min) + min;
198  }
200  {
201  float ret = (float)((rand() % 20000) - 10000);
202  return ret / 10000.0f;
203  }
204  RAPI void raComputePickRay(raCamera* pCamera, float xPos, float yPos, raVector3* v1, raVector3* v2)
205  {
206  raMatrix mViewProj;
207  mViewProj = pCamera->GetViewMatrix() * pCamera->GetProjMatrix();
208 
209  raMatrix Inverse;
210  raMatrix invProj, invView;
211 
212  D3DXMatrixInverse((D3DXMATRIX*)&invView, NULL, (D3DXMATRIX*)&pCamera->GetViewMatrix());
213  D3DXMatrixInverse((D3DXMATRIX*)&invProj, NULL, (D3DXMATRIX*)&pCamera->GetProjMatrix());
214  D3DXMatrixInverse((D3DXMATRIX*)&Inverse, NULL, (D3DXMATRIX*)&mViewProj);
215 
216  raVector3 nearPoint(xPos, yPos, 0);
217  raVector3 farPoint (xPos, yPos, 1);
218 
219  D3DXVec3TransformCoord((D3DXVECTOR3*)v1, (D3DXVECTOR3*)&nearPoint, (D3DXMATRIX*)&Inverse);
220  D3DXVec3TransformCoord((D3DXVECTOR3*)v2, (D3DXVECTOR3*)&farPoint, (D3DXMATRIX*)&Inverse);
221  }
222  RAPI raMatrix raGetRandMatrix(float scaleX, float scaleY, float scaleZ, float offsetY)
223  {
224  raVector3 pos;
225  pos.x = raGetRandPercent() * scaleX;
226  pos.y = raGetRandPercent() * scaleY + offsetY;
227  pos.z = raGetRandPercent() * scaleZ;
228 
229  float fRot = raGetRandPercent() * PI;
230 
231  raMatrix mTrans;
232  raMatrix mRot;
233  mRot = raMatrixRotationY(fRot); //Für rotationssymmetrische Objekte uninteressant
234  mTrans = raMatrixTranslation(pos.x);
235 
236  return mRot * mTrans;
237  }
238  RAPI bool raRunProgramm(const raString FileName, const raString Parameter)
239  {
240  int ret = (int) ShellExecute(0, "open", FileName.c_str(), Parameter.c_str(), System::RASYSTEMPATH.c_str(), SW_SHOWNORMAL);
241 
242  if (ret <= 32)
243  {
244  char buf[260];
245 
246  switch(ret)
247  {
248  case ERROR_FILE_NOT_FOUND:
249  case ERROR_PATH_NOT_FOUND:
250  sprintf(buf, "Die Datei %s kann nicht gefunden werden", FileName);
251  RERROR(buf);
252  return false;
253 
254  case ERROR_BAD_FORMAT :
255  RERROR("Die aufgerufene Anwendung ist ungültig oder beschädigt!");
256  return false;
257 
258  case SE_ERR_ACCESSDENIED:
259  case SE_ERR_SHARE:
260  sprintf(buf, "Zugriff auf Datei %s wurde verweigert", FileName);
261  RERROR(buf);
262  return false;
263 
264  case SE_ERR_OOM :
265  RERROR("Out of Mem");
266  return false;
267 
268  default:
269  sprintf(buf, "Datei %s kann nicht geöffnet werden", FileName);
270  RERROR(buf);
271  return false;
272  }
273  }
274 
275  return true;
276  }
278  {
279  return sqrtf((float)X);
280  }
282  {
283  return acosf((float)X);
284  }
286  {
287  return abs((float)X);
288  }
289  RAPI long raAbs(long X)
290  {
291  return abs((float)X);
292  }
293  RAPI double raAbs(double X)
294  {
295  return abs((float)X);
296  }
298  {
299  return sinf((float)X);
300  }
302  {
303  return cosf((float)X);
304  }
306  {
307  return tanf((float)X);
308  }
309 };
RAPI float raGetCpuFrequency()
Definition: raUtility.cpp:142
RAPI bool raInitLog(raString File)
Definition: raLog.cpp:11
virtual const raMatrix GetProjMatrix()
Definition: raCamera.h:108
raFloat y
Definition: raVector3.h:13
raString raGetWinVersion()
Definition: raUtility.cpp:113
RAPI bool raRunProgramm(const raString FileName, const raString Parameter)
Definition: raUtility.cpp:238
raFloat x
Definition: raVector3.h:12
#define RdTSC
RAPI raFloat raSinf(raFloat X)
Definition: raUtility.cpp:297
static bool LoadConfig(IConfigFile *mconfig)
#define RAPI
Definition: raMain.h:11
RAPI raFloat raAcosf(raFloat X)
Definition: raUtility.cpp:281
RAPI raMatrix raMatrixRotationY(const float f)
Definition: raMatrix.cpp:28
virtual bool Open(const char filename[])
Definition: raIni.cpp:5
RAPI void raSetAktive(bool Aktive)
Definition: raUtility.cpp:182
RAPI raFloat raTanf(raFloat X)
Definition: raUtility.cpp:305
static bool LoadStandardConfig()
raFloat z
Definition: raVector3.h:14
float raFloat
Definition: raMain.h:106
RAPI raFloat raSqrtf(raFloat X)
Definition: raUtility.cpp:277
RAPI bool raIsAktive(void)
Definition: raUtility.cpp:186
RAPI bool raLoadEngine()
Definition: raUtility.cpp:79
Definition: raUtility.h:4
RAPI float raGetRandFloat(float min, float max)
Definition: raUtility.cpp:195
RAPI float raGetRandPercent()
Definition: raUtility.cpp:199
RAPI raMatrix raGetRandMatrix(float scaleX, float scaleY, float scaleZ, float offsetY)
Definition: raUtility.cpp:222
std::string raString
Definition: raMain.h:107
void RAPI ROK(raString x)
Definition: raMain.cpp:114
RAPI bool raCloseEngine(void)
Definition: raUtility.cpp:72
virtual const raMatrix GetViewMatrix()
Definition: raCamera.h:104
bool g_IfAktive
Definition: raUtility.cpp:5
RAPI raMatrix raMatrixTranslation(const raVector3 &v)
Definition: raMatrix.cpp:5
RAPI raFloat raAbs(raFloat X)
Definition: raUtility.cpp:285
RAPI long raGetMemory()
Definition: raUtility.cpp:134
Definition: raIni.h:23
#define PI
Definition: raMain.h:129
void RAPI RINFO(raString x)
Definition: raMain.cpp:119
RAPI raFloat raCosf(raFloat X)
Definition: raUtility.cpp:301
RAPI int raGetRandInt(int min, int max)
Definition: raUtility.cpp:190
RAPI void raComputePickRay(raCamera *pCamera, float xPos, float yPos, raVector3 *v1, raVector3 *v2)
Definition: raUtility.cpp:204
void RAPI RERROR(raString x)
Definition: raMain.cpp:129
RAPI bool raExitLog()
Definition: raLog.cpp:22