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

David E DeMarle dave.demarle at kitware.com
Thu Jan 31 16:41:25 EST 2008


Hello,

You typically use this class to dump out the contents of a preexisting
vtkDataObject. So you make up a vtkDataObject, then set the
vtkDataObject to be the input to the writer algorithm, and the
algorithm blindly writes whatever the data object had in it.

The way to add arrays to a vtkDataSet (a subclass of vtkDataObject),
is to get the dataset's point or cell centered arrays with
vtkDataSet::GetPointData() for example, which will return an instance
of vtkDataSetAttributes which you can add arrays and data to manually
if you want.

To see what the classes VTK consists of and what you can do with each
one of them, peruse through
http://www.vtk.org/doc/nightly/html/annotated.html. For more getting
started information check out the examples in the vtk source code, and
the books.

cheers,
Dave


On 1/31/08, Mohamad M. Nasr-Azadani <mmnasr at gmail.com> wrote:
> Hi David,
>
> Thanks for the help.
> But, since I am new to VTK, I am not sure how to specify the data for
> such situations, i.e. multiple scalars or vectors.
> I think I can pass several scalars to "vtkXMLWriterC_SetPointData()"
> but I am not sure if it is the write way (also I don't know how to
> specify different names for different scalars, this way).
> Is there any other command (C version) which should be used to set the
> non-active scalar data? I went through "vtkXMLWriterC.h" and could not
> locate any other function for setting
> For example, I want to write two scalars, "Sname1" and "Sname2" which
> are already in arrays data1[] and data2[]?
> Could you please give me a hint how to do so?
>
>
> Thanks, again.
>
> -Mohamad
>
>
>
>
> On Jan 31, 2008 5:21 AM, David E DeMarle <dave.demarle at kitware.com> wrote:
> > 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