VTK数据拓扑结构、几何结构和属性数据

博客 分享
0 211
优雅殿下
优雅殿下 2022-03-18 10:56:53
悬赏:0 积分 收藏

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 @ 2022-03-18 10:46 二先生- 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员