예제 #1
0
    def __init__(self):
        app.Canvas.__init__(self, keys='interactive')

        n = 10000
        pos = 0.25 * np.random.randn(n, 2).astype(np.float32)
        color = np.random.uniform(0, 1, (n, 3)).astype(np.float32)
        size = np.random.uniform(2, 12, (n, 1)).astype(np.float32)

        self.points = MarkerVisual(pos=pos, color=color, size=size)
        
        self.panzoom = STTransform(scale=(1, 0.2), translate=(0, 500))
        w2 = (self.size[0]/2, self.size[1]/2)
        self.transform = ChainTransform([self.panzoom,
                                         STTransform(scale=w2, translate=w2),
                                         LogTransform(base=(0, 2, 0))])

        self.tr_sys = TransformSystem(self)
        self.tr_sys.visual_to_document = self.transform
예제 #2
0
    def __init__(self):
        app.Canvas.__init__(self, keys='interactive', size=(800, 800))
        # Create several visuals demonstrating different features of Line
        self.lines = [
            # agg-method lines:
            # per-vertex color
            visuals.LineVisual(pos=pos, color=color, method='agg'),
            # solid
            visuals.LineVisual(pos=pos, color=(0, 0.5, 0.3, 1), method='agg'),
            # wide
            visuals.LineVisual(pos=pos, color=color, width=5, method='agg'),

            # GL-method lines:
            visuals.LineVisual(pos=pos, color=color, method='gl'),
            visuals.LineVisual(pos=pos, color=(0, 0.5, 0.3, 1), method='gl'),
            visuals.LineVisual(pos=pos, color=color, width=5, method='gl'),
            # GL-method: "connect" not available in AGG method yet

            # only connect alternate vert pairs
            visuals.LineVisual(pos=pos,
                               color=(0, 0.5, 0.3, 1),
                               connect='segments',
                               method='gl'),
            # connect specific pairs
            visuals.LineVisual(pos=pos,
                               color=(0, 0.5, 0.3, 1),
                               connect=connect,
                               method='gl'),
        ]
        counts = [0, 0]
        for i, line in enumerate(self.lines):
            # arrange lines in a grid
            tidx = (line.method == 'agg')
            x = 400 * tidx
            y = 140 * (counts[tidx] + 1)
            counts[tidx] += 1
            line.transform = STTransform(translate=[x, y])
            # redraw the canvas if any visuals request an update
            line.events.update.connect(lambda evt: self.update())

        self.texts = [
            visuals.TextVisual('GL',
                               bold=True,
                               font_size=24,
                               color='w',
                               pos=(200, 40)),
            visuals.TextVisual('Agg',
                               bold=True,
                               font_size=24,
                               color='w',
                               pos=(600, 40))
        ]
        for text in self.texts:
            text.transform = NullTransform()
        self.visuals = self.lines + self.texts
        self.show()
예제 #3
0
    def _master_transform(self):
        """vispy.visuals.transforms.STTransform:
        Central node's firstmost transform.
        """
        # whenever a new parent is set, the transform is reset
        # to a NullTransform so we reset it here
        if not isinstance(self.node.transform, STTransform):
            self.node.transform = STTransform()

        return self.node.transform
예제 #4
0
def put_observer(view, coords, radius, color='black', edge_color='blue'):
    """ Put the observer on the scene
        radius and coords in Mpc
    """
    observer = visuals.Sphere(radius=radius,
                              method='latitude',
                              parent=view.scene,
                              color=color,
                              edge_color=edge_color)
    observer.transform = STTransform(translate=coords)
