When you say "writing binary", you need to distinguish between three possibilities.
1) writing binary "inline" (actually base64 encoded)
2) writing binary "append" (actually base64 encoded)
3) writing raw binary "append" (really raw binary)

Since you already have ASCII writing working and its content is "inline", it won't take much more to get binary inline working. By "inline", I mean when the output is placed between the <xxx> </xxx> markers. Eg,
    <DataArray ...>
        content
    </DataArray>

For the binary case, the content is written as base64-encoded data, which means that your output writer for these sections needs to pass the content through a base64 layer to do the encoding for you.

If it helps as reference, we have the same thing in OpenFOAM, except that we only write vtu and vtp files (we don't have rectilinear meshes).

In the repo https://develop.openfoam.com/Development/OpenFOAM-plus
we have a foamVtkBase64Formatter and a foamVtkBase64Layer (both under src/fileFormats/vtk/format/) that add a base64Layer to encode and output as base64 (src/OpenFOAM/db/IOstreams/hashes/base64Layer.[CH]).

You'll see that the foamVtkBase64Layer and base64Layer are quite low level means of adding an tiny encoding buffer (3 chars size) to intercept output prior to sending through to a std::ostream. It take very little effort to adopt for your output and thus quite easy to drop in instead of your current ASCII outputter. For it too work easily, however, you should make sure that you need to generate your output content with a write() method instead of using '<<'. This allows somewhat easy switching between something like a foamVtkAsciiFormatter and the binary version, but more importantly it makes it easier to track the output state.

When browsing through the code, you may also notice that we have support for writing in appended format (raw and base64). However, I would not advise you to tackle that immediately. There are a few more things to watch out for here, but more importantly it will change many more things on the calling side.

I hope this information helps you.
/mark

--
Dr Mark OLESEN
Principal Engineer, ESI-OpenCFD
ESI GmbH | Einsteinring 24 | 85609 Munich | GERMANY
www.openfoam.com | www.esi-group.com | mark.ole...@esi-group.com


On 11/30/17 18:00, Stegmeier, Nicholas wrote:
Hello,

I am new to Paraview and C++ coming from a mostly mathematics background. I am emailing to get resources or help on writing binary XML VTK files from C++.

I have finally succeeded in using the ASCII XML VTK format for a 2D rectilinear CFD application. My ".pvtr" file is shown below.

How can I write this file and my other XML VTK files in binary from C++? Do I need a special C++ library?
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the ParaView Wiki at: 
http://paraview.org/Wiki/ParaView

Search the list archives at: http://markmail.org/search/?q=ParaView

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/paraview

Reply via email to