zoukankan      html  css  js  c++  java
  • VTK vtkpolydata图形着色

    颜色可以直接作为一种标量属性数据,设置到相应的点或者单元数据中,这是最直接的一种图形着色方式。

    1.需求

    根据vtkLookupTable为点设置相对应的颜色,在这里我们需要首先为点设置标量属性值。

    2.代码

     1 #include <vtkSmartPointer.h>
     2 #include <vtkPolyData.h>
     3 #include <vtkFloatArray.h>
     4 #include <vtkCellData.h>
     5 #include <vtkLookupTable.h>
     6 #include <vtkPolyDataMapper.h>
     7 #include <vtkActor.h>
     8 #include <vtkProperty.h>
     9 #include <vtkRenderer.h>
    10 #include <vtkRenderWindow.h>
    11 #include <vtkRenderWindowInteractor.h>
    12 
    13 int main(){
    14 
    15     vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New();
    16 
    17     pts->InsertNextPoint(0.0, 0.0, 0.0);
    18     pts->InsertNextPoint(1.0, 0.0, 0.0);
    19     pts->InsertNextPoint(1.0, 1.0, 0.0);
    20     pts->InsertNextPoint(0.0, 1.0, 0.0);
    21     pts->InsertNextPoint(2.0, 0.0, 0.0);
    22 
    23     vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();
    24 
    25     for (int i = 0; i < 5; i++) {
    26         vtkIdType pt[1] = { i };
    27         vertices->InsertNextCell(1, pt);
    28     }
    29 
    30     vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
    31     polyData->SetPoints(pts);
    32     polyData->SetVerts(vertices);
    33 
    34     //标量属性
    35     vtkSmartPointer<vtkFloatArray> cellScalars = vtkSmartPointer<vtkFloatArray>::New();
    36 
    37     for (int i = 0; i < 9; i++)    {
    38         cellScalars->InsertNextValue(i + 1); //九个索引
    39     }
    40 
    41     polyData->GetCellData()->SetScalars(cellScalars);
    42 
    43     vtkSmartPointer<vtkLookupTable> lut = vtkSmartPointer<vtkLookupTable>::New();
    44     lut->SetNumberOfTableValues(10);
    45     lut->Build();
    46     lut->SetTableValue(0, 0, 0, 0, 1);
    47     lut->SetTableValue(1, 0.8900, 0.8100, 0.3400, 1);
    48     lut->SetTableValue(2, 1.0000, 0.3882, 0.2784, 1);
    49     lut->SetTableValue(3, 0.9608, 0.8706, 0.7020, 1);
    50     lut->SetTableValue(4, 0.9020, 0.9020, 0.9804, 1);
    51     lut->SetTableValue(5, 1.0000, 0.4900, 0.2500, 1);
    52 
    53     vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();
    54     mapper->SetInputData(polyData);
    55     mapper->SetScalarRange(0, 5);
    56     mapper->SetLookupTable(lut);
    57 
    58     vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();
    59     actor->SetMapper(mapper);
    60     actor->GetProperty()->SetPointSize(3);
    61 
    62     vtkSmartPointer<vtkRenderer> render =vtkSmartPointer<vtkRenderer>::New();
    63     render->AddActor(actor);
    64     render->SetBackground(0.0, 0.0, 0.0);
    65 
    66     vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();
    67     rw->AddRenderer(render);
    68     rw->SetSize(320, 320);
    69 
    70     vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    71     rwi->SetRenderWindow(rw);
    72     rwi->Start();
    73 
    74     return 0;
    75 }

    3.结果
    在这里插入图片描述

    如果什么也没有显示可以用鼠标滚轮进行缩放一下

  • 相关阅读:
    数据安全-数据加密学
    网络文件共享服务-SAMBA服务搭建和配置
    vsftp
    网络文件共享服务-NFS服务配置和测试
    负载均衡,主备模式
    系统中查找文件
    如何管理Linux系统的进程与计划任务
    Robot Framework 发送接口示例
    unittest官网文档
    macOS搭建Selenium Server(Selenium Grid)
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13984770.html
Copyright © 2011-2022 走看看