我试图在单击某个按钮时在vtk中的图像上覆盖文本。我使用vtkTextActor
,vtkTextRepresentation
和vtkTextWidget
来实现这一目标。
这是我的代码:
// 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
如果我注释掉SetWidth
和SetHeight
函数调用,则该程序可以正常运行,并且文本小窗口弹出很小。但是,当我尝试调整textActor
的宽度和高度时,它在渲染调用期间崩溃。请注意,vc[0]
和vc[1]
相对于视口坐标系,我用不同的函数来计算它们。
在textActor
调用之前,我可以调整textWidget->On()
的宽度和高度,该小部件仍会弹出,但是它忽略了我的宽度和高度变化。我似乎无法以编程方式更改框的尺寸。我是在做错什么还是这是vtk错误?
这里是一个例子。我希望文本显示得更大(更改字体大小是行不通的,我认为这是因为演员本身太小了。)
更新
我还没有弄清楚为什么它崩溃或如何修复它。解决方法是,我一直在调整Position2Coordinate
中的textRepresentation
值。渲染调用似乎正在重新调整我的设置值。谁能解释为什么或如何解决这个问题?
答案 0 :(得分:0)
我不确定导致崩溃的原因,但我找到了解决方法。通过使用textRepresentation->SetPosition(x1,x2)
和textRepresentation->SetPosition2(width,height)
,我可以控制小部件的位置和大小。重要的是要注意SetPosition2()
是相对于SetPosition()
的意思,而不是坐标,第二个位置应考虑宽度和高度。我所有的值都在归一化视口坐标系中。