Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

EMAN::VtkIO Class Reference

VtkIO reads/writes VTK image file. More...

#include <vtkio.h>

Inheritance diagram for EMAN::VtkIO:

Inheritance graph
[legend]
Collaboration diagram for EMAN::VtkIO:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 VtkIO (const string &filename, IOMode rw_mode=READ_ONLY)
 ~VtkIO ()

Static Public Member Functions

bool is_valid (const void *first_block)

Public Attributes

 DEFINE_IMAGEIO_FUNC

Private Types

enum  VtkType { VTK_UNKNOWN, VTK_ASCII, VTK_BINARY }
enum  DataType {
  DATATYPE_UNKNOWN, BIT, UNSIGNED_CHAR, CHAR,
  UNSIGNED_SHORT, SHORT, UNSIGNED_INT, INT,
  UNSIGNED_LONG, LONG, FLOAT, DOUBLE
}
enum  DatasetType {
  DATASET_UNKNOWN, STRUCTURED_POINTS, STRUCTURED_GRID, RECTILINEAR_GRID,
  UNSTRUCTURED_GRID, POLYDATA
}

Private Member Functions

int to_em_datatype (int vtk_datatype)
int get_mode_size (DataType d)
void read_dataset (DatasetType dstype)
DataType get_datatype_from_name (const string &datatype_name)
DatasetType get_datasettype_from_name (const string &dataset_name)

Private Attributes

string filename
IOMode rw_mode
FILE * vtk_file
bool is_big_endian
bool is_new_file
bool initialized
DataType datatype
VtkType filetype
int nx
int ny
int nz
float originx
float originy
float originz
float spacingx
float spacingy
float spacingz
off_t file_offset

Static Private Attributes

const char * MAGIC = "# vtk DataFile Version"

Detailed Description

VtkIO reads/writes VTK image file.

VTK is a file format used by the Visual Toolkit. (http://public.kitware.com/VTK/)

There are 2 VTK formats: ASCII or Binary.

ASCII format It has 5 parts:

Binary format It has the same 5 parts like ASCII format,followed by data in binary format. The data are stored in big endian by default..

A VTK file contains 1 2D or 3D image.

Definition at line 76 of file vtkio.h.


Member Enumeration Documentation

enum EMAN::VtkIO::DatasetType [private]
 

Enumeration values:
DATASET_UNKNOWN 
STRUCTURED_POINTS 
STRUCTURED_GRID 
RECTILINEAR_GRID 
UNSTRUCTURED_GRID 
POLYDATA 

Definition at line 111 of file vtkio.h.

Referenced by get_datasettype_from_name().

00112                 {
00113                         DATASET_UNKNOWN,
00114                         STRUCTURED_POINTS,
00115                         STRUCTURED_GRID,
00116                         RECTILINEAR_GRID,
00117                         UNSTRUCTURED_GRID,
00118                         POLYDATA
00119                 };

enum EMAN::VtkIO::DataType [private]
 

Enumeration values:
DATATYPE_UNKNOWN 
BIT 
UNSIGNED_CHAR 
CHAR 
UNSIGNED_SHORT 
SHORT 
UNSIGNED_INT 
INT 
UNSIGNED_LONG 
LONG 
FLOAT 
DOUBLE 

Definition at line 95 of file vtkio.h.

Referenced by get_datatype_from_name(), and to_em_datatype().

00096                 {
00097                         DATATYPE_UNKNOWN,
00098                         BIT,
00099                         UNSIGNED_CHAR,
00100                         CHAR,                   
00101                         UNSIGNED_SHORT,
00102                         SHORT,
00103                         UNSIGNED_INT,
00104                         INT,
00105                         UNSIGNED_LONG,
00106                         LONG,
00107                         FLOAT,
00108                         DOUBLE
00109                 };

enum EMAN::VtkIO::VtkType [private]
 

Enumeration values:
VTK_UNKNOWN 
VTK_ASCII 
VTK_BINARY 

Definition at line 88 of file vtkio.h.

00089                 {
00090                         VTK_UNKNOWN,
00091                         VTK_ASCII,
00092                         VTK_BINARY                      
00093                 };


Constructor & Destructor Documentation

VtkIO::VtkIO const string &  filename,
IOMode  rw_mode = READ_ONLY
[explicit]
 

Definition at line 47 of file vtkio.cpp.

References datatype, file_offset, filetype, is_big_endian, EMAN::ByteOrder::is_host_big_endian(), is_new_file, nx, ny, nz, originx, originy, originz, spacingx, spacingy, and spacingz.

00048 :       filename(vtk_filename), rw_mode(rw), vtk_file(0), initialized(false)
00049 {
00050         is_big_endian = ByteOrder::is_host_big_endian();
00051         is_new_file = false;
00052 
00053         datatype = DATATYPE_UNKNOWN;
00054         filetype = VTK_UNKNOWN;
00055         nx = 0;
00056         ny = 0;
00057         nz = 0;
00058         originx = 0;
00059         originy = 0;
00060         originz = 0;
00061         spacingx = 0;
00062         spacingy = 0;
00063         spacingz = 0;
00064         file_offset = 0;
00065 }

VtkIO::~VtkIO  ) 
 

