我有一个Matlab函数,它将3D二进制对象作为输入,将其保存为临时文件,然后通过cmd加载python脚本(我在Matlab的python集成之前做了这个)。 python脚本加载并重新组织3D数据并通过VTK显示它们。
python脚本还创建了一些我想通过Matlab GUI滑块而不是VTK滑块控制的VTK控件。
有没有办法通过Matlab的新python集成或python的Matlab引擎API(或任何其他方式)在VTK和Matlab之间打开实时数据流?到目前为止,我还没有找到任何方法来控制除VTK交互器窗口之外的VTK创建的控件之外的VTK演员。
编辑:在尝试解决这个问题时,我也遇到了一个奇怪的问题。当我使用system(['pythonw ' folder '\vizualize.pyw" &']);
运行VTK可视化(并添加main()
以便脚本自行执行)时,一切都运行顺畅,但是当我使用py.vizualize.main()
并尝试关闭vizualization窗口时,它没有关闭,但它确实将控制返回到matlab命令行。在第二次尝试时,它会杀死matlab窗口,然后在一段时间后杀死它。脚本完全相同。
编辑2:renderWin.Finalize()
在renderInteractor.Start()
因某种原因修复此问题后立即添加{{1}}。
感谢您的任何答案或想法!
答案 0 :(得分:0)
我有点工作了。这是我做的:
运行GUI的matlab会话通过matlab.engine.shareEngine('shared_matlab_session')
转换为共享会话,并跟踪matlab_slider_pos
变量中的matlab GUI滑块位置
在初始化VTK对象之前,python脚本通过MatEng=matlab.engine.connect_matlab('shared_matlab_session')
连接到会话
VTK渲染窗口为TimerEvent添加一个观察者,每0.1秒触发SliderSync
python回调函数
SliderSync
函数检查当前VTK滑块值是否与调用MatEng.eval('matlab_slider_pos')
的结果相对应,如果不匹配,则更新VTK滑块值以及VTK管道的其余部分。当然,此时不再需要VTK滑块,该功能可以直接更新需要更新的内容。
我真的希望有更优雅的方式在matlab中查看3D体积而不是我创造的憎恶(虽然它的工作非常流畅)。评论仍然欢迎!