def marching_cubes(volume, smooth=True, decimate=True, **kwargs): from tvtk.api import tvtk from tvtk.common import configure_input imgdata = tvtk.ImageData(dimensions=volume.shape) imgdata.point_data.scalars = volume.flatten('F') contours = tvtk.ContourFilter(number_of_contours=1) contours.set_value(0, 1) configure_input(contours, imgdata) if smooth: smoothargs = dict(number_of_iterations=40, feature_angle=90, pass_band=.05) smoothargs.update(kwargs) contours = tvtk.WindowedSincPolyDataFilter(input=contours.output, **smoothargs) if decimate: contours = tvtk.QuadricDecimation(input=contours.output, target_reduction=.75) contours.update() pts = contours.output.points.to_array() polys = contours.output.polys.to_array().reshape(-1, 4)[:, 1:] return pts, polys
def test_to_vtk_returns_vtk_object(self): # Given x = tvtk.ContourFilter() # When v = tvtk.to_vtk(x) # Then self.assertEqual(v.GetClassName(), 'vtkContourFilter') self.assertTrue(v is x._vtk_obj)
def test3(self): plot3d = tvtk.MultiBlockPLOT3DReader(xyz_file_name="combxyz.bin", q_file_name="combq,bin", scalar_function_number=100, vector_function_number=200) plot3d.update() grid = plot3d.output.get_block(0) con = tvtk.ContourFilter() con.set_input_data(grid) con.generate_values(10, grid.point_data.scalars.range) 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 win = self.ivtk_scene(a) win.scene.isometric_view() self.event_loop()
# plot3d = read_data() # grid = plot3d.output.get_block(0) # PLOT3D标量数据可视化 from tvtk.api import tvtk from tvtkfunc import ivtk_scene, event_loop plot3d = tvtk.MultiBlockPLOT3DReader( xyz_file_name="data/combxyz.bin", q_file_name="data/combq.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) # 指定轮廓数和标量数据范围 # 设定映射器的变量范围属性 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 # 窗口绘制tvtkfunc功能 win = ivtk_scene(a) event_loop() # # POLT3D矢量数据可视化
# -*- coding: utf-8 -*- from .example_cut_plane import read_data from tvtk.api import tvtk from scpy2.tvtk.tvtkhelp import ivtk_scene, event_loop, make_outline plot3d = read_data() grid = plot3d.output.get_block(0) contours = tvtk.ContourFilter() contours.set_input_data(grid) contours.generate_values(8, grid.point_data.scalars.range) mapper = tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range, input_connection=contours.output_port) actor = tvtk.Actor(mapper=mapper) actor.property.opacity = 0.3 outline_actor = make_outline(grid) win = ivtk_scene([actor, outline_actor]) win.scene.isometric_view() event_loop()
from tvtk.api import tvtk from CStvtkfunc import ivtk_scene, event_loop plot3d = tvtk.MultiBlockPLOT3DReader(xyz_file_name="Element\combxyz.bin", q_file_name="Element\combq.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) # 指定轮廓数和数据范围 # 设定映射器的变量范围属性 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()