2015-08-25 210 views
0

我需要在一个图表中绘制合并的线段(不是连续的)。
为了创建一个绘图,我使用VTK example的代码,但是当填充vtkTable时,我跳过一些值,直到零值。如果创建另一个图并跳过一些第一个元素,则该行从零开始。所以我需要解决这些问题。VTK:绘制线段

回答

0

我已经想出了自己的解决方案。它看起来很简单。基本思想是用每个线段表示每个线段,并为每个图表使用一个单独的表格。所有表格中更重要的一点不需要在X轴上具有相同的步骤。
下面是示例代码:

vtkSmartPointer<vtkContextView> view = vtkSmartPointer<vtkContextView>::New(); 
view->GetRenderer()->SetBackground(1.0, 1.0, 1.0); 

vtkSmartPointer<vtkChartXY> chart = vtkSmartPointer<vtkChartXY>::New(); 
vtkSmartPointer<vtkTable> table1 = vtkSmartPointer<vtkTable>::New(); 
vtkSmartPointer<vtkFloatArray> xAxis1 = vtkSmartPointer<vtkFloatArray>::New(); 
xAxis1->SetName("X"); 
vtkSmartPointer<vtkFloatArray> yAxis1 = vtkSmartPointer<vtkFloatArray>::New(); 
yAxis1->SetName(""); 
table1->AddColumn(xAxis1); 
table1->AddColumn(yAxis1); 
table1->SetNumberOfRows(2); 
table1->SetValue(0, 0, 1); 
table1->SetValue(0, 1, 1); 
table1->SetValue(1, 0, 2); 
table1->SetValue(1, 1, 2); 

vtkPlot* plot1 = chart->AddPlot(vtkChart::LINE); 
plot1->SetInputData(table1, 0, 1); 
plot1->SetColor(0, 0, 255, 255); 

vtkSmartPointer<vtkTable> table2 = vtkSmartPointer<vtkTable>::New(); 
vtkSmartPointer<vtkFloatArray> xAxis2 = vtkSmartPointer<vtkFloatArray>::New(); 
xAxis2->SetName("X"); 
vtkSmartPointer<vtkFloatArray> yAxis2 = vtkSmartPointer<vtkFloatArray>::New(); 
yAxis2->SetName(""); 
table2->AddColumn(xAxis2); 
table2->AddColumn(yAxis2); 
table2->SetNumberOfRows(3); 
table2->SetValue(0, 0, 4); 
table2->SetValue(0, 1, 4); 
table2->SetValue(1, 0, 5); 
table2->SetValue(1, 1, 5); 
table2->SetValue(2, 0, 6); 
table2->SetValue(2, 1, 6); 

vtkPlot* plot2 = chart->AddPlot(vtkChart::LINE); 
plot2->SetInputData(table2, 0, 1); 
plot2->SetColor(255, 0, 0, 255); 


view->GetScene()->AddItem(chart); 
view->GetInteractor()->Initialize(); 
view->GetInteractor()->Start(); 

P.S.您还可以指定具有相同x坐标的多行。