VTK Chart坐标轴

时间:2024-03-15 18:32:28
 虽然用vtk绘制坐标轴有点大才小用,但vtk绘制出来到坐标轴着实挺清秀的:
  • 1

#include “mainwindow.h”
#include “QApplication”

include “vtkAutoInit.h”

if VTK_MAJOR_VERSION >=7

VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
VTK_MODULE_INIT(vtkRenderingContextOpenGL2)

endif

include “vtkVersion.h”

include “vtkSmartPointer.h”

include “vtkChartXY.h”

include “vtkContextScene.h”

include “vtkContextView.h”

include “vtkFloatArray.h”

include “vtkPlotPoints.h”

include “vtkRenderWindow.h”

include “vtkRenderWindowInteractor.h”

include “vtkRenderer.h”

include “vtkTable.h”

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// MainWindow w;
// w.show();

// return a.exec();

// Set up a 2D scene, add an XY chart to it
 vtkSmartPointer<vtkContextView> view =
   vtkSmartPointer<vtkContextView>::New();
 view->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
 view->GetRenderWindow()->SetSize(400, 300);

 vtkSmartPointer<vtkChartXY> chart =
   vtkSmartPointer<vtkChartXY>::New();
 view->GetScene()->AddItem(chart);
 chart->SetShowLegend(true);

 // 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);

 vtkSmartPointer<vtkFloatArray> arrT =
   vtkSmartPointer<vtkFloatArray>::New();
 arrT->SetName("Sine - Cosine");
 table->AddColumn(arrT);

 // Test charting with a few more points...
 int numPoints = 40;
 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) + 0.0);
   table->SetValue(i, 2, sin(i * inc) + 0.0);
   table->SetValue(i, 3, sin(i * inc) - cos(i * inc));
   }

 // Add multiple scatter plots, setting the colors etc
 vtkPlot *points = chart->AddPlot(vtkChart::POINTS);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

#if VTK_MAJOR_VERSION <= 5
points->SetInput(table, 0, 1);
#else
points->SetInputData(table, 0, 1);
#endif
points->SetColor(0, 0, 0, 255);
points->SetWidth(1.0);
vtkPlotPoints::SafeDownCast(points)->SetMarkerStyle(vtkPlotPoints::CROSS);

 points = chart->AddPlot(vtkChart::POINTS);
  • 1

#if VTK_MAJOR_VERSION <= 5
points->SetInput(table, 0, 2);
#else
points->SetInputData(table, 0, 2);
#endif
points->SetColor(0, 0, 0, 255);
points->SetWidth(1.0);
vtkPlotPoints::SafeDownCast(points)->SetMarkerStyle(vtkPlotPoints::PLUS);

 points = chart->AddPlot(vtkChart::POINTS);
  • 1

#if VTK_MAJOR_VERSION <= 5
points->SetInput(table, 0, 3);
#else
points->SetInputData(table, 0, 3);
#endif
points->SetColor(0, 0, 255, 255);
points->SetWidth(1.0);
vtkPlotPoints::SafeDownCast(points)->SetMarkerStyle(vtkPlotPoints::CIRCLE);

 //Finally render the scene
 view->GetRenderWindow()->SetMultiSamples(0);
 view->GetInteractor()->Initialize();
 view->GetInteractor()->Start();

 return EXIT_SUCCESS;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

}

sleep;gnome-screenshot截图:
VTK Chart坐标轴

转:https://blog.csdn.net/superkeep/article/details/78324857