00001 #include "QMain.h"
00002 #include "QtGui/QFileDialog.h"
00003 #include <iostream>
00004
00005 QMain::QMain(QWidget* parent , Qt::WFlags flags )
00006 : QMainWindow(parent, flags)
00007 {
00008 setupUi(this);
00009 GLenum err = glewInit();
00010 if (err != GLEW_OK)
00011 {
00012
00013 std::cerr << "Error initializing GLEW: " << glewGetErrorString(err) << std::endl;
00014 std::cout << "Press a button to continue" << std::endl;
00015 std::cin.get();
00016
00017 }
00018 std::cout << "- GLEW initialized." << std::endl << std::endl;
00019
00020 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr());
00021
00022 m_ArrowsColor.setX(0.0f);
00023 m_ArrowsColor.setY(0.0f);
00024 m_ArrowsColor.setZ(0.0f);
00025 select_arrowlinescolor->setArrowsColorPtr(&m_ArrowsColor);
00026 renderer_canvas->setArrowsColorPtr(&m_ArrowsColor);
00027
00028 m_StreamlinesColor.setX(1.0f);
00029 m_StreamlinesColor.setY(1.0f);
00030 m_StreamlinesColor.setZ(1.0f);
00031 select_streamlinescolor->setStreamlinesColorPtr(&m_StreamlinesColor);
00032 renderer_canvas->setStreamlinesColorPtr(&m_StreamlinesColor);
00033
00034
00035 activeTF = 0;
00036 arrowTFactivated = false;
00037 streamLineTFactivated = false;
00038 licTFactivated = false;
00039
00040 int _c_x2, _c_y2;
00041 renderer_canvas->geometry().getCoords(&pixposx_rcanvas, &pixposy_rcanvas, &_c_x2, &_c_y2);
00042
00043 w_sizex = size().rwidth();
00044 w_sizey = size().rheight();
00045
00046 pixoffsetx_rcanvas = pixposx_rcanvas + ( (w_sizex -1) - _c_x2 );
00047 pixoffsety_rcanvas = pixposy_rcanvas + ( (w_sizey -1) - _c_y2 );
00048
00049 pTimer = new QTimer( this);
00050 connect( pTimer, SIGNAL(timeout()), this, SLOT(watch()) );
00051 pTimer->start(0);
00052
00053 pTimer_redraw = new QTimer( this);
00054 connect( pTimer_redraw, SIGNAL(timeout()), this, SLOT(redraw()) );
00055 pTimer_redraw->start(30);
00056
00057 m_streamlinesinteractive = false;
00058 comboseeds_active = 0;
00059
00060 setMinimumSize(w_sizex,w_sizey);
00061
00062
00063
00064
00065 connect( actionOpen, SIGNAL(triggered()), this, SLOT(load_data_file()) );
00066 connect( actionOpen_Single_Dat, SIGNAL(triggered()), this, SLOT(load_single_file()) );
00067 connect( actionSave_Volume, SIGNAL(triggered()), this, SLOT(save_data_file()) );
00068 connect( actionClose, SIGNAL(triggered()), this, SLOT(close()) );
00069 connect( actionLoad, SIGNAL(triggered()), this, SLOT(load_tf_file()) );
00070 connect( actionSave, SIGNAL(triggered()), this, SLOT(save_tf_file()) );
00071 connect( actionSave_Image, SIGNAL(triggered()), this, SLOT(save_image()) );
00072 connect( actionSave_Big_Image, SIGNAL(triggered()), this, SLOT(save_big_image()) );
00073 connect( actionStreamlineLoad, SIGNAL(triggered()), this, SLOT(loadStreamLines()) );
00074 connect( actionStreamlineSave, SIGNAL(triggered()), this, SLOT(saveStreamLines()) );
00075
00076
00077 connect( checkBox_activatearrows, SIGNAL(clicked( bool )), this, SLOT(activate_arrows( bool )));
00078 connect( checkBox_activatestreamlines, SIGNAL(clicked( bool )), this, SLOT(activate_streamlines( bool )));
00079 connect( checkBox_streamlinesinteractive, SIGNAL(clicked( bool )), this, SLOT(interactivate(bool)));
00080 connect( checkBox_enableTF_arrows, SIGNAL(clicked( bool )), this, SLOT(enableArrowTF(bool)));
00081 connect( checkBox_enableTF_streamlines, SIGNAL(clicked( bool )), this, SLOT(enableStreamLineTF(bool)));
00082 connect( checkBox_activateLIC, SIGNAL(clicked(bool)), this, SLOT(activateLIC(bool)));
00083 connect( checkBox_enableIcons, SIGNAL(clicked(bool)), this, SLOT(enableIcons(bool)));
00084 connect( checkBox_tapering, SIGNAL(clicked(bool)), this, SLOT(activateTapering(bool)));
00085 connect( checkBox_strglyphes, SIGNAL(clicked(bool)), this, SLOT(activateStrGlyphes(bool)) );
00086 connect( checkBox_enableTF_lic, SIGNAL(clicked(bool)), this, SLOT(enableLicTF(bool)) );
00087 connect( checkBox_animateLic, SIGNAL(clicked(bool)), this, SLOT(animateLic(bool)) );
00088
00089 connect( tfhorizscroll, SIGNAL(valueChanged(int)), this, SLOT(tf_horizscroll_valuechanged(int)) );
00090 connect( tfvertscroll, SIGNAL(valueChanged(int)), this, SLOT(tf_vertscroll_valuechanged(int)) );
00091
00092
00093 connect( slider_timestep, SIGNAL(valueChanged(int)), this, SLOT(slider_timestep_valuechanged(int)) );
00094 connect( slider_colmapping, SIGNAL(valueChanged(int)), this, SLOT(slider_colprop_valuechanged(int)) );
00095 connect( slider_arrowscale, SIGNAL(valueChanged(int)), this, SLOT(slider_arrowscale_valuechanged(int)) );
00096 connect( slider_arrowspacing, SIGNAL(valueChanged(int)), this, SLOT(slider_arrowspacing_valuechanged(int)) );
00097 connect( slider_dsep, SIGNAL(valueChanged(int)), this, SLOT(slider_dsep_valuechanged(int)) );
00098 connect( slider_dtest, SIGNAL(valueChanged(int)), this, SLOT(slider_dtest_valuechanged(int)) );
00099 connect( slider_steps, SIGNAL(valueChanged(int)), this, SLOT(slider_steps_valuechanged(int)) );
00100 connect( slider_dt, SIGNAL(valueChanged(int)), this, SLOT(slider_dt_valuechanged(int)) );
00101 connect( slider_arrowalpha, SIGNAL(valueChanged(int)), this, SLOT(slider_arrowalpha_valuechanged(int)) );
00102 connect( slider_stralpha, SIGNAL(valueChanged(int)), this, SLOT(slider_salpha_valuechanged(int)) );
00103 connect( slider_licalpha, SIGNAL(valueChanged(int)), this, SLOT(slider_licalpha_valuechanged(int)) );
00104 connect( slider_licsteps, SIGNAL(valueChanged(int)), this, SLOT(slider_licsteps_valuechanged(int)) );
00105 connect( slider_licstepsize, SIGNAL(valueChanged(int)), this, SLOT(slider_licstepsize_valuechanged(int)) );
00106 connect( slider_tapering, SIGNAL(valueChanged(int)), this, SLOT(slider_tapering_scale(int)) );
00107 connect( slider_iconscale, SIGNAL(valueChanged(int)), this, SLOT(slider_iconscale_valuechanged(int)) );
00108 connect( slider_taillength, SIGNAL(valueChanged(int)), this, SLOT(slider_icontail_valuechanged(int)) );
00109
00110
00111
00112 connect( rb_arrowscale_norm, SIGNAL(toggled(bool)), this, SLOT(rb_arrowscale_norm_clicked(bool)) );
00113 connect( rb_euler, SIGNAL(toggled(bool)), this, SLOT(rb_euler_clicked(bool)) );
00114 connect( rb_arrowcol_datavalue, SIGNAL(toggled(bool)), this, SLOT(rb_arrowcol_tf(bool)) );
00115 connect( rb_strcol_datavalue, SIGNAL(toggled(bool)), this, SLOT(rb_strcol_tf(bool)) );
00116
00117
00118 connect( button_computecpu, SIGNAL(clicked(bool)), this, SLOT(button_computecpu_clicked(bool)) );
00119
00120
00121 connect( combo_seedplacing, SIGNAL(activated(int)), this, SLOT(combo_seedsplacing_switched(int)));
00122 connect( comboBox, SIGNAL(activated(int)), this, SLOT(combo_choose_arrow(int)) );
00123
00124 tf_canvas->setVScroll(tfvertscroll);
00125 tf_canvas->setHScroll(tfhorizscroll);
00126
00127 tfvertscroll->setVisible(false);
00128 tfhorizscroll->setVisible(false);
00129
00130 combo_seedsplacing_switched( 0 );
00131
00132 }
00133
00134
00135 QMain::~QMain()
00136 {
00137
00138 delete pTimer;
00139 }
00140
00141 void QMain::redraw()
00142 {
00143 renderer_canvas->repaint();
00144 }
00145
00146 void QMain::tf_vertscroll_valuechanged(int val)
00147 {
00148 int x1, y1, x2, y2;
00149 tf_canvas->geometry().getCoords(&x1, &y1, &x2, &y2);
00150
00151 float sizex = x2-x1 + 1.0f;
00152 float sizey = y2-y1 + 1.0f;
00153
00154 float factor = (100.0f-(float)val)/(100.0f) * (sizey - sizey/3.0f -27.0f);
00155
00156 tf_canvas->setGeometry( QRect(x1, -(int)factor, sizex, sizey));
00157 }
00158
00159
00160
00161 void QMain::tf_horizscroll_valuechanged(int val)
00162 {
00163
00164 int x1, y1, x2, y2;
00165 tf_canvas->geometry().getCoords(&x1, &y1, &x2, &y2);
00166
00167 float sizex = x2-x1 + 1.0f;
00168 float sizey = y2-y1 + 1.0f;
00169
00170 float factor = ((float)val)/100.0f * (sizex - sizex/3);
00171
00172 tf_canvas->setGeometry( QRect(-(int)factor, y1, sizex, sizey));
00173
00174 }
00175
00176 void QMain::slider_timestep_valuechanged(int val)
00177 {
00178 char buffer[ 64 ];
00179
00180 sprintf_s(buffer, "Active Time Step: %d", val );
00181 label_activetimestep->setText( buffer );
00182
00183 renderer_canvas->timestep_changed_event( val );
00184
00185 if ( m_streamlinesinteractive )
00186 {
00187 renderer_canvas->computeCPUStreamlines( );
00188 }
00189
00190 }
00191
00192
00193 void QMain::slider_colprop_valuechanged(int val)
00194 {
00195 char buffer[ 64 ];
00196
00197 switch (val)
00198 {
00199 case 1:
00200 {
00201 renderer_canvas->coloringproperty_changed_event( val );
00202 if(!arrowTFactivated && !streamLineTFactivated && !licTFactivated)
00203 {
00204 sprintf_s(buffer, "Color Mapping Property: %d (Flow)", val );
00205 label_colmapping->setText( buffer );
00206 tf_canvas->setActiveTF( val );
00207 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr());
00208 }
00209 else
00210 {
00211 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr( val ));
00212 }
00213 break;
00214 }
00215 case 2:
00216 {
00217 renderer_canvas->coloringproperty_changed_event( val );
00218 if(!arrowTFactivated && !streamLineTFactivated && !licTFactivated)
00219 {
00220 sprintf_s(buffer, "Color Mapping Property: %d (.)", val );
00221 label_colmapping->setText( buffer );
00222 tf_canvas->setActiveTF( val );
00223 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr());
00224 }
00225 else
00226 {
00227 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr( val ));
00228 }
00229 break;
00230 }
00231 case 3:
00232 {
00233 renderer_canvas->coloringproperty_changed_event( val );
00234 if(!arrowTFactivated && !streamLineTFactivated && !licTFactivated)
00235 {
00236 sprintf_s(buffer, "Color Mapping Property: %d (.)", val );
00237 label_colmapping->setText( buffer );
00238 tf_canvas->setActiveTF( val );
00239 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr());
00240 }
00241 else
00242 {
00243 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr( val ));
00244 }
00245 break;
00246 }
00247 default:
00248 {
00249 renderer_canvas->coloringproperty_changed_event( 1 );
00250 if(!arrowTFactivated && !streamLineTFactivated && !licTFactivated)
00251 {
00252 sprintf_s(buffer, "Color Mapping Property: %d (Flow)", 1 );
00253 label_colmapping->setText( buffer );
00254 tf_canvas->setActiveTF( 1 );
00255 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr());
00256 }
00257 else
00258 {
00259 renderer_canvas->setTransferFunctionPtr(tf_canvas->getTransferFunctionPtr( 1 ));
00260 }
00261 break;
00262 }
00263 }
00264
00265
00266 activeTF = val;
00267
00268 if( renderer_canvas->getLoaded() )
00269 {
00270 int decint = renderer_canvas->getFlowDataMin();
00271 int udecint = (int)(100.0f * abs( renderer_canvas->getFlowDataMin() - (float)decint));
00272 sprintf_s(buffer, "%d.%d", decint, udecint );
00273 label_min->setText( buffer );
00274
00275 decint = renderer_canvas->getFlowDataMax();
00276 udecint = (int)(100.0f * abs( renderer_canvas->getFlowDataMax() - (float)decint));
00277 sprintf_s(buffer, "%d.%d", decint, udecint );
00278 label_maximum->setText( buffer );
00279
00280 }
00281
00282
00283
00284 }
00285
00286 void QMain::slider_arrowalpha_valuechanged(int val)
00287 {
00288 char buffer[ 64 ];
00289
00290 int alpha = (float)val / 100.0f;
00291 int nalpha = (int)(100.0f * abs( ((float)val / 100.0f) - (float)alpha));
00292
00293 sprintf_s(buffer, "Alpha %d.%d",alpha, nalpha );
00294 label_arrowalpha->setText( buffer );
00295
00296 renderer_canvas->arrowalpha_changed_event( (float)val / 100.0f );
00297 }
00298
00299 void QMain::slider_salpha_valuechanged(int val)
00300 {
00301 char buffer[ 64 ];
00302
00303 int alpha = (float)val / 100.0f;
00304 int nalpha = (int)(100.0f * abs( ((float)val / 100.0f) - (float)alpha));
00305
00306 sprintf_s(buffer, "Alpha %d.%d",alpha, nalpha );
00307 label_stralpha->setText( buffer );
00308
00309 renderer_canvas->salpha_changed_event( (float)val / 100.0f );
00310 }
00311
00312 void QMain::slider_arrowscale_valuechanged(int val)
00313 {
00314 renderer_canvas->arrowscale_valuechanged(val);
00315 }
00316
00317 void QMain::slider_iconscale_valuechanged(int val)
00318 {
00319 renderer_canvas->iconscale_valuechanged(val);
00320 }
00321
00322 void QMain::slider_icontail_valuechanged(int val)
00323 {
00324 renderer_canvas->icontail_valuechanged(val);
00325 }
00326
00327 void QMain::slider_arrowspacing_valuechanged(int val)
00328 {
00329 renderer_canvas->arrowspacing_valuechanged(val);
00330 }
00331
00332 void QMain::slider_dsep_valuechanged( int val )
00333 {
00334 char buffer[ 64 ];
00335 sprintf_s(buffer, "%f", (float)val / 100.0f );
00336 label_valdsep->setText( buffer );
00337 renderer_canvas->dsep_valuechanged(val);
00338
00339 if ( m_streamlinesinteractive )
00340 {
00341 renderer_canvas->computeCPUStreamlines( );
00342 }
00343 }
00344
00345 void QMain::slider_dtest_valuechanged( int val )
00346 {
00347 char buffer[ 64 ];
00348 sprintf_s(buffer, "%f", (float)val / 100.0f );
00349 label_valdtest->setText( buffer );
00350 renderer_canvas->dtest_valuechanged(val);
00351
00352 if ( m_streamlinesinteractive )
00353 {
00354 renderer_canvas->computeCPUStreamlines( );
00355 }
00356 }
00357
00358
00359 void QMain::slider_steps_valuechanged( int val )
00360 {
00361 char buffer[ 64 ];
00362 sprintf_s(buffer, "%f", (float)val / 100.0f );
00363 label_valsteps->setText( buffer );
00364 renderer_canvas->steps_valuechanged(val);
00365
00366 if ( m_streamlinesinteractive )
00367 {
00368 renderer_canvas->computeCPUStreamlines( );
00369 }
00370 }
00371
00372
00373 void QMain::slider_dt_valuechanged( int val )
00374 {
00375 char buffer[ 64 ];
00376 sprintf_s(buffer, "%f", (float)val / 100.0f );
00377 label_valdt->setText( buffer );
00378 renderer_canvas->dt_valuechanged(val);
00379
00380 if ( m_streamlinesinteractive )
00381 {
00382 renderer_canvas->computeCPUStreamlines( );
00383 }
00384
00385 }
00386
00387 void QMain::slider_licalpha_valuechanged(int val)
00388 {
00389 char buffer[ 64 ];
00390
00391 int alpha = (float)val / 100.0f;
00392 int nalpha = (int)(100.0f * abs( ((float)val / 100.0f) - (float)alpha));
00393
00394 sprintf_s(buffer, "Alpha %d.%d",alpha, nalpha );
00395 label_licalpha->setText( buffer );
00396
00397 renderer_canvas->licalpha_changed_event( (float)val / 100.0f );
00398 }
00399
00400 void QMain::slider_licsteps_valuechanged(int val)
00401 {
00402 char buffer[ 64 ];
00403
00404 sprintf_s(buffer, "%d",val );
00405 label_valdt_2->setText( buffer );
00406
00407 renderer_canvas->licsteps_changed_event( val );
00408 }
00409
00410 void QMain::slider_licstepsize_valuechanged(int val)
00411 {
00412 char buffer[ 64 ];
00413
00414 sprintf_s(buffer, "1 / %d",val );
00415 label_valsteps_2->setText( buffer );
00416
00417 renderer_canvas->licstepsize_changed_event( val );
00418 }
00419
00420 void QMain::rb_arrowscale_norm_clicked( bool val )
00421 {
00422
00423
00424 renderer_canvas->setArrowScaleModus( val );
00425
00426 }
00427
00428 void QMain::rb_euler_clicked( bool val )
00429 {
00430
00431
00432 renderer_canvas->setIntegrationMethod( val );
00433
00434 if ( m_streamlinesinteractive )
00435 {
00436 renderer_canvas->computeCPUStreamlines( );
00437 }
00438 }
00439
00440
00441 void QMain::rb_arrowcol_tf( bool val )
00442 {
00443 renderer_canvas->setArrowTF(val);
00444 }
00445
00446 void QMain::rb_strcol_tf( bool val )
00447 {
00448 renderer_canvas->setStrTF(val);
00449 }
00450
00451
00452 void QMain::button_computecpu_clicked( bool val )
00453 {
00454
00455
00456 renderer_canvas->computeCPUStreamlines( );
00457
00458 }
00459
00460 void QMain::combo_seedsplacing_switched( int val )
00461 {
00462 comboseeds_active = val;
00463
00464 renderer_canvas->setPlacingMethod( val );
00465
00466 if ( m_streamlinesinteractive )
00467 {
00468 renderer_canvas->computeCPUStreamlines( );
00469 }
00470 }
00471
00472 void QMain::combo_choose_arrow( int val )
00473 {
00474 comboseeds_active = val;
00475
00476 renderer_canvas->setGlyph( (val == 0) ? true : false );
00477 renderer_canvas->repaint();
00478 }
00479
00480 void QMain::activate_arrows( bool state )
00481 {
00482
00483 renderer_canvas->setArrowplotState( state );
00484 renderer_canvas->repaint();
00485 }
00486
00487 void QMain::activateLIC( bool state )
00488 {
00489 renderer_canvas->setLicplotState( state );
00490 renderer_canvas->repaint();
00491 }
00492
00493 void QMain::enableIcons( bool state )
00494 {
00495 renderer_canvas->enableIcons( state );
00496 renderer_canvas->repaint();
00497 }
00498
00499 void QMain::activateTapering( bool state )
00500 {
00501 renderer_canvas->setTaperingState( state );
00502 renderer_canvas->repaint();
00503 }
00504
00505 void QMain::activateStrGlyphes( bool state )
00506 {
00507 renderer_canvas->setStrGlyphes( state );
00508 renderer_canvas->repaint();
00509 }
00510
00511 void QMain::slider_tapering_scale( int val )
00512 {
00513 char buffer[ 64 ];
00514
00515 int alpha = val / 10;
00516 int nalpha = val - 10 * alpha;
00517
00518 sprintf_s(buffer, "Tapering (0.%d%d)",alpha, nalpha );
00519 checkBox_tapering->setText( buffer );
00520
00521 renderer_canvas->setTaperingScale( ( float )val / 100.0f );
00522 renderer_canvas->repaint();
00523 }
00524
00525 void QMain::enableArrowTF( bool state )
00526 {
00527 arrowTFactivated = state;
00528 if(state)
00529 {
00530
00531
00532
00533 tf_canvas->setActiveTF( 4 );
00534 renderer_canvas->setArrowTransferFunctionPtr(tf_canvas->getTransferFunctionPtr());
00535 }
00536 else
00537 {
00538 slider_colprop_valuechanged( activeTF );
00539 }
00540 }
00541
00542 void QMain::enableStreamLineTF( bool state )
00543 {
00544 streamLineTFactivated = state;
00545 if(state)
00546 {
00547
00548
00549
00550 tf_canvas->setActiveTF( 5 );
00551 renderer_canvas->setStreamLineTransferFunctionPtr(tf_canvas->getTransferFunctionPtr());
00552 }
00553 else
00554 {
00555 slider_colprop_valuechanged( activeTF );
00556 }
00557 }
00558
00559 void QMain::enableLicTF( bool state )
00560 {
00561 licTFactivated = state;
00562 if(state)
00563 {
00564
00565
00566
00567 tf_canvas->setActiveTF( 6 );
00568 renderer_canvas->setLicTransferFunctionPtr(tf_canvas->getTransferFunctionPtr());
00569
00570 }
00571 else
00572 {
00573 slider_colprop_valuechanged( activeTF );
00574 }
00575 renderer_canvas->setLicTF(state);
00576 }
00577
00578 void QMain::animateLic( bool state )
00579 {
00580 renderer_canvas->animateLic(state);
00581 }
00582
00583 void QMain::activate_streamlines( bool state )
00584 {
00585
00586 renderer_canvas->setStreamlinesState( state );
00587 renderer_canvas->repaint();
00588 }
00589
00590 void QMain::interactivate(bool state )
00591 {
00592 m_streamlinesinteractive = state;
00593 }
00594
00595 void QMain::watch()
00596 {
00597
00598 int _w_sizex, _w_sizey;
00599 _w_sizex = size().rwidth();
00600 _w_sizey = size().rheight();
00601
00602 if (_w_sizex != w_sizex || _w_sizey != w_sizey)
00603 {
00604
00605 int _c_sizex, _c_sizey;
00606 _c_sizex = _w_sizex - pixoffsetx_rcanvas;
00607 _c_sizey = _w_sizey - pixoffsety_rcanvas;
00608
00609 renderer_canvas->setGeometry(
00610 QRect(pixposx_rcanvas, pixposy_rcanvas, _c_sizex, _c_sizey));
00611
00612
00613 renderer_canvas->resizeGL( _c_sizex, _c_sizey );
00614
00615 w_sizex = _w_sizex;
00616 w_sizey = _w_sizey;
00617 }
00618
00619
00620 }
00621
00622
00623 void QMain::load_data_file()
00624 {
00625
00626
00627 std::cout << "load data" << std::endl;
00628
00629
00630 QString filename = QFileDialog::getOpenFileName(this,
00631 tr("Open Grid"), ".", tr("Grid Files (*.gri)"));
00632
00633 std::string tmp(filename.toAscii());
00634
00635 if(tmp == "")
00636 {
00637 return;
00638 }
00639
00640 int data[4];
00641 if ( !( renderer_canvas->load_data(filename, data) ) )
00642 {
00643 std::cerr << "Error loading file" << std::endl;
00644 return;
00645 }
00646
00647
00648
00649
00650
00651 std::string tmpfilename(filename.toAscii());
00652
00653 tmpfilename = tmpfilename.substr(tmpfilename.find_last_of('/') + 1, filename.length() - 1);
00654
00655 std::string test = "VisLU Volume Renderer: ";
00656 test += tmpfilename;
00657
00658 this->setWindowTitle(QApplication::translate("QMain", test.c_str() , 0, QApplication::UnicodeUTF8));
00659
00660
00661 slider_colmapping->setValue( 1 );
00662 slider_timestep->setValue( 1 );
00663 slider_colprop_valuechanged( 1 );
00664 slider_timestep_valuechanged( 1 );
00665 checkBox_tapering->setChecked( false );
00666
00667 char buffer[16];
00668
00669 sprintf_s(buffer, "%d", (int)renderer_canvas->getNumTimeSteps( ) );
00670 label_maxtimesteps->setText( buffer );
00671 slider_timestep->setMaximum( (int)renderer_canvas->getNumTimeSteps( ) );
00672
00673 sprintf_s(buffer, "%d", (int)renderer_canvas->getNumDataValues( ) );
00674 label_maxcolmapping->setText( buffer );
00675 slider_colmapping->setMaximum( (int)renderer_canvas->getNumDataValues( ) );
00676
00677 int decint = renderer_canvas->getFlowDataMin();
00678 int udecint = (int)(100.0f * abs( renderer_canvas->getFlowDataMin() - (float)decint));
00679 sprintf_s(buffer, "%d.%d", decint, udecint );
00680 label_min->setText( buffer );
00681
00682 decint = renderer_canvas->getFlowDataMax();
00683 udecint = (int)(100.0f * abs( renderer_canvas->getFlowDataMax() - (float)decint));
00684 sprintf_s(buffer, "%d.%d", decint, udecint );
00685 label_maximum->setText( buffer );
00686
00687 combo_seedsplacing_switched( comboseeds_active );
00688
00689
00690 renderer_canvas->repaint();
00691 tf_canvas->repaint();
00692 }
00693
00694 void QMain::load_single_file()
00695 {
00696
00697
00698 std::cout << "load data" << std::endl;
00699
00700
00701 QString filename = QFileDialog::getOpenFileName(this,
00702 tr("Open Grid"), ".", tr("Grid Files (*.gri)"));
00703
00704 QString datfilename = QFileDialog::getOpenFileName(this,
00705 tr("Open Dat"), ".", tr("Dat Files (*.dat)"));
00706
00707 std::string tmp(filename.toAscii());
00708
00709 if(tmp == "")
00710 {
00711 return;
00712 }
00713
00714 std::string dtmp(filename.toAscii());
00715
00716 if(dtmp == "")
00717 {
00718 return;
00719 }
00720
00721 int data[4];
00722 if ( !( renderer_canvas->load_single_data(filename, datfilename) ) )
00723 {
00724 std::cerr << "Error loading file" << std::endl;
00725 return;
00726 }
00727
00728
00729
00730
00731
00732 std::string tmpfilename(filename.toAscii());
00733
00734 tmpfilename = tmpfilename.substr(tmpfilename.find_last_of('/') + 1, filename.length() - 1);
00735
00736 std::string test = "VisLU Volume Renderer: ";
00737 test += tmpfilename;
00738
00739 this->setWindowTitle(QApplication::translate("QMain", test.c_str() , 0, QApplication::UnicodeUTF8));
00740
00741 slider_colmapping->setValue( 1 );
00742 slider_timestep->setValue( 1 );
00743 slider_colprop_valuechanged( 1 );
00744 slider_timestep_valuechanged( 1 );
00745 checkBox_tapering->setChecked( false );
00746
00747 char buffer[16];
00748
00749 sprintf_s(buffer, "%d", (int)renderer_canvas->getNumTimeSteps( ) );
00750 label_maxtimesteps->setText( buffer );
00751 slider_timestep->setMaximum( (int)renderer_canvas->getNumTimeSteps( ) );
00752
00753 sprintf_s(buffer, "%d", (int)renderer_canvas->getNumDataValues( ) );
00754 label_maxcolmapping->setText( buffer );
00755 slider_colmapping->setMaximum( (int)renderer_canvas->getNumDataValues( ) );
00756
00757 int decint = renderer_canvas->getFlowDataMin();
00758 int udecint = (int)(100.0f * abs( renderer_canvas->getFlowDataMin() - (float)decint));
00759 sprintf_s(buffer, "%d.%d", decint, udecint );
00760 label_min->setText( buffer );
00761
00762 decint = renderer_canvas->getFlowDataMax();
00763 udecint = (int)(100.0f * abs( renderer_canvas->getFlowDataMax() - (float)decint));
00764 sprintf_s(buffer, "%d.%d", decint, udecint );
00765 label_maximum->setText( buffer );
00766
00767 combo_seedsplacing_switched( comboseeds_active );
00768
00769
00770 renderer_canvas->repaint();
00771 tf_canvas->repaint();
00772 }
00773
00774 void QMain::save_data_file()
00775 {
00776
00777 std::cout << "saving data" << std::endl;
00778
00779
00780 QString filename = QFileDialog::getSaveFileName(this,
00781 tr("Save Volume with Gradient"), ".", tr("Volume Files with Gradient(*.gdat)"));
00782
00783 std::string tmp(filename.toAscii());
00784
00785 if(tmp == "")
00786 {
00787 return;
00788 }
00789
00790 std::string fileend = tmp.substr(tmp.size()-5, tmp.size()-1);
00791 if(fileend.compare(".gdat") != 0)
00792 {
00793 tmp += ".gdat";
00794 }
00795
00796 if ( !( renderer_canvas->save_data(tmp) ) )
00797 {
00798 std::cerr << "Error saving file" << std::endl;
00799 return;
00800 }
00801
00802
00803 }
00804
00805 void QMain::load_tf_file()
00806 {
00807 QString filename = QFileDialog::getOpenFileName(this,
00808 tr("Open TransferFunction"));
00809
00810 std::string tmp(filename.toAscii());
00811
00812 if(tmp == "")
00813 {
00814 return;
00815 }
00816
00817 tf_canvas->loadTf(tmp);
00818 tf_canvas->defaultSize();
00819
00820 std::string filend = tmp.substr(tmp.find_last_of('.'), tmp.size()-1);
00821
00822
00823
00824
00825 renderer_canvas->repaint();
00826 tf_canvas->repaint();
00827 }
00828
00829 void QMain::save_tf_file()
00830 {
00831 QString filename = QFileDialog::getSaveFileName(this,
00832 tr("Save TransferFunction"));
00833
00834 std::string tmp(filename.toAscii());
00835
00836 if(tmp == "")
00837 {
00838 return;
00839 }
00840
00841 tf_canvas->saveTf(tmp);
00842 }
00843
00844 void QMain::save_image()
00845 {
00846 QString filename = QFileDialog::getSaveFileName(this,
00847 tr("Save Image"), ".", tr("Image Files (*.tga)"));
00848
00849 std::string tmp(filename.toAscii());
00850
00851 if(tmp == "")
00852 {
00853 return;
00854 }
00855
00856 std::string fileend = tmp.substr(tmp.size()-4, tmp.size()-1);
00857 if(fileend.compare(".tga") != 0)
00858 {
00859 tmp += ".tga";
00860 }
00861 renderer_canvas->saveImage(tmp);
00862 }
00863
00864 void QMain::save_big_image()
00865 {
00866 QString filename = QFileDialog::getSaveFileName(this,
00867 tr("Save Image"), ".", tr("Image Files (*.tga)"));
00868
00869 std::string tmp(filename.toAscii());
00870
00871 if(tmp == "")
00872 {
00873 return;
00874 }
00875
00876 std::string fileend = tmp.substr(tmp.size()-4, tmp.size()-1);
00877 if(fileend.compare(".tga") != 0)
00878 {
00879 tmp += ".tga";
00880 }
00881 renderer_canvas->saveBigImage(tmp);
00882 }
00883
00884 void QMain::loadStreamLines()
00885 {
00886 QString filename = QFileDialog::getOpenFileName(this,
00887 tr("Open StreamLines"), ".", tr("Streamline Files (*.bsl)"));
00888
00889 std::string tmp(filename.toAscii());
00890
00891 if(tmp == "")
00892 {
00893 return;
00894 }
00895
00896 renderer_canvas->loadStreamLines(tmp);
00897
00898
00899 renderer_canvas->repaint();
00900 }
00901
00902 void QMain::saveStreamLines()
00903 {
00904
00905 QString filename = QFileDialog::getSaveFileName(this,
00906 tr("Save Streamlines"), ".", tr("Streamline Files(*.bsl)"));
00907
00908 std::string tmp(filename.toAscii());
00909
00910 if(tmp == "")
00911 {
00912 return;
00913 }
00914
00915 std::string fileend = tmp.substr(tmp.size()-4, tmp.size()-1);
00916 if(fileend.compare(".bsl") != 0)
00917 {
00918 tmp += ".bsl";
00919 }
00920
00921 renderer_canvas->saveStreamLines(tmp);
00922
00923 }