vtk二维纹理贴图
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<vtkPoints> points = vtkSmartPointer<vtkPoints>::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<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New(); 38 polyData->SetPoints(points); 39 40 //定义二维点剖分 41 vtkDelaunay2D* delaunay = vtkDelaunay2D::New(); 42 delaunay->SetInputData(polyData); 43 delaunay->Update(); 44 45 vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::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<vtkBMPReader> bmpReader = vtkSmartPointer<vtkBMPReader>::New(); 62 bmpReader->SetFileName(fileName.c_str()); 63 64 vtkSmartPointer<vtkTexture> atext = vtkSmartPointer<vtkTexture>::New(); 65 atext->SetInputConnection(bmpReader->GetOutputPort()); 66 atext->InterpolateOn(); 67 68 69 70 71 // Visualize 72 vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); 73 mapper->SetInputConnection(vertexGlyphFilter->GetOutputPort()); 74 75 vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::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<vtkTextureMapToCylinder> texturemap = vtkSmartPointer<vtkTextureMapToCylinder>::New(); 89 texturemap->SetInputConnection(delaunay->GetOutputPort()); 90 vtkSmartPointer<vtkPolyDataMapper> map = vtkSmartPointer<vtkPolyDataMapper>::New(); 91 map->SetInputConnection(texturemap->GetOutputPort()); 92 vtkSmartPointer<vtkActor> map_actor = vtkSmartPointer<vtkActor>::New(); 93 map_actor->SetMapper(map); 94 map_actor->SetTexture(atext); 95 map_actor->SetTexture(atext); 96 97 vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::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<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); 105 renderWindow->AddRenderer(renderer); 106 107 108 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); 109 renderWindowInteractor->SetRenderWindow(renderWindow); 110 111 renderWindow->Render(); 112 renderWindowInteractor->Start(); 113 114 return EXIT_SUCCESS; 115 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