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->构建几何结构->构建拓扑结构集合-> 存储数据

    属性结构: 创建属性结构-> 创建元组->创建单元数据->合并数据

 

posted @   二先生-  阅读(567)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示