dune-grid
2.2.0
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
97
class
VTUWriter
{
98
public
:
99
std::ostream&
stream
;
100
enum
Phase
{
main
,
appended
}
phase
;
101
102
private
:
103
DataArrayWriterFactory
factory;
104
Indent indent;
105
106
std::string fileType;
107
std::string cellName;
108
109
bool
doAppended;
110
111
public
:
113
121
inline
VTUWriter
(std::ostream& stream_,
OutputType
outputType,
122
FileType
fileType_)
123
:
stream
(stream_), factory(outputType,
stream
)
124
{
125
switch
(fileType_) {
126
case
polyData
:
127
fileType =
"PolyData"
;
128
cellName =
"Lines"
;
129
break
;
130
case
unstructuredGrid
:
131
fileType =
"UnstructuredGrid"
;
132
cellName =
"Cells"
;
133
break
;
134
default
:
135
DUNE_THROW(IOError,
"VTUWriter: Unknown fileType: "
<< fileType_);
136
}
137
const
std::string& byteOrder =
getEndiannessString
();
138
139
stream
<< indent <<
"<?xml version=\"1.0\"?>\n"
;
140
stream
<< indent <<
"<VTKFile"
141
<<
" type=\""
<< fileType <<
"\""
142
<<
" version=\"0.1\""
143
<<
" byte_order=\""
<< byteOrder <<
"\">\n"
;
144
++indent;
145
}
146
148
inline
~VTUWriter
() {
149
--indent;
150
stream
<< indent <<
"</VTKFile>\n"
151
<< std::flush;
152
}
153
155
166
inline
void
beginPointData
(
const
std::string& scalars =
""
,
167
const
std::string& vectors =
""
) {
168
switch
(
phase
) {
169
case
main
:
170
stream
<< indent <<
"<PointData"
;
171
if
(scalars !=
""
)
stream
<<
" Scalars=\""
<< scalars <<
"\""
;
172
if
(vectors !=
""
)
stream
<<
" Vectors=\""
<< vectors <<
"\""
;
173
stream
<<
">\n"
;
174
++indent;
175
break
;
176
case
appended
:
177
break
;
178
}
179
}
181
inline
void
endPointData
() {
182
switch
(
phase
) {
183
case
main
:
184
--indent;
185
stream
<< indent <<
"</PointData>\n"
;
186
break
;
187
case
appended
:
188
break
;
189
}
190
}
191
193
204
inline
void
beginCellData
(
const
std::string& scalars =
""
,
205
const
std::string& vectors =
""
) {
206
switch
(
phase
) {
207
case
main
:
208
stream
<< indent <<
"<CellData"
;
209
if
(scalars !=
""
)
stream
<<
" Scalars=\""
<< scalars <<
"\""
;
210
if
(vectors !=
""
)
stream
<<
" Vectors=\""
<< vectors <<
"\""
;
211
stream
<<
">\n"
;
212
++indent;
213
break
;
214
case
appended
:
215
break
;
216
}
217
}
219
inline
void
endCellData
() {
220
switch
(
phase
) {
221
case
main
:
222
--indent;
223
stream
<< indent <<
"</CellData>\n"
;
224
break
;
225
case
appended
:
226
break
;
227
}
228
}
229
231
237
inline
void
beginPoints
() {
238
switch
(
phase
) {
239
case
main
:
240
stream
<< indent <<
"<Points>\n"
;
241
++indent;
242
break
;
243
case
appended
:
244
break
;
245
}
246
}
248
inline
void
endPoints
() {
249
switch
(
phase
) {
250
case
main
:
251
--indent;
252
stream
<< indent <<
"</Points>\n"
;
253
break
;
254
case
appended
:
255
break
;
256
}
257
}
258
260
273
inline
void
beginCells
() {
274
switch
(
phase
) {
275
case
main
:
276
stream
<< indent <<
"<"
<< cellName <<
">\n"
;
277
++indent;
278
break
;
279
case
appended
:
280
break
;
281
}
282
}
284
inline
void
endCells
() {
285
switch
(
phase
) {
286
case
main
:
287
--indent;
288
stream
<< indent <<
"</"
<< cellName <<
">\n"
;
289
break
;
290
case
appended
:
291
break
;
292
}
293
}
294
296
309
inline
void
beginMain
(
unsigned
ncells,
unsigned
npoints) {
310
stream
<< indent <<
"<"
<< fileType <<
">\n"
;
311
++indent;
312
stream
<< indent <<
"<Piece"
313
<<
" NumberOf"
<< cellName <<
"=\""
<< ncells <<
"\""
314
<<
" NumberOfPoints=\""
<< npoints <<
"\">\n"
;
315
++indent;
316
phase
=
main
;
317
}
319
inline
void
endMain
() {
320
--indent;
321
stream
<< indent <<
"</Piece>\n"
;
322
--indent;
323
stream
<< indent <<
"</"
<< fileType <<
">\n"
;
324
}
325
327
344
inline
bool
beginAppended
() {
345
doAppended = factory.
beginAppended
();
346
if
(doAppended) {
347
const
std::string& encoding = factory.
appendedEncoding
();
348
stream
<< indent <<
"<AppendedData"
349
<<
" encoding=\""
<< encoding <<
"\">\n"
;
350
++indent;
351
// mark begin of data
352
stream
<< indent <<
"_"
;
353
}
354
phase
=
appended
;
355
return
doAppended;
356
}
358
inline
void
endAppended
() {
359
if
(doAppended) {
360
stream
<<
"\n"
;
361
--indent;
362
stream
<< indent <<
"</AppendedData>\n"
;
363
}
364
}
365
367
379
template
<
typename
T>
380
DataArrayWriter<T>
*
makeArrayWriter
(
const
std::string& name,
381
unsigned
ncomps,
unsigned
nitems) {
382
return
factory.
make
<T>(name, ncomps, nitems, indent);
383
}
384
};
385
386
}
// namespace VTK
387
389
390
}
// namespace Dune
391
392
#endif // DUNE_GRID_IO_FILE_VTK_VTUWRITER_HH
Generated on Mon Jun 4 2012 12:01:13 for dune-grid by
1.8.1