Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <vlCore/VisualizationLibrary.hpp>
00033 #include <vlCore/GlobalSettings.hpp>
00034 #include <vlCore/VLXRegistry.hpp>
00035 #include <vlCore/FileSystem.hpp>
00036 #include <vlCore/LoadWriterManager.hpp>
00037 #include <vlCore/Log.hpp>
00038 #include <vlCore/Say.hpp>
00039 #include <vlCore/Time.hpp>
00040 #include <vlCore/Quaternion.hpp>
00041 #include <vlCore/AABB.hpp>
00042 #include <vlCore/Sphere.hpp>
00043 #include <vlCore/version.hpp>
00044 #include <vlCore/MersenneTwister.hpp>
00045 #include <cassert>
00046
00047 using namespace vl;
00048
00049 #if defined(VL_IO_2D_JPG)
00050 #include "plugins/ioJPG.hpp"
00051 #endif
00052 #if defined(VL_IO_2D_PNG)
00053 #include "plugins/ioPNG.hpp"
00054 #endif
00055 #if defined(VL_IO_2D_TIFF)
00056 #include "plugins/ioTIFF.hpp"
00057 #endif
00058 #if defined(VL_IO_2D_TGA)
00059 #include "plugins/ioTGA.hpp"
00060 #endif
00061 #if defined(VL_IO_2D_DAT)
00062 #include "plugins/ioDAT.hpp"
00063 #endif
00064 #if defined(VL_IO_2D_DDS)
00065 #include "plugins/ioDDS.hpp"
00066 #endif
00067 #if defined(VL_IO_2D_BMP)
00068 #include "plugins/ioBMP.hpp"
00069 #endif
00070 #if defined(VL_IO_2D_DICOM)
00071 #include "plugins/ioDICOM.hpp"
00072 #endif
00073
00074
00075 VL_COMPILE_TIME_CHECK( sizeof(double) == 8 )
00076 VL_COMPILE_TIME_CHECK( sizeof(float) == 4 )
00077 VL_COMPILE_TIME_CHECK( sizeof(long long) == 8 )
00078 VL_COMPILE_TIME_CHECK( sizeof(int) == 4 )
00079 VL_COMPILE_TIME_CHECK( sizeof(short) == 2 )
00080 VL_COMPILE_TIME_CHECK( sizeof(char) == 1 )
00081 VL_COMPILE_TIME_CHECK( sizeof(wchar_t) >= 2 )
00082 VL_COMPILE_TIME_CHECK( sizeof(vec2) == sizeof(real)*2 )
00083 VL_COMPILE_TIME_CHECK( sizeof(vec3) == sizeof(real)*3 )
00084 VL_COMPILE_TIME_CHECK( sizeof(vec4) == sizeof(real)*4 )
00085 VL_COMPILE_TIME_CHECK( sizeof(mat2) == sizeof(real)*2*2 )
00086 VL_COMPILE_TIME_CHECK( sizeof(mat3) == sizeof(real)*3*3 )
00087 VL_COMPILE_TIME_CHECK( sizeof(mat4) == sizeof(real)*4*4 )
00088 VL_COMPILE_TIME_CHECK( sizeof(quat) == sizeof(real)*4 )
00089 VL_COMPILE_TIME_CHECK( sizeof(AABB) == sizeof(real)*6 )
00090 VL_COMPILE_TIME_CHECK( sizeof(Sphere) == sizeof(real)*4 )
00091
00092
00093
00094 namespace
00095 {
00096 std::string gVersionString = String( Say("%n.%n.%n") << VL_Major << VL_Minor << VL_Build ).toStdString();
00097 bool gInitializedCore = false;
00098 };
00099
00100 bool VisualizationLibrary::isCoreInitialized() { return gInitializedCore; }
00101
00102 const char* VisualizationLibrary::versionString() { return gVersionString.c_str(); }
00103
00104
00105
00106 namespace
00107 {
00108 ref<GlobalSettings> gSettings = NULL;
00109 }
00110 GlobalSettings* vl::globalSettings()
00111 {
00112 return gSettings.get();
00113 }
00114
00115
00116
00117 namespace
00118 {
00119 ref<Log> gDefaultLogger;
00120 }
00121 void vl::setDefLogger(Log* logger)
00122 {
00123 gDefaultLogger = logger;
00124 }
00125 Log* vl::defLogger()
00126 {
00127 return gDefaultLogger.get();
00128 }
00129
00130
00131
00132 namespace
00133 {
00134 ref<LoadWriterManager> gDefaultLoadWriterManager = NULL;
00135 }
00136 LoadWriterManager* vl::defLoadWriterManager()
00137 {
00138 return gDefaultLoadWriterManager.get();
00139 }
00140 void vl::setDefLoadWriterManager(LoadWriterManager* lwm)
00141 {
00142 gDefaultLoadWriterManager = lwm;
00143 }
00144
00145
00146
00147 namespace
00148 {
00149 ref<FileSystem> gDefaultFileSystem = NULL;;
00150 }
00151 FileSystem* vl::defFileSystem()
00152 {
00153 return gDefaultFileSystem.get();
00154 }
00155 void vl::setDefFileSystem(FileSystem* fs)
00156 {
00157 gDefaultFileSystem = fs;
00158 }
00159
00160
00161
00162 namespace
00163 {
00164 ref<VLXRegistry> gDefaultVLXRegistry = NULL;
00165 }
00166 VLXRegistry* vl::defVLXRegistry()
00167 {
00168 return gDefaultVLXRegistry.get();
00169 }
00170 void vl::setDefVLXRegistry(VLXRegistry* reg)
00171 {
00172 gDefaultVLXRegistry = reg;
00173 }
00174
00175
00176
00177 namespace
00178 {
00179 ref<MersenneTwister> gDefaultMersenneTwister = NULL;
00180 }
00181 MersenneTwister* vl::defMersenneTwister()
00182 {
00183 return gDefaultMersenneTwister.get();
00184 }
00185 void vl::setDefMersenneTwister(MersenneTwister* reg)
00186 {
00187 gDefaultMersenneTwister= reg;
00188 }
00189
00190 void VisualizationLibrary::initCore(bool log_info)
00191 {
00192 VL_CHECK(!gInitializedCore);
00193 if (gInitializedCore)
00194 {
00195 Log::bug("VisualizationLibrary::initCore(): Visualization Library Core is already initialized!\n");
00196 return;
00197 }
00198
00199
00200
00201
00202 gSettings = new GlobalSettings;
00203
00204
00205 ref<StandardLog> logger = new StandardLog;
00206 logger->setLogFile( globalSettings()->defaultLogPath() );
00207 setDefLogger( logger.get() );
00208
00209
00210 gDefaultLoadWriterManager = new LoadWriterManager;
00211
00212
00213 gDefaultFileSystem = new FileSystem;
00214 gDefaultFileSystem->directories().push_back( new DiskDirectory( globalSettings()->defaultDataPath() ) );
00215
00216
00217 gDefaultVLXRegistry = new VLXRegistry;
00218
00219
00220 gDefaultMersenneTwister = new MersenneTwister;
00221
00222
00223 #if defined(VL_IO_2D_JPG)
00224 registerLoadWriter(new LoadWriterJPG);
00225 #endif
00226 #if defined(VL_IO_2D_PNG)
00227 registerLoadWriter(new LoadWriterPNG);
00228 #endif
00229 #if defined(VL_IO_2D_TIFF)
00230 registerLoadWriter(new LoadWriterTIFF);
00231 #endif
00232 #if defined(VL_IO_2D_TGA)
00233 registerLoadWriter(new LoadWriterTGA);
00234 #endif
00235 #if defined(VL_IO_2D_BMP)
00236 registerLoadWriter(new LoadWriterBMP);
00237 #endif
00238 #if defined(VL_IO_2D_DDS)
00239 registerLoadWriter(new LoadWriterDDS);
00240 #endif
00241 #if defined(VL_IO_2D_DAT)
00242 registerLoadWriter(new LoadWriterDAT);
00243 #endif
00244 #if defined(VL_IO_2D_DICOM)
00245 registerLoadWriter(new LoadWriterDICOM);
00246 #endif
00247
00248
00249 if (globalSettings()->verbosityLevel() && log_info)
00250 Log::logSystemInfo();
00251
00252
00253 gInitializedCore = true;
00254 }
00255
00256 void VisualizationLibrary::shutdownCore()
00257 {
00258
00259 gInitializedCore = false;
00260
00261
00262
00263
00264 gDefaultMersenneTwister = NULL;
00265
00266
00267 gDefaultVLXRegistry = NULL;
00268
00269
00270 gDefaultLoadWriterManager->loadCallbacks().clear();
00271 gDefaultLoadWriterManager->writeCallbacks().clear();
00272 gDefaultLoadWriterManager->loadWriters().clear();
00273 gDefaultLoadWriterManager = NULL;
00274
00275
00276 gDefaultFileSystem->directories().clear();
00277 gDefaultFileSystem = NULL;
00278
00279
00280 if (globalSettings()->verbosityLevel())
00281 {
00282 Log::print("Visualization Library shutdown.\n");
00283 }
00284
00285
00286
00287
00288
00289 }
00290
00291 void vl::abort_vl()
00292 {
00293 vl::Time::sleep(3000);
00294 exit(1);
00295 }
00296
00297 #if defined(VL_PLATFORM_WINDOWS)
00298
00299 #include <io.h>
00300 #include <fcntl.h>
00301 #endif
00302
00303 void vl::showWin32Console()
00304 {
00305 #if defined(VL_PLATFORM_WINDOWS)
00306 AllocConsole();
00307
00308 HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);
00309 int hCrt = _open_osfhandle((intptr_t)handle_out, _O_TEXT);
00310 FILE* hf_out = _fdopen(hCrt, "w");
00311 setvbuf(hf_out, NULL, _IONBF, 1);
00312 *stdout = *hf_out;
00313
00314 handle_out = GetStdHandle(STD_ERROR_HANDLE);
00315 hCrt = _open_osfhandle((intptr_t)handle_out, _O_TEXT);
00316 hf_out = _fdopen(hCrt, "w");
00317 setvbuf(hf_out, NULL, _IONBF, 1);
00318 *stderr = *hf_out;
00319 #endif
00320 }
00321