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