VTK读取一个TXT文档中的三维点坐标显示三维点云 (vtk 非智能指针删除)

转载 2018年04月17日 08:50:56

VTK读取一个TXT文档中的三维点坐标就可以显示三维点云,txt文档中的格式为

X坐标 Y坐标  Z坐标

如下所示:



附上代码如下:

  1. #include <iostream>  
  2. #include <vector>  
  3. #include "vtkActor.h"  
  4. #include "vtkRenderer.h"  
  5. #include "vtkRenderWindow.h"  
  6. #include "vtkRenderWindowInteractor.h"  
  7. #include "vtkProperty.h"  
  8. #include "vtkInteractorStyleTrackballCamera.h"  
  9. #include "vtkPoints.h"  
  10. #include "vtkPolyVertex.h"  
  11. #include "vtkUnstructuredGrid.h"  
  12. #include "vtkDataSetMapper.h"  
  13. #include "vtkPolyData.h"  
  14. #include "vtkCellArray.h"  
  15. #include "vtkInteractorStyleTrackball.h"  
  16. #include "vtkPolyDataMapper.h"  
  17. using namespace std;  
  18.   
  19. void main(int argc, char* argv[])  
  20. {   
  21.     vtkPoints *m_Points = vtkPoints::New();  
  22.     vtkCellArray *vertices = vtkCellArray::New();   //_存放细胞顶点,用于渲染(显示点云所必须的)  
  23.     vtkPolyData *polyData = vtkPolyData::New();  
  24.     vtkPolyDataMapper *pointMapper = vtkPolyDataMapper::New();  
  25.     vtkActor *pointActor = vtkActor::New();  
  26.     vtkRenderer *ren1= vtkRenderer::New();  
  27.     vtkRenderWindow *renWin = vtkRenderWindow::New();  
  28.     vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();  
  29.     vtkInteractorStyleTrackball *istyle = vtkInteractorStyleTrackball::New();  
  30.   
  31.     //_读进点云数据信息  
  32.     FILE*fp = NULL; fp=fopen("point.txt","r");  //2DpointDatas.txt  
  33.     if(!fp)  
  34.     {  
  35.           
  36.         printf("打开文件失败!!\n");  
  37.         int m;  
  38.         cin>>m;  
  39.         exit(0);  
  40.     }  
  41.     double x=0,y=0,z=0;  
  42.     int i = 0;  
  43.     while (!feof(fp))  
  44.     {  
  45.         fscanf(fp,"%lf %lf %lf",&x,&y,&z);    
  46.         m_Points->InsertPoint(i,x,y,z);      //_加入点信息  
  47.         vertices->InsertNextCell(1);     //_加入细胞顶点信息----用于渲染点集  
  48.         vertices->InsertCellPoint(i);  
  49.         i ++;  
  50.     }     
  51.     fclose(fp);  
  52.   
  53.     //_创建待显示数据源  
  54.   
  55.     polyData->SetPoints(m_Points);       //_设置点集  
  56.     polyData->SetVerts(vertices);        //_设置渲染顶点  
  57.     pointMapper->SetInput( polyData );  
  58.   
  59.     pointActor->SetMapper( pointMapper );  
  60.     pointActor->GetProperty()->SetColor(0.0,0.1,1.0);  
  61.     pointActor->GetProperty()->SetAmbient(0.5);  
  62.     pointActor->GetProperty()->SetPointSize(2);  
  63.     //pointActor->GetProperty()->SetRepresentationToWireframe();  
  64.     //pointActor->GetProperty()->SetRepresentationToSurface();  
  65.   
  66.     ren1->AddActor( pointActor );  
  67.     ren1->SetBackground( 0, 0, 0);  
  68.   
  69.     renWin->AddRenderer( ren1 );  
  70.     renWin->SetSize(800,800);  
  71.   
  72.     iren->SetInteractorStyle(istyle);    
  73.     iren->SetRenderWindow(renWin);  //交互  
  74.   
  75.     renWin->Render();  
  76.     iren->Start();  
  77.   
  78.     //删除各指针  
  79.     m_Points->Delete();  
  80.     vertices->Delete();  
  81.     polyData->Delete();  
  82.     pointMapper->Delete();  
  83.     pointActor->Delete();  
  84.     ren1->Delete();  
  85.     renWin->Delete();  
  86.     iren->Delete();  
  87.     istyle->Delete();  
  88. }   


