对一个Actor的不同部分设置不同的颜色

#include <vtkSmartPointer.h>
#include <vtkPoints.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkLookupTable.h>
#include <vtkFloatArray.h>

int main()
{
    // 创建点坐标
    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
    points->InsertNextPoint(0, 0, 0);
    points->InsertNextPoint(1, 1, 1);
    points->InsertNextPoint(2, 2, 2);

    // 创建Cell数组
    vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
    lines->InsertNextCell(2);//一个Cell中点的个数
    lines->InsertCellPoint(0);
    lines->InsertCellPoint(1);

    lines->InsertNextCell(2);//一个Cell中点的个数
    lines->InsertCellPoint(1);
    lines->InsertCellPoint(2);

    // 创建PolyData对象,并将点坐标和Cell数组设置为其数据
    vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
    polyData->SetPoints(points);
    polyData->SetLines(lines);

    // 创建数值数组
    vtkSmartPointer<vtkFloatArray> values = vtkSmartPointer<vtkFloatArray>::New();
    values->SetName("Values");
    values->SetNumberOfComponents(1);
    values->SetNumberOfTuples(lines->GetNumberOfCells());
    values->InsertTuple1(0, 0.5); // 第一个Cell的数值为0.5
    values->InsertTuple1(1, 1.5); // 第二个Cell的数值为1.5

    // 创建颜色映射
    vtkSmartPointer<vtkLookupTable> colorMap = vtkSmartPointer<vtkLookupTable>::New();
    colorMap->SetTableRange(0.0, 2.0); // 数值范围
    colorMap->SetHueRange(0.0, 1.0); // 色调范围
    colorMap->Build();

    // 将数值数组关联到PolyData对象的Cell数据上
//    polyData->GetCellData()->SetScalars(values);
    polyData->GetCellData()->AddArray(values);
    polyData->GetCellData()->SetActiveScalars("Values");

    // 创建PolyDataMapper对象,并将PolyData对象设置为其输入
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputData(polyData);
    mapper->SetScalarRange(0.0, 2.0); // 数值范围

    // 设置颜色映射到Mapper
    mapper->SetLookupTable(colorMap);
    mapper->ScalarVisibilityOn();

    // 创建Actor对象,并将PolyDataMapper对象设置为其Mapper
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    // 创建Renderer和RenderWindow
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);

    // 创建RenderWindowInteractor并将其关联到RenderWindow
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    // 将Actor添加到Renderer中
    renderer->AddActor(actor);

    // 渲染并启动交互
    renderWindow->Render();
    renderWindowInteractor->Start();

    return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值