[C++][vtk][转载]利用vtk绘制文本

测试环境:

vs2019专业版

vtk9.1

代码:

#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkTextActor.h>
#include <vtkTextProperty.h>
#include <vtkVectorText.h>
#include <vtkFollower.h>
#include <vtkInteractorStyle.h>
#include <vtkAutoInit.h> 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
const char* const HELLO_TEXT = "Hello world";

int main(int argc, char* argv[])
{


    auto sphereSource =
        vtkSmartPointer<vtkSphereSource>::New();
    sphereSource->SetRadius(3.0);
    sphereSource->SetCenter(0.0, 0.0, 0.0);

    auto sphereMapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
    auto sphereActor =
        vtkSmartPointer<vtkActor>::New();
    sphereActor->SetMapper(sphereMapper);
    sphereActor->GetProperty()->SetOpacity(0.3);

    auto renderer =
        vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(sphereActor);
    auto renWindow =
        vtkSmartPointer<vtkRenderWindow>::New();
    renWindow->SetSize(400, 400);
    renWindow->AddRenderer(renderer);
    auto interactor =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    interactor->SetRenderWindow(renWindow);

    int dtype = 2;
    if (dtype == 1)
    {
        auto textActor =
            vtkSmartPointer<vtkTextActor>::New();
        textActor->SetInput(HELLO_TEXT);
        textActor->SetPosition2(20, 40);
        textActor->GetTextProperty()->SetColor(1.0, 0.0, 0.0);
        textActor->GetTextProperty()->SetFontSize(24);
        renderer->AddActor2D(textActor);
    }
    else if (dtype == 2 || dtype == 3)
    {
        auto textSource =
            vtkSmartPointer<vtkVectorText>::New();
        textSource->SetText(HELLO_TEXT);
        auto textMapper =
            vtkSmartPointer<vtkPolyDataMapper>::New();
        textMapper->SetInputConnection(textSource->GetOutputPort());
        if (dtype == 2)
        {
            auto textActor =
                vtkSmartPointer<vtkActor>::New();
            textActor->SetMapper(textMapper);
            textActor->GetProperty()->SetColor(1.0, 0.0, 0.0);
            renderer->AddActor(textActor);
        }
        else if (dtype == 3)
        {
            auto textFollower =
                vtkSmartPointer<vtkFollower>::New();
            textFollower->SetMapper(textMapper);
            textFollower->GetProperty()->SetColor(1.0, 0.0, 0.0);
            textFollower->SetCamera(renderer->GetActiveCamera());
            renderer->AddActor(textFollower);
        }
    }

    renWindow->Render();
    renderer->ResetCamera();
    renWindow->Render();
    interactor->Start();

    return EXIT_SUCCESS;
}
结果:

 

c语言下,vtk包含了多种函数库,方便用户进行3D图形的绘制。其中,vtkPlaneSource就是用来绘制平面的方法之一。 vtkPlaneSource生成一个由四边形构成的平面,可通过设置相关属性对其进行调整。通过vtkRenderer类渲染图形,方便地实现将图形输出到屏幕上,或作为其他应用程序的输入,例如3D建模软件等。 使用vtk绘制平面,可以用以下步骤: 1.包含vtk头文件 #include<vtkPlaneSource.h> #include<vtkSmartPointer.h> #include<vtkPolyDataMapper.h> #include<vtkActor.h> #include<vtkRenderer.h> #include<vtkRenderWindow.h> #include<vtkRenderWindowInteractor.h> 2.新建平面对象 vtkSmartPointer<vtkPlaneSource> planeSource = vtkSmartPointer<vtkPlaneSource>::New(); 3.设置平面属性 planeSource->SetXResolution(4); //设置X方向上四边形的数目 planeSource->SetYResolution(4); //设置Y方向上四边形的数目 planeSource->SetOrigin(-1, -1, 0);//设置平面的原点 planeSource->SetPoint1(1, -1, 0);//设置平面的第一个端点 planeSource->SetPoint2(-1, 1, 0);//设置平面的第二个端点 4.创建Mapper vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(planeSource->GetOutputPort()); 5.创建Actor vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); 6.创建Renderer vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor(actor); 7.创建窗口 vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); renderWindow->SetSize(640, 480); 8.创建交互器 vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); interactor->SetRenderWindow(renderWindow); interactor->Initialize(); 9.开始绘制 renderWindow->Render(); interactor->Start(); 以上就是用vtk绘制平面的全过程,您可以根据实际需求设置平面的大小和位置等属性,使绘制的平面更加符合预期效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FL1623863129

你的打赏是我写文章最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值