• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

mainwindow.cpp

Go to the documentation of this file.
00001 
00002 
00003 #include "mainwindow.h"
00004 #include "ui_mainwindow.h"
00005 
00006 #include "Volume.h"
00007 
00008 MainWindow::MainWindow(QWidget *parent) :
00009     QMainWindow(parent),
00010     ui(new Ui::MainWindow)
00011 {
00012     ui->setupUi(this);
00013 
00014     // transfer function editor
00015     setWindowTitle(tr("Visualisierung LU 1"));
00016 
00017     m_gradient_editor = new GradientEditor(ui->transferFunctionGroupBox);
00018 
00019     QVBoxLayout *editorGroupLayout = new QVBoxLayout(ui->transferFunctionGroupBox);
00020     editorGroupLayout->addWidget(m_gradient_editor);
00021 
00022     // volume renderer view
00023     m_volume_renderer = new VolumeRenderer(ui->rendererGroupBox);
00024     ui->renderingLayout->addWidget(m_volume_renderer);
00025 
00026     m_volume_renderer->setRenderingOptions(&options);
00027 
00028     //connect(m_gradient_editor, SIGNAL(gradientStopsChanged(QGradientStops)),
00029     //        m_volume_renderer, SLOT(setGradientStops(QGradientStops)));
00030 
00031     // Light and reflection coefficients
00032     m_lightColorLabel = new ColorLabel(ui->optionsGroupBox);
00033     m_lightColorLabel->setColor(options.light);
00034     ui->optionsGridLayout->addWidget(m_lightColorLabel, 0, 1);
00035 
00036     m_ambientColorLabel = new ColorLabel(ui->optionsGroupBox);
00037     m_ambientColorLabel->setColor(options.ambient);
00038     ui->optionsGridLayout->addWidget(m_ambientColorLabel, 0, 3);
00039 
00040     m_diffuseColorLabel = new ColorLabel(ui->optionsGroupBox);
00041     m_diffuseColorLabel->setColor(options.diffuse);
00042     ui->optionsGridLayout->addWidget(m_diffuseColorLabel, 1, 3);
00043 
00044     m_specularColorLabel = new ColorLabel(ui->optionsGroupBox);
00045     m_specularColorLabel->setColor(options.specular);
00046     ui->optionsGridLayout->addWidget(m_specularColorLabel, 2, 3);
00047 
00048     ui->exponentSpinBox->setValue(options.exponent);
00049 
00050     connect(ui->samplesSpinBox, SIGNAL(editingFinished()),
00051             this, SLOT(updateRenderingOptions()));
00052     connect(ui->k1SpinBox, SIGNAL(editingFinished()),
00053             this, SLOT(updateRenderingOptions()));
00054     connect(ui->k2SpinBox, SIGNAL(editingFinished()),
00055             this, SLOT(updateRenderingOptions()));
00056     connect(ui->exponentSpinBox, SIGNAL(editingFinished()),
00057             this, SLOT(updateRenderingOptions()));
00058     connect(m_lightColorLabel, SIGNAL(editingFinished()),
00059             this, SLOT(updateRenderingOptions()));
00060     connect(m_ambientColorLabel, SIGNAL(editingFinished()),
00061             this, SLOT(updateRenderingOptions()));
00062     connect(m_diffuseColorLabel, SIGNAL(editingFinished()),
00063             this, SLOT(updateRenderingOptions()));
00064     connect(m_specularColorLabel, SIGNAL(editingFinished()),
00065             this, SLOT(updateRenderingOptions()));
00066     connect(m_gradient_editor, SIGNAL(gradientStopsChanged(QGradientStops)),
00067             this, SLOT(updateTransferFunction()));
00068 
00069     volume = NULL;
00070 
00071     ui->slicingScrollBar->setMinimum(0);
00072     updateTransferFunction();
00073 }
00074 
00075 MainWindow::~MainWindow()
00076 {
00077     delete ui;
00078     if (volume != NULL) {
00079         delete volume;
00080         volume = NULL;
00081     }
00082 }
00083 
00084 void MainWindow::setDefault()
00085 {
00086     // set default stops
00087     QGradientStops stops;
00088 
00089     stops << QGradientStop(0.00, QColor::fromRgba(0x00ffffff));
00090     stops << QGradientStop(1.00, QColor::fromRgba(0xffffffff));
00091 
00092     m_gradient_editor->setGradientStops(stops);
00093     m_volume_renderer->setGradientStops(stops);
00094 }
00095 
00096 void MainWindow::reset_slicing_scrollbar()
00097 {
00098     if (volume != NULL) {
00099         int idx = ui->slicingComboBox->currentIndex();
00100         if (idx == 0) { // X Axis
00101             ui->slicingScrollBar->setMaximum(volume->GetWidth() - 1);
00102         } else if (idx == 1) { // Y Axis
00103             ui->slicingScrollBar->setMaximum(volume->GetHeight() - 1);
00104         } else if (idx == 2) { // Z Axis
00105             ui->slicingScrollBar->setMaximum(volume->GetDepth() - 1);
00106         }
00107         ui->slicingScrollBar->setValue(0);
00108     }
00109 }
00110 
00111 void MainWindow::update_slicing_view()
00112 {
00113     ui->slicingView->setDirection(ui->slicingComboBox->currentIndex());
00114     ui->slicingView->setPosition(ui->slicingScrollBar->value());
00115 
00116     // set view size to natural size of volume so image isn't scaled
00117     if (volume)
00118     {
00119         int idx = ui->slicingComboBox->currentIndex();
00120         int scale = 1;
00121         if (idx == 0) { // X Axis
00122             ui->slicingView->setMinimumSize(volume->GetDepth()*scale, volume->GetHeight()*scale);
00123             ui->slicingView->setMaximumSize(volume->GetDepth()*scale, volume->GetHeight()*scale);
00124         } else if (idx == 1) { // Y Axis
00125             ui->slicingView->setMinimumSize(volume->GetWidth()*scale, volume->GetDepth()*scale);
00126             ui->slicingView->setMaximumSize(volume->GetWidth()*scale, volume->GetDepth()*scale);
00127         } else if (idx == 2) { // Z Axis
00128             ui->slicingView->setMinimumSize(volume->GetWidth()*scale, volume->GetHeight()*scale);
00129             ui->slicingView->setMaximumSize(volume->GetWidth()*scale, volume->GetHeight()*scale);
00130         }
00131 
00132     }
00133     ui->slicingView->repaint();
00134 }
00135 
00136 void MainWindow::on_actionDatensatz_laden_triggered()
00137 {
00138     QString fileName = QFileDialog::getOpenFileName(this, tr("Datensatz laden"), ".", tr("DAT files (*.dat)"));
00139 
00140     // user may abort the file dialog, in which case the file name will be empty
00141     if (!fileName.isEmpty())
00142     {
00143         // free the old volume, if any
00144         if (volume)
00145             delete volume;
00146 
00147         volume = new Volume(fileName.toStdString());
00148 
00149         ui->slicingView->setVolume(volume);
00150         ui->slicingView->setDirection(SlicingView::DIRECTION_X);
00151         ui->slicingView->setPosition(0);
00152         ui->slicingView->repaint();
00153 
00154         reset_slicing_scrollbar();
00155         update_slicing_view();
00156 
00157         m_volume_renderer->setVolume(volume);
00158         //std::cout << "Volume (" << volume->GetWidth() << "x" << volume->GetHeight() << "x" << volume->GetDepth() << ") loaded." << std::endl;
00159     }
00160 }
00161 
00162 void MainWindow::on_actionBeenden_triggered()
00163 {
00164     QApplication::quit();
00165 }
00166 
00167 void MainWindow::on_slicingComboBox_currentIndexChanged(int index)
00168 {
00169     reset_slicing_scrollbar();
00170     update_slicing_view();
00171 }
00172 
00173 void MainWindow::on_slicingScrollBar_valueChanged(int value)
00174 {
00175     update_slicing_view();
00176 }
00177 
00178 void MainWindow::updateRenderingOptions()
00179 {
00180     options.light = m_lightColorLabel->getColor();
00181     options.ambient = m_ambientColorLabel->getColor();
00182     options.diffuse = m_diffuseColorLabel->getColor();
00183     options.specular = m_specularColorLabel->getColor();
00184     options.k1 = ui->k1SpinBox->value();
00185     options.k2 = ui->k2SpinBox->value();
00186     options.exponent = ui->exponentSpinBox->value();
00187     options.N = ui->samplesSpinBox->value();
00188 
00189     m_volume_renderer->setRenderingOptions(&options);
00190 }
00191 
00192 void MainWindow::updateTransferFunction()
00193 {
00194     m_volume_renderer->setGradientStops(m_gradient_editor->getGradientStops());
00195     m_volume_renderer->setTransfer();
00196 }
00197 
00198 void MainWindow::on_actionBild_speichern_triggered()
00199 {
00200     QString filename = QFileDialog::getSaveFileName(this, "Save image", QString(), "PNG Image (*.png)");
00201     if (!filename.endsWith(".png")) {
00202         filename.append(".png");
00203     }
00204     //QPixmap image = m_volume_renderer->renderPixmap(1024, 768);
00205     //QPixmap image = QPixmap::grabWidget(m_volume_renderer);
00206     QImage image = m_volume_renderer->grabFrameBuffer();
00207     if (!image.save(filename, "PNG")) {
00208         QMessageBox::warning(this, "Save Image", "Error saving image.");
00209     }
00210 }

Generated on Mon Dec 6 2010 12:10:16 for LU Visualisierung WS2010 - Beispiel 1 by  doxygen 1.7.2