[vtkusers] Combine vtkChart with QVTKWidget

curator curator at gmx.de
Fri May 3 08:55:27 EDT 2013


Hi all,

I am working with a QVTKWidget to display my geometry. Therefore each 
"object" has a own vtkActor and and I add these vtkActors to the 
renderer of QVTKWidget. So far, so good.

To start with vtkCharts, I found the following example (see below). With 
this code, I am able to open a new vtkwindow which presents two plots. 
However, I dont want to open the chart in a new window, but insert it in 
the existing QVTKWidget IN ADDITION to the former scene. Actually, I 
want to have somethi g like in
http://www.na-mic.org/Wiki/images/1/18/NA-MIC-VTK-Charts-2011.pdf on 
page 19. So, I though of inheriting another object which has a vtkActor 
and can be added and removed from my scene. Inside this class i would 
like to implement, as a starting point, the curves from the example, but 
I have no idea how to connect the vtkchart stuff with a vtkActor. Maybe 
this it a totally wrong approach.

Any suggestions?
curator

>       // Create a table with some points in it
>   vtkSmartPointer<vtkTable> table =
>     vtkSmartPointer<vtkTable>::New();
>
>   vtkSmartPointer<vtkFloatArray> arrX =
>     vtkSmartPointer<vtkFloatArray>::New();
>   arrX->SetName("X Axis");
>   table->AddColumn(arrX);
>
>   vtkSmartPointer<vtkFloatArray> arrC =
>     vtkSmartPointer<vtkFloatArray>::New();
>   arrC->SetName("Cosine");
>   table->AddColumn(arrC);
>
>   vtkSmartPointer<vtkFloatArray> arrS =
>     vtkSmartPointer<vtkFloatArray>::New();
>   arrS->SetName("Sine");
>   table->AddColumn(arrS);
>
>   // Fill in the table with some example values
>   int numPoints = 69;
>   float inc = 7.5 / (numPoints-1);
>   table->SetNumberOfRows(numPoints);
>   for (int i = 0; i < numPoints; ++i)
>   {
>     table->SetValue(i, 0, i * inc);
>     table->SetValue(i, 1, cos(i * inc));
>     table->SetValue(i, 2, sin(i * inc));
>   }
>
>   // Set up the view
>   vtkSmartPointer<vtkContextView> view =
>     vtkSmartPointer<vtkContextView>::New();
>   view->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
>
>   // Add multiple line plots, setting the colors etc
>   vtkSmartPointer<vtkChartXY> chart =
>     vtkSmartPointer<vtkChartXY>::New();
>
>   view->GetScene()->AddItem(chart);
>   vtkPlot *line = chart->AddPlot(vtkChart::LINE);
> #if VTK_MAJOR_VERSION <= 5
>   line->SetInput(table, 0, 1);
> #else
>   line->SetInputData(table, 0, 1);
> #endif
>   line->SetColor(0, 255, 0, 255);
>   line->SetWidth(1.0);
>   line = chart->AddPlot(vtkChart::LINE);
> #if VTK_MAJOR_VERSION <= 5
>   line->SetInput(table, 0, 2);
> #else
>   line->SetInputData(table, 0, 2);
> #endif
>   line->SetColor(255, 0, 0, 255);
>   line->SetWidth(5.0);
>   line->GetPen()->SetLineType(2);//For dotted line, can be from 2 to 5 
> for different dot patterns
>
>   //view->GetRenderWindow()->SetMultiSamples(0);
>
>   // Start interactor
>   view->GetInteractor()->Initialize();
>   view->GetInteractor()->Start();



More information about the vtkusers mailing list