• 科学计算三维可视化笔记(第六周 界面实战)



    内容来自中国大学MOOC,北京理工大学,python数据分析与展示课程,侵删。
    如有错误,烦请指出。


    科学计算三维可视化笔记 第六周 界面实战

    一、实例1:建立简单的 Mayavi 窗口

    1. 步骤

    (1) 建立从 HasTraits 继承的类

    • 建立 MlabSceneModel 场景实例 scene
    • 建立 Mayavi 视图 view
    • 初始化函数,生成数据

    (2) 显示窗口

    2. 代码

    '''实例1:建立简单的Mayavi窗口'''
    from numpy import sqrt, sin, mgrid
    from traits.api import HasTraits, Instance
    from traitsui.api import View, Item
    from tvtk.pyface.scene_editor import SceneEditor
    from mayavi.tools.mlab_scene_model import MlabSceneModel
    from mayavi.core.ui.mayavi_scene import MayaviScene
    
    # 建立HasTraits的继承类
    class ActorViewer(HasTraits):
        # 建立场景scene
        scene = Instance(MlabSceneModel, ())
        # 建立视图view
        view = View(Item(name='scene',
                        editor=SceneEditor(scene_class=MayaviScene),
                        show_label=False,
                        resizable=True,
                        height=500,
                        width=500),
                    resizable=True)
        
        # 初始化函数
        def __init__(self, **traits):
            HasTraits.__init__(self, **traits)
            self.generate_data()
    
        # 生成数据
        def generate_data(self):
            # 建立数据
            X, Y = mgrid[-2:2:100j, -2:2:100j]
            R = 10 * sqrt(X**2+Y**2)
            Z = sin(R)/R
            # 可视化数据
            self.scene.mlab.surf(X, Y, Z, colormap='cool')
    
    # 显示窗口
    a = ActorViewer()
    a.configure_traits()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    3. 结果

    1 - 1 - 实例    1 - 2 - 实例

    二、实例2:基于交互控制的 Mayavi 窗口

    1. 步骤

    (1) 建立从 HasTraits 继承的类

    • 定义窗口中的变量 n_meridional 和 n_longitudinal
    • 建立场景 scene
    • 建立管线 plot
    • 建立监听函数 update_plot:生成数据并可视化数据
    • 建立视图 view

    (2) 显示窗口

    2. 代码

    '''实例2:基于交互控制的 Mayavi 窗口'''
    from traits.api import HasTraits, Range, Instance, on_trait_change
    from traitsui.api import View, Item, Group
    from mayavi.core.api import PipelineBase
    from mayavi.core.ui.api import MayaviScene, SceneEditor, MlabSceneModel
    
    from numpy import arange, pi, cos, sin
    
    dphi = pi/300.
    phi = arange(0.0, 2*pi + 0.5*dphi, dphi, 'd')
    # 建立数据
    def curve(n_mer, n_long):
        mu = phi*n_mer
        x = cos(mu) * (1+cos(n_long*mu/n_mer)*0.5)
        y = sin(mu) * (1+cos(n_long*mu/n_mer)*0.5)
        z = 0.5 * sin(n_long*mu/n_mer)
        t = sin(mu)
        return x, y, z, t
    
    # 建立HasTraits的继承类
    class MyModel(HasTraits):
        # 定义窗口中的变量n_meridional和n_longitudinal
        n_meridional    = Range(0, 30, 6)   # 滑动条控件
        n_longitudinal  = Range(0, 30, 11)  # 华东条控件
        # 建立场景scene
        scene = Instance(MlabSceneModel, ())
        # 建立管线plot
        plot = Instance(PipelineBase)
        
        # 建立监听函数update_plot
        @on_trait_change('n_meridional,n_longitudinal,scene.activated')
        def update_plot(self):
            # 调用curve()生成数据
            x, y, z, t = curve(self.n_meridional, self.n_longitudinal)
            #如果plot未绘制则生成plot3d
            if self.plot is None:
                self.plot = self.scene.mlab.plot3d(x, y, z, t,
                            tube_radius=0.025, colormap='Spectral')
            #如果数据有变化,将数据更新即重新赋值
            else:
                self.plot.mlab_source.set(x=x, y=y, z=z, scalars=t)
    
        # 建立视图view
        view = View(Item('scene', editor=SceneEditor(scene_class=MayaviScene),
                         height=250, width=300, show_label=False),
                    Group('_', 'n_meridional', 'n_longitudinal'),
                    resizable=True)
    
    # 显示窗口
    model = MyModel()
    model.configure_traits()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    3. 结果

    2 - 1 - 结果2  2 - 2 - 结果2

  • 相关阅读:
    Android Studio 下载地址
    Ubuntu Server版 之 共享文件 samba和NFS 两种方法
    JAVA设计模式-命令模式
    IDEA DeBug 调试工具详解
    APP性能测试指标
    Windows系统的——终端命令行进入文件夹、打开程序或文件、返回路径、切换磁盘、查看路径包含的所有内容和配置环境变量操作
    08/06/2022的周末
    Element UI打开表单自动验证问题的解决
    DRM全解析 —— CRTC详解(3)
    2022年web前端开发值得学习的10个javascript框架
  • 原文地址:https://blog.csdn.net/Albert_Bolt/article/details/125616237