예제 #5
0
def test_histogram():
    """Test histogram visual"""
    size = (200, 100)
    with TestingCanvas(size=size, bgcolor='w') as c:
        np.random.seed(2397)
        data = np.random.normal(size=100)
        hist = Histogram(data, bins=20, color='k', parent=c.scene)
        hist.transform = STTransform((size[0] // 10, -size[1] // 20, 1),
                                     (100, size[1]))
        assert_image_approved(c.render(), "visuals/histogram.png")
예제 #6
0
    def __init__(self):
        self.image = visuals.ImageVisual(image, method='subdivide')
        self.image_transform = STTransform(scale=(7, 7), translate=(50, 50))
        vispy.app.Canvas.__init__(self, keys='interactive')
        self.size = (800, 800)
        self.show()

        # Create a TransformSystem that will tell the visual how to draw
        self.tr_sys = TransformSystem(self)
        self.tr_sys.visual_to_document = self.image_transform
예제 #7
0
    def __init__(self):
        app.Canvas.__init__(self, keys='interactive', size=(512, 512),
                            title="Marker demo [press space to change marker]")
        self.index = 0
        self.markers = visuals.MarkersVisual()
        self.markers.set_data(pos, face_color=colors)
        self.markers.symbol = visuals.marker_types[self.index]
        self.markers.transform = STTransform()

        self.show()
예제 #8
0
    def __init__(self):
        vispy.app.Canvas.__init__(self, keys='interactive', size=(800, 800))
        self.image = visuals.ImageVisual(get_image(), method='subdivide')

        # scale and center image in canvas
        s = 700. / max(self.image.size)
        t = 0.5 * (700. - (self.image.size[0] * s)) + 50
        self.image.transform = STTransform(scale=(s, s), translate=(t, 50))

        self.show()
예제 #9
0
def test_canvas_render(blend_func):
    """Test rendering a canvas to an array.

    Different blending functions are used to test what various Visuals may
    produce without actually using different types of Visuals.

    """
    with TestingCanvas(size=(125, 125), show=True, title='run') as c:
        view = c.central_widget.add_view()

        im1 = np.zeros((100, 100, 4)).astype(np.float32)
        im1[:, :, 0] = 1
        im1[:, :, 3] = 1

        im2 = np.zeros((50, 50, 4)).astype(np.float32)
        im2[:, :, 1] = 1
        im2[:, :, 3] = 0.4

        # Create the image
        image1 = scene.visuals.Image(im1, parent=view.scene)
        image1.transform = STTransform(translate=(20, 20, 0))
        image2 = scene.visuals.Image(im2, parent=view.scene)
        image2.transform = STTransform(translate=(0, 0, -1))
        if blend_func:
            image1.set_gl_state(preset='translucent', blend_func=blend_func)
            image2.set_gl_state(preset='translucent', blend_func=blend_func)

        rgba_result = c.render()
        rgb_result = c.render(alpha=False)

        # the results should be the same except for alpha
        np.testing.assert_allclose(rgba_result[..., :3], rgb_result)
        # the image should have something drawn in it
        assert not np.allclose(rgba_result[..., :3], 0)
        # the alpha should not be completely transparent
        assert not np.allclose(rgba_result[..., 3], 0)
        if blend_func is None or 'one' in blend_func:
            # no transparency
            np.testing.assert_allclose(rgba_result[..., 3], 255)
        else:
            # the alpha should have some transparency
            assert (rgba_result[..., 3] != 255).any()
예제 #10
0
def test_histogram():
    """Test histogram visual"""
    size = (200, 100)
    with TestingCanvas(size=size, bgcolor='w') as c:
        np.random.seed(2397)
        data = np.random.normal(size=100)
        hist = Histogram(data, bins=20, color='k')
        hist.transform = STTransform((size[0] // 10, -size[1] // 20, 1),
                                     (100, size[1]))
        c.draw_visual(hist)
        assert_image_approved("screenshot", "visuals/histogram.png")
예제 #11
0
    def __init__(self):
        app.Canvas.__init__(self, keys='interactive', size=(512, 512),
                            title="Marker demo [press space to change marker]")
        self.index = 0
        self.scale = 1.
        self.tr_sys = TransformSystem(self)
        self.tr_sys.visual_to_document = STTransform()
        self.markers = visuals.MarkersVisual()
        self.markers.set_data(pos, face_color=colors)
        self.markers.set_symbol(visuals.marker_types[self.index])

        self.show()
예제 #12
0
    def attach(self, viewer, view, canvas, parent=None, order=0):
        super().attach(viewer, view, canvas, parent, order)

        self.node = Markers(pos=self._markers_data, parent=parent)
        self.node.transform = STTransform()
        self.node.order = order

        self._nodes = [self.node]

        self._viewer.dims.events.ndisplay.connect(self._on_data_change)

        self._on_data_change(None)
예제 #13
0
def test_histogram():
    """Test histogram visual"""
    size = (200, 100)
    with TestingCanvas(size=size, bgcolor='w') as c:
        data = np.array([0., 0., 1.])
        hist = Histogram(data, bins=2, color='k')
        # the result should be 2 high by 1 wide, so we scale it up
        hist.transform = STTransform((size[0], -size[1] // 2, 1), (0, size[1]))
        c.draw_visual(hist)
        expected = np.zeros(size[::-1] + (3, ))
        expected[:size[1] // 2, -size[0] // 2:] = 1.
        assert_image_equal("screenshot", expected)
예제 #14
0
    def reset(self, sem_color_dict=None):
        """ Reset. """
        # new canvas prepared for visualizing data
        self.map_color(sem_color_dict=sem_color_dict)
        self.canvas = SceneCanvas(keys='interactive', show=True)
        # grid
        self.grid = self.canvas.central_widget.add_grid()

        # laserscan part
        self.scan_view = vispy.scene.widgets.ViewBox(border_color='white',
                                                     parent=self.canvas.scene)
        self.grid.add_widget(self.scan_view, 0, 0)
        self.scan_view.camera = 'turntable'

        self.scan_vis = visuals.Markers()
        self.scan_view.add(self.scan_vis)

        if self.viz_joint:
            self.joint_vis = visuals.Arrow(connect='segments',
                                           arrow_size=18,
                                           color='blue',
                                           width=10,
                                           arrow_type='angle_60')
            self.arrow_length = 10
            self.scan_view.add(self.joint_vis)
        if self.viz_box:
            vertices, faces, outline = create_box(width=1,
                                                  height=1,
                                                  depth=1,
                                                  width_segments=1,
                                                  height_segments=1,
                                                  depth_segments=1)
            vertices['color'][:, 3] = 0.2
            # breakpoint()
            self.box = visuals.Box(vertex_colors=vertices['color'],
                                   edge_color='b')
            self.box.transform = STTransform(translate=[-2.5, 0, 0])
            self.theta = 0
            self.phi = 0
            self.scan_view.add(self.box)
        visuals.XYZAxis(parent=self.scan_view.scene)

        # add nocs
        if self.viz_label:
            print("Using nocs in visualizer")
            self.nocs_view = vispy.scene.widgets.ViewBox(
                border_color='white', parent=self.canvas.scene)
            self.grid.add_widget(self.nocs_view, 0, 1)
            self.label_vis = visuals.Markers()
            self.nocs_view.camera = 'turntable'
            self.nocs_view.add(self.label_vis)
            visuals.XYZAxis(parent=self.nocs_view.scene)
            self.nocs_view.camera.link(self.scan_view.camera)
예제 #15
0
    def __init__(self, scale_bar, camera, parent=None, order=0):
        self._scale_bar = scale_bar
        self._camera = camera

        self._data = np.array([
            [0, 0, -1],
            [1, 0, -1],
            [0, -5, -1],
            [0, 5, -1],
            [1, -5, -1],
            [1, 5, -1],
        ])
        self._default_color = np.array([1, 0, 1, 1])
        self._target_length = 100
        self._scale = 1

        self.node = Line(connect='segments',
                         method='gl',
                         parent=parent,
                         width=3)
        self.node.order = order
        self.node.transform = STTransform()

        self.text_node = Text(pos=[0, 0], parent=parent)
        self.text_node.order = order
        self.text_node.transform = STTransform()
        self.text_node.font_size = 10
        self.text_node.anchors = ('center', 'center')
        self.text_node.text = f'{1}'

        self._scale_bar.events.visible.connect(self._on_visible_change)
        self._scale_bar.events.colored.connect(self._on_data_change)
        self._scale_bar.events.background_color.connect(self._on_data_change)
        self._scale_bar.events.ticks.connect(self._on_data_change)
        self._scale_bar.events.position.connect(self._on_position_change)
        self._camera.events.zoom.connect(self._on_zoom_change)

        self._on_visible_change(None)
        self._on_data_change(None)
        self._on_position_change(None)
예제 #16
0
    def __init__(self):
        app.Canvas.__init__(self, keys='interactive')
        ps = self.pixel_scale

        n = 10000
        pos = 0.25 * np.random.randn(n, 2).astype(np.float32)
        color = np.random.uniform(0, 1, (n, 3)).astype(np.float32)
        size = np.random.uniform(2*ps, 12*ps, (n, 1)).astype(np.float32)

        self.points = MarkerVisual(pos=pos, color=color, size=size)

        self.panzoom = STTransform(scale=(1, 0.2), translate=(0, 500))
        w2 = (self.size[0]/2, self.size[1]/2)
        self.transform = ChainTransform([self.panzoom,
                                         STTransform(scale=w2, translate=w2),
                                         LogTransform(base=(0, 2, 0))])

        self.tr_sys = TransformSystem(self)
        self.tr_sys.visual_to_document = self.transform

        gloo.set_state(blend=True,
                       blend_func=('src_alpha', 'one_minus_src_alpha'))
예제 #17
0
    def __init__(self):
        app.Canvas.__init__(self, keys='interactive')
        ps = self.pixel_scale

        n = 10000
        pos = 0.25 * np.random.randn(n, 2).astype(np.float32)
        color = np.random.uniform(0, 1, (n, 3)).astype(np.float32)
        size = np.random.uniform(2*ps, 12*ps, (n, 1)).astype(np.float32)

        self.points = MarkerVisual(pos=pos, color=color, size=size)
        w, h = self.size
        self.points.transform = STTransform(scale=(w / 2., h / 2.),
                                            translate=(w / 2., h / 2.))
예제 #18
0
    def __init__(self):

        # Define several Line visuals that use the same position data
        self.lines = [visuals.LineVisual(pos=pos)
                      for i in range(6)]

        self.lines[0].transform = STTransform(translate=(0, 50))
        
        # Clipping filter (requires update when window is resized) 
        self.lines[1].transform = STTransform(translate=(400, 50))
        self.clipper = Clipper([500, 725, 200, 50])
        self.lines[1].attach(self.clipper)
        
        # Opacity filter
        self.lines[2].transform = STTransform(translate=(0, 150))
        self.lines[2].attach(Alpha(0.4))
        
        # Color filter (for anaglyph stereo)
        self.lines[3].transform = STTransform(translate=(400, 150))
        self.lines[3].attach(ColorFilter([1, 0, 0, 1]))
        
        # A custom filter
        class Hatching(object):
            def __init__(self):
                self.shader = Function("""
                    void screen_filter() {
                        float f = gl_FragCoord.x * 0.4 + gl_FragCoord.y;
                        f = mod(f, 20);
                        
                        if( f < 5.0 ) {
                            discard;
                        }
                        
                        if( f < 20.0 ) {
                            gl_FragColor.g = gl_FragColor.g + 0.05 * (20-f);
                        }
                    }
                """)
            
            def _attach(self, visual):
                visual._get_hook('frag', 'post').add(self.shader())

        self.lines[4].transform = STTransform(translate=(0, 250))
        self.lines[4].attach(Hatching())
        
        # Mixing filters
        self.lines[5].transform = STTransform(translate=(400, 250))
        self.lines[5].attach(ColorFilter([1, 0, 0, 1]))
        self.lines[5].attach(Hatching())
        
        app.Canvas.__init__(self, keys='interactive', size=(800, 800))
        
        for line in self.lines:
            tr_sys = visuals.transforms.TransformSystem(self)
            tr_sys.visual_to_document = line.transform
            line.tr_sys = tr_sys

        self.show(True)
예제 #19
0
    def draw_init(self, backgroundImg=False, fontsize=14, fontColor="white"):
        gloo.clear(color="#231e1f")
        # gloo.set_state("translucent", depth_test=False,blend=True)
        try:
            self.text.clear()
        except:
            pass
        self.selected_point = -1
        self.fontsize = fontsize
        panzoom = PanZoomTransform(self.canvas)

        if backgroundImg:
            self.im = read_png("timg.png")
            self.image = ImageVisual(self.im, method="subdivide")
            self.image.update = self.canvas.update
            self.image.transform = STTransform(
                scale=(2 / self.image.size[0], 2 / self.image.size[1]),
                translate=(-1, -1),
            )
        else:
            self.image = None

        self.markers = PointCollection(
            "agg",
            vertex=self.pvertex,
            fragment=self.pfragment,
            color="shared",
            size="local",
            transform=panzoom,
        )
        self.lines = PathCollection(
            mode="agg",
            vertex=self.lvertex,
            fragment=self.lfragment,
            color="shared",
            linewidth="global",
            transform=panzoom,
        )
        self.markers.update.connect(self.canvas.update)
        self.lines.update.connect(self.canvas.update)
        self.text = TextVisual(u"", color="white")

        self.text.font_size = self.fontsize
        self.text.visible = False
        self.textpos = None

        self.canvas.events.draw.connect(self.on_draw)
        self.canvas.events.resize.connect(self.on_resize)
        self.canvas.events.mouse_press.connect(self.on_mouse_press)
        self.canvas.show()
예제 #20
0
    def load_animal(self):
        self.marker = Animal(parent=self.view.scene, radius=200, color=(1,0,1,0.8))
        self.marker.transform = STTransform()
        self.marker.origin = self.origin
        self.arrow = scene.visuals.Arrow(parent=self.view.scene, width=1.2, color=(0,1,0,1))
        hd = np.array([[0,0],[100,100]])
        self.arrow.set_data(pos=hd, arrows=hd.reshape((len(hd)//2, 4)))

        @self.marker.connect
        def on_move(target_pos):
            if hasattr(self, 'jov'):
                self.jov.teleport(prefix='console', target_pos=target_pos)
            else:
                self.current_pos = self._to_jovian_coord(target_pos).astype(np.float32)
예제 #21
0
    def __init__(self):

        # Define several Line visuals that use the same position data
        # but have different colors and transformations
        colors = [color, (1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1),
                  (1, 1, 0, 1), (1, 1, 1, 1)]

        self.lines = [visuals.LineVisual(pos=pos, color=colors[i])
                      for i in range(6)]

        center = STTransform(translate=(400, 400))

        self.lines[0].transform = center

        self.lines[1].transform = (center * 
                                   STTransform(scale=(1, 0.1, 1)))

        self.lines[2].transform = (center * 
                                   STTransform(translate=(200, 200, 0)) *
                                   STTransform(scale=(0.3, 0.5, 1)))

        self.lines[3].transform = (center * 
                                   STTransform(translate=(-200, -200, 0),
                                               scale=(200, 1)) *
                                   LogTransform(base=(10, 0, 0)) *
                                   STTransform(translate=(1, 0, 0)))

        self.lines[4].transform = AffineTransform()
        self.lines[4].transform.rotate(45, (0, 0, 1))
        self.lines[4].transform.scale((0.3, 0.3, 1))
        self.lines[4].transform.translate((200, 200, 0))

        self.lines[5].transform = (STTransform(translate=(200, 600, 0),
                                               scale=(5, 5)) *
                                   PolarTransform() *
                                   LogTransform(base=(2, 0, 0)) *
                                   STTransform(scale=(0.01, 0.1),
                                               translate=(4, 20)))

        app.Canvas.__init__(self, keys='interactive')
        self.size = (800, 800)
        self.show()
        
        for line in self.lines:
            tr_sys = visuals.transforms.TransformSystem(self)
            tr_sys.visual_to_document = line.transform
            line.tr_sys = tr_sys
예제 #22
0
    def __init__(self):
        app.Canvas.__init__(self,
                            title='Bezier lines example',
                            keys='interactive',
                            size=(400, 750))

        self.lines = [
            visuals.LineVisual(curves.curve4_bezier((10, 0), (50, -190),
                                                    (350, 190), (390, 0)),
                               color='w',
                               width=2,
                               method='agg'),
            visuals.LineVisual(curves.curve4_bezier((10, 0), (190, -190),
                                                    (210, 190), (390, 0)),
                               color='w',
                               width=2,
                               method='agg'),
            visuals.LineVisual(curves.curve3_bezier((10, 0), (30, 200),
                                                    (390, 0)),
                               color='w',
                               width=2,
                               method='agg')
        ]

        # Translate each line visual downwards
        for i, line in enumerate(self.lines):
            x = 0
            y = 200 * (i + 1)

            line.transform = STTransform(translate=[x, y])

        self.texts = [
            visuals.TextVisual('Third order curve',
                               bold=True,
                               color='w',
                               font_size=14,
                               pos=(200, 75)),
            visuals.TextVisual('Quadratic curve',
                               bold=True,
                               color='w',
                               font_size=14,
                               pos=(200, 525)),
        ]

        for text in self.texts:
            text.transform = NullTransform()

        self.visuals = self.lines + self.texts
        self.show()
예제 #23
0
파일: graph.py 프로젝트: jruel4/AlphaScan
    def __init__(self):
        app.Canvas.__init__(self, title="Simple NetworkX Graph",
                            keys="interactive", size=(600, 600))

        graph = nx.adjacency_matrix(
            nx.fast_gnp_random_graph(500, 0.005, directed=True))
        layout = layouts.get_layout('force_directed', iterations=100)

        self.visual = visuals.GraphVisual(
            graph, layout=layout, line_color='black', arrow_type="stealth",
            arrow_size=30, node_symbol="disc", node_size=20,
            face_color=(1, 0, 0, 0.5), border_width=0.0, animate=True,
            directed=False)

        self.visual.transform = STTransform(self.visual_size, (20, 20))
        self.show()
예제 #24
0
def add_observer(view,
                 coords=[118.34, 117.69, 119.2],
                 radius=1,
                 color='black',
                 edge_color='red'):
    """ Put the observer on the scene
        radius and coords in Mpc
    """

    observer = visuals.Sphere(radius=radius,
                              method='latitude',
                              parent=view.scene,
                              color=color,
                              edge_color=edge_color)
    observer.transform = STTransform(translate=coords)

    return observer
예제 #25
0
    def attach(self, viewer, view, canvas, parent=None, order=0):
        super().attach(viewer, view, canvas, parent, order)

        self._update_line_data()

        self.node = Compound(
            [Line(connect='segments', method='gl', width=4)],
            parent=parent,
        )
        self.node.transform = STTransform()
        self.node.order = order

        self._nodes = [self.node]

        self._viewer.camera.events.zoom.connect(self._on_zoom_change)
        self._viewer.dims.events.ndisplay.connect(self._on_data_change)

        self._on_data_change(None)
예제 #26
0
 def __init__(self,
              text=None,
              color='black',
              bold=False,
              italic=False,
              face='OpenSans',
              font_size=12,
              pos=[0, 0, 0],
              rotation=0.,
              anchor_x='center',
              anchor_y='center',
              method='cpu',
              font_manager=None):
     Visual.__init__(self,
                     vcode=self.VERTEX_SHADER,
                     fcode=self.FRAGMENT_SHADER)
     # Check input
     valid_keys = ('top', 'center', 'middle', 'baseline', 'bottom')
     _check_valid('anchor_y', anchor_y, valid_keys)
     valid_keys = ('left', 'center', 'right')
     _check_valid('anchor_x', anchor_x, valid_keys)
     # Init font handling stuff
     # _font_manager is a temporary solution to use global mananger
     self._font_manager = font_manager or FontManager(method=method)
     self._face = face
     self._bold = bold
     self._italic = italic
     self._update_font()
     self._vertices = None
     self._color_vbo = None
     self._anchors = (anchor_x, anchor_y)
     # Init text properties
     self.color = color
     self.text = text
     self.font_size = font_size
     self.pos = pos
     self.rotation = rotation
     self._text_scale = STTransform()
     self._draw_mode = 'triangles'
     self.set_gl_state(blend=True,
                       depth_test=False,
                       cull_face=False,
                       blend_func=('src_alpha', 'one_minus_src_alpha'))
     self.freeze()
예제 #27
0
    def __init__(self):
        app.Canvas.__init__(self, size=(800, 600), keys="interactive")

        img_data = get_mandlebrot_escape_values(600, 400)
        self.image = ImageVisual(img_data, cmap=colormap)

        image_transform = STTransform(scale=(1.3, 1.3), translate=(100, 0))
        self.image_transform_sys = TransformSystem(self)
        self.image_transform_sys.visual_to_document = image_transform

        self.vertical_bar = get_vertical_bar()

        # construct a default transform that does identity scaling
        # and does not translate the coordinates
        colorbar_transform = NullTransform()
        self.colorbar_transform_sys = TransformSystem(self)
        self.colorbar_transform_sys.visual_to_document = colorbar_transform

        self.show()
예제 #28
0
def vprescale(obj, dist=1.):
    """Get the vispy transformation for rescaling objects.

    Parameters
    ----------
    obj : tuple
        The ndarray of the object to rescale. Must be a (..., 2) or (..., 3).
    dist : float | 1.
        The final rescaling value.

    Returns
    -------
    rescale : vispy.transformations
        VisPy transformation to rescale.
    """
    # Get minimum / maximum trough last dimension :
    dim = tuple(np.arange(obj.ndim - 1, dtype=int))
    ptp = np.max(obj, axis=dim) - np.min(obj, axis=dim)
    return STTransform(scale=[dist / np.max(ptp)] * 3)
예제 #29
0
def open_multi():
    # opening a 3D and 4D single-channel images in the same viewer
    win = ImageWindow()
    viewer = win.add_viewer()

    h = 64
    w = 64
    d = 64
    Z, Y, X = np.ogrid[-2.5:2.5:h * 1j, -2.5:2.5:w * 1j, -2.5:2.5:d * 1j]
    image3D = np.empty((h, w, d), dtype=np.float32)
    image3D[:] = np.exp(-X**2 - Y**2 -
                        Z**2)  # * (1. + .5*(np.random.rand(h, w)-.5))
    # image[-30:] = np.linspace(0, 1, w)
    meta = dict(name='3D1C', itype='mono')
    container = viewer.add_image(image3D, meta)
    container.cmap = 'blues'
    container.interpolation = 'spline36'

    h = 64
    w = 64
    d = 64
    b = 64
    C, Z, Y, X = np.ogrid[-2.5:2.5:h * 1j, -2.5:2.5:w * 1j, -2.5:2.5:d * 1j,
                          -2.5:2.5:b * 1j]
    image4D = np.empty((h, w, d, b), dtype=np.float32)
    image4D[:] = np.exp(-X**2 - Y**2 - Z**2 -
                        C**2)  # * (1. + .5*(np.random.rand(h, w)-.5))
    # image[-30:] = np.linspace(0, 1, w)
    meta = dict(name='4D1C', itype='mono')
    container = viewer.add_image(image4D, meta)
    container.cmap = 'blues'
    container.interpolation = 'spline36'

    scale = image3D.shape[0] / image4D.shape[0]

    container.transform = STTransform(translate=[image3D.shape[0]],
                                      scale=[scale] * 2)

    viewer.view.camera.set_range()
    win.show()
    win.raise_()
    return win
def draw_atoms_vispy(mol):
    from vispy import scene
    from vispy.visuals.transforms import STTransform
    canvas = scene.SceneCanvas(keys='interactive',
                               bgcolor='black',
                               size=(800, 600),
                               show=True)
    view = canvas.central_widget.add_view()
    view.camera = 'arcball'
    for at in mol.atoms:
        atom_sphere = scene.visuals.Sphere(radius=SIZE_SCALE *
                                           (vw_radius[at.name]),
                                           method='ico',
                                           parent=view.scene,
                                           color=at_colours[at.name],
                                           edge_color='black',
                                           subdivisions=2)

        atom_sphere.transform = STTransform(translate=at.xyz)
    canvas.app.run()