[vtkusers] VTK xml Rectinlinear writer multiple Scalars (Vectors) and timesteps

David E DeMarle dave.demarle at kitware.com
Thu Jan 31 08:21:48 EST 2008


Howdy,

You can have as many arrays as you want in the data and in the file,
however only one of them at any given time will be marked as the
SCALARS. Think of the designation SCALARS as meaning, the "ACTIVE"
scalar array, as opposed to meaning, and array that has a single
component. Similarly VECTORS means Active vectors and not an array
with three components, etc. What these designations do is to tell
downstream filters what array to process if you haven't explicitly
told them which array by name of position.

cheers,
Dave

On 1/31/08, Mohamad M. Nasr-Azadani <mmnasr at gmail.com> wrote:
> Hi,
>
> I have just started using VTK. I tried to write xml rectilinear vtk
> files. My code (see below) works fine only for ONE vector field and
> ONE Scalar and also only one time step.
> I am trying to write several scalars (or vectors) to file. It turns
> out after each "vtkXMLWriterC_SetPointData()", the previous data
> (Vector or Scalar) is replaced by the last one. So, I could only have
> one Scalar and One Vector field.
> Also, if I try to write several time steps in one xml file, I do not
> get the right output.
>
> I think someone had that problem before. I did not see any replies to
> the problem in C.
> Can someone help me with these two problems?
>
> In advance, thanks.
>
> -Mohamad
>
> PS: Hope this seudo code helps the ones like me who could not find
> good examples to start with xml writers in vtk.
>
> **************************
>
> .
> .
> .
>
>   vtkXMLWriterC* writer = vtkXMLWriterC_New();
>   int extent[6] = {0, Nx-1, 0, Ny-1, 0, Nz-1};
>   int Nt = Nx*Ny*Nz;
> .
> .
> .
>   vtkXMLWriterC_SetDataObjectType(writer, VTK_RECTILINEAR_GRID);
>   vtkXMLWriterC_SetExtent(writer, extent);
>
> /* xc, yc, zc: arrays of the grid positions */
> /****************************/
>   axis           = 0;
>   dataType       = VTK_FLOAT;
>   numCoordinates = Nx;
>
>   vtkXMLWriterC_SetCoordinates(writer, axis, VTK_FLOAT, xc, Nx);
>
> /****************************/
>   axis           = 1;
>   dataType       = VTK_FLOAT;
>   numCoordinates = Ny;
>
>   vtkXMLWriterC_SetCoordinates(writer, axis, VTK_FLOAT, yc, Ny);
> /****************************/
>   axis           = 2;
>   dataType       = VTK_FLOAT;
>   numCoordinates = Nz;
>
>   vtkXMLWriterC_SetCoordinates(writer, axis, VTK_FLOAT, zc, Nz);
>
>   vtkXMLWriterC_SetFileName(writer, "data.vtr");
>   vtkXMLWriterC_SetNumberOfTimeSteps(writer, NTIMESTEPS);
>   vtkXMLWriterC_Start(writer);
>
>   /* for all timesteps: */
>   for(m=0; m<NTIMESTEPS; m++)
>   {
>
>         for (k=0; k<Nz; k++) {
>
>                 for (j=0; j<Ny; j++) {
>
>                         for (i=0; i<Nx; i++) {
>
>                                 index = k*(Nx*Ny) + j*Nx + i;
>                                 data1[index] = sin(xc[i])*sin(yc[j]);
>                         }
>                 }
>         }
>
>     vtkXMLWriterC_SetPointData(writer, "S1", VTK_FLOAT, data1, Nt, 1,
> "SCALARS");
>         for (k=0; k<Nz; k++) {
>
>                 for (j=0; j<Ny; j++) {
>
>                         for (i=0; i<Nx; i++) {
>
>                                 index = k*(Nx*Ny) + j*Nx + i;
>                                 data2[index] = cos(xc[i])*cos(yc[j]);
>                         }
>                 }
>         }
>
>     vtkXMLWriterC_SetPointData(writer, "S2", VTK_FLOAT, data2, Nt, 1,
> "SCALARS");
>
>     vtkXMLWriterC_WriteNextTimeStep(writer, m);
>   }
>
>   vtkXMLWriterC_Stop(writer);
>   vtkXMLWriterC_Delete(writer);
> _______________________________________________
> This is the private VTK discussion list.
> Please keep messages on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>



More information about the vtkusers mailing list