[vtkusers] How to Change Variable Array in VTK Plot?

David Doria daviddoria+vtk at gmail.com
Wed Feb 10 07:45:30 EST 2010


On Wed, Feb 10, 2010 at 12:33 AM, Shahid Rauf <srauf106326 at gmail.com> wrote:

> I am new to VTK and would greatly appreciate help with the following
> question.
>
> I have an XML Unstructured Grid data file (.vtu) which has multiple scalar
> DataArrays within the PointData block:
>
>             <PointData Scalars="var_1">
>         <DataArray type="Float32" Name="var_1" format="ascii">
>           ...
>         </DataArray>
>         <DataArray type="Float32" Name="var_2" format="ascii">
>           ...
>         </DataArray>
>         <DataArray type="Float32" Name="var_3" format="ascii">
>           ...
>         </DataArray>
>       </PointData>
>
> I can visualize the data in this file using Paraview and look at the
> different variables easily.  I am now trying to visualize using a C++ VTK
> program, but the program is only displaying the first variable ("var_1").
>  So far I have not been able to figure out how to make VTK plot the other
> variables ("var_2", "var_3").  Can somebody let me know which class and
> function to use to change the scalar variable that is plotted.  I am
> including portions of my C++ code to help explain what I am doing.
>
>   vtkRenderer *renderer = vtkRenderer::New();
>  vtkRenderWindow *renWin = vtkRenderWindow::New();
>  renWin->AddRenderer(renderer);
>  vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>  iren->SetRenderWindow(renWin);
>
>  vtkXMLUnstructuredGridReader *reader =
> vtkXMLUnstructuredGridReader::New();
>  char *cfname = "vtk.vtu";
>  reader->SetFileName( cfname );
>  delete[] cfname;
>  reader->Update();
>
>  vtkExtractUnstructuredGrid *usplane=vtkExtractUnstructuredGrid::New();
>  usplane->SetInput(reader->GetOutput());
>  usplane->SetExtent(-10,10,-10,10,-10,10);
>
>  vtkPlane *planefunction=vtkPlane::New();
>  planefunction->SetOrigin(0.0,0.0,0.05);
>  planefunction->SetNormal(0,0,1);
>
>  vtkCutter *cutter=vtkCutter::New();
>  cutter->SetInput(usplane->GetOutput());
>  cutter->SetCutFunction(planefunction);
>
>  vtkPolyDataMapper *planeMapper=vtkPolyDataMapper::New();
>  planeMapper->SetInputConnection(cutter->GetOutputPort());
>  planeMapper->SetScalarModeToUsePointData();
>  planeMapper->SetScalarRange(0.0,100.0);
>  vtkActor *planeActor=vtkActor::New();
>  planeActor->SetMapper(planeMapper);
>
>  renderer->AddActor(planeActor);
>
>  renWin->Render();
>  iren->Start();
>
> Thanks a lot for your help,
>
> Shahid Rauf.
>

I believe you can use
usplane->GetPointData()->SetActiveScalars("var_2");

Please let us know if that does the trick.

Thanks,

David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100210/a0aeb23a/attachment.htm>


More information about the vtkusers mailing list