VTKActor не виден после рендера, но виден на камере -> resetview ()

Я работаю над проектом qt-vtk. У нас есть функция рисования линий. где прямые линии создаются между двумя положениями щелчка мыши. Но как только актер создан, его не видно. Я вызывал функцию рендеринга сразу после добавления актера. Но это не сработало. Но если я сделаю камеру -> resetview () линии станут видимыми, но вся перспектива изменится. Где я делаю не так?

Спасибо
Rwik

1

Решение

Возможно, это не относится к вам, но у меня была точно такая же проблема (в ActiViz [управляемом ВТК]), и я с ней боролся в течение недели, поэтому я надеюсь, что это поможет кому-то там. Это оказалось проблемой с расположением линий, которые мы хотели нарисовать на холсте; они были слишком далеко от камеры (по оси Z), чтобы их можно было увидеть.

Для нас мы пытались нарисовать крест на области просмотра, где бы пользователь ни щелкнул. Точки данных были там, как и актеры и еще много чего, но они были бы видны только в сцене, если бы вы вызвали resetCamera () и таким образом изменили конфигурацию камеры.
Первоначально я обвинил пользовательский интерактор, который нам пришлось добавить, чтобы обходить глушение событиями MouseUp по умолчанию (предполагаемое поведение). Расследование показало, что это казалось маловероятным.

После этого я переложил вину на камеру, подозревая, что, возможно, вызов reset сбрасывал какой-то метод обновления, о котором я не знал. Я вызвал resetCamera () и затем вернул значения камеры к тому, что они были изначально.
Когда это было успешно сделано, это привело к тому, что кресты появятся, когда камера уменьшит масштаб, а затем снова исчезнут, как только она будет отодвинута назад, и именно в этот момент я понял, что это как-то связано со сценой.

На этом этапе я проверил методы, которые мы использовали для получения местоположения мыши в 3D, и понял, что значение z было огромным, и он размещал точки слишком далеко в качестве побочного продукта методов VTK для преобразования 2D-местоположений в элементе управления в 3D места на сцене и наоборот.

Итак, после всего этого, очень обыденная и предотвратимая ошибка, которая возникла из методов renderer.DisplayToWorld () и WorldToDisplay ().
Это может быть не проблемой для всех, но я надеюсь, что я пощадил кого-то неделю возиться с ВТК.

1

Другие решения

Я думаю, что это немного сложно, без кода, но вы пытались использовать

ui->qvtkwidget->update();

, где UI экземпляр вашего класса, полученный из QMainWindow?

0

По вопросам рекламы [email protected]