コード例 #1
0
ファイル: bezier_test.py プロジェクト: mikendu/DroneMayhem
    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()
コード例 #2
0
    def __init__(self, canvas, analog_data, spike_data):
        super().__init__()
        self.canvas = canvas
        self.analog_data = analog_data
        self.spike_data = mea.MEASpikeDict(spike_data)

        prespikes = spike_data.copy()
        prespikes.electrode = prespikes.electrode.str.split('.').str.get(0)
        self.condensed_spike_data = mea.MEASpikeDict(prespikes)

        self._t0 = 0
        self._dt = 20
        self.mouse_t = 0
        self.electrode = ''
        self._time_window = 20  # in milliseconds
        self._scale = (5, 150)
        self.extra_text = ''
        self._selected_electrodes = []
        self.program = gloo.Program(self.VERTEX_SHADER, self.FRAGMENT_SHADER)
        self.program['u_scale'] = self._scale
        self.program['a_position'] = [[0, 0, 0, 0]]
        self.program['a_color'] = [[0, 0, 0, 0]]
        self.program['u_width'] = 100
        self.program['u_rows'] = self.canvas.layout.rows
        self.program['u_columns'] = self.canvas.layout.columns
        self.grid = LineCollection()
        self.create_grid()
        self.sample_rate = 1.0 / (self.analog_data.index[1] -
                                  self.analog_data.index[0])
        self.measuring = False
        self.measure_start = (0, 0)
        self.measure_line = visuals.LineVisual(np.array(((0, 0), (0, 0))),
                                               Theme.yellow,
                                               method='agg')
        self.configure_transforms()
コード例 #3
0
 def __init__(self, canvas, spike_data):
     self.canvas = canvas
     self.program = ModularProgram(self.VERTEX_SHADER, self.FRAGMENT_SHADER)
     self._t0 = 0
     self._dt = 10
     self.mouse_t = self.t0
     self._interval = 1 / 30.0
     self.electrode = ''
     self.time_scale = 1 / 200
     self._vert = np.zeros((120 * 6, 2), dtype=np.float32)
     self._color = np.zeros(120 * 6, dtype=np.float32)
     self.electrodes = []
     self.spikes = spike_data
     for tag, df in spike_data.groupby('electrode'):
         self.electrodes.append(
             FlashingSpikeElectrode(tag, df['time'].values))
     self._create_vertex_data()
     self.paused = True
     self.program['a_position'] = self._vert
     self.program['a_color'] = self._color
     self.program.vert['transform'] = canvas.tr_sys.get_full_transform()
     self.outline = visuals.LineVisual(color=Theme.yellow)
     self.electrode_cols = [c for c in 'ABCDEFGHJKLM']
     self._rescale_outline()
     self.extra_text = ''
コード例 #4
0
    def __init__(self, canvas, spike_data):
        super().__init__()
        self.canvas = canvas
        self.program = ModularProgram(self.VERTEX_SHADER,
                                      self.FRAGMENT_SHADER)
        self._t0 = 0
        self._dt = 10
        self.mouse_t = self.t0
        self._interval = 1 / 30.0
        self.electrode = ''
        self.time_scale = 1 / 200

        # Each quad is drawn as two triangles, so need 6 vertices per electrode
        self._vert = np.zeros((self.canvas.layout.count * 6, 2),
                              dtype=np.float32)
        self._color = np.zeros(self.canvas.layout.count * 6,
                               dtype=np.float32)
        self.electrodes = []
        self.spikes = spike_data.copy()
        self.spikes.electrode = self.spikes.electrode.str.extract('(\w+)\.*')
        for tag, df in self.spikes.groupby('electrode'):
            self.electrodes.append(FlashingSpikeElectrode(tag,
                                                          df['time'].values))
        self._create_vertex_data()
        self.paused = True
        self.program['a_position'] = self._vert
        self.program['a_color'] = self._color
        self.program.vert['transform'] = canvas.tr_sys.get_transform()
        self.outline = visuals.LineVisual(color=Theme.yellow)
        self._rescale_outline()
        self.extra_text = ''
        self.configure_transforms()
コード例 #5
0
 def __init__(self, canvas, spike_data):
     super().__init__()
     self.canvas = canvas
     if 'conductance' not in spike_data.columns:
         spike_data['conductance'] = False
     self.spike_data = mea.MEASpikeDict(spike_data)
     self.spike_data.sort()
     self.program = gloo.Program(RasterPlotVisualization.VERTEX_SHADER,
                                 RasterPlotVisualization.FRAGMENT_SHADER)
     self._t0 = 0
     self._dt = self.spike_data.max_time()
     self.electrode = ''
     self.program['u_pan'] = self._t0
     self.program['u_y_scale'] = self._dt / 2
     self.program['u_top_margin'] = 20.0 * 2.0 / canvas.size[1]
     self._row_count = 120
     self._display_selected = False
     self.selected_electrodes = []
     self.row_count = len(self.spike_data)
     self._unselected_row_count = self.row_count
     self._dim_conductance = False
     self.resample()
     self.margin = {'top': 20}
     self.velocity = 0
     self.tick_separtion = 50
     self.tick_labels = [visuals.TextVisual('', font_size=10, color='w')
                         for x in range(14)]
     self.tick_marks = LineCollection()
     self.mouse_t = 0
     self.extra_text = ''
     self.measuring = False
     self.measure_start = (0, 0)
     self.measure_line = visuals.LineVisual(np.array(((0, 0), (100, 100))),
                                            Theme.yellow)
