prep for configurable options

This commit is contained in:
Djairo Hougee 2024-05-26 16:43:53 +02:00
parent 627a784f72
commit cc3e62af05
9 changed files with 138 additions and 29 deletions

View File

@ -56,6 +56,7 @@ add_executable(ParticleTrackTrace MACOSX_BUNDLE main.cpp
layers/LGlyphLayer.h layers/LGlyphLayer.h
layers/Technique.cpp layers/Technique.cpp
layers/Technique.h layers/Technique.h
layers/enums.h
Program.cpp Program.cpp
Program.h Program.h
commands/TimerCallbackCommand.h commands/TimerCallbackCommand.h

View File

@ -118,3 +118,8 @@ Program::~Program() {
vtkSmartPointer<vtkCamera> Program::getCamera() { vtkSmartPointer<vtkCamera> Program::getCamera() {
return this->cam; return this->cam;
} }
std::vector<Technique *> Program::getTechniques() {
return this->techniques;
}

View File

@ -79,6 +79,8 @@ public:
vtkSmartPointer<vtkCamera> getCamera(); vtkSmartPointer<vtkCamera> getCamera();
std::vector<Technique *> getTechniques();
}; };
#endif #endif

View File

@ -15,6 +15,8 @@
#include "../advection/UVGrid.h" #include "../advection/UVGrid.h"
#include "../advection/kernel/RK4AdvectionKernel.h" #include "../advection/kernel/RK4AdvectionKernel.h"
#include "../advection/kernel/SnapBoundaryConditionKernel.h" #include "../advection/kernel/SnapBoundaryConditionKernel.h"
#include "../layers/enums.h"
using namespace std; using namespace std;
MainWindow::MainWindow(QWidget* parent) MainWindow::MainWindow(QWidget* parent)
@ -59,8 +61,6 @@ void MainWindow::setupTechniques() {
// technique2->addLayer(new LColLayer(uvGrid)); // TODO: add LColLayer // technique2->addLayer(new LColLayer(uvGrid)); // TODO: add LColLayer
technique2->addLayer(lGlyph); technique2->addLayer(lGlyph);
cout << technique1->numberOfLayers() << endl;
program->addTechnique(technique1); program->addTechnique(technique1);
program->addTechnique(technique2); program->addTechnique(technique2);
@ -81,98 +81,123 @@ void MainWindow::setupTechniques() {
void MainWindow::on_FirstButton_clicked(bool checked) { void MainWindow::on_FirstButton_clicked(bool checked) {
if (checked) { if (checked) {
ui->program->setActiveTechnique(0); ui->program->setActiveTechnique(COLGLYPH);
} }
} }
void MainWindow::on_SecondButton_clicked(bool checked) { void MainWindow::on_SecondButton_clicked(bool checked) {
if (checked) { if (checked) {
ui->program->setActiveTechnique(1); ui->program->setActiveTechnique(GLYPHCOL);
} }
} }
void MainWindow::on_ComplementaryButton_clicked(bool checked) { void MainWindow::on_ComplementaryButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setColorMode(COMPLEMENTARY);
}
} }
} }
void MainWindow::on_ContrastingButton_clicked(bool checked) { void MainWindow::on_ContrastingButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setColorMode(CONTRASTING);
}
} }
} }
void MainWindow::on_MonochromaticButton_clicked(bool checked) { void MainWindow::on_MonochromaticButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setColorMode(MONOCHROMATIC);
}
} }
} }
void MainWindow::on_SaturateButton_clicked(bool checked) { void MainWindow::on_SaturateButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setSaturationMode(SATURATED);
}
} }
} }
void MainWindow::on_DesaturateButton_clicked(bool checked) { void MainWindow::on_DesaturateButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setSaturationMode(DESATURATED);
}
} }
} }
void MainWindow::on_CircleButton_clicked(bool checked) { void MainWindow::on_CircleButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setGlyphStyle(CIRCLE);
}
} }
} }
void MainWindow::on_TriangleButton_clicked(bool checked) { void MainWindow::on_TriangleButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setGlyphStyle(TRIANGLE);
}
} }
} }
void MainWindow::on_SquareButton_clicked(bool checked) { void MainWindow::on_SquareButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setGlyphStyle(SQUARE);
}
} }
} }
void MainWindow::on_HexagonButton_clicked(bool checked) { void MainWindow::on_HexagonButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setGlyphStyle(HEXAGON);
}
} }
} }
void MainWindow::on_FullySampledButton_clicked(bool checked) { void MainWindow::on_FullySampledButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setSamplingMode(FULLYSAMPLED);
}
} }
} }
void MainWindow::on_RegularlySubsampledButton_clicked(bool checked) { void MainWindow::on_RegularlySubsampledButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
t->setSamplingMode(REGULARLYSUBSAMPLED);
}
} }
} }
void MainWindow::on_IregularlySubsampledButton_clicked(bool checked) { void MainWindow::on_IregularlySubsampledButton_clicked(bool checked) {
if (checked) { if (checked) {
for (Technique *t : ui->program->getTechniques()) {
}} t->setSamplingMode(IRREGULARLYSUBSAMPLED);
}
}
}

