Esempio n. 1
0
 def _glyph_dict_default(self):
     g = {
         'glyph_source2d':
         tvtk.GlyphSource2D(glyph_type='arrow', filled=False),
         'arrow_source':
         tvtk.ArrowSource(),
         'cone_source':
         tvtk.ConeSource(height=1.0, radius=0.2, resolution=15),
         'cylinder_source':
         tvtk.CylinderSource(height=1.0, radius=0.15, resolution=10),
         'sphere_source':
         tvtk.SphereSource(),
         'cube_source':
         tvtk.CubeSource(),
         'axes':
         tvtk.Axes(symmetric=1)
     }
     return g
Esempio n. 2
0
 def __source_dict_default(self):
     """Default value for source dict."""
     sd = {
         'arrow': tvtk.ArrowSource(),
         'cone': tvtk.ConeSource(),
         'cube': tvtk.CubeSource(),
         'cylinder': tvtk.CylinderSource(),
         'disk': tvtk.DiskSource(),
         'earth': tvtk.EarthSource(),
         'line': tvtk.LineSource(),
         'outline': tvtk.OutlineSource(),
         'plane': tvtk.PlaneSource(),
         'point': tvtk.PointSource(),
         'polygon': tvtk.RegularPolygonSource(),
         'sphere': tvtk.SphereSource(),
         'superquadric': tvtk.SuperquadricSource(),
         'textured sphere': tvtk.TexturedSphereSource(),
         'glyph2d': tvtk.GlyphSource2D()
     }
     return sd
Esempio n. 3
0
    def __init__(self):
        self.el = 0.0
        self.az = 0.0

        # Create an arrow.
        arrow = tvtk.ArrowSource()

        # Transform it suitably so it is oriented correctly.
        t = tvtk.Transform()
        tf = tvtk.TransformFilter()
        tf.transform = t
        t.rotate_y(90.0)
        t.translate((-2, 0, 0))
        tf.input = arrow.output

        mapper = tvtk.PolyDataMapper()
        mapper.input = tf.output

        self.actor = actor = tvtk.Follower()
        actor.mapper = mapper
        prop = actor.property
        prop.color = 0, 1, 1
        prop.ambient = 0.5
        prop.diffuse = 0.5
Esempio n. 4
0
    def vtk_actors(self):
        if (self.actors is None):
            self.actors = []
            points = _getfem_to_tvtk_points(self.sl.pts())
            (triangles, cv2tr) = self.sl.splxs(2)
            triangles = numpy.array(triangles.transpose(), 'I')
            data = tvtk.PolyData(points=points, polys=triangles)
            if self.scalar_data is not None:
                data.point_data.scalars = numpy.array(self.scalar_data)
            if self.vector_data is not None:
                data.point_data.vectors = numpy.array(self.vector_data)
            if self.glyph_name is not None:
                mask = tvtk.MaskPoints()
                mask.maximum_number_of_points = self.glyph_nb_pts
                mask.random_mode = True
                mask.input = data

                if self.glyph_name == 'default':
                    if self.vector_data is not None:
                        self.glyph_name = 'arrow'
                    else:
                        self.glyph_name = 'ball'

                glyph = tvtk.Glyph3D()
                glyph.scale_mode = 'scale_by_vector'
                glyph.color_mode = 'color_by_scalar'
                #glyph.scale_mode = 'data_scaling_off'
                glyph.vector_mode = 'use_vector'  # or 'use_normal'
                glyph.input = mask.output
                if self.glyph_name == 'arrow':
                    glyph.source = tvtk.ArrowSource().output
                elif self.glyph_name == 'ball':
                    glyph.source = tvtk.SphereSource().output
                elif self.glyph_name == 'cone':
                    glyph.source = tvtk.ConeSource().output
                elif self.glyph_name == 'cylinder':
                    glyph.source = tvtk.CylinderSource().output
                elif self.glyph_name == 'cube':
                    glyph.source = tvtk.CubeSource().output
                else:
                    raise Exception("Unknown glyph name..")
                #glyph.scaling = 1
                #glyph.scale_factor = self.glyph_scale_factor
                data = glyph.output

            if self.show_faces:
                ##                if self.deform is not None:
                ##                    data.point_data.vectors = array(numarray.transpose(self.deform))
                ##                    warper = tvtk.WarpVector(input=data)
                ##                    data = warper.output
                ##                lut = tvtk.LookupTable()
                ##                lut.hue_range = 0.667,0
                ##                c=gf_colormap('tripod')
                ##                lut.number_of_table_values=c.shape[0]
                ##                for i in range(0,c.shape[0]):
                ##                    lut.set_table_value(i,c[i,0],c[i,1],c[i,2],1)

                self.mapper = tvtk.PolyDataMapper(input=data)
                self.mapper.scalar_range = self.scalar_data_range
                self.mapper.scalar_visibility = True
                # Create mesh actor for display
                self.actors += [tvtk.Actor(mapper=self.mapper)]
            if self.show_edges:
                (Pe, E1, E2) = self.sl.edges()
                if Pe.size:
                    E = numpy.array(
                        numpy.concatenate((E1.transpose(), E2.transpose()),
                                          axis=0), 'I')
                    edges = tvtk.PolyData(points=_getfem_to_tvtk_points(Pe),
                                          polys=E)
                    mapper_edges = tvtk.PolyDataMapper(input=edges)
                    actor_edges = tvtk.Actor(mapper=mapper_edges)
                    actor_edges.property.representation = 'wireframe'
                    #actor_edges.property.configure_traits()
                    actor_edges.property.color = self.edges_color
                    actor_edges.property.line_width = self.edges_width
                    actor_edges.property.ambient = 0.5
                    self.actors += [actor_edges]
            if self.sl.nbsplxs(1):
                # plot tubes
                (seg, cv2seg) = self.sl.splxs(1)
                seg = numpy.array(seg.transpose(), 'I')
                data = tvtk.Axes(origin=(0, 0, 0),
                                 scale_factor=0.5,
                                 symmetric=1)
                data = tvtk.PolyData(points=points, lines=seg)
                tube = tvtk.TubeFilter(radius=0.4,
                                       number_of_sides=10,
                                       vary_radius='vary_radius_off',
                                       input=data)
                mapper = tvtk.PolyDataMapper(input=tube.output)
                actor_tubes = tvtk.Actor(mapper=mapper)
                #actor_tubes.property.representation = 'wireframe'
                actor_tubes.property.color = self.tube_color
                #actor_tubes.property.line_width = 8
                #actor_tubes.property.ambient = 0.5

                self.actors += [actor_tubes]

            if self.use_scalar_bar:
                self.scalar_bar = tvtk.ScalarBarActor(
                    title=self.scalar_data_name,
                    orientation='horizontal',
                    width=0.8,
                    height=0.07)
                self.scalar_bar.position_coordinate.coordinate_system = 'normalized_viewport'
                self.scalar_bar.position_coordinate.value = 0.1, 0.01, 0.0
                self.actors += [self.scalar_bar]

            if (self.lookup_table is not None):
                self.set_colormap(self.lookup_table)

        return self.actors
