From 16d3423eb96025d1f14fef5b424ca8d1b631fc7e Mon Sep 17 00:00:00 2001 From: robin Date: Wed, 8 May 2024 13:59:20 +0200 Subject: [PATCH] no real changes --- .../src/CartographicTransformation.cpp | 86 +++++++++++-------- .../src/layers/EGlyphLayer.cpp | 5 ++ 2 files changed, 54 insertions(+), 37 deletions(-) diff --git a/particle-track-and-trace/src/CartographicTransformation.cpp b/particle-track-and-trace/src/CartographicTransformation.cpp index ee07e53..4f7e776 100644 --- a/particle-track-and-trace/src/CartographicTransformation.cpp +++ b/particle-track-and-trace/src/CartographicTransformation.cpp @@ -7,35 +7,17 @@ #include vtkSmartPointer createNormalisedCamera() { - vtkSmartPointer camera = vtkSmartPointer::New(); - camera->ParallelProjectionOn(); // Enable parallel projection + vtkSmartPointer camera = vtkSmartPointer::New(); + camera->ParallelProjectionOn(); // Enable parallel projection - camera->SetPosition(0, 0, 1000); // Place the camera above the center - camera->SetFocalPoint(0, 0, 0); // Look at the center - camera->SetViewUp(0, 1, 0); // Set the up vector to be along the Y-axis - camera->SetParallelScale(1); // x,y in [-1, 1] + camera->SetPosition(0, 0, 1000); // Place the camera above the center + camera->SetFocalPoint(0, 0, 0); // Look at the center + camera->SetViewUp(0, 1, 0); // Set the up vector to be along the Y-axis + camera->SetParallelScale(1); // x,y in [-1, 1] - return camera; + return camera; } -//vtkSmartPointer getCartographicTransformMatrix(const std::shared_ptr uvGrid) { -// const double XMin = uvGrid->lons.front(); -// const double XMax = uvGrid->lons.back(); -// const double YMin = uvGrid->lats.front(); -// const double YMax = uvGrid->lats.back(); -// -// double eyeTransform[] = { -// 2/(XMax-XMin), 0, 0, -(XMax+XMin)/(XMax-XMin), -// 0, 2/(YMax-YMin), 0, -(YMax+YMin)/(YMax-YMin), -// 0, 0, 1, 0, -// 0, 0, 0, 1 -// }; -// -// auto matrix = vtkSmartPointer::New(); -// matrix->DeepCopy(eyeTransform); -// return matrix; -//} - // Assumes Normalised camera is used vtkSmartPointer createCartographicTransformFilter(const std::shared_ptr uvGrid) { auto proj = vtkSmartPointer::New(); @@ -44,10 +26,10 @@ vtkSmartPointer createCartographicTransformFilter(const std: auto geoTransform = vtkSmartPointer::New(); geoTransform->SetDestinationProjection(proj); - const double XMin = -15.875; - const double XMax = 12.875; - const double YMin = 46.125; - const double YMax = 62.625; + const double XMin = uvGrid->lons.front(); + const double XMax = uvGrid->lons.back(); + const double YMin = uvGrid->lats.front(); + const double YMax = uvGrid->lats.back(); double bottomLeft[3] = {XMin, YMin, 0}; double topRight[3] = {XMax, YMax, 0}; @@ -58,8 +40,8 @@ vtkSmartPointer createCartographicTransformFilter(const std: double height = topRight[1] - bottomLeft[1]; auto scaleIntoNormalisedSpace = vtkSmartPointer::New(); - scaleIntoNormalisedSpace->Scale(2/(width), 2/(height), 1); - scaleIntoNormalisedSpace->Translate(-(bottomLeft[0]+topRight[0])/2, -(bottomLeft[1] + topRight[1])/2, 0); + scaleIntoNormalisedSpace->Scale(2 / (width), 2 / (height), 1); + scaleIntoNormalisedSpace->Translate(-(bottomLeft[0] + topRight[0]) / 2, -(bottomLeft[1] + topRight[1]) / 2, 0); auto totalProjection = vtkSmartPointer::New(); totalProjection->Identity(); @@ -79,10 +61,10 @@ vtkSmartPointer createInverseCartographicTransformFilter(con auto geoTransform = vtkSmartPointer::New(); geoTransform->SetDestinationProjection(proj); - const double XMin = -15.875; - const double XMax = 12.875; - const double YMin = 46.125; - const double YMax = 62.625; + const double XMin = uvGrid->lons.front(); + const double XMax = uvGrid->lons.back(); + const double YMin = uvGrid->lats.front(); + const double YMax = uvGrid->lats.back(); double bottomLeft[3] = {XMin, YMin, 0}; double topRight[3] = {XMax, YMax, 0}; @@ -94,8 +76,8 @@ vtkSmartPointer createInverseCartographicTransformFilter(con double height = topRight[1] - bottomLeft[1]; auto scaleIntoNormalisedSpace = vtkSmartPointer::New(); - scaleIntoNormalisedSpace->Scale(2/(width), 2/(height), 1); - scaleIntoNormalisedSpace->Translate(-(bottomLeft[0]+topRight[0])/2, -(bottomLeft[1] + topRight[1])/2, 0); + scaleIntoNormalisedSpace->Scale(2 / (width), 2 / (height), 1); + scaleIntoNormalisedSpace->Translate(-(bottomLeft[0] + topRight[0]) / 2, -(bottomLeft[1] + topRight[1]) / 2, 0); scaleIntoNormalisedSpace->Inverse(); auto totalProjection = vtkSmartPointer::New(); @@ -108,3 +90,33 @@ vtkSmartPointer createInverseCartographicTransformFilter(con return transformFilter; } + +//vtkSmartPointer getCartographicTransformMatrix(const std::shared_ptr uvGrid) { +// const double XMin = uvGrid->lons.front(); +// const double XMax = uvGrid->lons.back(); +// const double YMin = uvGrid->lats.front(); +// const double YMax = uvGrid->lats.back(); +// +// double eyeTransform[] = { +// 2/(XMax-XMin), 0, 0, -(XMax+XMin)/(XMax-XMin), +// 0, 2/(YMax-YMin), 0, -(YMax+YMin)/(YMax-YMin), +// 0, 0, 1, 0, +// 0, 0, 0, 1 +// }; +// +// auto matrix = vtkSmartPointer::New(); +// matrix->DeepCopy(eyeTransform); +// return matrix; +//} +// +//// Assumes Normalised camera is used +//vtkSmartPointer createCartographicTransformFilter(const std::shared_ptr uvGrid) { +// vtkNew transform; +// +// transform->SetMatrix(getCartographicTransformMatrix(uvGrid)); +// +// vtkSmartPointer transformFilter = vtkSmartPointer::New(); +// transformFilter->SetTransform(transform); +// +// return transformFilter; +//} \ No newline at end of file diff --git a/particle-track-and-trace/src/layers/EGlyphLayer.cpp b/particle-track-and-trace/src/layers/EGlyphLayer.cpp index 39970b7..3906595 100644 --- a/particle-track-and-trace/src/layers/EGlyphLayer.cpp +++ b/particle-track-and-trace/src/layers/EGlyphLayer.cpp @@ -12,10 +12,13 @@ #include #include #include + #include "../CartographicTransformation.h" #include "../advection/readdata.h" #include "../advection/interpolate.h" +#include "vtkTransform.h" + using namespace std; EGlyphLayer::EGlyphLayer(std::shared_ptr uvGrid) { @@ -41,6 +44,7 @@ void EGlyphLayer::readCoordinates() { this->direction->SetNumberOfTuples(numLats * numLons); points->Allocate(numLats * numLons); + int i = 0; int latIndex = 0; for (double lat: uvGrid->lats) { @@ -49,6 +53,7 @@ void EGlyphLayer::readCoordinates() { auto [u, v] = (*uvGrid)[0, latIndex, lonIndex]; direction->SetTuple3(i, 5*u, 5*v, 0); points->InsertPoint(i++, lon, lat, 0); + lonIndex++; } latIndex++;