#include VTK_MODULE_INIT(vtkRenderingContextOpenGL2) VTK_MODULE_INIT(vtkRenderingOpenGL2) VTK_MODULE_INIT(vtkInteractionStyle) VTK_MODULE_INIT(vtkRenderingFreeType) #include #include #include #include #include "vtkFloatArray.h" #include "vtkTable.h" #include "radixwidgets/vtkPlotErrorBars.hh" #include "radixwidgets/vtkPlotLineErrorBars.hh" #include "radixwidgets/vtkPlotPointsErrorBars.hh" #include "radixwidgets/vtkchartwidget.hh" #include "radixvtkerrorbars.hh" vtkChartMainWindow::vtkChartMainWindow(QWidget* parent) : QMainWindow(parent) { setGeometry(400, 250, 542, 390); // needed to ensure appropriate OpenGL context is created for VTK rendering. QSurfaceFormat::setDefaultFormat(QVTKWidget_t::defaultFormat()); // Test widget QWidget* widget = new QWidget(this); QGridLayout* layout = new QGridLayout(widget); radix::VTKChartWidget* vtkChartWidget = new radix::VTKChartWidget(this); layout->addWidget(vtkChartWidget, 0, 0); setCentralWidget(widget); // Create a table with some points in it vtkNew table; vtkNew xArray; xArray->SetName("x"); table->AddColumn(xArray); vtkNew sinArray; sinArray->SetName("sin"); table->AddColumn(sinArray); vtkNew cosArray; cosArray->SetName("cos"); table->AddColumn(cosArray); vtkNew sumArray; sumArray->SetName("sum"); table->AddColumn(sumArray); vtkNew subArray; subArray->SetName("subtract"); table->AddColumn(subArray); vtkNew multArray; multArray->SetName("multiply"); table->AddColumn(multArray); vtkNew xErrorArray; xErrorArray->SetName("x error"); table->AddColumn(xErrorArray); vtkNew cosErrorArray; cosErrorArray->SetName("cos error"); table->AddColumn(cosErrorArray); vtkNew sumErrorArray; sumErrorArray->SetName("sum error"); table->AddColumn(sumErrorArray); vtkNew subErrorArray; subErrorArray->SetName("sub error"); table->AddColumn(subErrorArray); // Add some data points to the chart int numPoints = 100; float maxX = 15.0f; table->SetNumberOfRows(numPoints); for (int i = 0; i < numPoints; ++i) { float num = i * maxX / numPoints; table->SetValue(i, 0, num); table->SetValue(i, 1, sin(num)); table->SetValue(i, 2, cos(num) + 1.0); table->SetValue(i, 3, sin(num) + cos(num) + 3.0); table->SetValue(i, 4, sin(num) - cos(num) + 4.0); table->SetValue(i, 5, sin(num) * cos(num) + 5.0); table->SetValue(i, 6, abs(num / 10.0)); table->SetValue(i, 7, abs(cos(num) / 3.0)); table->SetValue(i, 8, abs((sin(num) + cos(num)) / 3.0)); table->SetValue(i, 9, abs((sin(num) - cos(num)) / 3.0)); } // Add a line plot without errors (sin) vtkPlotLineErrorBars* sinPlot = vtkPlotLineErrorBars::New(); vtkChartWidget->chartXY()->AddPlot(sinPlot); sinPlot->SetInputData(table, 0, 1); sinPlot->SetColor(0, 0, 0, 255); sinPlot->SetWidth(1.0); // Add a points plot with errors (cos) vtkPlotPointsErrorBars* cosPlot = vtkPlotPointsErrorBars::New(); vtkChartWidget->chartXY()->AddPlot(cosPlot); cosPlot->SetInputData(table, 0, 2, 6, 7); cosPlot->SetPlotErrorBars(1); cosPlot->SetColor(0, 255, 0, 255); cosPlot->SetWidth(2.0); // Add a points plot with errors, but don't plot the errors (sum) vtkPlotPointsErrorBars* sumPlot = vtkPlotPointsErrorBars::New(); vtkChartWidget->chartXY()->AddPlot(sumPlot); sumPlot->SetInputData(table, 0, 3, 6, 8); sumPlot->SetPlotErrorBars(0); sumPlot->SetColor(0, 0, 255, 255); sumPlot->SetWidth(2.0); // Add a line plot with errors (subtract) vtkPlotLineErrorBars* subPlot = vtkPlotLineErrorBars::New(); vtkChartWidget->chartXY()->AddPlot(subPlot); subPlot->SetInputData(table, 0, 4, 6, 9); subPlot->SetPlotErrorBars(1); subPlot->SetColor(255, 0, 0, 255); subPlot->SetWidth(1.0); // Add a points plot without errors, but set PlotErrorBars = true (multiply) // (no error bars should be plotted) vtkPlotPointsErrorBars* multPlot = vtkPlotPointsErrorBars::New(); vtkChartWidget->chartXY()->AddPlot(multPlot); multPlot->SetInputData(table, 0, 5); multPlot->SetPlotErrorBars(1); multPlot->SetColor(255, 0, 255, 255); multPlot->SetWidth(2.0); } vtkChartMainWindow::~vtkChartMainWindow() {} /******************************************************************************/ /******************************** MAIN PROGRAM ********************************/ /******************************************************************************/ int main(int argc, char** argv) { QApplication app(argc, argv); vtkChartMainWindow mainWindow; mainWindow.show(); mainWindow.raise(); return app.exec(); }