SetWidth() и SetHeight() в vtkActor2D вызывают сбой после вызова рендеринга

Я пытаюсь наложить текст на изображение в 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, Вызов рендеринга, кажется, перенастраивает мои установленные значения. Может кто-нибудь объяснить, почему или как это исправить?

1 ответ

Решение

Я не уверен, что является причиной аварии, но я нашел обходной путь. Используя textRepresentation->SetPosition(x1,x2) а также textRepresentation->SetPosition2(width,height)Я могу контролировать расположение и размер виджета. Важно отметить, что SetPosition2() относительно SetPosition() То есть, вместо координаты, вторая позиция должна рассматриваться как ширина и высота. Все мои значения находятся в системе координат Normalized Viewport.

Другие вопросы по тегам