智能指针版本

  1. #include <iostream>  
  2. #include <vector>  
  3. #include <vtkActor.h>  
  4. #include <vtkRenderer.h>  
  5. #include <vtkRenderWindow.h>  
  6. #include <vtkRenderWindowInteractor.h>  
  7. #include <vtkProperty.h>  
  8. #include <vtkInteractorStyleTrackball.h>  
  9. #include <vtkInteractorStyleTrackballCamera.h>  
  10. #include <vtkPoints.h>  
  11. #include <vtkPolyData.h>  
  12. #include <vtkCellArray.h>  
  13. #include <vtkPolyDataMapper.h>  
  14. #include <vtkSmartPointer.h>  
  15. using namespace std;  
  16.   
  17. void main(int argc, char* argv[])  
  18. {   
  19.     vtkSmartPointer<vtkPoints> m_Points = vtkSmartPointer<vtkPoints>::New();  
  20.     vtkSmartPointer<vtkCellArray> vertices =vtkSmartPointer<vtkCellArray>::New();   //_存放细胞顶点,用于渲染(显示点云所必须的)  
  21.     vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();  
  22.     vtkSmartPointer<vtkPolyDataMapper> pointMapper = vtkSmartPointer<vtkPolyDataMapper>::New();  
  23.     vtkSmartPointer<vtkActor> pointActor = vtkSmartPointer<vtkActor>::New();  
  24.     vtkSmartPointer<vtkRenderer> ren1=vtkSmartPointer< vtkRenderer>::New();  
  25.     vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();  
  26.     vtkSmartPointer<vtkRenderWindowInteractor> iren =vtkSmartPointer<vtkRenderWindowInteractor>::New();  
  27.     vtkSmartPointer<vtkInteractorStyleTrackballCamera> istyle = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();  
  28.   
  29.     //_读进点云数据信息  
  30.     FILE*fp = NULL; fp=fopen("E:\\斯坦福兔子3000点.txt","r"); //2DpointDatas.txt  
  31.     if(!fp)  
  32.     {  
  33.   
  34.         printf("打开文件失败!!\n");  
  35.         int m;  
  36.         cin>>m;  
  37.         exit(0);  
  38.     }  
  39.     double x=0,y=0,z=0;  
  40.     int i = 0;  
  41.     while (!feof(fp))  
  42.     {  
  43.         fscanf(fp,"%lf %lf %lf",&x,&y,&z);    
  44.         m_Points->InsertPoint(i,x,y,z);      //_加入点信息  
  45.         vertices->InsertNextCell(1);     //_加入细胞顶点信息----用于渲染点集  
  46.         vertices->InsertCellPoint(i);  
  47.         i ++;  
  48.     }     
  49.     fclose(fp);  
  50.   
  51.     //_创建待显示数据源  
  52.   
  53.     polyData->SetPoints(m_Points);       //_设置点集  
  54.     polyData->SetVerts(vertices);        //_设置渲染顶点  
  55.     pointMapper->SetInput( polyData );  
  56.   
  57.     pointActor->SetMapper( pointMapper );  
  58.     pointActor->GetProperty()->SetColor(0.0,0.1,1.0);  
  59.     pointActor->GetProperty()->SetAmbient(0.5);  
  60.     pointActor->GetProperty()->SetPointSize(2);  
  61.     //pointActor->GetProperty()->SetRepresentationToWireframe();  
  62.     //pointActor->GetProperty()->SetRepresentationToSurface();  
  63.   
  64.     ren1->AddActor( pointActor );  
  65.     ren1->SetBackground( 0, 0, 0);  
  66.   
  67.     renWin->AddRenderer( ren1 );  
  68.     renWin->SetSize(800,800);  
  69.   
  70.     iren->SetInteractorStyle(istyle);    
  71.     iren->SetRenderWindow(renWin);  //交互  
  72.   
  73.     renWin->Render();  
  74.     iren->Start();  
  75. }   