Definition at line 67 of file vtkio.cpp.

References vtk_file.

00068 {
00069         if (vtk_file) {
00070                 fclose(vtk_file);
00071                 vtk_file = 0;
00072         }
00073 }


Member Function Documentation

VtkIO::DatasetType VtkIO::get_datasettype_from_name const string &  dataset_name  )  [private]
 

Definition at line 431 of file vtkio.cpp.

References DatasetType, and initialized.

00432 {
00433 
00434         static bool initialized = false;
00435         static map < string, DatasetType > types;
00436 
00437         if (!initialized) {
00438                 types["STRUCTURED_POINTS"] = STRUCTURED_POINTS;
00439                 types["STRUCTURED_GRID"] = STRUCTURED_GRID;
00440                 types["RECTILINEAR_GRID"] = RECTILINEAR_GRID;
00441                 types["UNSTRUCTURED_GRID"] = UNSTRUCTURED_GRID;
00442                 types["POLYDATA"] = POLYDATA;
00443         }
00444 
00445         DatasetType result = DATASET_UNKNOWN;
00446         if (types.find(dataset_name) != types.end()) {
00447                 result = types[dataset_name];
00448         }
00449         return result;
00450 }

VtkIO::DataType VtkIO::get_datatype_from_name const string &  datatype_name  )  [private]
 

Definition at line 398 of file vtkio.cpp.

References DataType, and initialized.

00399 {
00400         static bool initialized = false;
00401         static map < string, VtkIO::DataType > datatypes;
00402 
00403         if (!initialized) {
00404                 datatypes["bit"] = BIT;
00405 
00406                 datatypes["unsigned_char"] = UNSIGNED_CHAR;
00407                 datatypes["char"] = CHAR;
00408 
00409                 datatypes["unsigned_short"] = UNSIGNED_SHORT;
00410                 datatypes["short"] = SHORT;
00411 
00412                 datatypes["unsigned_int"] = UNSIGNED_INT;
00413                 datatypes["int"] = INT;
00414 
00415                 datatypes["unsigned_long"] = UNSIGNED_LONG;
00416                 datatypes["long"] = LONG;
00417 
00418                 datatypes["float"] = FLOAT;
00419                 datatypes["double"] = DOUBLE;
00420                 initialized = true;
00421         }
00422 
00423         DataType result = DATATYPE_UNKNOWN;
00424 
00425         if (datatypes.find(datatype_name) != datatypes.end()) {
00426                 result = datatypes[datatype_name];
00427         }
00428         return result;
00429 }

int VtkIO::get_mode_size DataType  d  )  [private]
 

Definition at line 372 of file vtkio.cpp.

References CHAR, DOUBLE, FLOAT, INT, LOGERR, LONG, SHORT, UNSIGNED_CHAR, UNSIGNED_INT, UNSIGNED_LONG, and UNSIGNED_SHORT.

00373 {
00374         switch (d) {
00375         case UNSIGNED_CHAR:
00376         case CHAR:
00377                 return sizeof(char);
00378         case UNSIGNED_SHORT:
00379         case SHORT:
00380                 return sizeof(short);
00381         case UNSIGNED_INT:
00382         case INT:
00383                 return sizeof(int);
00384         case UNSIGNED_LONG:
00385         case LONG:
00386                 return sizeof(long);
00387         case FLOAT:
00388                 return sizeof(float);
00389         case DOUBLE:
00390                 return sizeof(double);
00391         default:
00392                 LOGERR("don't support this data type '%d'", d);
00393                 break;
00394         }
00395         return 0;
00396 }

bool VtkIO::is_valid const void *  first_block  )  [static]
 

Definition at line 164 of file vtkio.cpp.

References EMAN::Util::check_file_by_magic(), and MAGIC.

Referenced by EMAN::EMUtil::fast_get_image_type(), and EMAN::EMUtil::get_image_type().

00165 {
00166         ENTERFUNC;
00167         bool result = false;
00168         if (first_block) {
00169                 result = Util::check_file_by_magic(first_block, MAGIC);
00170         }
00171         EXITFUNC;
00172         return result;
00173 }

void VtkIO::read_dataset DatasetType  dstype  )  [private]
 

Definition at line 452 of file vtkio.cpp.

References filename, ImageReadException, nx, ny, originx, originy, originz, samestr(), spacingx, spacingy, spacingz, and vtk_file.

