Eigene Dateien/FlowVis/src/QMain.cpp

Go to the documentation of this file.
00001 #include "QMain.h"
00002 #include "QtGui/QFileDialog.h"
00003 #include <iostream>
00004 
00005 QMain::QMain(QWidget* parent /*= 0*/, Qt::WFlags flags /*= 0*/) 
00006                                                                 : QMainWindow(parent, flags)
00007 {
00008         setupUi(this);
00009         GLenum err = glewInit();
00010         if (err != GLEW_OK)
00011         {
00012                 // glewInit failed, something is seriously wrong
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 //              exit(-1);
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         //std::cout << (int)(-0.05) << std::endl;
00063         
00064         //actions
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         //check boxes
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         //scrolls
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         //sliders
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         //radiobuttons
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         //buttons
00118         connect( button_computecpu,                     SIGNAL(clicked(bool)),                  this, SLOT(button_computecpu_clicked(bool)) );
00119 
00120         //combos
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         //true normalized scale toggled
00423         //false adaptive size toggled
00424         renderer_canvas->setArrowScaleModus( val );
00425 
00426 }
00427 
00428 void QMain::rb_euler_clicked( bool val )
00429 {
00430         //true euler toggled
00431         //false runge-kutta toggled
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         //true normalized scale toggled
00455         //false adaptive size toggled
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                 //sprintf_s(buffer, "Color Mapping Property: %d (Flow)", val );
00531                 //label_colmapping->setText( buffer );
00532                 //renderer_canvas->coloringproperty_changed_event( val );
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                 //sprintf_s(buffer, "Color Mapping Property: %d (Flow)", val );
00548                 //label_colmapping->setText( buffer );
00549                 //renderer_canvas->coloringproperty_changed_event( val );
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                 //sprintf_s(buffer, "Color Mapping Property: %d (Flow)", val );
00565                 //label_colmapping->setText( buffer );
00566                 //renderer_canvas->coloringproperty_changed_event( val );
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         //file dialog, retrieve filename and path
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         //voldimx = data[0];
00648         //voldimy = data[1];
00649         //voldimz = data[2];
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         //file dialog, retrieve filename and path
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         //voldimx = data[0];
00729         //voldimy = data[1];
00730         //voldimz = data[2];
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         //file dialog, retrieve filename and path
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 }

Generated on Mon Jan 21 01:15:15 2008 for FlowVis by  doxygen 1.5.4