Esempio n. 5
0
 def _setup_scene(self):
     # scalar bar for strain
     lut_strain = tvtk.LookupTable(hue_range=(0.66, 0.0))
     lut_strain.build()
     self._scalar_bar_strain = tvtk.ScalarBarActor(
         lookup_table=lut_strain,
         orientation='horizontal',
         text_position='succeed_scalar_bar',
         maximum_number_of_colors=256,
         number_of_labels=9,
         position=(0.1, 0.01),
         position2=(0.8, 0.08),
         title='element strain (%)',
         visibility=False)
     self.scene.add_actor(self._scalar_bar_strain)
     # scalar bar for stress
     # lookup table from green to yellow, and last 2 values dark red
     lut_stress = tvtk.LookupTable(hue_range=(0.33, 0.1),
                                   number_of_table_values=256)
     lut_stress.build()
     lut_stress.set_table_value(254, (1.0, 0.4, 0.0, 1.0))
     lut_stress.set_table_value(255, (1.0, 0.0, 0.0, 1.0))
     self._scalar_bar_stress = tvtk.ScalarBarActor(
         lookup_table=lut_stress,
         orientation='horizontal',
         text_position='succeed_scalar_bar',
         maximum_number_of_colors=256,
         number_of_labels=9,
         position=(0.1, 0.01),
         position2=(0.8, 0.08),
         title='element stress',
         visibility=False)
     self.scene.add_actor(self._scalar_bar_stress)
     # setup elements visualization
     self._elements_polydata = tvtk.PolyData()
     self._tubes = tvtk.TubeFilter(
         input=self._elements_polydata,
         number_of_sides=6,
         vary_radius='vary_radius_by_absolute_scalar',
         radius_factor=1.5)
     mapper = tvtk.PolyDataMapper(input=self._tubes.output,
                                  lookup_table=lut_strain,
                                  interpolate_scalars_before_mapping=True,
                                  scalar_mode='use_cell_data')
     self._elements_actor = tvtk.Actor(mapper=mapper)
     self.scene.add_actor(self._elements_actor)
     # show elements in deformed state as wireframe
     self._deformed_elements_polydata = tvtk.PolyData()
     self._deformed_elements_actor = tvtk.Actor(mapper=tvtk.PolyDataMapper(
         input=self._deformed_elements_polydata))
     self._deformed_elements_actor.property.set(opacity=0.2,
                                                representation='wireframe')
     self.scene.add_actor(self._deformed_elements_actor)
     # highlight one element via a ribbon outline
     self._hl_element_ribbons = tvtk.RibbonFilter(input=tvtk.PolyData(),
                                                  use_default_normal=True,
                                                  width=1.0)
     self._hl_element_actor = tvtk.Actor(
         mapper=tvtk.PolyDataMapper(input=self._hl_element_ribbons.output),
         visibility=False)
     self._hl_element_actor.property.set(ambient=1,
                                         ambient_color=(1, 1, 1),
                                         diffuse=0)
     self.scene.add_actor(self._hl_element_actor)
     # cross sectional radius labels
     self._elements_label_polydata = tvtk.PolyData()
     self._label_cellcenters = tvtk.CellCenters(
         input=self._elements_label_polydata)
     self._label_visps = tvtk.SelectVisiblePoints(
         renderer=self.scene.renderer,
         input=self._label_cellcenters.output,
         tolerance=10000)
     self._label_actor = tvtk.Actor2D(mapper=tvtk.Dynamic2DLabelMapper(
         input=self._label_visps.output, label_mode='label_scalars'))
     self._label_actor.mapper.label_text_property.set(
         bold=True, italic=False, justification='centered', font_size=14)
     #self.scene.add_actor(self._label_actor)
     # force glyphs (use arrows for that)
     self._force_glyphs = tvtk.Glyph3D(scale_mode='scale_by_vector',
                                       vector_mode='use_vector',
                                       color_mode='color_by_vector',
                                       scale_factor=1.)
     self._force_glyphs.set_source(
         0,
         tvtk.ArrowSource(shaft_radius=0.04,
                          tip_resolution=8,
                          tip_radius=0.2).output)
     self._force_polydata = tvtk.PolyData()
     self._force_glyphs.set_input(0, self._force_polydata)
     self._force_actor = tvtk.Actor(mapper=tvtk.PolyDataMapper(
         input=self._force_glyphs.output, scalar_range=(0, 10)))
     self._force_actor.mapper.lookup_table.hue_range = (0.33, 0.0)
     self.scene.add_actor(self._force_actor)
     # current status display
     self._text_actor = tvtk.TextActor(position=(0.5, 0.95))
     self._text_actor.position_coordinate.coordinate_system = 'normalized_display'
     self._text_actor.text_property.set(font_size=14,
                                        justification='center')
     self.scene.add_actor(self._text_actor)
     # a nice gradient background
     self.scene.renderer.set(background2=(0.28, 0.28, 0.28),
                             background=(0.01, 0.01, 0.02),
                             gradient_background=True)
     # setup events
     self.interaction_mode = 'select'
     self.scene.interactor.add_observer('MouseMoveEvent', self._mouse_move)
     self.scene.interactor.add_observer('LeftButtonPressEvent',
                                        self._mouse_press)
     self.scene.renderer.add_observer('StartEvent', self._before_render)
     self._on_init = True
     self._reset_zoom_needed = True