コード例 #6
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()
コード例 #7
0
ファイル: visual_filters.py プロジェクト: juandambra/Vispy
    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)
コード例 #8
0
 def __init__(self, canvas, analog_data, spike_data):
     super().__init__()
     self.canvas = canvas
     self.analog_data = analog_data
     self.raw_data = spike_data
     self.spike_data = mea.MEASpikeDict(spike_data)
     self.show_spikes = False
     self._dim_conductance = False
     self._t0 = 0
     self._dt = 20
     self._y_scale = 150
     self._pan = 0
     self._scale = 1
     self.mouse_t = 0
     self.electrode = ''
     self.selected_electrodes = ['h11']  # l5, m5
     self.strip_program = gloo.Program(self.STRIP_VERTEX_SHADER,
                                       self.STRIP_FRAGMENT_SHADER)
     self.strip_program['u_color'] = Theme.blue
     self.point_program = gloo.Program(self.POINT_VERTEX_SHADER,
                                       self.POINT_FRAGMENT_SHADER)
     self.pan = self._t0
     self.scale = (2.0 / self._dt, 1 / self._y_scale)
     self.velocity = 0
     self.measuring = False
     self.measure_start = (0, 0)
     self.measure_line = visuals.LineVisual(np.array(((0, 0), (100, 100))),
                                            Theme.yellow)
     self.scale_bar = visuals.LineVisual(np.array(((10, 10), (200, 10))),
                                         Theme.black,
                                         width=10,
                                         method='agg')
     self.scale_label = visuals.TextVisual('', font_size=8)
     self.configure_transforms()
     self.extra_text = ''
     self._filtered = False
     self._filter_cutoff = [200, 4000]
     self.all_spike_colors = []
     self.propagation_spike_colors = []
     self.resample()
     self.background_color = Theme.background
コード例 #9
0
 def __init__(self):
     app.Canvas.__init__(self,
                         title='Bezier lines example',
                         keys='interactive',
                         size=(400, 750))
     self.visuals = [
         visuals.TextVisual('Third order curve',
                            bold=True,
                            color='w',
                            font_size=14,
                            pos=(200, 75)),
         visuals.LineVisual(np.array([[10, 10], [30, 10], [40, 40],
                                      [90, 40]]),
                            color=(1, 0, 0, 1))
     ]
コード例 #10
0
ファイル: line_transform.py プロジェクト: vanossj/vispy
    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
コード例 #11
0
    def __init__(self, canvas, analog_data, spike_data):
        self.canvas = canvas
        self.analog_data = analog_data
        self.spike_data = mea.MEASpikeDict(spike_data)
        self.show_spikes = False
        self._t0 = 0
        self._dt = 20
        self._y_scale = 150
        self._pan = 0
        self._scale = 1
        self.mouse_t = 0
        self.electrode = ''
        self.electrodes = ['h11']  # l5, m5

        self.strip_program = gloo.Program(self.STRIP_VERTEX_SHADER,
                                          self.STRIP_FRAGMENT_SHADER)
        self.strip_program['u_color'] = Theme.blue

        self.point_program = gloo.Program(self.POINT_VERTEX_SHADER,
                                          self.POINT_FRAGMENT_SHADER)
        self.point_program['u_color'] = Theme.yellow

        self.pan = self._t0
        self.scale = (2.0 / self._dt, 1 / self._y_scale)

        self.velocity = 0

        self.measuring = False
        self.measure_start = (0, 0)
        self.measure_line = visuals.LineVisual(np.array(((0, 0), (100, 100))),
                                               Theme.grid_line)
        self.extra_text = ''
        self._filtered = False
        self._filter_cutoff = [200, 4000]
        self.resample()

        self.background_color = Theme.background
コード例 #12
0
    def __init__(self, bubble_box, **kwargs):
        app.Canvas.__init__(self, keys='interactive', **kwargs)
        self._bubble_box = bubble_box

        new_scale = min(size_w / size_bb - 0.5
                        for size_w, size_bb in zip(self.size, self._bubble_box.boxsize))
        new_center = np.array(self._bubble_box.boxsize)[::-1] / 2
        transform = STTransform(scale=(new_scale, new_scale),
                                translate=new_center)

        self.markers = visuals.MarkersVisual()
        self.update_positions(0.0)
        self.markers.transform = transform

        w, h = self._bubble_box.boxsize
        bbox = np.array([(0, 0), (w, 0), (w, h), (0, h), (0, 0)], np.float32)
        self.box = visuals.LineVisual(pos=bbox, width=1, color='black',
                                      method='gl')
        self.box.transform = transform

        self.visuals = [self.markers, self.box]
        self._timer = app.Timer('auto', connect=self.on_timer, start=True)

        self.show()
