5 #include <QtCore/QtPlugin> 8 #include <vtkSphereSource.h> 9 #include <vtkPolyDataMapper.h> 11 #include <vtkImageViewer.h> 12 #include <vtkInteractorStyleImage.h> 13 #include <vtkJPEGReader.h> 16 #include <vtkPolyData.h> 18 #include <vtkRenderWindowInteractor.h> 19 #include <vtkXYPlotWidget.h> 24 QVTKWidget(parent),auto_scroll(true)
26 vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
27 SetRenderWindow(renderWindow);
29 text = vtkSmartPointer<vtkTextActor>::New();
30 text->SetInput(
"0/0");
31 text->SetDisplayPosition(5,1);
33 plot = vtkSmartPointer<vtkXYPlotActor>::New();
34 plot->ExchangeAxesOff();
35 plot->SetXValuesToValue();
38 plot->SetPosition(0.04,0);
44 renderer = vtkSmartPointer<vtkRenderer>::New();
45 renderer->AddActor(plot);
46 renderer->AddActor(text);
47 renderer->ResetCamera();
48 renderer->SetBackground(0.1,0.1,0.1);
49 renderWindow->AddRenderer(renderer);
51 vtkSmartPointer<vtkXYPlotWidget> widget = vtkSmartPointer<vtkXYPlotWidget>::New();
52 widget->SetXYPlotActor(plot);
53 GetRenderWindow()->GetInteractor()->SetInteractorStyle(widget);
87 double* xrange = plot->GetXRange();
88 double width = (xrange[1]-xrange[0]);
89 double* yrange = plot->GetYRange();
90 double height = (yrange[1]-yrange[0]);
98 array_t array = (vtkDoubleArray*)field->GetArray(0);
99 array_t array2 = (vtkDoubleArray*)field->GetArray(1);
100 array->InsertNextValue(x);
101 array2->InsertNextValue(y);
110 if(x.size() != y.size())
111 std::runtime_error(
"addValues: Size mismatch. Both lists must have the same size.");
117 array_t array = (vtkDoubleArray*)field->GetArray(0);
118 array_t array2 = (vtkDoubleArray*)field->GetArray(1);
120 QList<double>::const_iterator iter_x = x.constBegin();
121 QList<double>::const_iterator iter_y = y.constBegin();
122 for(;iter_x != x.constEnd();++iter_x,++iter_y)
124 array->InsertNextValue(*iter_x);
125 array2->InsertNextValue(*iter_y);
136 plot->SetXValues(
id);
138 plot->SetXValuesToIndex();
143 if (
id >=0 && (
unsigned int)
id < field_data.size())
162 QVTKWidget::mouseMoveEvent(event);
166 std::stringstream ss;
168 GetRenderWindow()->GetInteractor()->GetLastEventPosition(x,y);
169 plot->SetViewportCoordinate(x,y);
170 plot->ViewportToPlotCoordinate(renderer);
171 plot->GetViewportCoordinate(x2,y2);
173 ss << x2 <<
" / " << y2 <<
"\n";
174 text->SetInput(ss.str().c_str());
182 throw std::runtime_error(
"addPlot: Bad id. Id must be positive.");
184 while((
unsigned int)
id >= field_data.size())
186 array_t array = vtkSmartPointer<vtkDoubleArray>::New();
187 array_t array2 = vtkSmartPointer<vtkDoubleArray>::New();
188 field_t field = vtkSmartPointer<vtkFieldData>::New();
189 vtkSmartPointer<vtkDataObject> data = vtkSmartPointer<vtkDataObject>::New();
191 field->AddArray(array);
192 field->AddArray(array2);
193 data->SetFieldData(field);
194 plot->AddDataObjectInput(data);
195 plot->SetDataObjectXComponent(
id,0);
196 plot->SetDataObjectYComponent(
id,1);
197 field_data.push_back(field);
204 return field_data[id];
void addPoint(int id, double x, double y)
void setYRange(double min, double max)
void setXTitle(QString label)
vtkSmartPointer< vtkFieldData > field_t
void setStyle(int id, QString style)
void setPlotLabel(int id, QString label)
void setTitle(QString title)
void addPoints(int id, const QList< double > &x, const QList< double > &y)
void setNumberOfYLabels(int i)
void scrollTo(double x, double y)
void setNumberOfXLabels(int i)
void setYTitle(QString label)
Plot2d(QWidget *parent=NULL)
virtual void mouseMoveEvent(QMouseEvent *event)
vtkSmartPointer< vtkDoubleArray > array_t
void showPlotPoints(bool on)
void setXRange(double min, double max)
void showPlotLines(bool on)
void setColor(int id, int r, int g, int b)