diff --git a/vtk/src/CMakeLists.txt b/vtk/src/CMakeLists.txt index 669a5cc..f4446c2 100644 --- a/vtk/src/CMakeLists.txt +++ b/vtk/src/CMakeLists.txt @@ -5,22 +5,24 @@ project(VtkBase) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_package(VTK COMPONENTS + CommonColor CommonColor CommonCore CommonDataModel FiltersGeneral FiltersGeometry FiltersProgrammable - IOImage + FiltersSources ImagingSources InteractionStyle + IOImage RenderingContextOpenGL2 RenderingCore + RenderingCore RenderingFreeType RenderingGL2PSOpenGL2 - RenderingOpenGL2 - CommonColor - RenderingCore) + RenderingOpenGL2) + if (NOT VTK_FOUND) message(FATAL_ERROR "VtkBase: Unable to find the VTK build folder.") diff --git a/vtk/src/compile_commands.json b/vtk/src/compile_commands.json new file mode 120000 index 0000000..25eb4b2 --- /dev/null +++ b/vtk/src/compile_commands.json @@ -0,0 +1 @@ +build/compile_commands.json \ No newline at end of file diff --git a/vtk/src/helperClasses/EGlyphLayer.cpp b/vtk/src/helperClasses/EGlyphLayer.cpp index 9421b92..6c5050e 100644 --- a/vtk/src/helperClasses/EGlyphLayer.cpp +++ b/vtk/src/helperClasses/EGlyphLayer.cpp @@ -1,8 +1,106 @@ #include "EGlyphLayer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace netCDF; +using namespace std; + +template +vector getVarVector(const NcVar &var) { + int length = 1; + for (NcDim dim : var.getDims()) { + length *= dim.getSize(); + } + + vector vec(length); + + var.getVar(vec.data()); + + return vec; +} + +tuple, vector, vector> readGrid() { + netCDF::NcFile data("../../../../data/grid.h5", netCDF::NcFile::read); + multimap< string, NcVar > vars = data.getVars(); + vector time = getVarVector(vars.find("times")->second); + vector longitude = getVarVector(vars.find("longitude")->second); + vector latitude = getVarVector(vars.find("latitude")->second); + + return {time, latitude, longitude}; +} + + EGlyphLayer::EGlyphLayer() { this->ren = vtkSmartPointer::New(); this->ren->SetLayer(1); this->ren->InteractiveOff(); + + this->data = vtkSmartPointer::New(); + readCoordinates(); +} + + +void EGlyphLayer::readCoordinates() { + vtkNew points; + auto [times, lats, lons] = readGrid(); // FIXME: import Robin's readData function and use it + + double i = 0; + for (double lat : lats) { + for (double lon : lons) { + //FIXME: hard-coded values; should update with window geometry. + points->InsertNextPoint((lat*1000-46125)*661/16500, (lon*1000+15875)*661/28750, 0); + } + } + this->data->SetPoints(points); + + // vtkNew arrowSource; + vtkNew arrowSource; + vtkNew glyph2D; + glyph2D->SetSourceConnection(arrowSource->GetOutputPort()); + glyph2D->SetInputData(this->data); + glyph2D->Update(); + + vtkNew(mapper); + mapper->SetInputConnection(glyph2D->GetOutputPort()); + mapper->Update(); + + vtkNew actor; + actor->SetMapper(mapper); + + vtkNew colors; + actor->GetProperty()->SetColor(colors->GetColor3d("Salmon").GetData()); + + this->ren->AddActor(actor); + + // vtkNew glyphFilter; + // glyphFilter->SetInputData(this->data); + // glyphFilter->Update(); + // + // vtkNew mapper; + // mapper->SetInputConnection(glyphFilter->GetOutputPort()); + // mapper->Update(); + // + // vtkNew colors; + // vtkNew actor; + // actor->SetMapper(mapper); + // actor->GetProperty()->SetColor(colors->GetColor3d("Gold").GetData()); + // actor->GetProperty()->SetPointSize(3); + // + // this->ren->AddActor(actor); +} + + +void EGlyphLayer::updateData(short t) { + } diff --git a/vtk/src/helperClasses/EGlyphLayer.h b/vtk/src/helperClasses/EGlyphLayer.h index 18f96ab..e401d07 100644 --- a/vtk/src/helperClasses/EGlyphLayer.h +++ b/vtk/src/helperClasses/EGlyphLayer.h @@ -2,12 +2,17 @@ #define EGLYPHLAYER_H #include "Layer.h" - - +#include class EGlyphLayer : public Layer { +private: + vtkSmartPointer data; + + void readCoordinates(); + public: EGlyphLayer(); + void updateData(short t); }; diff --git a/vtk/src/helperClasses/LGlyphLayer.cpp b/vtk/src/helperClasses/LGlyphLayer.cpp index ac5930d..9541079 100644 --- a/vtk/src/helperClasses/LGlyphLayer.cpp +++ b/vtk/src/helperClasses/LGlyphLayer.cpp @@ -5,3 +5,7 @@ LGlyphLayer::LGlyphLayer() { this->ren = vtkSmartPointer::New(); this->ren->SetLayer(2); } + +void LGlyphLayer::updateData(short n) { + +} diff --git a/vtk/src/helperClasses/LGlyphLayer.h b/vtk/src/helperClasses/LGlyphLayer.h index 8c61bb0..775e256 100644 --- a/vtk/src/helperClasses/LGlyphLayer.h +++ b/vtk/src/helperClasses/LGlyphLayer.h @@ -2,10 +2,16 @@ #define LGLYPHLAYER_H #include "Layer.h" +#include class LGlyphLayer : public Layer { +private: + vtkSmartPointer points; + vtkSmartPointer data; + public: LGlyphLayer(); + void updateData(short t); }; diff --git a/vtk/src/main.cpp b/vtk/src/main.cpp index b7a806a..bd48eb0 100644 --- a/vtk/src/main.cpp +++ b/vtk/src/main.cpp @@ -14,65 +14,6 @@ #include "helperClasses/Program.h" using namespace std; -using namespace netCDF; - -template -vector getVarVector(const NcVar &var) { - int length = 1; - for (NcDim dim : var.getDims()) { - length *= dim.getSize(); - } - - vector vec(length); - - var.getVar(vec.data()); - - return vec; -} - -tuple, vector, vector> readGrid() { - netCDF::NcFile data("../../../../data/grid.h5", netCDF::NcFile::read); - multimap< string, NcVar > vars = data.getVars(); - vector time = getVarVector(vars.find("times")->second); - vector longitude = getVarVector(vars.find("longitude")->second); - vector latitude = getVarVector(vars.find("latitude")->second); - - return {time, latitude, longitude}; -} - - -void renderCoordinates(vtkRenderer *ren, vtkNamedColors *colors) { - - vtkNew points; - auto [times, lats, lons] = readGrid(); - - double i = 0; - for (double lat : lats) { - for (double lon : lons) { - cout << "lat: " << (lat*1000-46125)*661/16500 << "\t lon: " << (lon*1000+15875)*661/28750 << endl; - points->InsertNextPoint((lat*1000-46125)*661/16500, (lon*1000+15875)*661/28750, 0); - } - } - - vtkNew polydata; - polydata->SetPoints(points); - - - vtkNew glyphFilter; - glyphFilter->SetInputData(polydata); - glyphFilter->Update(); - - vtkNew mapper; - mapper->SetInputConnection(glyphFilter->GetOutputPort()); - mapper->Update(); - - vtkNew actor; - actor->SetMapper(mapper); - actor->GetProperty()->SetColor(colors->GetColor3d("Gold").GetData()); - actor->GetProperty()->SetPointSize(3); - - ren->AddActor(actor); -} int main() { @@ -82,14 +23,6 @@ int main() { auto program = new Program(*bg, *e, *l); program->render(); - - // vtkNew colors; - // vtkNew Euler, Background, Lagrange; - // Euler->SetBackground(colors->GetColor3d("DarkSlateGray").GetData()); - - - // renderCoordinates(Euler, colors); - return EXIT_SUCCESS; } diff --git a/vtk/src/map_661-661.png b/vtk/src/map_661-661.png deleted file mode 100644 index cdfd5a6..0000000 Binary files a/vtk/src/map_661-661.png and /dev/null differ