2011-06-10 255 views

回答

0

你是什麼意思,通過繪製原語?

您會發現,VTK更多地針對各種類型的渲染(而不是繪圖)數據集進行調整。例如,可以使用vtkPolyDataMapper和vtkActor繪製3D網格,並使用vtkImageActor和類似的類來繪製圖像。

通常,您有一個或多個數據集,爲其創建角色並在屏幕上顯示它們。

在GDI或HTML5畫布上,你不會真的在屏幕上繪製原始圖像(比如說)。根據您的需要,您可以添加其他演員,包括適當的數據集,一個窗口小部件(這是一種具有交互性的演員),或者是一個2D演員,在整個場景的頂部繪製爲覆蓋圖,以及在屏幕座標中描述。

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

+0

謝謝,我解決你說的問題。我創建了特殊的2d actor來繪製並使用System.Drawing進行繪製。 – 2011-06-15 06:39:46

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... 
+0

謝謝,我已經試過了。但在這個例子中,會創建很多行。此行的參數,如寬度,在演員中設置,我需要另一個。現在,我使用System.Drawing from .net中的東西來解決問題,並使用vtkImageImport將位圖加載到actor; – 2011-06-15 06:35:11

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代碼,它正在工作。