[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