dune-grid  2.3.1
Public Types | Public Member Functions | Public Attributes | List of all members
Dune::VTK::VTUWriter Class Reference

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

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

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
// 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.

Dune::VTK::VTUWriter::~VTUWriter ( )
inline

write footer

References stream.

Member Function Documentation

bool Dune::VTK::VTUWriter::beginAppended ( )
inline

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< GridView >::writeCellData().

void Dune::VTK::VTUWriter::beginCells ( )
inline

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< GridView >::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< GridView >::writeVertexData().

void Dune::VTK::VTUWriter::beginPoints ( )
inline

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< GridView >::writeGridPoints().

void Dune::VTK::VTUWriter::endAppended ( )
inline

finish the appended data section

References stream.

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

void Dune::VTK::VTUWriter::endCellData ( )
inline
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().

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

Member Data Documentation

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

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