[Paraview] VTK XML Binary Output

Hom Nath Gharti hng.email at gmail.com
Wed Apr 1 08:59:34 EDT 2009


I thought my C code may be helpful to you. I have 5 data array of different
size, and I do like this:

nvar=5;
/* Bytes and offsets for ParaView file */
    bytes[0] = (ndim*nnod)*sizeof(float);     /* Coordinates */
    bytes[1] = (nenod*nelmt)*sizeof(int);     /* Connectivity */
    bytes[2] = (nelmt)*sizeof(int);         /* Offsets */
    bytes[3] = (nelmt)*sizeof(int);         /* Types */
    bytes[4] = (nelmt)*sizeof(float);         /* Cell data */

    off[0]=0; /* 1st offset */
    for (i=0; i<nvar; i++){
        if(i<nvar-1)off[i+1]=off[i]+sizeof(int)+bytes[i];
        bytes[i]=bytes[i]+sizeof(int); /* For each byte we must also add the
sizeof(int) for itself also */
    }

Best wishes,
Hom Nath

2009/4/1 David Mulholland <d.t.mulholland at googlemail.com>

>  Hi Thorsten,
>
> I just tried that and it is now giving me a segmentation fault... I am
> using the following line:
> file.write(reinterpret_cast<const char*>(size), 4);
>
>  My size is calculated as - int size = idim*jdim*sizeof(float). idim is
> currently in the region of 400 and jdim 200. I am outputting big files and
> it is likely to get bigger.
>
> Also, I intend to include more data arrays each timestep, I just want to
> get it working with pressure first and then I will include then which is why
> I want to calculate the offset... I assuming it is just the number of bytes
> to the start of the next datafield...
>
> Thanks David
>  *From:* Thorsten Hater <th at tp1.rub.de>
> *Sent:* Wednesday, April 01, 2009 10:55 AM
> *To:* David Mulholland <d.t.mulholland at googlemail.com>
> *Cc:* paraview at paraview.org
> *Subject:* Re: [Paraview] VTK XML Binary Output
>
> Hello David,
>
> the offset parameter is relevant if you append mulitple data sections into
> a single file.
> Every DataArray tag with append format specifies the offset as the position
> in the
> binary data in bytes.
> To write the integer I use the following:
>
> std::ofstream os; // binary mode (for windows ...) ofstream to your file
> int N; // size in bytes
> os.write(reinterpret_cast<const char*>(N), 4);
>
> Thorsten
>
> David Mulholland schrieb:
>
> Hi Thorsten,
>
> That's really helpful. I don't quite know how to write out the number of
> bits as a char? If you could explain a way of how to do that it would be
> greatly appreciated.
>
> Also, how do I calculate what value goes in for the offset? I had a look at
> a couple of output files from paraview and it wasnt obvious how it was
> calculated.
>
> Thanks
> David
>
>  *From:* Thorsten Hater <th at tp1.rub.de>
> *Sent:* Tuesday, March 31, 2009 2:23 PM
> *To:* David Mulholland <d.t.mulholland at googlemail.com>
> *Cc:* paraview at paraview.org
> *Subject:* Re: [Paraview] VTK XML Binary Output
>
> Hello,
>
> the solution might be to append your data as
>
> < DataArray ... format="appended">
> </DataArray>
> < AppendedData encoding="raw">
> _NNNNData
> </AppendedData>
> where you should replace NNNN with a four
> byte integer containing the number of bytes
> in the data array as 4 chars.
> Setting the encoding to "raw" tells ParaView, that
> the data is simply a stream of bytes rather than
> base64 encoded.
> If you want to write Image I can supply a small
> writer project for 2D data.
>
>     Thorsten
>
> David Mulholland schrieb:
>
> Hello,
>
> I am currently trying to write my own quick output routine to generate a
> binary file using C++. I am currently trying to avoid having to use the vtk
>
> libraries because I only need a very basic output that doesn't change much.
>
> I so far have the ASCII output working no problem but I can't get the
> binary
> working.
>
> I am using file.write() function to output the binary data and that seems
> to
> be working no problem and when used in a legacy format application it works
>
> perfectly except that the data is LittleEndian instead of BigEndian. That's
>
> why I have moved to BigEndian because I don't want to have to make the
> output routine for the data anymore complicated that file.write.
>
> I started using the xml format and considering my output is raw binary and
> not base64 I changed it to be in the AppendedData section instead of
> DataArray. It still isn't working right, I get the following error when I
> try to load in ParaView:
>
> ERROR: In ..\..\..\ParaView3\VTK\IO\vtkXMLStructuredDataReader.cxx, line
> 349
> vtkXMLImageDataReader (0ADEC7F8): Error reading extent 0 422 0 242 0 1 from
>
> piece 0
>
>
> ERROR: In ..\..\..\ParaView3\VTK\IO\vtkXMLDataReader.cxx, line 537
> vtkXMLImageDataReader (0ADEC7F8): Cannot read cell data array "pressure"
> from PointData in piece 0.  The data array in the element may be too short.
>
> The format of my output file is as follows:
>
> <?xml version="1.0"?>
> <VTKFile type="ImageData" version="0.1" byte_order="LittleEndian">
> <ImageData WholeExtent="0 422 0 242 0 1" Origin="0 0 0" Spacing="1 1 1">
> <Piece Extent="0 422 0 242 0 1">
> <PointData>
> </PointData>
> <CellData Scalars="pressure">
> <DataArray type="Float32" Name="pressure" format="appended" offset="0"/>
> </CellData>
> </Piece>
> </ImageData>
> <AppendedData encoding="raw">
> _BINARYDATA
> </AppendedData>
> </VTKFile>
>
> Note following an error message I have added an _ at the start of the
> binary
> data. Is this required?
>
> One final thing, when using appended data, how do you calculate what the
> offset should be?
>
> Thanks
> David
>
> ------------------------------
>
> _______________________________________________
> 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
>
> Follow this link to subscribe/unsubscribe:http://www.paraview.org/mailman/listinfo/paraview
>
>
>
>
> _______________________________________________
> 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
>
> Follow this link to subscribe/unsubscribe:
> http://www.paraview.org/mailman/listinfo/paraview
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20090401/67a75f4b/attachment.htm>


More information about the ParaView mailing list