附上结果图片


VTK读取一个TXT文档中的三维点坐标显示三维点云

VTK读取一个TXT文档中的三维点坐标就可以显示三维点云,txt文档中的格式为 X坐标 Y坐标 Z坐标 如下所示: 385878.2629 4103690.765 4087.104139 38587...
  • HW140701
  • HW140701
  • 2017-02-20 20:27:40
  • 4078

VTK读取三维点云图并显示

用VTK读取三维点云图并显示的程序遇到问题,求帮助 该程序是读取txt里的三维点云数据然后显示出来 程序如下: #include "vtkRenderer.h" #include "vtk...
  • xizmi
  • xizmi
  • 2013-12-31 10:30:45
  • 1765

vtk实战(九)—读取三维点坐标2

以文本文件格式读取并存到一个vtkPoints( ),然后放入vtkPolyData( ),最后使用vtkVertexGlyphFilter( )显示。 程序主要用到以下类:vtkPoints( ...
  • u012176176
  • u012176176
  • 2016-04-26 07:41:26
  • 861

vtk实战(七)—读取三维点坐标

改程序主要用到的类:vtksimplepointsreader()vtksimplepointsreader( ) 类主要实现从源对象文件读取点,每一点的坐标包含三个浮点数值,每一行对应一个点的x,y...
  • u012176176
  • u012176176
  • 2016-04-25 17:14:13
  • 1793

VTK以批量三维点坐标为中心(点云)绘制球体,可用于标识特征点或者是化学分子

在原先的博客VTK读取一个TXT文档中的三维点坐标绘制三维点云基础上,有小伙伴询问是否可以以点云中每一个三维点的坐标为中心绘制一个小的球体,用于标识特征点,这种就让我想到了化学里面的分子结构,所以就在...
  • HW140701
  • HW140701
  • 2017-08-30 12:04:29
  • 1415

vtk实战(三十六)——读取结构化点云数据

#include vtkSmartPointer.h> #include vtkPolyDataMapper.h> #include vtkStructuredPointsReader.h> #inc...
  • u012176176
  • u012176176
  • 2016-04-30 13:41:43
  • 1445

vtk三维点云隐式曲面重建:vtkSurfaceConstructionFilter类

vtk三维点云重建vtkSurfaceConstructionFilter #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include...
  • HW140701
  • HW140701
  • 2016-10-12 13:26:43
  • 2327

VTK修炼之道56:图形基本操作进阶_表面重建技术(三维点云曲面重建)

1.点云重建 虽然Delaunay三角剖分算法可以实现网格曲面重建,但是其应用主要在二维剖分,在三维空间网格生成中遇到了问题。因为在三维点云曲面重建中,Delaunay条件不在满足,不仅基于...
  • shenziheng1
  • shenziheng1
  • 2017-02-05 14:31:15
  • 2978

VTK利用点云高程渲染点云(+读写文件)

原始数据格式是个TXT文件,,包含x,y,z坐标,现在想利用点云的高程进行渲染,但是使用vtkSimplePointReader类读取的 x-y-z坐标只能给点云统一指定颜色,而类vtkParticl...
  • u013094443
  • u013094443
  • 2015-10-01 15:49:30
  • 1395
收藏助手
不良信息举报
您举报文章:VTK读取一个TXT文档中的三维点坐标显示三维点云 (vtk 非智能指针删除)
举报原因:
原因补充:

(最多只允许输入30个字)