VTK:对输入的三维模型在某个方向等间距提取模型的切面轮廓线
来源:互联网 发布:unity3d插件开发教程 编辑:程序博客网 时间:2024/06/18 12:29
测试的三维模型为bunny,即斯坦福兔子
代码示例:
#include <vtkOBJReader.h>#include <vtkSmartPointer.h>#include <vtkCutter.h>#include <vtkPolyDataMapper.h>#include <vtkPlane.h>#include <vtkProperty.h>#include <vtkActor.h>#include <vtkRenderer.h>#include <vtkRenderWindow.h>#include <vtkRenderWindowInteractor.h>#include <vtkSphereSource.h>#include <vtkPolyDataWriter.h>#include <vtkPolyData.h>#include <vtkStripper.h>#include <vtkContourFilter.h>#include <vtkPoints.h>#include <iostream>using namespace std;double Distance(double *a,double *b){double o=(a[0]-b[0])*(a[0]-b[0]);double p=(a[1]-b[1])*(a[1]-b[1]);double q=(a[2]-b[2])*(a[2]-b[2]);return o+p+q;}int main(){//读取obj文件vtkSmartPointer<vtkOBJReader> reader =vtkSmartPointer<vtkOBJReader>::New(); reader->SetFileName("C:\\Users\\HuangWang\\Desktop\\bunny-chuli.obj"); reader->Update();vtkSmartPointer<vtkPolyData> inputPolyData=vtkSmartPointer<vtkPolyData>::New();inputPolyData = reader->GetOutput();vtkSmartPointer<vtkPolyDataMapper> inputMapper =vtkSmartPointer<vtkPolyDataMapper>::New();inputMapper->SetInput(inputPolyData);//创建切割平面vtkSmartPointer<vtkPlane> plane =vtkSmartPointer<vtkPlane>::New();plane->SetOrigin(inputPolyData->GetCenter());//设置切割平面起点plane->SetNormal(1,0,0);//设置切割方向为X方向//得到输入的obj模型的最小坐标double minBound[3];minBound[0] = inputPolyData->GetBounds()[0];minBound[1] = inputPolyData->GetBounds()[2];minBound[2] = inputPolyData->GetBounds()[4];//得到输入的obj模型的最小大坐标double maxBound[3];maxBound[0] = inputPolyData->GetBounds()[1];maxBound[1] = inputPolyData->GetBounds()[3];maxBound[2] = inputPolyData->GetBounds()[5];//得到输入的obj模型的中心坐标double center[3];center[0] = inputPolyData->GetCenter()[0];center[1] = inputPolyData->GetCenter()[1];center[2] = inputPolyData->GetCenter()[2];double distanceMin=sqrt(Distance(minBound,center));double distanceMax=sqrt(Distance(maxBound,center));//创建模型切割器vtkSmartPointer<vtkCutter> cutter =vtkSmartPointer<vtkCutter>::New();cutter->SetCutFunction(plane);//设置切割平面cutter->SetInput(inputPolyData);//设置模型cutter->GenerateValues(30, -distanceMin, distanceMax);//在模型的最大最小范围内等间距创建30个切面,得到轮廓线//将切线结果输出为vtk文件格式vtkSmartPointer<vtkPolyData> ResultPoly=cutter->GetOutput();//输出为polydatavtkSmartPointer<vtkPolyDataWriter> vtkWriter = vtkSmartPointer<vtkPolyDataWriter>::New();vtkWriter->SetInput(cutter->GetOutput());vtkWriter->SetFileName("C:\\Users\\HuangWang\\Desktop\\result.vtk");vtkWriter->Write();vtkSmartPointer<vtkPolyDataMapper> cutterMapper =vtkSmartPointer<vtkPolyDataMapper>::New();cutterMapper->SetInputConnection( cutter->GetOutputPort());cutterMapper->ScalarVisibilityOff();vtkSmartPointer<vtkActor> planeActor =vtkSmartPointer<vtkActor>::New();planeActor->GetProperty()->SetColor(1,0,0);planeActor->GetProperty()->SetLineWidth(5);planeActor->SetMapper(cutterMapper);vtkSmartPointer<vtkActor> inputActor =vtkSmartPointer<vtkActor>::New();inputActor->GetProperty()->SetColor(0,1,0);inputActor->SetMapper(inputMapper);vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(planeActor); renderer->AddActor(inputActor);vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);renderWindow->SetSize(600, 600);vtkSmartPointer<vtkRenderWindowInteractor> interactor =vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);renderer->SetBackground(0,0,0);renderWindow->Render();interactor->Start();return 0;}
最后输出的结果VTK文件包含了每一条轮廓线的点数据
阅读全文
0 0
- VTK:对输入的三维模型在某个方向等间距提取模型的切面轮廓线
- VTK 三维轮廓等值面的提取
- 【VTK】VTK中设置默认的三维切片方向
- VTK的三维模型保存、读取之保存为vtk格式
- 从分析blender轮廓提取技术中学习opengl如何绘制三维模型轮廓
- 三维模型的数据格式
- VTK:读取obj文件,使用vtkMassProperties计算obj三维模型的体积和面积
- VTK轮廓提取
- OpenGL 三维模型的导入
- 三维模型的网格细化
- 纠结的三维模型格式
- 三维模型的网格细化
- 三维模型的网格细化
- 三维模型的网格细化
- 三维模型的网格细化
- 三维模型的网格细化
- 三维模型的normal map
- 三维几何模型在计算机内的表示
- 每日练习
- Java企业面试算法新得体会之6大数据和空间限制问题6问
- 腾讯三面
- C 标准库
- 文章标题
- VTK:对输入的三维模型在某个方向等间距提取模型的切面轮廓线
- PHP学习(8)-Cookies/Sessions
- soot-1
- git删除远程分支
- 2线性分类器基本原理-2.1线性分类器之前向推断过程
- 关于sql server性能问题排查
- (CNN)卷积神经网络(一)
- android调用第三方so库文件
- 每日练习