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
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
00023 m_volume_renderer = new VolumeRenderer(ui->rendererGroupBox);
00024 ui->renderingLayout->addWidget(m_volume_renderer);
00025
00026 m_volume_renderer->setRenderingOptions(&options);
00027
00028
00029
00030
00031
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
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) {
00101 ui->slicingScrollBar->setMaximum(volume->GetWidth() - 1);
00102 } else if (idx == 1) {
00103 ui->slicingScrollBar->setMaximum(volume->GetHeight() - 1);
00104 } else if (idx == 2) {
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
00117 if (volume)
00118 {
00119 int idx = ui->slicingComboBox->currentIndex();
00120 int scale = 1;
00121 if (idx == 0) {
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) {
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) {
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
00141 if (!fileName.isEmpty())
00142 {
00143
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
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
00205
00206 QImage image = m_volume_renderer->grabFrameBuffer();
00207 if (!image.save(filename, "PNG")) {
00208 QMessageBox::warning(this, "Save Image", "Error saving image.");
00209 }
00210 }