vtkActor2D 中的 SetWidth() 和 SetHeight() 在渲染调用后导致崩溃
SetWidth() and SetHeight() in vtkActor2D causes a crash after a rendering call
我试图在单击某个按钮时在 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]
是相对于视口坐标系的,我是用不同的函数计算的。
我可以在 textWidget->On()
调用之前调整 textActor
的宽度和高度,小部件仍然会弹出,但它会忽略我的宽度和高度变化。我似乎无法以编程方式更改框尺寸。我做错了什么或者这是一个 vtk 错误?
这是一个例子。我希望文字看起来更大(更改字体大小不起作用,我认为是因为演员本身太小了)。
更新
我还没有弄清楚为什么它会崩溃或如何修复它。作为解决方法,我一直在调整 textRepresentation
中的 Position2Coordinate
值。渲染调用似乎正在重新调整我的设置值。谁能解释为什么或如何解决这个问题?
我不确定是什么导致了崩溃,但我找到了解决方法。通过使用 textRepresentation->SetPosition(x1,x2)
和 textRepresentation->SetPosition2(width,height)
,我能够控制小部件的位置和大小。重要的是要注意 SetPosition2()
是相对于 SetPosition()
的意思,而不是坐标,第二个位置应该被认为是宽度和高度。我的所有值都在规范化视口坐标系中。
我试图在单击某个按钮时在 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]
是相对于视口坐标系的,我是用不同的函数计算的。
我可以在 textWidget->On()
调用之前调整 textActor
的宽度和高度,小部件仍然会弹出,但它会忽略我的宽度和高度变化。我似乎无法以编程方式更改框尺寸。我做错了什么或者这是一个 vtk 错误?
这是一个例子。我希望文字看起来更大(更改字体大小不起作用,我认为是因为演员本身太小了)。
更新
我还没有弄清楚为什么它会崩溃或如何修复它。作为解决方法,我一直在调整 textRepresentation
中的 Position2Coordinate
值。渲染调用似乎正在重新调整我的设置值。谁能解释为什么或如何解决这个问题?
我不确定是什么导致了崩溃,但我找到了解决方法。通过使用 textRepresentation->SetPosition(x1,x2)
和 textRepresentation->SetPosition2(width,height)
,我能够控制小部件的位置和大小。重要的是要注意 SetPosition2()
是相对于 SetPosition()
的意思,而不是坐标,第二个位置应该被认为是宽度和高度。我的所有值都在规范化视口坐标系中。