00453 {
00454         char buf[1024];
00455         int bufsz = sizeof(buf);
00456 
00457         if (dstype == STRUCTURED_POINTS) {
00458                 int nlines = 3;
00459                 int i = 0;
00460                 while (i < nlines && fgets(buf, bufsz, vtk_file)) {
00461                         if (samestr(buf, "DIMENSIONS")) {
00462                                 sscanf(buf, "DIMENSIONS %d %d %d", &nx, &ny, &nz);
00463                         }
00464                         else if (samestr(buf, "ORIGIN")) {
00465                                 sscanf(buf, "ORIGIN %f %f %f", &originx, &originy, &originz);
00466                         }
00467                         else if (samestr(buf, "SPACING") || samestr(buf, "ASPECT_RATIO")) {
00468                                 if (samestr(buf, "SPACING")) {
00469                                         sscanf(buf, "SPACING %f %f %f", &spacingx, &spacingy, &spacingz);
00470                                 }
00471                                 else {
00472                                         sscanf(buf, "ASPECT_RATIO %f %f %f", &spacingx, &spacingy, &spacingz);
00473                                 }
00474 
00475                                 if (spacingx != spacingy || spacingx != spacingz || spacingy != spacingz) {
00476                                         throw ImageReadException(filename,
00477                                                                                          "not support non-uniform spacing VTK so far\n");
00478                                 }
00479                         }
00480                         i++;
00481                 }
00482 
00483                 if (i != nlines) {
00484                         throw ImageReadException(filename, "read VTK file failed");
00485                 }
00486         }
00487         else {
00488                 throw ImageReadException(filename, "only STRUCTURED_POINTS is supported so far");
00489         }
00490 }

int VtkIO::to_em_datatype int  vtk_datatype  )  [private]
 

Definition at line 357 of file vtkio.cpp.

References DataType, FLOAT, and UNSIGNED_SHORT.

00358 {
00359         DataType d = static_cast < DataType > (vtk_datatype);
00360         switch (d) {
00361         case UNSIGNED_SHORT:
00362                 return EMUtil::EM_USHORT;
00363         case FLOAT:
00364                 return EMUtil::EM_FLOAT;
00365         default:
00366                 break;
00367         }
00368         return EMUtil::EM_UNKNOWN;
00369 }


Member Data Documentation

DataType EMAN::VtkIO::datatype [private]
 

Definition at line 135 of file vtkio.h.

Referenced by VtkIO().

EMAN::VtkIO::DEFINE_IMAGEIO_FUNC
 

Definition at line 82 of file vtkio.h.

off_t EMAN::VtkIO::file_offset [private]
 

Definition at line 146 of file vtkio.h.

Referenced by VtkIO().

string EMAN::VtkIO::filename [private]
 

Definition at line 128 of file vtkio.h.

Referenced by read_dataset().

VtkType EMAN::VtkIO::filetype [private]
 

Definition at line 136 of file vtkio.h.

Referenced by VtkIO().

bool EMAN::VtkIO::initialized [private]
 

Definition at line 133 of file vtkio.h.

Referenced by get_datasettype_from_name(), and get_datatype_from_name().

bool EMAN::VtkIO::is_big_endian [private]
 

Definition at line 131 of file vtkio.h.

Referenced by VtkIO().

bool EMAN::VtkIO::is_new_file [private]
 

Definition at line 132 of file vtkio.h.

Referenced by VtkIO().

const char * VtkIO::MAGIC = "# vtk DataFile Version" [static, private]
 

Definition at line 45 of file vtkio.cpp.

Referenced by is_valid().

int EMAN::VtkIO::nx [private]
 

Definition at line 137 of file vtkio.h.

Referenced by read_dataset(), and VtkIO().

int EMAN::VtkIO::ny [private]
 

Definition at line 138 of file vtkio.h.

Referenced by read_dataset(), and VtkIO().

int EMAN::VtkIO::nz [private]
 

Definition at line 139 of file vtkio.h.

Referenced by VtkIO().

float EMAN::VtkIO::originx [private]
 

Definition at line 140 of file vtkio.h.

Referenced by read_dataset(), and VtkIO().

float EMAN::VtkIO::originy [private]
 

Definition at line 141 of file vtkio.h.

Referenced by read_dataset(), and VtkIO().

float EMAN::VtkIO::originz [private]
 

Definition at line 142 of file vtkio.h.

Referenced by read_dataset(), and VtkIO().

IOMode EMAN::VtkIO::rw_mode [private]
 

Definition at line 129 of file vtkio.h.

float EMAN::VtkIO::spacingx [private]
 

Definition at line 143 of file vtkio.h.

Referenced by read_dataset(), and VtkIO().

float EMAN::VtkIO::spacingy [private]
 

Definition at line 144 of file vtkio.h.

Referenced by read_dataset(), and VtkIO().

float EMAN::VtkIO::spacingz [private]
 

Definition at line 145 of file vtkio.h.

Referenced by read_dataset(), and VtkIO().

FILE* EMAN::VtkIO::vtk_file [private]
 

Definition at line 130 of file vtkio.h.

Referenced by read_dataset(), and ~VtkIO().


The documentation for this class was generated from the following files:
Generated on Tue Jun 11 13:43:15 2013 for EMAN2 by  doxygen 1.3.9.1