2011-06-10 31 views
0

vtkActorにプリミティブを描画する必要がありますが、どのようにすればよいか分かりません。たぶん私はこのためにOpenGLの関数を使用することがありますか?この例ではhttp://www.vtk.org/Wiki/VTK/Examples/Cxx/Plotting/Diagramが動作していますが、対話的に描画する必要があります。 回答ありがとうございます。vtkにプリミティブ(点、線など)を描画する方法は?

答えて

0

描画プリミティブとはどういう意味ですか?

VTKは、さまざまな種類のデータセット(描画とは対照的に)を扱うように調整されています。たとえば、vtkPolyDataMapperとvtkActor、およびvtkImageActorなどのクラスを使用して3Dメッシュを描画することができます。

一般に、アクターを作成して画面に表示する1つ以上のデータセットがあります。

あなたはGDIやHTML5キャンバスで実際にプリミティブをスクリーン上に描画しません。必要なものに応じて、適切なデータセットを持つ別のアクタ、インタラクティブ性を持つアクタの一種であるウィジェット、またはシーン全体の上にオーバーレイとして描画される2Dアクタを追加するか、画面座標で記述されます。

達成しようとしていることを説明できる場合は、より具体的なものを指摘できます。

+0

ありがとうございます、私はあなたが言うように問題を解決します。私は描画のためにSystem.Drawingをペイントして使用する特別な2dアクタを作成します。 –

0

免責事項:未テストコード!私はこれを記憶から執筆しています。必要に応じてマニュアルをテストしてお読みください。次のコードは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... 
+0

ありがとう、私はすでにそれを試してみます。しかし、この例では、多くの行を作成します。そして、この行のパラメータは、幅のように、俳優に設定され、私は別のものが必要です。さて、私は、描画のために.netからSystem.Drawingのものを使って問題を解決し、vtkImageImportでビットマップをアクターに読み込みます。 –

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コードに基づいており、動作しています。

関連する問題