From b230b8a2878e87a308c65f450f1d7403b8db93b2 Mon Sep 17 00:00:00 2001 From: Jacob Becker Date: Thu, 23 Jun 2016 15:11:11 -0400 Subject: [PATCH] had an origin for data that is far from 0,0,0 --- .../vtk/reader/vtkGDALRasterPolydataWrapper.cxx | 7 ++++--- .../vtk/reader/vtkGDALRasterPolydataWrapper.h | 4 ++++ smtk/extension/vtk/reader/vtkLASReader.cxx | 13 +++++++++++++ smtk/extension/vtk/reader/vtkLASReader.h | 7 +++++-- smtk/extension/vtk/reader/vtkLIDARReader.cxx | 6 ++++++ smtk/extension/vtk/reader/vtkLIDARReader.h | 4 ++++ 6 files changed, 36 insertions(+), 5 deletions(-) diff --git a/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.cxx b/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.cxx index e1290ceec1..045e8274a7 100644 --- a/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.cxx +++ b/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.cxx @@ -56,6 +56,7 @@ vtkGDALRasterPolydataWrapper::vtkGDALRasterPolydataWrapper() this->Transform = 0; this->TransformOutputData = false; this->LimitReadToBounds = false; + this->Origin[0] = this->Origin[1] = this->Origin[2] = 0; } //----------------------------------------------------------------------------- @@ -196,15 +197,15 @@ int vtkGDALRasterPolydataWrapper::RequestData(vtkInformation* vtkNotUsed(request this->RealNumberOfOutputPoints = 0; for(int x = extent[0]; x <= extent[1]; x+=step) { - xyz[0] = x; + xyz[0] = x - Origin[0]; for(int y = extent[2]; y <= extent[3]; y+=step) { - xyz[1] = y; + xyz[1] = y - Origin[1]; vtkIdType id = img->ComputePointId(xyz); if(ugrid == NULL || ugrid->IsPointVisible(id)) { img->GetPoint(id, pt); - pt[2] = img->GetScalarComponentAsDouble(x,y,0,0); + pt[2] = img->GetScalarComponentAsDouble(x,y,0,0) - Origin[2]; if(dotrans) { this->Transform->TransformPoint(pt, tranpt); diff --git a/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.h b/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.h index 0fa3162a1a..feedb1f0c9 100644 --- a/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.h +++ b/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.h @@ -59,6 +59,8 @@ public: double GetInvalidValue(); + vtkSetVector3Macro(Origin, double); + // Description: // Return domain metadata std::vector GetDomainMetaData(const std::string& domain); @@ -151,6 +153,8 @@ protected: int Zone; bool IsNorth; + double Origin[3]; + private: vtkGDALRasterPolydataWrapper(const vtkGDALRasterPolydataWrapper&); // Not implemented. vtkGDALRasterPolydataWrapper& operator=(const vtkGDALRasterPolydataWrapper&); // Not implemented. diff --git a/smtk/extension/vtk/reader/vtkLASReader.cxx b/smtk/extension/vtk/reader/vtkLASReader.cxx index 89f20fa25b..1a26978531 100644 --- a/smtk/extension/vtk/reader/vtkLASReader.cxx +++ b/smtk/extension/vtk/reader/vtkLASReader.cxx @@ -52,6 +52,7 @@ vtkLASReader::vtkLASReader() this->LimitReadToBounds = false; this->ReadBounds[0] = this->ReadBounds[2] = this->ReadBounds[4] = VTK_DOUBLE_MAX; this->ReadBounds[1] = this->ReadBounds[3] = this->ReadBounds[5] = VTK_DOUBLE_MIN; + this->Origin[0] = this->Origin[1] = this->Origin[2] = 0; for (int i = 0; i < NUMBER_OF_CLASSIFICATIONS; i++) { this->Transform[i] = 0; @@ -299,6 +300,14 @@ int vtkLASReader::ReadHeaderBlock() fin.read(reinterpret_cast(this->DataBounds + 5), 8); fin.read(reinterpret_cast(this->DataBounds + 4), 8); + this->DataBounds[0] -= Origin[0]; + this->DataBounds[1] -= Origin[0]; + this->DataBounds[2] -= Origin[1]; + this->DataBounds[3] -= Origin[1]; + this->DataBounds[4] -= Origin[2]; + this->DataBounds[5] -= Origin[2]; + + fin.close(); return READ_OK; @@ -545,6 +554,10 @@ int vtkLASReader::ReadPoints(vtkMultiBlockDataSet *output) this->LatLongTransform2->TransformPoint(pt, pt); } + pt[0] -= Origin[0]; + pt[1] -= Origin[1]; + pt[2] -= Origin[2]; + // add the point, but 1st make sure it is in the ReadBounds (if specified); // consider the Transform if set (and "on") double transformedPt[3]; diff --git a/smtk/extension/vtk/reader/vtkLASReader.h b/smtk/extension/vtk/reader/vtkLASReader.h index a4b11499d9..a7960dda9f 100644 --- a/smtk/extension/vtk/reader/vtkLASReader.h +++ b/smtk/extension/vtk/reader/vtkLASReader.h @@ -76,6 +76,8 @@ public: // the bounds of data/pieces that have been read. vtkGetVector6Macro(DataBounds, double); + vtkSetVector3Macro(Origin, double); + // Description: // Transform to apply to the pts being read in for determining whether the // data is in/out of the ReadBounds (if LimitReadToBounds is true), or for @@ -106,8 +108,8 @@ public: vtkGetMacro(ConvertFromLatLongToXYZ, bool); // Description: - // If set (true), will only scan the file, colledting info about the data - // different classifications) that is present + // If set (true), will only scan the file, collecting info about the data + // different classifications that are present vtkBooleanMacro(ScanMode, bool); vtkSetMacro(ScanMode, bool); vtkGetMacro(ScanMode, bool); @@ -170,6 +172,7 @@ private: double ScaleFactor[3]; double Offset[3]; + double Origin[3]; }; diff --git a/smtk/extension/vtk/reader/vtkLIDARReader.cxx b/smtk/extension/vtk/reader/vtkLIDARReader.cxx index c5d5f61ae1..19771404d9 100644 --- a/smtk/extension/vtk/reader/vtkLIDARReader.cxx +++ b/smtk/extension/vtk/reader/vtkLIDARReader.cxx @@ -61,6 +61,8 @@ vtkLIDARReader::vtkLIDARReader() this->OutputDataTypeIsDouble = false; this->FileType = VTK_ASCII; + + this->Origin[0] = this->Origin[1] = this->Origin[2] = 0; } //----------------------------------------------------------------------------- @@ -712,6 +714,10 @@ int vtkLIDARReader::ReadPiece(ifstream &fin, int pieceIndex, int onRatio, this->LatLongTransform2->TransformPoint(pt, pt); } + pt[0] -= this->Origin[0]; + pt[1] -= this->Origin[1]; + pt[1] -= this->Origin[2]; + // always computing/updating the bounds... which can/will frequently // be wasted effort; done before transformation this->LIDARPieces[pieceIndex].BBox.AddPoint(pt); diff --git a/smtk/extension/vtk/reader/vtkLIDARReader.h b/smtk/extension/vtk/reader/vtkLIDARReader.h index 9ca20e144c..87b3ce4425 100644 --- a/smtk/extension/vtk/reader/vtkLIDARReader.h +++ b/smtk/extension/vtk/reader/vtkLIDARReader.h @@ -117,6 +117,8 @@ public: // the bounds of data/pieces that have been read. vtkGetVector6Macro(DataBounds, double); + vtkSetVector3Macro(Origin, double); + // Description: // Transform to apply to the pts being read in for determining whether the // data is in/out of the ReadBounds (if LimitReadToBounds is true), or for @@ -230,6 +232,8 @@ protected: bool TransformOutputData; + double Origin[3]; + private: vtkLIDARReader(const vtkLIDARReader&); // Not implemented. void operator=(const vtkLIDARReader&); // Not implemented. -- GitLab