求各位大神路过看一下
vtk吧
全部回复
仅看楼主
level 1
xingyuasad 楼主
写了一个vtk读取txt文件并进行曲面重建的程序,但是在进行得到的图像还是一堆点云,想请教一下是怎么回事,代码如下:
cpp:
#include "myclass.h"
#include <vtkSmartPointer.h>
#include <vtkSimplePointsReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include<vtkPolyData.h>
#include <vtkProperty.h>
#include<vtkAxesActor.h>
#include <vtkRenderer.h>
#include<vtkContourFilter.h>
#include <vtkVersion.h>
#include <vtkVertexGlyphFilter.h>
#include <vtkPoints.h>
#include <sstream>
#include<vtkSurfaceReconstructionFilter.h>
#include<vtkOrientationMarkerWidget.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
MyClass::MyClass(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//vtkSmartPointer<vtkSimplePointsReader> reader = vtkSmartPointer<vtkSimplePointsReader>::New();
//reader->SetFileName("data.txt");
std::string filename = "data.txt";
std::ifstream filestream(filename.c_str()); //文件流
std::string line;
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
while (std::getline(filestream, line)) //行读取文件
{
double x, y, z;
std::stringstream linestream;
linestream << line;
linestream >> x >> y >> z;
points->InsertNextPoint(x, y, z); //数据赋予点结构
}
filestream.close(); //关闭文件
// Visualize
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
polyData->SetPoints(points);
//reader->Update();
//vtkSmartPointer<vtkPoints> points1 = vtkSmartPointer<vtkPoints>::New();
//points1->InsertPoint( reader);
//重建
//vtkSmartPointer<vtkPolyData>points = vtkSmartPointer<vtkPolyData>::New();
//points->SetPoints(points);
vtkSmartPointer<vtkSurfaceReconstructionFilter>surf = vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();
surf->SetInputData(polyData);
surf->SetNeighborhoodSize(20);
surf->SetSampleSpacing(0.005);
vtkSmartPointer<vtkContourFilter> contour = vtkSmartPointer<vtkContourFilter>::New();
contour->SetInputConnection(surf->GetOutputPort());
contour->SetValue(0,0);
// Visualize
vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New();
#if VTK_MAJOR_VERSION <= 5
glyphFilter->SetInputConnection(polyData->GetProducerPort());
#else
glyphFilter->SetInputData(polyData);
#endif
glyphFilter->Update();
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(glyphFilter->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->GetProperty()->SetPointSize(4);
actor->GetProperty()->SetColor(0.0, 0.0, 0.0);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(1.3, 1.6, 1.3); // Background color green
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
vtkSmartPointer<vtkAxesActor> axes =
vtkSmartPointer<vtkAxesActor>::New();
axes->SetScale(10);
renderer->AddActor(axes);
vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
rwi->SetRenderWindow(renderWindow);
renderWindow->Render();
renderWindowInteractor->Start();
}
2017年03月07日 02点03分 1
level 12
contour 这东东你并没有用到
2017年03月21日 00点03分 2
恩恩,这个后面解决了。。
2017年03月21日 11点03分
level 1
想问下各位大佬,我分别尝试PCL1.8.0(VTK 7.0.0)+VS2013和PCL1.9.1(VTK8.1.0)+VS2019,尝试运行一个别人已经写好的程序,VTK我用的是CMAKE自己编译的也没用报错,但是两个VS打开进行编译的时候一直提示我>LINK : fatal error LNK1104: 无法打开文件“vtkCommon.lib”,这个文件我没有写在附加依赖项里,新版本的VTK中我也没有找到这个lib,请问一下各位大佬这个怎么解决?
2019年06月27日 08点06分 4
1