dune-grid  2.1.1
Public Types | Public Member Functions | Public Attributes
Dune::VTK::VTUWriter Class Reference

Dump a .vtu/.vtp files contents to a stream. More...

#include <dune/grid/io/file/vtk/vtuwriter.hh>

List of all members.

Public Types

enum  Phase { main, appended }

Public Member Functions

 VTUWriter (std::ostream &stream_, OutputType outputType, FileType fileType_)
 create a VTUWriter object
 ~VTUWriter ()
 write footer
void beginPointData (const std::string &scalars="", const std::string &vectors="")
 start PointData section
void endPointData ()
 finish PointData section
void beginCellData (const std::string &scalars="", const std::string &vectors="")
 start CellData section
void endCellData ()
 finish CellData section
void beginPoints ()
 start section for the point coordinates
void endPoints ()
 finish section for the point coordinates
void beginCells ()
 start section for the grid cells/PolyData lines
void endCells ()
 start section for the grid cells/PolyData lines
void beginMain (unsigned ncells, unsigned npoints)
 start the main PolyData/UnstructuredGrid section
void endMain ()
 finish the main PolyData/UnstructuredGrid section
bool beginAppended ()
 start the appended data section
void endAppended ()
 finish the appended data section
template<typename T >
DataArrayWriter< T > * makeArrayWriter (const std::string &name, unsigned ncomps, unsigned nitems)
 aquire a DataArrayWriter

Public Attributes

std::ostream & stream
enum Dune::VTK::VTUWriter::Phase phase

Detailed Description

Dump a .vtu/.vtp files contents to a stream.

This will help generating a .vtu/.vtp file. Typical use is like this:

{
  // create writer, writes begin tag
  VTUWriter writer(std::cout, appendedraw, VTUWriter::polyData);

  // write the main header
  writer.beginMain(ncells, nvertices);
  dumpEverything(writer);
  writer.endMain();

  // write the appended section, if required by the outputtype
  if(writer.beginAppended())
    dumpEverything(writer);
  writer.endAppended();

  // end scope so the destructor gets called and the closing tag is written
}

The method dumpEverything() then looks something like this:

void dumpEverything(VTUWriter& writer)
{
  // dump cell data (optional)
  writer.beginCellData();
  for(each cell data field) {
    shared_ptr<DataArrayWriter<T> > arraywriter
      (writer.makeArrayWriter(field.name, field.ncomps, ncells));
    // iterate over the points and write data for each
  }
  writer.endCellData();

  // dump point data (optional)
  writer.beginPointData();
  for(each point data field) {
    shared_ptr<DataArrayWriter<T> > arraywriter
      (writer.makeArrayWriter(field.name, field.ncomps, npoints));
    // iterate over the points and write data for each
  }
  writer.endPointData();

  // dump point coordinates
  writer.beginPoints();
  {
    shared_ptr<DataArrayWriter<float> > arraywriter
      (writer.makeArrayWriter("Coordinates", 3, npoints));
    // iterate over the points and write data for each
  }
  writer.endPoints();

  // dump cells
  writer.beginCells();
  { // connectivity
    shared_ptr<DataArrayWriter<int> > arraywriter
      (writer.makeArrayWriter("connectivity", 1, ncorners));
    // iterate over the cells and write data for each
  }
  { // connectivity
    shared_ptr<DataArrayWriter<int> > arraywriter
      (writer.makeArrayWriter("offsets", 1, ncells));
    // iterate over the cells and write data for each
  }
  if(fileType == unstructuredGrid) { // types
    shared_ptr<DataArrayWriter<unsigned char> > arraywriter
      (writer.makeArrayWriter("types", 1, ncells));
    // iterate over the cells and write data for each
  }
  writer.endCells();
}

Member Enumeration Documentation

Enumerator:
main 
appended 

Constructor & Destructor Documentation

Dune::VTK::VTUWriter::VTUWriter ( std::ostream &  stream_,
OutputType  outputType,
FileType  fileType_ 
) [inline]

create a VTUWriter object

Parameters:
stream_Stream to write to.
outputTypeHow to encode data.
fileType_Whether to write PolyData (1D) or UnstructuredGrid (nD) format.

Create object and write header.

References Dune::VTK::getEndiannessString(), Dune::VTK::polyData, stream, and Dune::VTK::unstructuredGrid.

write footer

References stream.


Member Function Documentation

start the appended data section

Returns:
A value indicating whether the is an actual appended section required.

