2016-06-04 3 views
0

У меня есть функция Matlab, которая принимает трехмерный двоичный объект как входной, сохраняет его как временный файл, а затем загружает скрипт python через cmd (я сделал это до интеграции Python Matlab). Сценарий python загружает и реорганизует 3D-данные и отображает их через VTK.Управление VTK через Matlab

Сценарий python также создает некоторые элементы управления VTK, которые я хотел бы контролировать с помощью слайдеров GUI Matlab, а не ползунков VTK.

Есть ли способ открыть поток данных в реальном времени между VTK и Matlab, либо через новую интеграцию с Python Matlab, либо с помощью API-интерфейсов ядра Matlab на Python (или любым другим способом)? До сих пор я не нашел возможности контролировать сторонники VTK, кроме элементов управления VTK, прямо в окне взаимодействия с VTK.

EDIT: Я также столкнулся с странной проблемой, пытаясь понять это. Когда я запускаю визуализацию VTK с помощью system(['pythonw ' folder '\vizualize.pyw" &']); (и добавляя main(), чтобы скрипт выполнялся сам), все работает гладко, но когда я делаю это с помощью py.vizualize.main() и пытаюсь закрыть окно визуализации, оно не закрывается, но оно возвращает управление в matlab. Во второй попытке он убивает окно matlab, а затем через некоторое время. Сценарии идентичны.

EDIT 2: Добавление renderWin.Finalize() сразу после renderInteractor.Start() исправил этот вопрос по какой-либо причине.

Спасибо за любые ответы или идеи!

+0

Любопытно, почему вы хотели бы это сделать. MATLAB GUI заведомо медленный, и передача данных между VTK и MATLAB еще больше замедлит работу. – Suever

+0

Я знаю, но, откровенно говоря, остальная часть приложения уже была выполнена в Matlab. Визуализация 3D - это просто функция, которую я хотел бы добавить. – Oldrich

ответ

0

Я как-то получил его на работу. Вот что я сделал:

  1. MATLAB сеанса работы графического интерфейса превращается в общей сессии через matlab.engine.shareEngine('shared_matlab_session') и отслеживает GUI положение ползунка MatLab в matlab_slider_pos переменной

  2. сценарий питона подключается к сессии через MatEng=matlab.engine.connect_matlab('shared_matlab_session') до того инициализация ВОК объектов

  3. ВКИ окна визуализации добавляет наблюдатель TimerEvent, что вызывает SliderSync функцию обратного вызова питона каждые 0,1 секунд

  4. функция SliderSync проверяет, соответствует ли текущее значение ползунка VTK результату вызова MatEng.eval('matlab_slider_pos'), а если нет, обновите значение ползунка VTK вместе с остальной частью конвейера VTK. Конечно, в этот момент ползунок VTK больше не нужен, и функция может напрямую обновлять то, что требуется для обновления.

Я действительно надеюсь, что есть более элегантный способ для просмотра 3D-объема в MATLAB, чем мерзости я создал (он работает довольно гладко, хотя). Комментарии по-прежнему приветствуются!