Python/tvtk

前言

就中国慕课mooc/科学计算三维可视化课中对遇到的题目进行记录,是鄙人自己所使用的代码。记录本人的学习日志,若有纰漏之处,希望各位看官加以斧正。

4.28题目:

1.请用tvtk绘制一个圆锥,圆锥的数据源对象为ConeSource(),圆锥高度为6.0,圆锥半径为2.0。

给出代码:

from tvtk.api import tvtk
#最先开始使用tvtk.ConeSource()创建一个圆锥数据
#再利用tvtk.PolyDataMapper()将圆锥数据转化为图形数据
#然后用tvtk.Actor()生成实体
cs = tvtk.ConeSource(height=6.0,radius=2.0,resolution=64)
m=tvtk.PolyDataMapper(input_connection=cs.output_port)
a=tvtk.Actor(mapper=m)
#用tvtk.Renderer()生成渲染器,background后缀跟背景颜色显示数值
#创建windous绘制窗口,并且添加经Renderer处理信息
ren=tvtk.Renderer(background=(1,1,1))
ren.add_actor(a)
rw=tvtk.RenderWindow(size=(300,300))
rw.add_renderer(ren)
#为w创建窗口交互工具RenderWindowInteractor
rwi=tvtk.RenderWindowInteractor(render_window=rw)
rwi.initialize()
rwi.start()

2.请自行从网络上下载一个.stl模型文件,使用tvtk读取该文件并显示出来。

给出代码:

def ivtk_scene(actors):
    from tvtk.tools import ivtk
    #创建一个带Crust(Python Shell)的窗口
    win = ivtk.IVTKWithCrustAndBrowser()
    win.open()
    win.scene.add_actor(actors)
    #修正窗口错误
    dialog = win.control.centralWidget().widget(0).widget(0)
    from pyface.qt import QtCore
    dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000))
    dialog.show()
    return win

def event_loop():
    #开启页面更新循环
    from pyface.api import GUI
    gui = GUI()
    gui.start_event_loop()

from tvtk.api import tvtk

s = tvtk.STLReader(file_name = "文件路径.stl")
m = tvtk.PolyDataMapper(input_connection = s.output_port)
a = tvtk.Actor(mapper = m)
 
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

3.改写课程中标量等值面绘制的实例,通过get_value()和set_value()设定第1个等值面的值为原来的2倍。

给出代码:

from tvtk.api import tvtk

def ivtk_scene(actors):
    from tvtk.tools import ivtk
    #创建一个带Crust(Python Shell)的窗口
    win = ivtk.IVTKWithCrustAndBrowser()
    win.open()
    win.scene.add_actor(actors)
    #修正窗口错误
    dialog = win.control.centralWidget().widget(0).widget(0)
    from pyface.qt import QtCore
    dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000))
    dialog.show()
    return win

def event_loop():
    from pyface.api import GUI
    gui = GUI()
    gui.start_event_loop()
    #开始页面循环,即维持页面更新

plot3d = tvtk.MultiBlockPLOT3DReader(
        xyz_file_name="文件1路径.bin",
        q_file_name="文件2路径.bin",
        scalar_function_number=100, vector_function_number=200
    )#读入Plot3D数据
plot3d.update()#让plot3D计算其输出数据
grid = plot3d.output.get_block(0)#获取读入的数据集对象
 
con = tvtk.ContourFilter()#创建等值面对象  
con.set_input_data(grid)
con.generate_values(10, grid.point_data.scalars.range)#指定轮廓数和数据范围,10为总共10个等势面,即为等势面赋值
#这步操作就是针对题目的要求,用set_value(int-等势面序号),float-等势面代替数值);用get_value(int-等势面序号)获取等势面数值
con.set_value(0,2*con.get_value(0))
#设定映射器的变量范围属性
m = tvtk.PolyDataMapper(scalar_range = grid.point_data.scalars.range,
                        input_connection=con.output_port)
a = tvtk.Actor(mapper = m)
a.property.opacity = 0.5#设定透明度为0.5
#窗口绘制
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值