Esempio n. 6
0
 def __init__(self, *args, **kwargs):
     Primitive.__init__(self, **kwargs)
     self.source = tvtk.ArrowSource()
     self.mapper = tvtk.PolyDataMapper(input=self.source.output)
     self.actor = tvtk.Actor(mapper=self.mapper)
     self.handle_arguments(*args, **kwargs)
Esempio n. 7
0
# -*- coding: utf-8 -*-
import numpy as np
from enthought.tvtk.api import tvtk
from utility import show_actors
from tvtk_cut_plane import read_data


# 读入数据
plot3d = read_data()

# 矢量箭头
mask = tvtk.MaskPoints(input = plot3d.output, random_mode=True, on_ratio=50) 
arrow_source = tvtk.ArrowSource() 
arrows = tvtk.Glyph3D(input = mask.output, source=arrow_source.output, 
    scale_factor=2/np.max(plot3d.output.point_data.scalars.to_array())) 
arrows_mapper = tvtk.PolyDataMapper(input = arrows.output, 
    scalar_range = plot3d.output.point_data.scalars.range)
arrows_actor = tvtk.Actor(mapper = arrows_mapper)


# 作为流线起点的球
center = plot3d.output.center
sphere = tvtk.SphereSource(  
    center=(2, center[1], center[2]), radius=2, 
    phi_resolution=6, theta_resolution=6)
sphere_mapper = tvtk.PolyDataMapper(input = sphere.output)
sphere_actor = tvtk.Actor(mapper = sphere_mapper)
sphere_actor.property.set(
    representation = "wireframe", color=(0,0,0))

# 流线