C++医学图像处理之vtk三维射线构建

        hallo,小伙伴们,好久不见~ 新的学期开始啦,大家有没有做好准备呢?今天咱们就来小小的热一个身,讲一下基于C++的vtk库的使用。这篇文章咱们就讲一下射线的构建吧,后续相关的文章还会继续更新哦~

        首先是需要引入的库。

#include <vtkSmartPointer.h>
#include <vtkLineSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

        然后,我们写一个main函数,在函数里构建我们的三维模型。

        这里按照vtk构建三维模型的基本流程,首先构建renderer,再构建window。然后构建三维模型(例如,这里是射线,也就是vtkLineSource),大家可以按照自己的需求修改起点和终点的坐标。接下来构建该三维模型的mapper和actor。最后,在renderer中添加actor等。

        如果小伙伴们想构建别的三维模型,只需要更改创建vtkLineSource的部分即可。

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

    // 创建一个vtkRenderWindowInteractor
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    // 创建一个vtkLineSource,定义射线的起点和终点
    vtkSmartPointer<vtkLineSource> lineSource = vtkSmartPointer<vtkLineSource>::New();
    lineSource->SetPoint1(0, 0, 0);  // 起点坐标
    lineSource->SetPoint2(1, 1, 1);  // 终点坐标

    // 创建一个vtkPolyDataMapper将数据映射到渲染器
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(lineSource->GetOutputPort());

    // 创建一个vtkActor并将映射器设置给它
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    // 添加actor到渲染器
    renderer->AddActor(actor);

    // 设置渲染器的背景颜色
    renderer->SetBackground(0.1, 0.1, 0.1);

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

        接下来,介绍一些基本操作。

        下面这行代码可以设置射线的颜色。其中,(1, 0, 0)是颜色参数,大家按照自己的需求修改即可。

       这里列举一些常见的颜色。(1,0,0)是红色,(0,0,1)是蓝色,(1,1,0)是黄色,(0,1,0)是绿色。

actor->GetProperty()->SetColor(1, 0, 0);

        下面这行代码则可以设置射线的粗细。其中,10是参数,大家按照自己的需求修改即可,数值越大,射线越粗。

actor->GetProperty()->SetLineWidth(10);

        最后附上完整代码,希望能帮到各位小伙伴哦~

#include <vtkSmartPointer.h>
#include <vtkLineSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

int main(int, char*[])
{
    // 创建一个vtkRenderWindow和vtkRenderer
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);

    // 创建一个vtkRenderWindowInteractor
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    // 创建一个vtkLineSource,定义射线的起点和终点
    vtkSmartPointer<vtkLineSource> lineSource = vtkSmartPointer<vtkLineSource>::New();
    lineSource->SetPoint1(0, 0, 0);  // 起点坐标
    lineSource->SetPoint2(1, 1, 1);  // 终点坐标

    // 创建一个vtkPolyDataMapper将数据映射到渲染器
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(lineSource->GetOutputPort());

    // 创建一个vtkActor并将映射器设置给它
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    // 设置actor的颜色
    actor->GetProperty()->SetColor(0, 1, 0);

    // 设置actor的粗细
    actor->GetProperty->SetLineWidth(10);

    // 添加actor到渲染器
    renderer->AddActor(actor);

    // 设置渲染器的背景颜色
    renderer->SetBackground(0.1, 0.1, 0.1);

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

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值