dune-grid
2.3.1
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
dune
grid
io
file
vtk
vtuwriter.hh
Go to the documentation of this file.
1
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2
// vi: set et ts=4 sw=2 sts=2:
3
4
#ifndef DUNE_GRID_IO_FILE_VTK_VTUWRITER_HH
5
#define DUNE_GRID_IO_FILE_VTK_VTUWRITER_HH
6
7
#include <ostream>
8
#include <string>
9
10
#include <dune/common/exceptions.hh>
11
#include <dune/common/indent.hh>
12
13
#include <
dune/grid/io/file/vtk/common.hh
>
14
#include <
dune/grid/io/file/vtk/dataarraywriter.hh
>
15
16
namespace
Dune {
17
20
21
namespace
VTK {
22
24
96
class
VTUWriter
{
97
public
:
98
std::ostream&
stream
;
99
enum
Phase
{
main
,
appended
}
phase
;
100
101
private
:
102
DataArrayWriterFactory
factory;
103
Indent indent;
104
105
std::string fileType;
106
std::string cellName;
107
108
bool
doAppended;
109
110
public
:
112
120
inline
VTUWriter
(std::ostream& stream_,
OutputType
outputType,
121
FileType
fileType_)
122
:
stream
(stream_), factory(outputType,
stream
)
123
{
124
switch
(fileType_) {
125
case
polyData
:
126
fileType =
"PolyData"
;
127
cellName =
"Lines"
;
128
break
;
129
case
unstructuredGrid
:
130
fileType =
"UnstructuredGrid"
;
131
cellName =
"Cells"
;
132
break
;
133
default
:
134
DUNE_THROW(IOError,
"VTUWriter: Unknown fileType: "
<< fileType_);
135
}
136
const
std::string& byteOrder =
getEndiannessString
();
137
138
stream
<< indent <<
"<?xml version=\"1.0\"?>\n"
;
139
stream
<< indent <<
"<VTKFile"
140
<<
" type=\""
<< fileType <<
"\""
141
<<
" version=\"0.1\""
142
<<
" byte_order=\""
<< byteOrder <<
"\">\n"
;
143
++indent;
144
}
145
147
inline
~VTUWriter
() {
148
--indent;
149
stream
<< indent <<
"</VTKFile>\n"
150
<< std::flush;
151
}
152
154
165
inline
void
beginPointData
(
const
std::string& scalars =
""
,
166
const
std::string& vectors =
""
) {
167
switch
(
phase
) {
168
case
main
:
169
stream
<< indent <<
"<PointData"
;
170
if
(scalars !=
""
)
stream
<<
" Scalars=\""
<< scalars <<
"\""
;
171
if
(vectors !=
""
)
stream
<<
" Vectors=\""
<< vectors <<
"\""
;
172
stream
<<
">\n"
;
173
++indent;
174
break
;
175
case
appended
:
176
break
;
177
}
178
}
180
inline
void
endPointData
() {
181
switch
(
phase
) {
182
case
main
:
183
--indent;
184
stream
<< indent <<
"</PointData>\n"
;
185
break
;
186
case
appended
:
187
break
;
188
}
189
}
190
192
203
inline
void
beginCellData
(
const
std::string& scalars =
""
,
204
const
std::string& vectors =
""
) {
205
switch
(
phase
) {
206
case
main
:
207
stream
<< indent <<
"<CellData"
;
208
if
(scalars !=
""
)
stream
<<
" Scalars=\""
<< scalars <<
"\""
;
209
if
(vectors !=
""
)
stream
<<
" Vectors=\""
<< vectors <<
"\""
;
210
stream
<<
">\n"
;
211
++indent;
212
break
;
213
case
appended
:
214
break
;
215
}
216
}
218
inline
void
endCellData
() {
219
switch
(
phase
) {
220
case
main
:
221
--indent;
222
stream
<< indent <<
"</CellData>\n"
;
223
break
;
224
case
appended
:
225
break
;
226
}
227
}
228
230
236
inline
void
beginPoints
() {
237
switch
(
phase
) {
238
case
main
:
239
stream
<< indent <<
"<Points>\n"
;
240
++indent;
241
break
;
242
case
appended
:
243
break
;
244
}
245
}
247
inline
void
endPoints
() {
248
switch
(
phase
) {
249
case
main
:
250
--indent;
251
stream
<< indent <<
"</Points>\n"
;
252
break
;
253
case
appended
:
254
break
;
255
}
256
}
257
259
272
inline
void
beginCells
() {
273
switch
(
phase
) {
274
case
main
:
275
stream
<< indent <<
"<"
<< cellName <<
">\n"
;
276
++indent;
277
break
;
278
case
appended
:
279
break
;
280
}
281
}
283
inline
void
endCells
() {
284
switch
(
phase
) {
285
case
main
:
286
--indent;
287
stream
<< indent <<
"</"
<< cellName <<
">\n"
;
288
break
;
289
case
appended
:
290
break
;
291
}
292
}
293
295
308
inline
void
beginMain
(
unsigned
ncells,
unsigned
npoints) {
309
stream
<< indent <<
"<"
<< fileType <<
">\n"
;
310
++indent;
311
stream
<< indent <<
"<Piece"
312
<<
" NumberOf"
<< cellName <<
"=\""
<< ncells <<
"\""
313
<<
" NumberOfPoints=\""
<< npoints <<
"\">\n"
;
314
++indent;
315
phase
=
main
;
316
}
318
inline
void
endMain
() {
319
--indent;
320
stream
<< indent <<
"</Piece>\n"
;
321
--indent;
322
stream
<< indent <<
"</"
<< fileType <<
">\n"
;
323
}
324
326
343
inline
bool
beginAppended
() {
344
doAppended = factory.
beginAppended
();
345
if
(doAppended) {
346
const
std::string& encoding = factory.
appendedEncoding
();
347
stream
<< indent <<
"<AppendedData"
348
<<
" encoding=\""
<< encoding <<
"\">\n"
;
349
++indent;
350
// mark begin of data
351
stream
<< indent <<
"_"
;
352
}
353
phase
=
appended
;
354
return
doAppended;
355
}
357
inline
void
endAppended
() {
358
if
(doAppended) {
359
stream
<<
"\n"
;
360
--indent;
361
stream
<< indent <<
"</AppendedData>\n"
;
362
}
363
}
364
366
378
template
<
typename
T>
379
DataArrayWriter<T>
*
makeArrayWriter
(
const
std::string& name,
380
unsigned
ncomps,
unsigned
nitems) {
381
return
factory.
make
<T>(name, ncomps, nitems, indent);
382
}
383
};
384
385
}
// namespace VTK
386
388
389
}
// namespace Dune
390
391
#endif // DUNE_GRID_IO_FILE_VTK_VTUWRITER_HH
Generated on Mon Nov 24 2014 21:02:51 for dune-grid by
1.8.1.2