1、c++方案
1.1下载源码编译
官网获取源码。
利用Cmake进行项目构建。
里面要根据实际使用的情况配置相关的模块哟,这个得你自行研究下了。
CMAKEINSTALLPREFIX--这个选项的值表示VTK的安装路径,默认的路径是C:/Program Files/VTK。该选项的值可不作更改,按默认值即可。在配置完 VTK 后生成的工程中会有一个INSTALL项目,编译该项目后即会在CMAKEINSTALL_PREFIX所指定的路径中生成 VTK 相应的头文件、lib 文件和动态链接库 dll 文件。
VTK USE QT-是否使用 Qt。
完成后,会生成一个解决方案,根据配置的情况项目数量是不同。
1.2引入库文件
创建c++项目。
配置相关文件。
VC++目录配置:
链接器,把所有lib名填入。
1.3 编写测试
void TestShow()
{vtkConeSource* cone = vtkConeSource::New();cone->SetHeight(3.0);cone->SetRadius(1.0);cone->SetResolution(10);vtkPolyDataMapper* coneMapper = vtkPolyDataMapper::New();coneMapper->SetInputConnection(cone->GetOutputPort());vtkActor* coneActor = vtkActor::New();coneActor->SetMapper(coneMapper);vtkRenderer* ren1 = vtkRenderer::New();ren1->AddActor(coneActor);ren1->SetBackground(0.1, 0.2, 0.4);vtkRenderWindow* renWin = vtkRenderWindow::New();renWin->AddRenderer(ren1);renWin->SetSize(300, 300);vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();iren->SetRenderWindow(renWin);vtkInteractorStyleTrackballCamera* style =vtkInteractorStyleTrackballCamera::New();iren->SetInteractorStyle(style);vtkBoxWidget* boxWidget = vtkBoxWidget::New();boxWidget->SetInteractor(iren);boxWidget->SetPlaceFactor(1.25);boxWidget->SetProp3D(coneActor);boxWidget->PlaceWidget();vtkMyCallback* callback = vtkMyCallback::New();boxWidget->AddObserver(vtkCommand::InteractionEvent, callback);boxWidget->On();iren->Initialize();iren->Start();cone->Delete();coneMapper->Delete();coneActor->Delete();callback->Delete();boxWidget->Delete();ren1->Delete();renWin->Delete();iren->Delete();style->Delete();
}
2、C#方案
2.1 ActiViz.NET安装
ActiViz - 3D Visualization Library for .Net C# and Unity | Kitware
当然正常情况,你需要在密码上进行注册才能下载。
也可以从我的百度网盘中获取。
链接:https://pan.baidu.com/s/13pHLDSOyqtbWvPJn4mcaCg
提取码:bkxa
下载成功后,直接运行这个exe到你目录下即可。
ActiViz.NET_9.3_Users_Guide.pdf这个文件你可以阅读下,按照指引你就可以编写一个vtk程序了。
2.2 导入包使用
需要在项目中引用如图所示的两个DLL,然后生成的目录下需要将相关DLL复制到,当然你可以配置环境变量来试试,因为操作系统默认会去环境变量里面找一下看看能不能找到。
2.3编写测试
界面
<WindowsFormsHost x:Name="windowHost" Grid.Row="1"/>
控件生成
private RenderWindowControl renderWindowControl = new RenderWindowControl();public MainWindow(){InitializeComponent();windowHost.Child = renderWindowControl;// dd.Dock = DockStyle.Fill;// renderWindowControl.Load += renderWindowControl1_Load;}
显示一个球和文字
RenderWindowControl renderWindow = sender as RenderWindowControl;if (renderWindow == null){return;}// Create a simple sphere. A pipeline is created. 新建球体,创建“管道pipeline”vtkSphereSource sphere = vtkSphereSource.New(); // 新建球sphere.SetThetaResolution(8); // 设置球纬度参数sphere.SetPhiResolution(16); // 设置球经度参数sphere.SetRadius(0.5); // 设置球的半径//数据加工 -- "过滤器Filter" -- 收缩vtkShrinkPolyData shrink = vtkShrinkPolyData.New(); // 新建数据收缩操作器shrink.SetInputConnection(sphere.GetOutputPort()); // 连接管道shrink.SetShrinkFactor(0.9); // 收缩“面”操作//数据制图 -- "制图器Mapper"vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); // 新建制图器mapper.SetInputConnection(shrink.GetOutputPort()); // 连接管道// The actor links the data pipeline to the rendering subsystem//创建“角色Actor”,连接“管道pipeline”和“渲染系统rendering subsystem”vtkActor actor = vtkActor.New(); // 新建角色actor.SetMapper(mapper); // 传递制图器actor.GetProperty().SetColor(1, 0, 0); // 设置“角色”颜色[RGB]// The actor links the data pipeline to the rendering subsystem//创建“角色Actor”,连接“管道pipeline”和“渲染系统rendering subsystem”// Create components of the rendering subsystem//创建渲染--“渲染系统rendering subsystem”//(1)新建“渲染器Renderer”和“渲染窗口RenderWindow” renderWindowControl1控件提供“渲染窗口”vtkRenderer ren1 = renderWindow.RenderWindow.GetRenderers().GetFirstRenderer();vtkRenderWindow renWin = renderWindow.RenderWindow;// Add the actors to the renderer, set the window size//将“角色Actor”添加到“渲染器Renderer”并渲染ren1.AddViewProp(actor); // 渲染器添加角色renWin.SetSize(250, 250);renWin.Render(); // 渲染渲染窗口
总结,后面主要是在C#上编写,当然c++的API更加丰富,毕竟这个C#是在其基础之上进行封装的,如果考虑性能方面肯定有差异的。