2014-12-23 1 views
0

Я довольно новичок в ВТК, и мне очень нравится использовать его.VTK - Взаимодействие с несколькими объектами

Теперь я хочу взаимодействовать с несколькими объектами независимо. Например, если у меня есть 5 объектов в окне рендеринга, я хочу только перемещать, вращать и взаимодействовать с одним выбранным объектом; в то время как остальные 4 объекта остаются там, где они есть.

В настоящий момент камера выполняет магию, и когда я поворачиваю независимый объект, другие объекты движутся одновременно, и я не хочу, чтобы это произошло.

Я также хочу сохранить все объекты в памяти.

Я намерен использовать C++.

Это мой вид классовой структуры ...

class ScreenObjects 
{ 
    vtkActor (LinkedList); // I intend on using a linkedlist to store all the actors 

    public: 
    ScreenObjects(); // Constructor. Initializes vtkActor to null. 
    void readSTLFile(); // Reads the STL File 
    bool setObject(); // Sets current object, so you can only interact with the selected object 
} 

мне не хватает довольно много функций и подробно в своем классе, так как я не знаю, что еще включать в себя, что бы использования , Я также думал о соединении двух объектов вместе, но опять же, я не знаю, как включить это в мой класс; любая информация об этом будет оценена по достоинству.

Было бы очень признательно, если бы мне дали идеи. Это для меня что-то большое, и это действительно значило бы для меня много, и я имею в виду это глубоко от моего сердца.

ответ

0

Прежде всего, вы должны прочитать некоторые учебники и презентации, как этот, например: http://www.cs.rpi.edu/~cutler/classes/visualization/F10/lectures/03_interaction.pdf

Я говорю, что причина, похоже, вы сейчас просто перемещая камеру.

Затем вы должны изучить примеры VTK. Они очень полезны для всех классов VTK. Специально для вашей проблемы взглянуть на: http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/Picking

Основном вы должны создать vtkRenderWindowInteractor производный класс, чтобы получить события мыши (OnMouseDown, OnMouseUp, OnMouseMove, ...).

И vtkPropPicker, чтобы снять луч с позиции мыши в 3D-вид и получить vtkActor.

Теперь вы можете сохранить onMouseDown внутри вашего производного класса vtkRenderWindowInteractor vtkActor, который вы хотите переместить, и текущую позицию мышью. Когда пользователь освобождает мышь (onMouseUp), просто получайте новую позицию мыши и используйте разницу в позициях onMouseDown/onMouseUp, чтобы изменить положение vtkActor.

+0

Darko, спасибо за предложение :), это много значит. Что касается взаимодействия с vtkActor с помощью vtkInteractorStyleTrackballActor, как бы я мог использовать матрицы? В идеале, я хочу использовать матрицы для вращения и преобразования vtkActors? Кроме того, с точки зрения хранения в памяти, я думал о наличии класса, который принимает несколько экземпляров класса vtkActor. Я хочу идеально хранить несколько актеров в памяти, чтобы их можно было увидеть в окне рендеринга. –

+0

Вы можете поместить vtkActors в std :: vector или что-то в этом роде без проблем. Чтобы использовать матрицу преобразования, вы можете использовать vtkProp3D :: SetUserTransform (доступный для vtkActor *, потому что vtkActor получен из vtkProp3D) http://www.vtk.org/doc/nightly/html/classvtkProp3D.html#aac7f621f0a3666a29d21b5087919797a –

 Смежные вопросы

  • Нет связанных вопросов^_^