[Paraview] XY plotting via filter extending vtkRectilinearGridAlgorithm, resulting plot always empty

Christine Corbett Moran corbett at physik.uzh.ch
Mon Oct 5 16:07:44 EDT 2009


By "plotting setup" I mean that I first want to make a filter which
plots X vs. Y for a very simple case, so that when I try to make the
filter do something more complicated I don't have to worry about basic
bugs/conceptual issues (e.g. if I have a wrong understanding about
structured extents or which algorithm to derive from to automatically
create a plot in the XY view of my desired variables after execution
of a filter).

Thanks for the vtkTable idea, it does seem I may have the wrong idea
about which type of data to produce, I had read a number of posts on
the mailing list that said that the way to get ParaView to
automatically plot the results from a filter in the XY view was to
produce vtkRectilinearGrid. I will try vtkTable and see if it is
suitable. In the meantime if anyone can help with the
vtkRectilinearGrid simple XY plot example, it may come in handy if
vtkTable is not suitable, for others, or for the next time I work with
vtkRectilinearGrid.

Cheers,
Christine


On Mon, Oct 5, 2009 at 9:53 PM, Utkarsh Ayachit
<utkarsh.ayachit at kitware.com> wrote:
> I am not sure what you mean by "plotting setup for the filter". Is
> this filter supposed to produce data that can plotted directly? In
> that case you might want to simply create a vtkTableAlgorithm
> subclassand produce vtkTable (instead of vtkRectilinearGrid) that has
> data rows/columns which can easily be plotted by ParaView. vtkTable is
> also easier to deal with since you don't have to worry about
> structured extents.
>
> Utkarsh
>
> On Mon, Oct 5, 2009 at 3:38 PM, Christine Corbett Moran
> <corbett at physik.uzh.ch> wrote:
>> Hi Utkarsh,
>>
>> Yes that works but I actually want to do more complicated things than
>> just plot the data values, so first am doing something simple to make
>> sure I have the plotting setup for the filter correct.
>>
>> Cheers,
>> Christine
>>
>> On Mon, Oct 5, 2009 at 9:34 PM, Utkarsh Ayachit
>> <utkarsh.ayachit at kitware.com> wrote:
>>> Since you simply want to plot the data_values from your rectilinear
>>> grid, try applying the "Plot Data" filter instead. Does that work?
>>>
>>> Utkarsh
>>>
>>> On Mon, Oct 5, 2009 at 3:30 PM, Christine Corbett Moran
>>> <corbett at physik.uzh.ch> wrote:
>>>> Hi,
>>>>
>>>> I want to begin adding some non-trivial 2d plotting capabilities to my
>>>> ParaView plugin; in that interest I've implemented a filter which is
>>>> derived from vtkRectilinearGridAlgorithm. For now, I am trying only a
>>>> simple example, where my X coordinates are the particle ids, my Y and
>>>> Z coordinates are dummy arrays with one element, and my data is the id
>>>> to the power 2. When I act my filter, the XY plot view and a new 3D
>>>> view appear. However the XY plot is empty, as is the 3D view. I can
>>>> get something to appear in the 3D view by adding a glyph to the
>>>> pipeline (and the result makes sense), but nothing I do seems to get
>>>> it the XY plot view to actually plot.
>>>>
>>>> I have included the RequestData portion of my filter at the end of the
>>>> message as well as the information tab of the object inspector of the
>>>> filter. Everything looks normal to me (except I am not sure why the
>>>> number of cells is less than the number of points?). Can anyone see
>>>> the problem? Is there something more I need to do? I've already done a
>>>> lot of searching of the archives, playing around with the parameters,
>>>> and reading the vtk documentation but haven't found the bug or the
>>>> missing call.
>>>>
>>>> The information tab of the object inspector displays:
>>>> Type: Rectilinear Grid
>>>> Number of Cells: 1000
>>>> Number of Points: 1001
>>>> Data Arrays:
>>>> Name  | Data Type | Data Ranges
>>>> data values | int | [0,1e+06]
>>>> Extents
>>>> X Extent: 0 to 1000 (dimension: 1001)
>>>> Y Extent: 0 to 0 (dimension: 1)
>>>> Z Extent: 0 to 0 (dimension: 1)
>>>> Bounds
>>>> X range: 0 to 1e+03
>>>> Y range: 0 to 0
>>>> Z range 0 to 0
>>>>
>>>> And my request data method is:
>>>> //----------------------------------------------------------------------------
>>>> int vtkMassFunctionFilter::RequestData(vtkInformation*,
>>>>                                vtkInformationVector** inputVector,
>>>>                                vtkInformationVector* outputVector)
>>>>  {
>>>>  // Get input and output data.
>>>>  vtkPointSet* input = vtkPointSet::GetData(inputVector[0]);
>>>>  vtkRectilinearGrid* output = vtkRectilinearGrid::GetData(outputVector);
>>>>  // Setting the dimensions of this to be equal to our number of points,
>>>>  // in X, and equal to 1 in the Y and Z directions,
>>>>  // as these are dummy arrays.
>>>>  output->SetDimensions(input->GetPoints()->GetNumberOfPoints(),1,1);
>>>>   output->SetWholeExtent(0,input->GetPoints()->GetNumberOfPoints(),\
>>>>                                           0,0,\
>>>>                                           0,0);
>>>>  // Allocate the arrays for the X,Y, and Z coordinates, and inserts a
>>>>  // single value for the dummy arrays, as well as allocate the array
>>>>  // for the scalar data
>>>>  vtkSmartPointer<vtkDoubleArray> XArray=vtkSmartPointer<vtkDoubleArray>::New();
>>>>   XArray->SetNumberOfComponents(1);
>>>>   XArray->SetNumberOfTuples(input->GetPoints()->GetNumberOfPoints());
>>>>  vtkSmartPointer<vtkDoubleArray>
>>>> DummyYArray=vtkSmartPointer<vtkDoubleArray>::New();
>>>>   DummyYArray->SetNumberOfComponents(1);
>>>>   DummyYArray->SetNumberOfTuples(1);
>>>>   DummyYArray->InsertValue(0,0);
>>>>  vtkSmartPointer<vtkDoubleArray>
>>>> DummyZArray=vtkSmartPointer<vtkDoubleArray>::New();
>>>>   DummyZArray->SetNumberOfComponents(1);
>>>>   DummyZArray->SetNumberOfTuples(1);
>>>>   DummyZArray->InsertValue(0,0);
>>>>  vtkSmartPointer<vtkIntArray> dataValues=vtkSmartPointer<vtkIntArray>::New();
>>>>   dataValues->SetNumberOfComponents(1);
>>>>   dataValues->SetNumberOfTuples(input->GetPoints()->GetNumberOfPoints());
>>>>   dataValues->SetName("data values");
>>>>  for(int nextPointId = 0;\
>>>>      nextPointId < input->GetPoints()->GetNumberOfPoints();\
>>>>       ++nextPointId)
>>>>   {
>>>>   XArray->InsertValue(nextPointId,nextPointId);
>>>>   dataValues->InsertValue(nextPointId,pow(nextPointId,2));
>>>>   }
>>>>  // Updating the output
>>>>  output->SetXCoordinates(XArray);
>>>>  output->SetYCoordinates(DummyYArray);
>>>>  output->SetZCoordinates(DummyZArray);
>>>>  output->GetPointData()->SetScalars(dataValues);
>>>>  return 1;
>>>>  }
>>>> _______________________________________________
>>>> 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
>>>>
>>>
>>
>


More information about the ParaView mailing list