VTK 二维字体渲染

1 篇文章 0 订阅

最近乃至了VTK,去官网下载了最新的realse 8.2.0。
编译成功后,开始写实现代码,参考网上的实现得到以下代码

    double pts[][3] = {{0,0,0}, {1,0,0}, {0,1,0}};
    vtkSmartPointer<vtkPoints> points = vtkPoints::New();
    vtkSmartPointer<vtkCellArray> verts =vtkCellArray::New();
    vtkSmartPointer<vtkStringArray> labels = vtkStringArray::New();
    labels->SetName("labels");
    for(ID i=0;i<3;i++){
        points->InsertNextPoint(pts[i][0],pts[i][1], pts[i][2]);
        verts->InsertNextCell(1);
        verts->InsertCellPoint(i);
        labels->InsertNextValue(std::to_string(i));;
    }
    vtkSmartPointer<vtkPolyData> polyData = vtkPolyData::New();
    polyData->SetPoints(points);
    polyData->SetVerts(verts);
    polyData->GetPointData()->AddArray(labels);

    vtkSmartPointer<vtkTextProperty> textProp = vtkTextProperty::New();
    textProp->SetFontSize(18);
    textProp->SetColor(1.0,1.0,0.5);
    textProp->SetFontFamilyToArial();
    vtkSmartPointer<vtkPointSetToLabelHierarchy> hie
            = vtkPointSetToLabelHierarchy::New();
    hie->SetInputData(polyData);
    hie->SetMaximumDepth(15);
    hie->SetLabelArrayName("labels");
    hie->SetTargetLabelCount(100);
    hie->SetTextProperty(textProp);

    vtkSmartPointer<vtkLabelPlacementMapper> labelmapper
            = vtkLabelPlacementMapper::New();
    labelmapper->SetInputConnection(hie->GetOutputPort());
    labelmapper->SetRenderStrategy(vtkFreeTypeLabelRenderStrategy::New());
    labelmapper->UseDepthBufferOn();
    labelmapper->SetShapeToNone();
    labelmapper->SetStyleToOutline();
    labelmapper->UseUnicodeStringsOff();

    getPointLabelActor()->SetMapper(labelmapper);

但启动后,出现奇怪的bug

以上代码中使用了vtkFreeTypeLabelRenderStrategy,而这个类的vtkTextRenderervtkMathTextFreeTypeTextRenderer,但是,但这个vtkTextRenderer总是空对象,于是就出错了。
上网查了后,发现是vtk使用了module机制,需要手动在代码启用相应的模块。

在代码启动时,添加如下代码后,运行正常。

#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingFreeType);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值