SetWidth () и SetHeight () в vtkActor2D вызывают сбой после вызова рендеринга - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь наложить текст на изображение в 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?

Вот пример.Мне бы хотелось, чтобы текст выглядел больше (изменение размера шрифта не работает, я думаю, это потому, что сам актер слишком мал).

example

ОБНОВЛЕНИЕ Я не выяснил, почему происходит сбой или как это исправить.В качестве обходного пути я настраивал значение Position2Coordinate в своем textRepresentation.Вызов рендеринга, кажется, перенастраивает мои установленные значения.Кто-нибудь может объяснить, почему или как это исправить?

1 Ответ

0 голосов
/ 06 февраля 2019

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

...