You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.1 KiB
C++
170 lines
5.1 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkSegYReader.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
|
|
#ifndef vtkSegYReader_h
|
|
#define vtkSegYReader_h
|
|
|
|
#include "vtkDataSetAlgorithm.h"
|
|
|
|
#include <vtkIOSegYModule.h> // For export macro
|
|
|
|
// Forward declarations
|
|
class vtkImageData;
|
|
class vtkSegYReaderInternal;
|
|
|
|
/**
|
|
* @class vtkSegYReader
|
|
* @brief Reads SegY data files.
|
|
*
|
|
* vtkSegYReader reads SegY data files. We create a vtkStructuredGrid
|
|
* for 2.5D SegY and 3D data. If we set the StructuredGrid option to 0
|
|
* we create a vtkImageData for 3D data. This saves memory and may
|
|
* speed-up certain algorithms, but the position and the shape of the
|
|
* data may not be correct. The axes for the data are: crossline,
|
|
* inline, depth. For situations where traces are missing values of
|
|
* zero are used to fill in the dataset.
|
|
*/
|
|
class VTKIOSEGY_EXPORT vtkSegYReader : public vtkDataSetAlgorithm
|
|
{
|
|
public:
|
|
static vtkSegYReader* New();
|
|
vtkTypeMacro(vtkSegYReader, vtkDataSetAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
vtkSegYReader();
|
|
~vtkSegYReader() override;
|
|
|
|
vtkSetStringMacro(FileName);
|
|
vtkGetStringMacro(FileName);
|
|
|
|
enum VTKSegYCoordinateModes
|
|
{
|
|
VTK_SEGY_SOURCE = 0, // default
|
|
VTK_SEGY_CDP = 1,
|
|
VTK_SEGY_CUSTOM = 2
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Specify whether to use source x/y coordinates or CDP coordinates or custom
|
|
* byte positions for data position in the SEG-Y trace header. Defaults to
|
|
* source x/y coordinates.
|
|
*
|
|
* As per SEG-Y rev 2.0 specification,
|
|
* Source XY coordinate bytes = (73, 77)
|
|
* CDP XY coordinate bytes = (181, 185)
|
|
*/
|
|
vtkSetClampMacro(XYCoordMode, int, VTK_SEGY_SOURCE, VTK_SEGY_CUSTOM);
|
|
vtkGetMacro(XYCoordMode, int);
|
|
void SetXYCoordModeToSource();
|
|
void SetXYCoordModeToCDP();
|
|
void SetXYCoordModeToCustom();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify X and Y byte positions for custom XYCoordinateMode.
|
|
* By default, XCoordByte = 73, YCoordByte = 77 i.e. source xy.
|
|
*
|
|
* \sa SetXYCoordinatesModeToCustom()
|
|
*/
|
|
vtkSetMacro(XCoordByte, int);
|
|
vtkGetMacro(XCoordByte, int);
|
|
vtkSetMacro(YCoordByte, int);
|
|
vtkGetMacro(YCoordByte, int);
|
|
//@}
|
|
|
|
enum VTKSegYVerticalCRS
|
|
{
|
|
VTK_SEGY_VERTICAL_HEIGHTS = 0, // default
|
|
VTK_SEGY_VERTICAL_DEPTHS
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Specify whether the vertical coordinates in the SEG-Y file are heights
|
|
* (positive up) or depths (positive down). By default, the vertical
|
|
* coordinates are treated as heights (i.e. positive up). This means that the
|
|
* Z-axis of the dataset goes from 0 (surface) to -ve depth (last sample).
|
|
* \note As per the SEG-Y rev 2.0 specification, this information is defined
|
|
* in the Location Data Stanza of the Extended Textual Header. However, as of
|
|
* this revision, vtkSegY2DReader does not support reading the extended
|
|
* textual header.
|
|
*/
|
|
vtkSetMacro(VerticalCRS, int);
|
|
vtkGetMacro(VerticalCRS, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify if we create a vtkStructuredGrid even when the data is
|
|
* 3D. Note this consumes more memory but it shows the precise
|
|
* location for each point and the correct shape of the data. The
|
|
* default value is true. If we set this option to false we
|
|
* create a vtkImageData for the SegY 3D dataset.
|
|
*/
|
|
vtkSetMacro(StructuredGrid, int);
|
|
vtkGetMacro(StructuredGrid, int);
|
|
vtkBooleanMacro(StructuredGrid, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Should we force the data to be interpreted as a 2D dataset? It may be a
|
|
* 2D sheet through 3D space. When this is turned on we ignore the cross
|
|
* line and line values and instead build a 2D data by processing and
|
|
* connecting the traces in order from first to last. The output will be a
|
|
* Structrured Grid.
|
|
*/
|
|
vtkSetMacro(Force2D, bool);
|
|
vtkGetMacro(Force2D, bool);
|
|
vtkBooleanMacro(Force2D, bool);
|
|
//@}
|
|
|
|
protected:
|
|
int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector) override;
|
|
|
|
int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector) override;
|
|
int RequestDataObject(vtkInformation* request, vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector) override;
|
|
|
|
protected:
|
|
vtkSegYReaderInternal* Reader;
|
|
char* FileName;
|
|
bool Is3D;
|
|
double DataOrigin[3];
|
|
double DataSpacing[3][3];
|
|
int DataSpacingSign[3];
|
|
int DataExtent[6];
|
|
|
|
int XYCoordMode;
|
|
int StructuredGrid;
|
|
|
|
// Custom XY coordinate byte positions
|
|
int XCoordByte;
|
|
int YCoordByte;
|
|
|
|
int VerticalCRS;
|
|
|
|
bool Force2D;
|
|
|
|
private:
|
|
vtkSegYReader(const vtkSegYReader&) = delete;
|
|
void operator=(const vtkSegYReader&) = delete;
|
|
};
|
|
|
|
#endif // vtkSegYReader_h
|