1 string Trim(string& str)
2 {
3 //str.find_first_not_of(" \t\r\n"),在字符串str中从索引0开始,返回首次不匹配"\t\r\n"的位置
4 str.erase(0, str.find_first_not_of(" \t\r\n"));
5 str.erase(str.find_last_not_of(" \t\r\n") + 1);
6 return str;
7 }
8
9 int main()
10 {
11 vtkSmartPointer points = vtkSmartPointer::New();
12 double x, y, z;
13 ifstream fin("D:\\QTData\\Vtk-new\\ceshi1.csv"); //打开文件流操作-绝对路径
14 string line;
15 while (getline(fin, line)) //整行读取,换行符“\n”区分,遇到文件尾标志eof终止读取
16 {
17 //cout <<"原始字符串:"<< line << endl; //整行输出
18 istringstream sin(line); //将整行字符串line读入到字符串流istringstream中
19 vector<string> fields; //声明一个字符串向量
20 string field;
21 while (getline(sin, field, ',')) //将字符串流sin中的字符读入到field字符串中,以逗号为分隔符
22 {
23 fields.push_back(field); //将刚刚读取的字符串添加到向量fields中
24 }
25
26 string sx = Trim(fields[0]);
27 string sy = Trim(fields[1]);
28 string sz = Trim(fields[2]);
29
30 //字符串转换成double型数字
31 istringstream streamx, streamy, streamz;
32 streamx.str(sx), streamy.str(sy), streamz.str(sz);
33 streamx >> x, streamy >> y, streamz >> z;
34 points->InsertNextPoint(x, y, z); //新读取的数据赋予点的几何结构
35 }
36 fin.close(); //关闭文件
37 vtkSmartPointer polyData = vtkSmartPointer::New();
38 polyData->SetPoints(points);
39
40 //定义二维点剖分
41 vtkDelaunay2D* delaunay = vtkDelaunay2D::New();
42 delaunay->SetInputData(polyData);
43 delaunay->Update();
44
45 vtkSmartPointer glyphFilter = vtkSmartPointer::New();
46 #if VTK_MAJOR_VERSION <= 5
47 glyphFilter->SetInputConnection(polyData->GetProducerPort());
48 #else
49 glyphFilter->SetInputData(polyData);
50 #endif
51 glyphFilter->Update();
52
53 vtkVertexGlyphFilter* vertexGlyphFilter = vtkVertexGlyphFilter::New();
54 vertexGlyphFilter->SetInputData(polyData);
55 vertexGlyphFilter->Update();
56
57
58
59
60 std::string fileName = "D:\\QTData\\Vtk-new\\figure2.bmp";
61 vtkSmartPointer bmpReader = vtkSmartPointer::New();
62 bmpReader->SetFileName(fileName.c_str());
63
64 vtkSmartPointer atext = vtkSmartPointer::New();
65 atext->SetInputConnection(bmpReader->GetOutputPort());
66 atext->InterpolateOn();
67
68
69
70
71 // Visualize
72 vtkSmartPointer mapper = vtkSmartPointer::New();
73 mapper->SetInputConnection(vertexGlyphFilter->GetOutputPort());
74
75 vtkSmartPointer actor = vtkSmartPointer::New();
76 actor->SetMapper(mapper);
77 actor->GetProperty()->SetPointSize(4);
78 actor->GetProperty()->SetColor(0.0, 0.0, 0.0);
79
80 //三角渲染
81 vtkPolyDataMapper* triangleMapper = vtkPolyDataMapper::New();
82 triangleMapper->SetInputConnection(delaunay->GetOutputPort());
83 triangleMapper->Update();
84 vtkActor* triangleActor = vtkActor::New();
85 triangleActor->SetMapper(triangleMapper);
86
87
88 vtkSmartPointer texturemap = vtkSmartPointer::New();
89 texturemap->SetInputConnection(delaunay->GetOutputPort());
90 vtkSmartPointer map = vtkSmartPointer::New();
91 map->SetInputConnection(texturemap->GetOutputPort());
92 vtkSmartPointer map_actor = vtkSmartPointer::New();
93 map_actor->SetMapper(map);
94 map_actor->SetTexture(atext);
95 map_actor->SetTexture(atext);
96
97 vtkSmartPointer renderer = vtkSmartPointer::New();
98 renderer->AddActor(actor);
99 renderer->AddActor(triangleActor);
100 renderer->AddActor(map_actor);
101
102 renderer->SetBackground(1.3, 1.6, 1.3); // Background color green
103
104 vtkSmartPointer renderWindow = vtkSmartPointer::New();
105 renderWindow->AddRenderer(renderer);
106
107
108 vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New();
109 renderWindowInteractor->SetRenderWindow(renderWindow);
110
111 renderWindow->Render();
112 renderWindowInteractor->Start();
113
114 return EXIT_SUCCESS;
115 }