我需要在 vtkActor 上绘制原语,但我不知道如何。也许我可以为此使用opengl函数?在此示例http://www.vtk.org/Wiki/VTK/Examples/Cxx/Plotting/Diagram中它正在工作,但我需要以交互方式绘制它。感谢您的回答。
问问题
4588 次
3 回答
0
免责声明:未经测试的代码!我是凭记忆写的。因此,根据需要测试并阅读手册。请注意,以下代码只画了一行。出于性能原因,我建议不要为每行创建一个 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...
于 2011-06-14T19:12:50.867 回答
0
绘制基元是什么意思?
你看,VTK 更倾向于渲染(而不是绘图)各种类型的数据集。例如,可以使用 vtkPolyDataMapper 和 vtkActor 绘制 3D 网格,使用 vtkImageActor 和类似类绘制图像。
通常,您有一个或多个数据集,您可以为这些数据集创建演员并在屏幕上显示它们。
您不会像(比如说)使用 GDI 或 HTML5 画布那样在屏幕上真正绘制图元。根据您的需要,您可以添加另一个具有适当数据集的演员、一个小部件(这是一种具有交互性的演员)或一个 2D 演员,它被绘制为整个场景顶部的叠加层,并且在屏幕坐标中描述。
如果你能描述你想要达到的目标,我可以为你指出一些更具体的事情。
于 2011-06-14T18:16:51.430 回答
0
我正在寻找一种使用 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 代码并且正在运行。
于 2016-01-13T18:11:23.300 回答