[Paraview] XY plotting via filter extending vtkRectilinearGridAlgorithm, resulting plot always empty
Utkarsh Ayachit
utkarsh.ayachit at kitware.com
Mon Oct 5 16:28:24 EDT 2009
The "Plot Over Line" filter isn't working for your dataset since you
are producing a data with 0 width and 0 height. So when it tries to
probe with the line, it's failing since the points on the line never
falls within any cells.
Utkarsh
On Mon, Oct 5, 2009 at 4:07 PM, Christine Corbett Moran
<corbett at physik.uzh.ch> wrote:
> 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