diff --git a/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.cxx b/smtk/extension/vtk/reader/vtkGDALRasterPolydataWrapper.cxx index e1290ceec1afd51cdbec297692c47b1244f7c34b..045e8274a763dd805a9a54ca2feccc771ba4305f 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 0fa3162a1a83c39eaac68884f0f66c55398dcd11..feedb1f0c9f419603e2fb9dbf3e825940d4bdc21 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 89f20fa25b73e6df147bcf58c8f4687e148765a1..1a26978531ce7b742c2dd3225e436357024e3836 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 a4b11499d9efe88f725fa5615efef93e2dc4293a..a7960dda9f88c944efe6a99db8866d2821b33629 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 c5d5f61ae1b4ba9ff751b4749f4a554eb622c666..19771404d99339ae95aeaa9d3f7600ee569c1d6d 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 9ca20e144ca090fdf6b698212d64a550b258faa8..87b3ce4425806748856a1e67bca17065300a8b7a 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.