vtkActor でプリミティブを描画する必要がありますが、方法がわかりません。これにはopengl関数を使用できますか?この例http://www.vtk.org/Wiki/VTK/Examples/Cxx/Plotting/Diagramでは動作していますが、インタラクティブに描画する必要があります。回答ありがとうございます。
4588 次
3 に答える
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 に答える
0
免責事項: テストされていないコードです! 私はこれを記憶から書いています。そのため、必要に応じてマニュアルをテストして読んでください。次のコードは 1 本の線を描画することに注意してください。パフォーマンス上の理由から、1 行ごとに Actor を作成するのではなく、お勧めします。1 つのアクタに複数のライン (すべてのラインではない場合) を作成します。ポイントを追加して正しいインデックスを設定するだけです...
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 に答える