If this function returns true, an appended section is actually required. In this case, inbetween the call to this method and to endAppended(), there should be literally the same calls (including the same arguments) as between the calls to beginMain() and endMain(). The only exception is, that if a DataArrayWriter in the main section indicated that the calls to write could be skipped, this is not neccessarily true in the appended section also (you will have to ask the DataArrayWriter again).

If this function returns false, no appended section is required and a call to endAppeded() should immediately follow the call to this function.

References appended, Dune::VTK::DataArrayWriterFactory::appendedEncoding(), Dune::VTK::DataArrayWriterFactory::beginAppended(), phase, and stream.

Referenced by Dune::VTK::BasicWriter< NonConformingBoundaryIteratorFactory< GV > >::writePiece().

void Dune::VTK::VTUWriter::beginCellData ( const std::string &  scalars = "",
const std::string &  vectors = "" 
) [inline]

start CellData section

Parameters:
scalarsName of field to which should be marked as default scalars field. If this is the empty string, don't set any default.
vectorsName of field to which should be marked as default vectors field. If this is the empty string, don't set any default.

If there are no CellData fields, the call to this function may be skipped, together with the corresponding call to endCellData().

References appended, main, phase, and stream.

Referenced by Dune::SubsamplingVTKWriter< GridView >::writeCellData(), Dune::VTK::BasicWriter< NonConformingBoundaryIteratorFactory< GV > >::writeCellData(), and Dune::VTKWriter< Grid::LeafGridView >::writeCellData().

start section for the grid cells/PolyData lines

Between the call to this method an the following call to the endCells(), there must be two or three fields written:

  • "connectivity" of type Int32 with 3 components, number of items is the number of corners (that may be different from number of vertices!)
  • "offsets" of type Int32 with one component, number of items is number of cells.
  • for UnstructuredGrid, "types" of type UInt8 with one component, number of items is number of cells.

References appended, main, phase, and stream.

Referenced by Dune::VTK::BasicWriter< NonConformingBoundaryIteratorFactory< GV > >::writeGrid(), Dune::SubsamplingVTKWriter< GridView >::writeGridCells(), and Dune::VTKWriter< Grid::LeafGridView >::writeGridCells().

void Dune::VTK::VTUWriter::beginMain ( unsigned  ncells,
unsigned  npoints 
) [inline]

start the main PolyData/UnstructuredGrid section

Parameters:
ncellsNumber of cells/lines.
npointsNumber of points.

Inbetween the call to this method and to endMain(), there should be calls to dump the actual data:

References main, phase, and stream.

Referenced by Dune::VTK::BasicWriter< NonConformingBoundaryIteratorFactory< GV > >::writePiece().

void Dune::VTK::VTUWriter::beginPointData ( const std::string &  scalars = "",
const std::string &  vectors = "" 
) [inline]

start PointData section

Parameters:
scalarsName of field to which should be marked as default scalars field. If this is the empty string, don't set any default.
vectorsName of field to which should be marked as default vectors field. If this is the empty string, don't set any default.

If there are no PointData fields, the call to this function may be skipped, together with the corresponding call to endPointData().

References appended, main, phase, and stream.

Referenced by Dune::VTK::BasicWriter< NonConformingBoundaryIteratorFactory< GV > >::writePointData(), Dune::SubsamplingVTKWriter< GridView >::writeVertexData(), and Dune::VTKWriter< Grid::LeafGridView >::writeVertexData().

start section for the point coordinates

Between the call to this method an the following call to the endPoints(), there must be a single field written. The name must be "Coordinates", it must have 3 components, and the number of items must be the number of points.

References appended, main, phase, and stream.

Referenced by Dune::VTK::BasicWriter< NonConformingBoundaryIteratorFactory< GV > >::writeGrid(), Dune::SubsamplingVTKWriter< GridView >::writeGridPoints(), and Dune::VTKWriter< Grid::LeafGridView >::writeGridPoints().

finish the appended data section

References stream.

Referenced by Dune::VTK::BasicWriter< NonConformingBoundaryIteratorFactory< GV > >::writePiece().

void Dune::VTK::VTUWriter::endCells ( ) [inline]
void Dune::VTK::VTUWriter::endMain ( ) [inline]

finish the main PolyData/UnstructuredGrid section

References stream.

Referenced by Dune::VTK::BasicWriter< NonConformingBoundaryIteratorFactory< GV > >::writePiece().

template<typename T >
DataArrayWriter<T>* Dune::VTK::VTUWriter::makeArrayWriter ( const std::string &  name,
unsigned  ncomps,
unsigned  nitems 
) [inline]

Member Data Documentation


The documentation for this class was generated from the following file: