1

当单击某个按钮时,我试图在 vtk 中的图像上覆盖文本。我使用vtkTextActor,vtkTextRepresentationvtkTextWidget来实现这一点。

这是我的代码:

// set up actor
textActor->SetInput(label.toStdString().c_str());
textActor->GetTextProperty()->SetColor(1.0, 0.0, 0.0);

// set location of widget
textRepresentation->GetPositionCoordinate()->SetCoordinateSystemToWorld();
textRepresentation->GetPositionCoordinate()->SetValue(200,200);

// set up widget
textWidget->SetInteractor(imageInteractor);
textWidget->SetRepresentation(textRepresentation);
textWidget->SetDefaultRenderer(rend);
textWidget->SetTextActor(textActor);
textWidget->SelectableOff();

// render widget
rend->GetRenderWindow()->Render();
textWidget->On();
textWidget->GetTextActor()->SetWidth(vc[0]);
textWidget->GetTextActor()->SetHeight(vc[1]);
rend->GetRenderWindow()->Render(); // crash

如果我注释掉SetWidthandSetHeight函数调用,程序可以正常工作,并且弹出的文本小部件很小。但是,当我尝试调整它的宽度和高度时,textActor它会在渲染调用期间崩溃。请注意vc[0]vc[1]是相对于视口坐标系的,我在不同的函数中计算它们。

textActor我可以在调用之前调整宽度和高度,textWidget->On()小部件仍然会弹出,但它忽略了我的宽度和高度变化。我似乎无法以编程方式更改盒子尺寸。我做错了什么还是这是一个 vtk 错误?

这是一个例子。我希望文本看起来更大(更改字体大小不起作用,我认为这是因为演员本身太小了)。

例子

更新 我还没有弄清楚它为什么会崩溃或如何修复它。作为一种解决方法,我一直在调整Position2Coordinate我的textRepresentation. 渲染调用似乎正在重新调整我的设定值。谁能解释为什么或如何解决这个问题?

4

1 回答 1

0

我不确定是什么导致了崩溃,但我找到了解决方法。通过使用textRepresentation->SetPosition(x1,x2)and textRepresentation->SetPosition2(width,height),我可以控制小部件的位置和大小。需要注意的SetPosition2()是相对于SetPosition()意义而不是坐标,第二个位置应该被认为是宽度和高度。我所有的值都在标准化视口坐标系中。

于 2019-02-06T20:08:58.060 回答