簡體   English   中英

如何在 vtk 中繪制圖元(點、線等)?

[英]How to draw primitives (points, lines etc) in vtk?

我需要在 vtkActor 上繪制原語,但我不知道如何。 也許我可以為此使用 opengl 函數? 在這個例子中 http://www.vtk.org/Wiki/VTK/Examples/Cxx/Plotting/Diagram它工作,但我需要以交互方式繪制它。 感謝您的回答。

我正在尋找一種使用 VTK 在屏幕上繪制網格的方法,我想出了這段代碼:

vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkCellArray> lineIndices = vtkSmartPointer<vtkCellArray>::New();

for(int iIndex = 0, connectivityIndex = 0; iIndex <= m_resolution; ++iIndex, connectivityIndex += 4)
{
    double pointCoordinate = m_range[0] + (m_range[1] - m_range[0]) * (iIndex / static_cast<double>(m_resolution));
    points->InsertNextPoint(pointCoordinate, -m_range[1], 0.0);
    points->InsertNextPoint(pointCoordinate,  m_range[1], 0.0);

    points->InsertNextPoint(-m_range[1], pointCoordinate, 0.0);
    points->InsertNextPoint( m_range[1], pointCoordinate, 0.0);

    lineIndices->InsertNextCell(2);
    lineIndices->InsertCellPoint(connectivityIndex + 0);
    lineIndices->InsertCellPoint(connectivityIndex + 1);

    lineIndices->InsertNextCell(2);
    lineIndices->InsertCellPoint(connectivityIndex + 2);
    lineIndices->InsertCellPoint(connectivityIndex + 3);
}

vtkSmartPointer<vtkPolyData> data = vtkSmartPointer<vtkPolyData>::New();
data->SetPoints(points);
data->SetLines(lineIndices);

vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(data);

vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);

它基於@shash 代碼並且正在運行。

繪制基元是什么意思?

你看,VTK 更傾向於渲染(而不是繪圖)各種類型的數據集。 例如,可以使用 vtkPolyDataMapper 和 vtkActor 繪制 3D 網格,使用 vtkImageActor 和類似類繪制圖像。

通常,您有一個或多個數據集,您可以為這些數據集創建演員並在屏幕上顯示它們。

您不會像(比如說)使用 GDI 或 HTML5 canvas 那樣在屏幕上繪制圖元。 根據您的需要,您可以添加另一個具有適當數據集的演員、一個小部件(這是一種具有交互性的演員)或一個 2D 演員,它被繪制為整個場景頂部的疊加層,並且在屏幕坐標中描述。

如果你能描述你想要達到的目標,我可以為你指出一些更具體的事情。

免責聲明:未經測試的代碼。 我是從 memory 寫的。 因此,根據需要測試並閱讀手冊。 請注意,出於性能原因,我建議以下代碼繪制單行。 而不是每行創建一個 Actor。 在一個 Actor 中創建多條線(如果不是所有線)。 只需添加點並設置正確的索引...

vtkPoints* points = vtkPoints::New();
vtkCellArray* lineIndices = vtkCellArray::New();

points->InsertNextPoint( 0, 0, 0);
points->InsertNextPoint(10, 0, 0);

lineIndices->InsertNextCell(2);
lineIndices->InsertNextCellPoint(0); // indices to points array.
lineIndices->InsertNextCellPoint(1);

vtkPolyData* polyData = vtkPolyData::New();
polyData->SetPoints(points);
polyData->SetLines(lines);

// continue with standard mapper, actor setup...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM