VS2005+VTK讀入點雲文件

使用VTK讀入點雲文件的基礎代碼:


頭文件:

也許不是全部都用到,爲了接下來得工程還是全部都包含進去了

#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkSphereSource.h"
#include "vtkShrinkFilter.h"
#include "vtkElevationFilter.h"
#include "vtkDataSetMapper.h"
#include "vtkActor.h"
#include "vtkCullerCollection.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkPolyVertex.h"
#include "vtkUnstructuredGrid.h"
#include <iostream>
#include "vtkPolyDataMapper.h"
#include "vtkScanPointReader.h"
#include "vtkProperty.h"



main部分:

//讀取點雲數據
void main()
{
	FILE *fp = NULL;
	fp = fopen( "C:\\test.sp", "r");
	if ( fp == NULL)
	{
		printf("Error in open file test.sp\n");
		getchar();
		exit(-1);
	}else
		printf("open scan point success\n");


	vtkRenderer *ren = vtkRenderer::New();
	double arr[3] = {0};

	vtkPoints *points = vtkPoints::New();

	int n = 0;
	while(!feof(fp))//首先讀取點雲數據到點表points同時指定點對應的id:
    {
        int ret=fscanf(fp,"%lf %lf %lf",&arr[0],&arr[1],&arr[2]);
        if(ret!=3)
            break;     
        points->InsertPoint(n,arr[0],arr[1],arr[2]);
        n++;
    }
	printf("%d\n", n);
	fclose(fp);

	vtkPolyVertex *polyvertex = vtkPolyVertex::New();
	polyvertex->GetPointIds()->SetNumberOfIds(n);

	int i = 0;

	for( i = 0;i < n; i++)//建立拓撲關係
	{
		polyvertex->GetPointIds()->SetId(i,i);
	}



	vtkUnstructuredGrid *grid = vtkUnstructuredGrid::New();
	grid->SetPoints(points);
    grid->InsertNextCell(polyvertex->GetCellType(),
            polyvertex->GetPointIds());

    vtkDataSetMapper *map1 = vtkDataSetMapper::New();
    map1->SetInput(grid);

    vtkActor *actor1 = vtkActor::New();
    actor1->SetMapper(map1);
    actor1->GetProperty()->SetColor(1,0, 0);

    ren->AddActor(actor1);
    ren->SetBackground(1, 1, 1);

    vtkRenderWindow* win=vtkRenderWindow::New();
    win->AddRenderer(ren);
    win->SetSize(400,400);
    win->BordersOn();
	//On則運行起來將會是全屏顯示
    //win->FullScreenOn();
    //win->HideCursor();

    vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();

    iren->SetRenderWindow(win);
    vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
    iren->SetInteractorStyle(style);   

	iren->Initialize();
    iren->Start();
    ren->Delete();
    win->Delete();
    iren->Delete();

	
}

運行結果:



本文使用的是 vs2005+vtk5.10.1

使用的是vs裏面的控制檯程序編寫。

這樣讀入點雲的方式是最原始的方式。






發佈了32 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章