vtkRenderWindow控件集成

vtk内部实现了vtk与mfc/qt的集成控件,但是如果需要跟wpf集成该如何操作呢?
实现的方法是由wpf传入一个控件的HWND,作为vtkRenderWindow的父窗口。
vtkRenderWindow内部有一个SetParentId方法,可以设置父窗口句柄。
此种方法的局限是,vtkRenderWindow的大小无法自适应窗口大小,需要重写原来窗口的resize方法。
具体实现示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void display(HWND parent,int w,int h)
{
//Create a cone
vtkSmartPointer<vtkConeSource> coneSource =
vtkSmartPointer<vtkConeSource>::New();
coneSource->Update();

//Create a mapper and actor
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(coneSource->GetOutputPort());

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

//Create a renderer, render window, and interactor
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);

//Add the actors to the scene
renderer->AddActor(actor);
renderer->SetBackground(.3, .2, .1); // Background color dark red
renderWindow->SetSize(w,h);
renderWindow->SetParentId(parent);
renderWindow->Render();
renderWindowInteractor->Start();
}

REF:
[1].https://stackoverflow.com/questions/30301087/vtk-render-into-c-sharp/30301203#30301203

坚持原创技术分享,您的支持将鼓励我继续创作!