VTK 二维字体渲染

最近乃至了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);

你可能感兴趣的:(c++,vtk,文字)