#include <3dvis.h>
Public Methods | |
| CMy3dvisApp () | |
| virtual BOOL | InitInstance () |
| virtual int | ExitInstance () |
| afx_msg void | OnAppAbout () |
| afx_msg void | OnFileOpen () |
| afx_msg void | OnFClose () |
| afx_msg void | OnRenderVolume () |
| afx_msg void | OnOptionsTransfer () |
| afx_msg void | OnPreset0 () |
| afx_msg void | OnPreset1 () |
| afx_msg void | OnPreset2 () |
| afx_msg void | OnPreset3 () |
| afx_msg void | OnPreset4 () |
| afx_msg void | OnPreset5 () |
| afx_msg void | OnPreset6 () |
| afx_msg void | OnPreset7 () |
| afx_msg void | OnPreset8 () |
| afx_msg void | OnPreset9 () |
| afx_msg void | OnFileInfo () |
| afx_msg void | OnMenuVolume () |
| afx_msg void | OnFileIni () |
Public Attributes | |
| bool | m_bRenderVolume |
| int | m_dNumPresets |
| Transfunc * | transferFunction |
| string | programPath |
Private Methods | |
| void | m_BuildTransferFunction (INDEXLIST &function, int num) |
| void | m_ProcessIniFile (bool store=false) |
Private Attributes | |
| int | m_dOperation |
| bool | m_bOpen |
| bool | m_bClicked |
| int | m_dFileThres |
| int | m_dPacketSize |
| transferfuncform | m_Transferdiag |
| INDEXLIST * | presetTransformFunctions |
|
|
3dvis.cpp class CMy3dvisApp Definition at line 57 of file 3dvis.cpp. References m_bClicked, m_bRenderVolume, m_dFileThres, m_dOperation, m_dPacketSize, programPath, and transferFunction.
00058 {
00059 // TODO: add construction code here,
00060 // Place all significant initialization in InitInstance
00061 m_bRenderVolume = false;
00062 m_bClicked = false;
00063 transferFunction = NULL;
00064
00065 m_dFileThres = 40;
00066 m_dPacketSize = 10;
00067
00068 m_dOperation = 0;
00069
00070 char path[_MAX_PATH + 1];
00071
00072 GetModuleFileName(m_hInstance, path, sizeof(path));
00073
00074 string temp = path;
00075 int pos = temp.find_last_of('\\', temp.size());
00076 programPath = temp.substr(0, pos + 1);
00077 }
|
|
|
Definition at line 199 of file 3dvis.cpp. References transferFunction.
00200 {
00201 // TODO: Add your specialized code here and/or call the base class
00202 if (data3D != NULL) {
00203 delete data3D;
00204 data3D = NULL;
00205 }
00206
00207 if (slice != NULL) {
00208 delete slice;
00209 slice = NULL;
00210 }
00211
00212 if (raycaster != NULL) {
00213 delete raycaster;
00214 raycaster = NULL;
00215 }
00216
00217 if (transferFunction != NULL) {
00218 delete transferFunction;
00219 transferFunction = NULL;
00220 }
00221
00222 return CWinApp::ExitInstance();
00223 }
|
|
|
Definition at line 87 of file 3dvis.cpp. References CTransfuncFile::LoadPresets(), m_ProcessIniFile(), and presetTransformFunctions.
00088 {
00089
00090 CTransfuncFile funcFile;
00091 presetTransformFunctions = funcFile.LoadPresets(m_dNumPresets);
00092
00093
00094 // Standard initialization
00095 // If you are not using these features and wish to reduce the size
00096 // of your final executable, you should remove from the following
00097 // the specific initialization routines you do not need.
00098
00099 #ifdef _AFXDLL
00100 Enable3dControls(); // Call this when using MFC in a shared DLL
00101 #else
00102 Enable3dControlsStatic(); // Call this when linking to MFC statically
00103 #endif
00104
00105 // Change the registry key under which our settings are stored.
00106 // TODO: You should modify this string to be something appropriate
00107 // such as the name of your company or organization.
00108 SetRegistryKey(_T("Local AppWizard-Generated Applications"));
00109
00110 LoadStdProfileSettings(); // Load standard INI file options (including MRU)
00111
00112 // Register the application's document templates. Document templates
00113 // serve as the connection between documents, frame windows and views.
00114
00115 CSingleDocTemplate* pDocTemplate;
00116 pDocTemplate = new CSingleDocTemplate(
00117 IDR_MAINFRAME,
00118 RUNTIME_CLASS(CMy3dvisDoc),
00119 RUNTIME_CLASS(CMainFrame), // main SDI frame window
00120 RUNTIME_CLASS(CMy3dvisView));
00121 AddDocTemplate(pDocTemplate);
00122
00123 // Parse command line for standard shell commands, DDE, file open
00124 CCommandLineInfo cmdInfo;
00125 ParseCommandLine(cmdInfo);
00126
00127 // Dispatch commands specified on the command line
00128 if (!ProcessShellCommand(cmdInfo))
00129 return FALSE;
00130
00131
00132 m_ProcessIniFile();
00133
00134
00135 // The one and only window has been initialized, so show and update it.
00136 m_pMainWnd->ShowWindow(SW_SHOW);
00137 m_pMainWnd->UpdateWindow();
00138 return TRUE;
00139 }
|
|
||||||||||||
|
void CMy3dvisApp::m_BuildTransferFunction(INDEXLIST &function, int num) speichert die übergebene transferfunktion im globalen transferfunktions-objekt Definition at line 399 of file 3dvis.cpp. References rgb::b, rgb::g, rgb::r, Transfunc::SetDensityColor(), Transfunc::SetOpacity(), and transferFunction. Referenced by OnOptionsTransfer(), OnPreset0(), OnPreset1(), OnPreset2(), OnPreset3(), OnPreset4(), OnPreset5(), OnPreset6(), OnPreset7(), OnPreset8(), and OnPreset9().
00399 {
00400 if (!data3D)
00401 return;
00402
00403 if (!transferFunction)
00404 transferFunction = new Transfunc();
00405
00406 rgb col;
00407
00408 float alpha_begin = 0.0;
00409 float alpha_end = 1.0;
00410
00411
00412 for (int i = 1; i <= num; i++) {
00413 COLORREF c = function[i].m_scColor;
00414 col.r = (unsigned char)(function[i].m_scColor & 0x000000FF);
00415 col.g = (unsigned char)((function[i].m_scColor & 0x0000FF00) >> 8);
00416 col.b = (unsigned char)((function[i].m_scColor & 0x00FF0000) >> 16);
00417
00418 float thres = function[i].m_sdEnd - function[i].m_sdBegin;
00419 float size = thres * 0.1;
00420
00421 if (i > 1)
00422 alpha_begin = (float)function[i - 1].m_ucAlpha / 255;
00423 else
00424 alpha_begin = 0.0;
00425
00426
00427 if (i == num)
00428 alpha_end = 0.0;
00429 else
00430 alpha_end = (float)function[i].m_ucAlpha / 255;
00431
00432 float alpha = alpha_end - alpha_begin;
00433 float step = alpha / size;
00434 if (i > 1)
00435 alpha = (float)function[i].m_ucAlpha / 255;
00436
00437
00438 for (int j = function[i].m_sdBegin; j < function[i].m_sdEnd; j++) {
00439 transferFunction->SetDensityColor(j, col);
00440 if ((alpha > 0.0) && ((alpha + step) <= alpha_end))
00441 alpha += step;
00442 // transferFunction->SetOpacity(j, ((float)function[i].m_ucAlpha / 255));
00443 transferFunction->SetOpacity(j, alpha);
00444 }
00445 }
00446
00447 if (slice == NULL)
00448 slice = new Slice();
00449
00450 slice->SetTransferfunction(transferFunction);
00451 slice->SetPixels(data3D, -1);
00452 }
|
|
|
void CMy3dvisApp::m_ProcessIniFile(bool store) lädt wenn vorhanden die dateigrößen schwelle und die packetgröße für den dateilade vorgang Definition at line 476 of file 3dvis.cpp. References m_dFileThres, m_dPacketSize, and programPath. Referenced by InitInstance(), OnFileIni(), and OnFileOpen().
00476 {
00477 FILE *file;
00478
00479 string filename = programPath + "config.ini";
00480
00481 if (!store && (file = fopen(filename.c_str(), "r")) != NULL) {
00482 if (!data3D)
00483 return;
00484
00485 fscanf(file, "%d\n%d", &m_dFileThres, &m_dPacketSize);
00486 data3D->SetFileThreshold(m_dFileThres);
00487 data3D->SetDataPackets(m_dPacketSize);
00488
00489 fclose(file);
00490
00491 return;
00492 }
00493
00494
00495 if ((file = fopen(filename.c_str(), "w")) != NULL) {
00496 m_dFileThres = 40;
00497 m_dPacketSize = 10;
00498
00499 fprintf(file, "%d\n%d", m_dFileThres, m_dPacketSize);
00500 fclose(file);
00501 }
00502
00503
00504 }
|
|
|
Definition at line 189 of file 3dvis.cpp.
00190 {
00191 CAboutDlg aboutDlg;
00192 aboutDlg.DoModal();
00193 }
|
|
|
void CMy3dvisApp::OnFClose() fragt nach ob die datei geschlossen werden soll und schließt diese danach Definition at line 296 of file 3dvis.cpp. References m_bOpen. Referenced by OnFileOpen().
00297 {
00298 // TODO: Add your command handler code here
00299
00300 if (data3D && !m_bOpen && MessageBox(m_pMainWnd->m_hWnd, "do you really want to close the\ncurrent data-set?",
00301 "close data-set", MB_YESNO) == IDNO)
00302 return;
00303
00304
00305 AfxGetMainWnd()->SendMessage(MYWM_HIDE_BARS);
00306
00307
00308 if (slice != NULL) {
00309 delete slice;
00310 slice = NULL;
00311 }
00312
00313 if (data3D != NULL) {
00314 delete data3D;
00315 data3D = NULL;
00316 }
00317
00318 m_pMainWnd->SetWindowText("3D Visualisation");
00319 }
|
|
|
Definition at line 455 of file 3dvis.cpp. References CFileInfoDialog::SetInfo().
00456 {
00457 // TODO: Add your command handler code here
00458 if (!data3D)
00459 return;
00460
00461 CFileInfoDialog fid;
00462 fid.SetInfo(data3D->filename, data3D->GetXDim(), data3D->GetYDim(), data3D->GetZDim());
00463 fid.DoModal();
00464 }
|
|
|
Definition at line 506 of file 3dvis.cpp. References IniFile::GetData(), m_ProcessIniFile(), and IniFile::SetupData().
00507 {
00508 // TODO: Add your command handler code here
00509 IniFile inifile;
00510 inifile.SetupData(m_dFileThres, m_dPacketSize);
00511 int answer = inifile.DoModal();
00512
00513 if (answer == IDCANCEL)
00514 return;
00515
00516
00517 inifile.GetData(m_dFileThres, m_dPacketSize);
00518 m_ProcessIniFile(true);
00519 }
|
|
|
void CMy3dvisApp::OnFileOpen() öffnet einen dateidialog und versucht die ausgewähle datei zu laden wenn bereits eine datei geladen ist, wird diese zuerst geschlossen nach erfolgreichem laden, wird die slicer oberfläche angezeigt Definition at line 229 of file 3dvis.cpp. References m_bOpen, m_bRenderVolume, m_ProcessIniFile(), and OnFClose().
00230 {
00231 // TODO: Add your command handler code here
00232 CFileDialog fd(TRUE, NULL, NULL, OFN_FILEMUSTEXIST,
00233 "Dat Files (*.dat)|*.dat| AllFiles (*.*)|* *|", m_pMainWnd);
00234
00235
00236 int returnVal = fd.DoModal();
00237
00238 if(returnVal == IDOK) {
00239
00240 m_bOpen = true;
00241 this->OnFClose();
00242 m_bOpen = false;
00243
00244 if (data3D != NULL) {
00245 if (MessageBox(m_pMainWnd->m_hWnd, "Already data loaded! Unload currend data?",
00246 "load new data", MB_YESNO) == IDYES) {
00247 delete data3D;
00248 data3D = NULL;
00249 }
00250 else
00251 return;
00252 }
00253
00254
00255 CString filename = fd.GetFileName();
00256 char *fn = new char[filename.GetLength() + 1];
00257 for (int i = 0; i < filename.GetLength(); i++) {
00258 fn[i] = filename.GetAt(i);
00259 }
00260 fn[i] = '\0';
00261
00262
00263 data3D = new Data();
00264 m_ProcessIniFile();
00265
00266
00267 SetWindowText(m_pMainWnd->m_hWnd, "3D Visualisation - loading visualisation data, please wait,...");
00268
00269 data3D->LoadData(fn);
00270 delete[] fn;
00271
00272
00273 m_bRenderVolume = false;
00274
00275
00276 if (slice == NULL)
00277 slice = new Slice();
00278
00279 slice->SetPixels(data3D, 0);
00280 int num = slice->GetSliceNumber(data3D);
00281
00282
00283
00284 if (!m_bRenderVolume)
00285 AfxGetMainWnd()->SendMessage(MYWM_SHOW_BAR, (WPARAM) 0, (LPARAM) 0);
00286 else
00287 AfxGetMainWnd()->SendMessage(MYWM_SHOW_BAR, (WPARAM) 1, (LPARAM) 0);
00288
00289
00290 SetWindowText(m_pMainWnd->m_hWnd, CString("3D Visualisation - loaded \"" + filename + "\""));
00291 }
00292 }
|
|
|
Definition at line 466 of file 3dvis.cpp.
00467 {
00468 // TODO: Add your command handler code here
00469 AfxGetMainWnd()->SendMessage(MYWM_CHANGE_RENDERING, (WPARAM) 1, 1);
00470 }
|
|
|
void CMy3dvisApp::OnOptionsTransfer() öffnet den transferfunktionsdialog Definition at line 323 of file 3dvis.cpp. References m_BuildTransferFunction(), m_Transferdiag, and transferfuncform::m_vTransferIndices.
00324 {
00325 // TODO: Add your command handler code here
00326 if (data3D == NULL)
00327 return;
00328
00329 int response = m_Transferdiag.DoModal();
00330
00331
00332 if (response == IDOK) {
00333 int num = m_Transferdiag.m_vTransferIndices.size() - 1;
00334
00335 if (num <= 0)
00336 return;
00337
00338 m_BuildTransferFunction(m_Transferdiag.m_vTransferIndices, num);
00339 }
00340
00341
00342 m_pMainWnd->Invalidate();
00343 m_pMainWnd->UpdateWindow();
00344 }
|
|
|
Definition at line 347 of file 3dvis.cpp. References m_BuildTransferFunction().
00347 {
00348 m_BuildTransferFunction(presetTransformFunctions[0],
00349 presetTransformFunctions[0].size() - 1);
00350 }
|
|
|
Definition at line 352 of file 3dvis.cpp. References m_BuildTransferFunction().
00352 {
00353 m_BuildTransferFunction(presetTransformFunctions[1],
00354 presetTransformFunctions[1].size() - 1);
00355 }
|
|
|
Definition at line 357 of file 3dvis.cpp. References m_BuildTransferFunction().
00357 {
00358 m_BuildTransferFunction(presetTransformFunctions[2],
00359 presetTransformFunctions[2].size() - 1);
00360 }
|
|
|
Definition at line 362 of file 3dvis.cpp. References m_BuildTransferFunction().
00362 {
00363 m_BuildTransferFunction(presetTransformFunctions[3],
00364 presetTransformFunctions[3].size() - 1);
00365 }
|
|
|
Definition at line 367 of file 3dvis.cpp. References m_BuildTransferFunction().
00367 {
00368 m_BuildTransferFunction(presetTransformFunctions[4],
00369 presetTransformFunctions[4].size() - 1);
00370 }
|
|
|
Definition at line 372 of file 3dvis.cpp. References m_BuildTransferFunction().
00372 {
00373 m_BuildTransferFunction(presetTransformFunctions[5],
00374 presetTransformFunctions[5].size() - 1);
00375 }
|
|
|
Definition at line 377 of file 3dvis.cpp. References m_BuildTransferFunction().
00377 {
00378 m_BuildTransferFunction(presetTransformFunctions[6],
00379 presetTransformFunctions[6].size() - 1);
00380 }
|
|
|
Definition at line 382 of file 3dvis.cpp. References m_BuildTransferFunction().
00382 {
00383 m_BuildTransferFunction(presetTransformFunctions[7],
00384 presetTransformFunctions[7].size() - 1);
00385 }
|
|
|
Definition at line 387 of file 3dvis.cpp. References m_BuildTransferFunction().
00387 {
00388 m_BuildTransferFunction(presetTransformFunctions[8],
00389 presetTransformFunctions[8].size() - 1);
00390 }
|
|
|
Definition at line 392 of file 3dvis.cpp. References m_BuildTransferFunction().
00392 {
00393 m_BuildTransferFunction(presetTransformFunctions[9],
00394 presetTransformFunctions[9].size() - 1);
00395 }
|
|
|
void CMy3dvisApp::OnRenderVolume() schlatet bei betätigen des "V" buttons zwischen dem slicer und dem volume-renderer um Definition at line 525 of file 3dvis.cpp.
00526 {
00527 // TODO: Add your command handler code here
00528 if (!data3D || !slice)
00529 return;
00530
00531 if (!((CMy3dvisApp *)AfxGetApp())->transferFunction) {
00532 MessageBox(m_pMainWnd->m_hWnd,
00533 "please select or create a transferfunction",
00534 "transferfunction missing",
00535 MB_OK);
00536 return;
00537 }
00538
00539
00540 if (((CMy3dvisApp *)AfxGetApp())->m_bRenderVolume) {
00541 ((CMy3dvisApp *)AfxGetApp())->m_bRenderVolume = false;
00542
00543 AfxGetMainWnd()->SendMessage(MYWM_CHANGE_RENDERING, (WPARAM) 0, (LPARAM) 0);
00544 }
00545 else {
00546 ((CMy3dvisApp *)AfxGetApp())->m_bRenderVolume = true;
00547
00548 AfxGetMainWnd()->SendMessage(MYWM_CHANGE_RENDERING, (WPARAM) 1, (LPARAM) 0);
00549
00550 raycaster = new Raycaster();
00551 raycaster->SetViewingCondition(VECTOR(300,300,300),Color(0.0f,1.0f,0.0f),0.3f,0.4f,0.2f,8);
00552
00553 raycaster->Initialize(/*VECTOR(92,-20,85),*/400,400,1.0f,data3D,((CMy3dvisApp *)AfxGetApp())->transferFunction);
00554 raycaster->Zoom(1.1f); // werte > 1.0 hinein zoomen <1.0 wegzoomen
00555
00556 raycaster->SetTreshold(1500);
00557 raycaster->SetRaytype(NN);
00558 raycaster->SetRendermode(FH);
00559 raycaster->SetPreCalcGradients(true);
00560 }
00561 } |
|
|
Definition at line 35 of file 3dvis.h. Referenced by CMy3dvisApp(). |
|
|
Definition at line 34 of file 3dvis.h. Referenced by OnFClose(), and OnFileOpen(). |
|
|
Definition at line 50 of file 3dvis.h. Referenced by CMy3dvisApp(), and OnFileOpen(). |
|
|
Definition at line 37 of file 3dvis.h. Referenced by CMy3dvisApp(), and m_ProcessIniFile(). |
|
|
|
|
|
Definition at line 32 of file 3dvis.h. Referenced by CMy3dvisApp(). |
|
|
Definition at line 38 of file 3dvis.h. Referenced by CMy3dvisApp(), and m_ProcessIniFile(). |
|
|
Definition at line 40 of file 3dvis.h. Referenced by OnOptionsTransfer(). |
|
|
Definition at line 42 of file 3dvis.h. Referenced by InitInstance(). |
|
|
Definition at line 54 of file 3dvis.h. Referenced by CMy3dvisApp(), and m_ProcessIniFile(). |
|
|
Definition at line 52 of file 3dvis.h. Referenced by CMy3dvisApp(), ExitInstance(), and m_BuildTransferFunction(). |
1.3-rc2