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 }
复制代码

 

posted @   二先生-  阅读(312)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示