View File

@ -9,18 +9,16 @@ vtkSmartPointer<vtkRenderer> Layer::getLayer() {
return this->ren; return this->ren;
} }
void Layer::updateData(int t) {
// By default, do nothing
}
void Layer::addObservers(vtkSmartPointer<vtkRenderWindowInteractor> interactor) {
// By default, do nothing
}
void Layer::removeObservers(vtkSmartPointer<vtkRenderWindowInteractor> interactor) {
// By default, do nothing
}
void Layer::setCamera(vtkSmartPointer<vtkCamera> cam) { void Layer::setCamera(vtkSmartPointer<vtkCamera> cam) {
this->getLayer()->SetActiveCamera(cam.GetPointer()); this->getLayer()->SetActiveCamera(cam.GetPointer());
} }
void Layer::updateData(int t) {}
void Layer::addObservers(vtkSmartPointer<vtkRenderWindowInteractor> interactor) {}
void Layer::removeObservers(vtkSmartPointer<vtkRenderWindowInteractor> interactor) {}
void Layer::setColorMode(ColourMode mode) {}
void Layer::setSaturationMode(SaturationMode mode) {}
void Layer::setGlyphStyle(GlyphStyle style) {}
void Layer::setSamplingMode(SamplingMode mode) {}

View File

@ -1,6 +1,7 @@
#ifndef LAYER_H #ifndef LAYER_H
#define LAYER_H #define LAYER_H
#include "enums.h"
#include <vtkInteractorStyle.h> #include <vtkInteractorStyle.h>
#include <vtkRenderer.h> #include <vtkRenderer.h>
@ -38,6 +39,12 @@ public:
* Used to share one camera between multiple layers. * Used to share one camera between multiple layers.
*/ */
virtual void setCamera(vtkSmartPointer<vtkCamera> cam); virtual void setCamera(vtkSmartPointer<vtkCamera> cam);
virtual void setColorMode(ColourMode mode);
virtual void setSaturationMode(SaturationMode mode);
virtual void setGlyphStyle(GlyphStyle style);
virtual void setSamplingMode(SamplingMode mode);
}; };
#endif #endif

View File

@ -48,3 +48,31 @@ void Technique::unbind(vtkSmartPointer<vtkRenderWindow> win, vtkSmartPointer<vtk
} }
win->SetNumberOfLayers(0); win->SetNumberOfLayers(0);
} }
void Technique::setColorMode(ColourMode mode) {
for (Layer *l : this->layers) {
l->setColorMode(mode);
}
}
void Technique::setSaturationMode(SaturationMode mode) {
for (Layer *l : this->layers) {
l->setSaturationMode(mode);
}
}
void Technique::setGlyphStyle(GlyphStyle style) {
for (Layer *l : this->layers) {
l->setGlyphStyle(style);
}
}
void Technique::setSamplingMode(SamplingMode mode) {
for (Layer *l : this->layers) {
l->setSamplingMode(mode);
}
}

View File

@ -4,6 +4,8 @@
#include "Layer.h" #include "Layer.h"
#include <vtkGenericOpenGLRenderWindow.h> #include <vtkGenericOpenGLRenderWindow.h>
#include <vtkPolyData.h> #include <vtkPolyData.h>
#include "enums.h"
class Technique { class Technique {
private: private:
std::vector<Layer *> layers; std::vector<Layer *> layers;
@ -18,6 +20,11 @@ public:
void bind(vtkSmartPointer<vtkRenderWindow> win, vtkSmartPointer<vtkRenderWindowInteractor> intr); void bind(vtkSmartPointer<vtkRenderWindow> win, vtkSmartPointer<vtkRenderWindowInteractor> intr);
void unbind(vtkSmartPointer<vtkRenderWindow> win, vtkSmartPointer<vtkRenderWindowInteractor> intr); void unbind(vtkSmartPointer<vtkRenderWindow> win, vtkSmartPointer<vtkRenderWindowInteractor> intr);
void setColorMode(ColourMode mode);
void setSaturationMode(SaturationMode mode);
void setGlyphStyle(GlyphStyle style);
void setSamplingMode(SamplingMode mode);
}; };

View File

@ -0,0 +1,36 @@
#ifndef ENUMS_H
#define ENUMS_H
enum ActiveTechnique {
COLGLYPH = 0,
GLYPHCOL = 1,
};
enum ColourMode {
COMPLEMENTARY = 0,
CONTRASTING = 1,
MONOCHROMATIC = 2,
};
enum SaturationMode {
SATURATED = 0,
DESATURATED = 1,
};
enum GlyphStyle {
CIRCLE = 0,
TRIANGLE = 1,
SQUARE = 2,
HEXAGON = 3,
};
enum SamplingMode {
FULLYSAMPLED = 0,
REGULARLYSUBSAMPLED = 1,
IRREGULARLYSUBSAMPLED = 2,
};
#endif