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.mulholl...@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 <t...@tp1.rub.de> > *Sent:* Wednesday, April 01, 2009 10:55 AM > *To:* David Mulholland <d.t.mulholl...@googlemail.com> > *Cc:* paraview@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 <t...@tp1.rub.de> > *Sent:* Tuesday, March 31, 2009 2:23 PM > *To:* David Mulholland <d.t.mulholl...@googlemail.com> > *Cc:* paraview@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 > >
_______________________________________________ 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