コード例 #13
0
        cells.append(row)
        for j in range(N):
            row.append(Line(data, offset=(-50, 0), scale=scales))

    gcanvas = GridCanvas(cells,
                         position=(400, 300),
                         size=(800, 600),
                         title="GridCanvas")

    # Visual version
    vlines = []
    for i in range(M):
        row = []
        vlines.append(row)
        for j in range(N):
            v = visuals.LineVisual(pos=data, color='w', method='gl')
            v.transform = visuals.transforms.STTransform(translate=(-1, 0),
                                                         scale=scales)
            row.append(v)

    vcanvas = VisualCanvas(vlines,
                           position=(400, 300),
                           size=(800, 600),
                           title="VisualCanvas")

    # Scenegraph version
    scanvas = scene.SceneCanvas(show=True,
                                keys='interactive',
                                title="SceneCanvas")

    scanvas.size = 800, 600
コード例 #14
0
ファイル: text_visual.py プロジェクト: djhoese/vispy
    def __init__(self):
        app.Canvas.__init__(self, title='Glyphs', keys='interactive')

        self.font_size = 9.

        # Create a cross eye for easy see if text anchor positions are good
        l_pos = np.array([
            [-1.0, 0.0],
            [1.0, 0.0],
            [0.0, 0.0],
            [0.0, 1.0],
            [0.0, -1.0],
        ])
        self.cross_eye_line = visuals.LineVisual(pos=l_pos,
                                                 color=(1.0, 0.0, 0.0, 1),
                                                 method='gl')

        big_test_string = 'This is the big test string!\n'
        big_test_string += 'It includes all of the escape sequences known\n'
        big_test_string += 'to man:\n\n'
        big_test_string += '\t-\t\\n\n'
        big_test_string += '\t-\t\\v\n'
        big_test_string += '\t-\t\\t\n'
        big_test_string += '\t-\tetc..\v'
        big_test_string += 'So \bif \fthis \rlooks correct, somebody did a \n'
        big_test_string += 'decent job and deserves a beer '
        big_test_string += 'and a digital salute\a! ;)'
        big_test_string += '\vThe end!'
        self.string_alternatives = [
            '',
            'Hello (scroll/arrows to change text properties)|\a|how are u',
            'Hello (scroll/arrows to change text properties)|\b|how are u',
            'Hello (scroll/arrows to change text properties)|\f|how are u',
            'Hello (scroll/arrows to change text properties)|\n|how are u',
            'Hello (scroll/arrows to change text properties)|\r|how are u',
            'Hello (scroll/arrows to change text properties)|\t|how are u',
            'Hello (scroll/arrows to change text properties)|\v|how are u',
            'Hello (scroll/arrows to change text properties)|\\|how are u',
            'Hello (scroll/arrows to change text properties)|\'|how are u',
            'Hello (scroll/arrows to change text properties)|\"|how are u',
            'Hello (scroll/arrows to change text properties)|?|how are u',
            big_test_string,
        ]
        self.str_ind = 0

        # anchor_x , anchor_y
        self.anchor_variants = [
            ['top', 'left'],
            ['center', 'left'],
            ['bottom', 'left'],
            ['top', 'center'],
            ['center', 'center'],
            ['bottom', 'center'],
            ['top', 'right'],
            ['center', 'right'],
            ['bottom', 'right'],
        ]
        self.anchor_ind = 0

        self.text = visuals.TextVisual('', bold=True, pos=(0., 0.))
        self.update_text()
コード例 #15
0
ファイル: scene_test_2.py プロジェクト: juandambra/Vispy
        cells.append(row)
        for j in range(N):
            row.append(Line(data, offset=(-50, 0), scale=(1.9 / 100, 2 / 10)))

    gcanvas = GridCanvas(cells,
                         position=(400, 300),
                         size=(800, 600),
                         title="GridCanvas")

    # Visual version
    vlines = []
    for i in range(M):
        row = []
        vlines.append(row)
        for j in range(N):
            v = visuals.LineVisual(pos=data, color=(1, 1, 1, 0.5), method='gl')
            v.transform = visuals.transforms.STTransform(translate=(0, 200),
                                                         scale=(7, 50))
            row.append(v)

    vcanvas = VisualCanvas(vlines,
                           position=(400, 300),
                           size=(800, 600),
                           title="VisualCanvas")

    # Scenegraph version
    scanvas = scene.SceneCanvas(show=True,
                                keys='interactive',
                                title="SceneCanvas")

    scanvas.size = 800, 600