VTK数据拓扑结构、几何结构和属性数据
读取到VTK数据后,将数据组织起来并添加属性值。
示例:
#include <vtkSmartPointer.h> #include <vtkPoints.h> #include <vtkPolygon.h> #include <vtkTriangle.h> #include <vtkCellArray.h> #include <vtkPolyData.h> #include <vtkUnsignedCharArray.h> //Attribution #include <vtkPointData.h> //点数据 #include <vtkCellData.h> //单元数据 /// #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> int main() { //几何结构数据:点集 vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New(); pts->InsertNextPoint(0.0, 0.0, 0.0); pts->InsertNextPoint(1.0, 0.0, 0.0); pts->InsertNextPoint(1.0, 1.0, 0.0); pts->InsertNextPoint(0.0, 1.0, 0.0); pts->InsertNextPoint(2.0, 0.0, 0.0); //拓扑结构数据,正四边形 //构建多边形单元 vtkSmartPointer<vtkPolygon> polygon = vtkSmartPointer<vtkPolygon>::New(); polygon->GetPointIds()->SetNumberOfIds(4); polygon->GetPointIds()->SetId(0, 0);//为对应索引的点设置坐标,坐标为vtkpionts中定义的5个坐标点 polygon->GetPointIds()->SetId(1, 1); polygon->GetPointIds()->SetId(2, 2);//setId为指定的点设置索引 polygon->GetPointIds()->SetId(3, 3); //拓扑结构数据:三角形 vtkSmartPointer<vtkTriangle> triangle = vtkSmartPointer<vtkTriangle>::New(); triangle->GetPointIds()->SetId(0, 1); triangle->GetPointIds()->SetId(1, 2); triangle->GetPointIds()->SetId(2, 4); //构成拓扑结构集合 vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New(); cells->InsertNextCell(polygon); cells->InsertNextCell(triangle); //合成几何拓扑结构用于显示(包括点数据和单元数据集) vtkSmartPointer<vtkPolyData> polygonPolyData = vtkSmartPointer<vtkPolyData>::New(); polygonPolyData->SetPoints(pts); polygonPolyData->SetPolys(cells); //添加属性结构 unsigned char red[3] = { 255, 0, 0 }; unsigned char green[3] = { 0, 255, 0 }; unsigned char blue[3] = { 0, 0, 255 }; vtkSmartPointer<vtkUnsignedCharArray> ptColor = vtkSmartPointer<vtkUnsignedCharArray>::New();//有5个点数据 ptColor->SetNumberOfComponents(3);//指定每个元组的大小,RGB三色分量组成 ptColor->InsertNextTupleValue(red); ptColor->InsertNextTupleValue(green); ptColor->InsertNextTupleValue(blue); ptColor->InsertNextTupleValue(red); ptColor->InsertNextTupleValue(green); polygonPolyData->GetPointData()->SetScalars(ptColor); vtkSmartPointer<vtkUnsignedCharArray> cellColor = vtkSmartPointer<vtkUnsignedCharArray>::New();//2个单元数据 cellColor->SetNumberOfComponents(3); cellColor->InsertNextTupleValue(blue); cellColor->InsertNextTupleValue(red); polygonPolyData->GetCellData()->SetScalars(cellColor);
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();//将几何拓扑结构数据(可视化模型)进行映射到图形模型
mapper->SetInputData(polygonPolyData);
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> render =
vtkSmartPointer<vtkRenderer>::New();
render->AddActor(actor);
render->SetBackground(0.0, 0.0, 0.0);
vtkSmartPointer<vtkRenderWindow> rw =
vtkSmartPointer<vtkRenderWindow>::New();
rw->AddRenderer(render);
rw->SetSize(320, 240);
rw->SetWindowName("Creating PolyData Structure");
vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
rwi->SetRenderWindow(rw);
rwi->Render();
rwi->Start();
return 0;
}
问题:1. 如何设置点的ID号,对比书籍,为什么解释不同。
步骤:导入点->设置点的ID->构建几何结构->构建拓扑结构集合-> 存储数据
属性结构: 创建属性结构-> 创建元组->创建单元数据->合并数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具