Esempio n. 1
0
    def __init__(self):
        scene.SceneCanvas.__init__(self, keys=None)
        self.unfreeze()

        self._view = self.central_widget.add_view()
        self._view.bgcolor = '#ffffff'
        self._view.camera = scene.TurntableCamera(distance=10.0,
                                                  up='+z',
                                                  center=(0.0, 0.0, 1.0))

        self._cf = None
        self._base_stations = {}

        self.freeze()

        plane_size = 10
        scene.visuals.Plane(width=plane_size,
                            height=plane_size,
                            width_segments=plane_size,
                            height_segments=plane_size,
                            color=(0.5, 0.5, 0.5, 0.5),
                            edge_color="gray",
                            parent=self._view.scene)

        self._addArrows(1, 0.02, 0.1, 0.1, self._view.scene)
    def __init__(self):
        scene.SceneCanvas.__init__(self, keys=None)
        self.unfreeze()

        self._view = self.central_widget.add_view()
        self._view.bgcolor = '#ffffff'
        self._view.camera = scene.TurntableCamera(
            distance=10.0,
            up='+z',
            center=(0.0, 0.0, 1.0))

        self._cf = scene.visuals.Markers(
            pos=np.array([[0, 0, 0]]),
            parent=self._view.scene,
            face_color=self.POSITION_BRUSH)
        self._anchor_contexts = {}

        self.freeze()

        plane_size = 10
        scene.visuals.Plane(
            width=plane_size,
            height=plane_size,
            width_segments=plane_size,
            height_segments=plane_size,
            color=(0.5, 0.5, 0.5, 0.5),
            edge_color="gray",
            parent=self._view.scene)

        self.addArrows(1, 0.02, 0.1, 0.1, self._view.scene)
Esempio n. 3
0
def main():
    canvas = scene.SceneCanvas(keys='interactive', bgcolor='black')
    view = canvas.central_widget.add_view()
    view.camera = scene.TurntableCamera(up='z', fov=60)

    z = np.loadtxt(sys.argv[1])  # in T
    z *= 10**12 / 10  # rescale (10 pT, 10^-7 G) / 10

    text = "Max: %7.2fx10^-6 G" % z.max()
    put_text(view, (130, 20), text)
    text = "Min: %7.2fx10^-6 G" % z.min()
    put_text(view, (130, 45), text)
    text = "Avg: %7.2fx10^-6 G" % np.average(z)
    put_text(view, (130, 70), text)

    z = gaussian_filter(z, (10, 10)) * 10
    p1 = scene.visuals.SurfacePlot(z=z, color=(0.1, 0.1, 1, 0.9))
    p1.transform = scene.transforms.MatrixTransform()
    p1.transform.scale([1 / 249., 1 / 249., 1 / 249.])
    p1.transform.translate([-0.4, -0.4, 0])

    #obsPosition = Vector3d(118.34, 117.69, 119.2) * Mpc
    put_observer(view, (0, 0, 0), 1. / 20)

    view.add(p1)
    put_axes(view.scene)
    p1._update_data()  # cheating.
    cf = scene.filters.ZColormapFilter('hot', zrange=(z.min(), z.max()))
    p1.attach(cf)

    canvas.show()
Esempio n. 4
0
def plot_voxels(gridLabels,
                suncg_labels,
                vox_min,
                vox_unit,
                save_path=None,
                animate=False):
    nbr_classes = len(suncg_labels)

    canvas = scene.SceneCanvas(keys='interactive',
                               bgcolor='w',
                               size=(1920, 1080))
    view = canvas.central_widget.add_view()
    azimuth = 30
    view.camera = scene.TurntableCamera(up='y',
                                        distance=4,
                                        fov=70,
                                        azimuth=azimuth,
                                        elevation=30.)

    # Sample colormap and adjust alpha
    colormap = get_colormap('cubehelix')
    cm_sampled = []
    for i, (iclass, sample_f) in enumerate(
            zip(suncg_labels, np.linspace(0, 1, nbr_classes))):
        if iclass.lower() in ('free', 'ceiling'):
            alpha = 0
        elif iclass.lower() in ('floor', 'wall', 'window'):
            alpha = 0.6
        else:
            alpha = 1.0
        cm_sampled.append(Color(color=colormap[sample_f].rgb, alpha=alpha))
    my_cm = AlphaAwareCM(cm_sampled)

    volume = scene.visuals.Volume(gridLabels,
                                  relative_step_size=0.1,
                                  method='mip',
                                  parent=view.scene,
                                  cmap=my_cm,
                                  clim=[0, nbr_classes - 1],
                                  emulate_texture=False)
    volume.transform = scene.transforms.MatrixTransform()
    volume.transform.scale(3 * [vox_unit])
    volume.transform.translate(3 * [-vox_unit * gridLabels.shape[0] / 2.0])

    if save_path is None:
        return

    def make_frame(t):
        view.camera.set_state({'azimuth': azimuth + t * 90})
        return canvas.render()

    if animate:
        animation = VideoClip(make_frame, duration=3)
        animation.write_gif('voxel.gif', fps=8, opt='OptimizePlus')
    else:
        img = canvas.render()
        cv2.imwrite('voxel.png', img[::-1])
Esempio n. 5
0
def main():
    parser = argparse.ArgumentParser(
        description='Analyse the knot type of a curve in a data file')

    parser.add_argument('filename', help='The file to load')
    parser.add_argument('--output', help='The filepath to save an image to')

    parser.add_argument('--plot', dest='plot', action='store_true')
    parser.add_argument('--no-plot', dest='plot', action='store_false')
    parser.set_defaults(plot=True)

    parser.add_argument('--azimuth',
                        help='Angle of camera around z axis, in degreesn',
                        default=30,
                        type=float)
    parser.add_argument('--elevation',
                        help='Height of camera above x-y plane, in degrees',
                        default=30,
                        type=float)
    parser.add_argument('--scale-factor', help='Camera zoom', type=float)

    args = parser.parse_args(sys.argv[1:])

    k = knot_from_file(args.filename)

    k.plot()

    vispy_canvas = pvis.vispy_canvas

    vispy_canvas.view.camera = scene.TurntableCamera(fov=30)
    camera = vispy_canvas.view.camera

    if args.azimuth:
        camera.azimuth = args.azimuth
    if args.elevation:
        camera.elevation = args.elevation
    if args.scale_factor is not None:
        camera.scale_factor = args.scale_factor

    if args.output:
        pvis.vispy_save_png(args.output)

    if args.plot:
        vispy_canvas.app.run()

    camera = pvis.vispy_canvas.view.camera

    print('final camera details:')
    print('  azimuth: {}'.format(camera.azimuth))
    print('  elevation: {}'.format(camera.elevation))
    print('  scale-factor: {}'.format(camera.scale_factor))

    print(('To reuse these, add the arguments `--azimuth {} '
           '--elevation {} --scale-factor {}').format(camera.azimuth,
                                                      camera.elevation,
                                                      camera.scale_factor))
Esempio n. 6
0
def Vispy(matrice):
    def normalize(x, cmin=None, cmax=None, clip=True):
        """Normalize an array from the range [cmin, cmax] to [0,1],
        with optional clipping."""
        if not isinstance(x, np.ndarray):
            x = np.array(x)
        if cmin is None:
            cmin = x.min()
        if cmax is None:
            cmax = x.max()
        if cmin == cmax:
            return .5 * np.ones(x.shape)
        else:
            cmin, cmax = float(cmin), float(cmax)
            y = (x - cmin) * 1. / (cmax - cmin)
            if clip:
                y = np.clip(y, 0., 1.)
        return y
    canvas = scene.SceneCanvas(keys='interactive', bgcolor='w')
    view = canvas.central_widget.add_view()
    view.camera = scene.TurntableCamera(up='z', fov=60)
    matrice = (matrice + 1) * 127
    # Simple surface plot example
    # x, y values are not specified, so assumed to be 0:50
    couleurs = normalize(CMAPGRAD)
    couleurs = np.flip(couleurs, 0)
    p1 = scene.visuals.SurfacePlot(z=matrice)
    #couleurs[0]
    p1.transform = scene.transforms.MatrixTransform()
    p1.transform.scale([1/100, 1/100, 4/100])
    p1.transform.translate([0, 0, 0])

    view.add(p1)
    p1._update_data()
    # p1._update_data()  # cheating.
    cf = scene.filters.ZColormapFilter(vs.color.Colormap(couleurs, interpolation='linear'), zrange=(matrice.max(), matrice.min()))
    p1.attach(cf)


    xax = scene.Axis(pos=[[-0.5, -0.5], [0.5, -0.5]], tick_direction=(0, -1),
                    font_size=16, axis_color='k', tick_color='k', text_color='k',
                    parent=view.scene)
    xax.transform = scene.STTransform(translate=(0, 0, -0.2))

    yax = scene.Axis(pos=[[-0.5, -0.5], [-0.5, 0.5]], tick_direction=(-1, 0),
                    font_size=16, axis_color='k', tick_color='k', text_color='k',
                    parent=view.scene)
    yax.transform = scene.STTransform(translate=(0, 0, -0.2))

    # Add a 3D axis to keep us oriented
    axis = scene.visuals.XYZAxis(parent=view.scene)

    canvas.show()
    app.run()
Esempio n. 7
0
def show_mol_surf(mol_obj=None,
                  surf_datas=None,
                  l_par=None,
                  reduced_mol=False,
                  **kwargs):
    canvas = scene.SceneCanvas(keys='interactive', bgcolor=(1, 1, 1, 1))
    view = canvas.central_widget.add_view()

    num = None
    if surf_datas is not None:
        if isinstance(surf_datas, tuple):
            colors = ColorIter(len(surf_datas))
            for data in surf_datas:
                if num is not None and len(data) != num:
                    raise TypeError("different dimensions of surfaces")
                num = len(data)
                build_surface(data=data, view=view, color=next(colors))
        else:
            build_surface(data=surf_datas, view=view, color=next(ColorIter(1)))
            num = len(surf_datas)

    if mol_obj is not None:
        mol = mol_obj.copy()
        if surf_datas is not None:
            if l_par is not None:
                mol.pos /= l_par
                mol.pos *= num
        vis_mol_wrap(mol, view=view, reduced_mol=reduced_mol)

    if num is None:
        num = 50
    sr = kwargs.get('setrange', num)
    cam = scene.TurntableCamera(elevation=30, azimuth=30)
    if kwargs.get('show_axis', True):
        axis = myXYZAxis(length=num + 10, parent=view.scene)
    cam.set_range((-sr, sr), (-sr, sr), (-sr, sr))
    view.camera = cam
    cube_size = kwargs.get('cube_size', 0.)
    scene.visuals.Cube(size=cube_size * num / 2,
                       color=(0.9, 0.9, 0.3, 0.4),
                       edge_color="black",
                       parent=view.scene)
    canvas.show()

    if kwargs.get('quit', False):
        app.process_events()
    else:
        app.run()

    if kwargs.get('screenshot', False):
        name = kwargs.get("screenname", 'screenshot.png')
        im = _screenshot((0, 0, canvas.size[0], canvas.size[1]))
        imsave(name, im)
Esempio n. 8
0
    def setup_camera(self):
        #Initial camera distance
        self._cam_dist=2*np.mean([self._xr,self._yr,self._zr])

        # Distance between axes and axes labels
        self._label_dist = self._cam_dist * 0.15

        #Create scene and camera
        self._view = self.central_widget.add_view()
        self._view.camera = scene.TurntableCamera(up='z',
                fov=60,azimuth=45,elevation=30,
                center=(self._xc,self._yc,self._zc),distance=self._cam_dist)
Esempio n. 9
0
    def show3d(self, cmap=None):
        from vispy import app, scene
        #fr.main.frame_data.data, cmap=random.choice(palettes), extent=(0, w_mag, 0, h_mag)
        xs = np.linspace(0, toMag(self.frame.size[0]), self._data.shape[0])
        ys = np.linspace(0, toMag(self.frame.size[1]), self._data.shape[1])

        canvas = scene.SceneCanvas(keys='interactive',
                                   title=self.frame.makePlotTitle())
        view = canvas.central_widget.add_view()
        view.camera = scene.TurntableCamera(up='z')

        sfc = scene.visuals.SurfacePlot(x=xs, y=ys, z=self._data)
        #sfc.attach(scene.filters.ZColormapFilter(cmap))
        #sfc.attach(scene.filters.ZColormapFilter("fire"))
        view.add(sfc)

        axis = scene.visuals.XYZAxis(parent=view.scene)
        canvas.show()
        app.run()
Esempio n. 10
0
        def draw():
            canvas = scene.SceneCanvas(keys='interactive', show=True)
            view = canvas.central_widget.add_view()

            # add a colored 3D axis for orientation
            axis = visuals.XYZAxis(parent=view.scene)

            self.graphic_robots = []
            self.graphic_trajectories = []
            for _ in self.quads:
                self.graphic_robots.append(GraphicQuad(view))


                # Trtajectory
                Plot3D = scene.visuals.create_visual_node(visualsplot.LinePlotVisual)
                pos = np.c_[[0], [0], [0]]
                gtraj = Plot3D(pos, width=2.0, color=(1, 0, 0, .9),
                                     face_color=(0., 0., 0, 0.),
                                     parent=view.scene)
                self.graphic_trajectories.append(gtraj)

            # Initial drawing for robots
            for i, q in enumerate(self.quads):
                self.graphic_robots[i].draw(q)

            cam = scene.TurntableCamera(elevation=30, azimuth=45)
            cam.set_range((-3, 3), (-3, 3), (-3, 3))
            view.camera = cam

            view.camera = 'arcball'  # or try 'turntable'
            def update(ev):
                # Draw robots
                for i, q in enumerate(self.quads):
                    self.graphic_robots[i].draw(q)

                # Draw trajectories
                for traj, gtraj in zip(self.trajectories, self.graphic_trajectories):
                    x, y, z = traj
                    pos = np.c_[x, y, z]
                    gtraj.set_data(pos, marker_size=0)

            timer = app.Timer(interval=1 / refresh_rate, connect=update, start=True)
            vispy.app.run()
Esempio n. 11
0
    def initUI(self):
        view = self.central_widget.add_view()
        axis = scene.visuals.XYZAxis(parent=view.scene)
        cam = scene.TurntableCamera(elevation=30, azimuth=30,distance=500)
        cam.set_range((-30, 30), (-30, 30), (-30, 30))
        view.camera = cam

        # Create graphical objects
        self.InfoTime = scene.visuals.Text(parent=self.scene, anchor_x='left',\
                                           text = 'Time elapsed:')
        self.InfoSpeed = scene.visuals.Text(parent=self.scene, anchor_x='left',\
                                            text = 'Calculation Time (avg):')
        self.InfoError = scene.visuals.Text(parent=self.scene, anchor_x='left',\
                                            text = 'Estimated local Error (avg):')

        self.Curve = scene.visuals.Line(np.array(self.CurveData),\
                                        parent=view.scene,\
                                        width = 1,\
                                        #color = 'hsl')
                                        color = (245/255,187/255,32/255))
    def __init__(self):
        scene.SceneCanvas.__init__(self, keys=None)
        self.size = 800, 600
        self.view = self.central_widget.add_view()
        self.view.camera = scene.TurntableCamera()
        self.radius = 2.0
        mesh = create_sphere(20, 20, radius=self.radius)
        vertices = mesh.get_vertices()
        tris = mesh.get_faces()

        cl = np.linspace(-self.radius, self.radius, 6 + 2)[1:-1]

        self.iso = scene.visuals.Isoline(vertices=vertices,
                                         tris=tris,
                                         data=vertices[:, 2],
                                         levels=cl,
                                         color_lev='autumn',
                                         parent=self.view.scene)

        # Add a 3D axis to keep us oriented
        scene.visuals.XYZAxis(parent=self.view.scene)
Esempio n. 13
0
# -----------------------------------------------------------------------------
"""
This example demonstrates the use of multiple canvases with visuals shared 
between them.
"""

import sys
import numpy as np

from vispy import app, scene
from vispy.util.filter import gaussian_filter


canvas1 = scene.SceneCanvas(keys='interactive', show=True)
view1 = canvas1.central_widget.add_view()
view1.camera = scene.TurntableCamera(fov=60)

canvas2 = scene.SceneCanvas(keys='interactive', show=True, 
                            shared=canvas1.context)
view2 = canvas2.central_widget.add_view()
view2.camera = 'panzoom'

# Simple surface plot example
# x, y values are not specified, so assumed to be 0:50
z = gaussian_filter(np.random.normal(size=(50, 50)), (1, 1)) * 10
p1 = scene.visuals.SurfacePlot(z=z, color=(0.5, 0.5, 1, 1), shading='smooth')
p1.transform = scene.transforms.MatrixTransform()
p1.transform.scale([1/49., 1/49., 0.02])
p1.transform.translate([-0.5, -0.5, 0])

view1.add(p1)
Esempio n. 14
0
# Create some visuals to show
# AK: Ideally, we could just create one visual that is present in all
# scenes, but that results in flicker for the PanZoomCamera, I suspect
# due to errors in transform caching.
im1 = io.load_crate().astype('float32') / 255
#image1 = scene.visuals.Image(im1, grid=(20, 20), parent=scenes)
for par in scenes:
    image = scene.visuals.Image(im1, grid=(20, 20), parent=par)

#vol1 = np.load(io.load_data_file('volume/stent.npz'))['arr_0']
#volume1 = scene.visuals.Volume(vol1, parent=scenes)
#volume1.transform = scene.STTransform(translate=(0, 0, 10))

# Assign cameras
vb1.camera = scene.BaseCamera()
vb2.camera = scene.PanZoomCamera()
vb3.camera = scene.TurntableCamera()
vb4.camera = scene.FlyCamera()

# If True, show a cuboid at each camera
if False:
    cube = scene.visuals.Cube((3, 3, 5))
    cube.transform = scene.STTransform(translate=(0, 0, 6))
    for vb in (vb1, vb2, vb3, vb4):
        vb.camera.parents = scenes
        cube.add_parent(vb.camera)

if __name__ == '__main__':
    if sys.flags.interactive != 1:
        app.run()
Esempio n. 15
0
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
"""
Demonstrate the use of text in the root scene and a viewbox. Note
how the point size is independent of scaling of viewbox and canvas.
"""
import sys
import numpy as np

from vispy import scene
from vispy.scene.visuals import Text

# Create canvas with a viewbox at the lower half
canvas = scene.SceneCanvas(keys='interactive')
vb = scene.widgets.ViewBox(parent=canvas.scene, border_color='b')
vb.camera = scene.TurntableCamera(elevation=30, azimuth=30, up='+z')
axis = scene.visuals.XYZAxis(parent=vb.scene)
vb.camera.rect = 0, 0, 1, 1


@canvas.events.resize.connect
def resize(event=None):
    vb.pos = 1, canvas.size[1] // 2 - 1
    vb.size = canvas.size[0] - 2, canvas.size[1] // 2 - 2


t1 = Text('Text in root scene (24 pt)', parent=canvas.scene, color='red')
t1.font_size = 24
t1.pos = canvas.size[0] // 2, canvas.size[1] // 3

t2 = Text('Text in viewbox (18 pt)',
scat_visual = scene.visuals.Markers()
scat_visual.set_data(P,
                     symbol='disc',
                     edge_color=None,
                     face_color='red',
                     size=5)

# scat_visual.transform = scene.STTransform(translate=trans)

view.add(scat_visual)

# Add a 3D axis to keep us oriented
axis = scene.visuals.XYZAxis(parent=view.scene)

# Use a 3D camera
# Manual bounds; Mesh visual does not provide bounds yet
# Note how you can set bounds before assigning the camera to the viewbox
cam = scene.TurntableCamera(elevation=30, azimuth=30)
cam.set_range((-10, 10), (-10, 10), (-10, 10))

view.camera = cam

# Visualize the density estimate as isosurfaces
# mlab.contour3d(xi, yi, zi, density, opacity=0.5)
# mlab.axes()
# mlab.show()

if __name__ == '__main__':
    canvas.show()
    if sys.flags.interactive == 0:
        app.run()
Esempio n. 17
0
def scatter_plot_voxels(gridLabels,
                        suncg_labels,
                        vox_min,
                        vox_unit,
                        save_path=None,
                        animate=False):
    nbr_classes = len(suncg_labels)

    occMask = gridLabels > 0
    xyz = np.nonzero(occMask)
    positions = np.vstack([xyz[0], xyz[1], xyz[2]])
    gridLabelsMasked = gridLabels[occMask]

    canvas = scene.SceneCanvas(keys='interactive',
                               bgcolor='w',
                               size=(1920, 1080))
    view = canvas.central_widget.add_view()
    azimuth = 30
    view.camera = scene.TurntableCamera(up='y',
                                        distance=4,
                                        fov=70,
                                        azimuth=azimuth,
                                        elevation=30.)

    # Sample colormap and adjust alpha
    colormap = get_colormap('hsl',
                            value=1.0,
                            saturation=0.8,
                            ncolors=nbr_classes)
    pos_color = np.zeros((positions.shape[1], 4))
    cm_sampled = []
    for i, (iclass, sample_f) in enumerate(
            zip(suncg_labels[1:], np.linspace(0, 1, nbr_classes - 1))):
        if iclass.lower() in ('floor', 'wall', 'window'):
            alpha = 0.5
        elif iclass.lower() == 'ceiling':
            alpha = 0.0
        else:
            alpha = 1.0
        base_color = colormap[sample_f].rgba.flatten()
        base_color[3] = alpha
        pos_color[i == gridLabelsMasked] = base_color

    Scatter3D = scene.visuals.create_visual_node(visuals.MarkersVisual)
    p1 = Scatter3D(parent=view.scene)
    p1.set_gl_state('translucent', blend=True, depth_test=True)
    p1.set_data(positions.T,
                face_color=pos_color,
                symbol='disc',
                size=10,
                edge_width=0.5,
                edge_color='k')

    p1.transform = scene.transforms.MatrixTransform()
    p1.transform.scale(3 * [vox_unit])
    p1.transform.translate(3 * [-vox_unit * gridLabels.shape[0] / 2.0])

    if save_path is None:
        return

    def make_frame(t):
        view.camera.set_state({'azimuth': azimuth + t * 90})
        return canvas.render()

    if animate:
        animation = VideoClip(make_frame, duration=3)
        animation.write_gif('voxel.gif', fps=8, opt='OptimizePlus')
    else:
        img = canvas.render()
        cv2.imwrite('voxel.png', img[::-1])
Esempio n. 18
0
file = './NPZ/watershed_z11.99.npz'
DIR = './NPZ/'
TreeDict = load_obj('allnodeTree')
s1, v1 = get_scenes(file, vb1, canvas, labels=TreeDict[8])
s2, v2 = get_scenes(file, vb2, canvas, labels=TreeDict[8])
#vol1 = np.load(io.load_data_file('volume/stent.npz'))['arr_0']
#volume1 = scene.visuals.Volume(vol1, parent=scenes)
#volume1.transform = scene.STTransform(translate=(0, 0, 10))

# Assign cameras

# vb1.camera = scene.FlyCamera(center=(0,0,0), fov=80)
# vb2.camera = scene.FlyCamera(center=(10,0,0), fov=80)
# vb1.camera.set_range((0, 200), (0, 200), (0, 200))
vb1.camera = scene.TurntableCamera(elevation=0, azimuth=0, fov=120)
vb2.camera = scene.TurntableCamera(elevation=0, azimuth=1, fov=120)
# If True, show a cuboid at each camera
if False:
    cube = scene.visuals.Cube((3, 3, 5))
    cube.transform = scene.STTransform(translate=(0, 0, 6))
    for vb in (vb1, vb2, vb3, vb4):
        vb.camera.parents = scenes
        cube.add_parent(vb.camera)

writer = imageio.get_writer('animation.gif')
for i in range(n_steps):
    im = canvas.render()
    writer.append_data(im)
    vb1.camera.transform.translate((0, step, 0))
    vb2.camera.transform.translate((0, step, 0))
Esempio n. 19
0
 def add_turntable_camera(self):
     self.view.camera = scene.TurntableCamera()
Esempio n. 20
0
        view_vert = view.view_program.vert
        view_vert['visual_to_doc'] = tr.get_transform('visual', 'document')
        view_vert['doc_to_render'] = tr.get_transform('document', 'render')


DirectionalPlot = scene.visuals.create_visual_node(DirectionalPlotVisual)
TextNode = scene.visuals.create_visual_node(visuals.TextVisual)

canvas = scene.SceneCanvas(keys='interactive')
canvas.size = 800, 600
canvas.show()

view = canvas.central_widget.add_view()
vb1 = scene.widgets.ViewBox(border_color='yellow', parent=canvas.scene, pos=(40, 40), size=(260, 260))

vb1.camera, view.camera = scene.TurntableCamera(), scene.TurntableCamera()
vb1.camera.link(view.camera, props=['elevation', 'azimuth'])
vb1.camera.scale_factor = 10.0

mesh = DirectionalPlot(10, parent=view.scene)

scene.visuals.XYZAxis(parent=vb1.scene)
scene.visuals.XYZAxis(parent=view.scene)


from nec import *
v, e = grid(6,1.0,6,1.0)
v = v*np.array([[-1,1,1]])

line = scene.visuals.Line(pos=v[e.flatten()], parent=vb1.scene, width=2, connect='segments')
e_d = np.sqrt(np.sum((v[e[:,1]] - v[e[:,0]])**2, axis=1))
Esempio n. 21
0
    def get_plot(self,
                 start_x=0,
                 start_y=0,
                 span=-1,
                 compression_factor=1,
                 type="3D",
                 elev_scale=0.1):

        start_time = time.time()

        int_data = []

        if start_y + span >= self.real_nrows:

            print "ERROR: Number of rows specified greater than total in data set."
            return

        if start_x + span >= self.real_ncols:

            print "ERROR: Number of columns specified greater than total in data set."
            return

        if span == -1:

            span_x = self.real_ncols - start_x
            span_y = self.real_nrows - start_y

        x_ctr = 0
        for i in xrange(start_y, start_y + span_y):
            x_ctr += 1

            if (x_ctr % compression_factor) == 0:
                cur_row = self.data[i]
                new_row = []

                y_ctr = 0
                for j in xrange(start_x, start_x + span_x):
                    y_ctr += 1

                    if (y_ctr % compression_factor) == 0:
                        new_row.append(int(self.data[i][j]))

                int_data.append(new_row)

        Z = np.array(int_data)

        canvas = scene.SceneCanvas(keys='interactive', title="Terrain Map")
        view = canvas.central_widget.add_view()

        if type == "3D":
            #view.camera = scene.PerspectiveCamera(mode='ortho',fov=60.0)
            view.camera = scene.TurntableCamera(
                up='z',
                center=(span_y * 0.5 / compression_factor,
                        span_x * 0.5 / compression_factor, 0))
        if type == "2D":
            view.camera = scene.PanZoomCamera(up='z')

        # Black background, no paning, blue graph
        p1 = scene.visuals.SurfacePlot(z=Z,
                                       color=(0.5, 0.5, 1, 1),
                                       shading='smooth')

        p1.transform = scene.transforms.AffineTransform()
        p1.transform.scale([1, 1, elev_scale])
        p1.transform.translate([0, 0, 0])

        view.add(p1)
        return canvas
Esempio n. 22
0
def cube(im_in, azimuth=30., elevation=45., name=None,
         ext=ext, do_axis=True, show_label=True,
         cube_label = {'x':'x', 'y':'y', 't':'t'},
         colormap='gray', roll=-180., vmin=0., vmax=1.,
         figsize=figsize, figpath=figpath, **kwargs):

    """

    Visualization of the stimulus as a cube

    """
    im = im_in.copy()

    N_X, N_Y, N_frame = im.shape
    fx, fy, ft = get_grids(N_X, N_Y, N_frame)
    import numpy as np
    from vispy import app, scene
    try:
        AffineTransform = scene.transforms.AffineTransform
    except:
        AffineTransform = scene.transforms.MatrixTransform

    app.use_app('pyglet')
    from vispy.util.transforms import perspective, translate, rotate
    canvas = scene.SceneCanvas(size=figsize, bgcolor='white', dpi=450)
    view = canvas.central_widget.add_view()

#         frame = scene.visuals.Cube(size = (N_X/2, N_frame/2, N_Y/2), color=(0., 0., 0., 0.),
#                                         edge_color='k',
#                                         parent=view.scene)
    for p in ([1, 1, 1, -1, 1, 1], [1, 1, -1, -1, 1, -1], [1, -1, 1, -1, -1, 1],[1, -1, -1, -1, -1, -1],
              [1, 1, 1, 1, -1, 1], [-1, 1, 1, -1, -1, 1], [1, 1, -1, 1, -1, -1], [-1, 1, -1, -1, -1, -1],
              [1, 1, 1, 1, 1, -1], [-1, 1, 1, -1, 1, -1], [1, -1, 1, 1, -1, -1], [-1, -1, 1, -1, -1, -1]):
#             line = scene.visuals.Line(pos=np.array([[p[0]*N_Y/2, p[1]*N_X/2, p[2]*N_frame/2], [p[3]*N_Y/2, p[4]*N_X/2, p[5]*N_frame/2]]), color='black', parent=view.scene)
        line = scene.visuals.Line(pos=np.array([[p[0]*N_X/2, p[1]*N_frame/2, p[2]*N_Y/2],
                                                [p[3]*N_X/2, p[4]*N_frame/2, p[5]*N_Y/2]]), color='black', parent=view.scene)

    opts = {'parent':view.scene, 'cmap':'grays', 'clim':(0., 1.)}
    image_xy = scene.visuals.Image(np.rot90(im[:, :, 0], 3), **opts)
    tr_xy = AffineTransform()
    tr_xy.rotate(90, (1, 0, 0))
    tr_xy.translate((-N_X/2, -N_frame/2, -N_Y/2))
    image_xy.transform = tr_xy

    image_xt = scene.visuals.Image(np.fliplr(im[:, -1, :]), **opts)
    tr_xt = AffineTransform()
    tr_xt.rotate(90, (0, 0, 1))
    tr_xt.translate((N_X/2, -N_frame/2, N_Y/2))
    image_xt.transform = tr_xt

    image_yt = scene.visuals.Image(np.rot90(im[-1, :, :], 1), **opts)
    tr_yt = AffineTransform()
    tr_yt.rotate(90, (0, 1, 0))
    tr_yt.translate((+N_X/2, -N_frame/2, N_Y/2))
    image_yt.transform = tr_yt

    if do_axis:
        t = {}
        for text in ['x', 'y', 't']:
            t[text] = scene.visuals.Text(cube_label[text], parent=canvas.scene, face='Helvetica', color='black')
            t[text].font_size = 8
        t['x'].pos = canvas.size[0] // 3, canvas.size[1] - canvas.size[1] // 8
        t['t'].pos = canvas.size[0] - canvas.size[0] // 5, canvas.size[1] - canvas.size[1] // 6
        t['y'].pos = canvas.size[0] // 12, canvas.size[1] // 2

    cam = scene.TurntableCamera(elevation=35, azimuth=30)
    cam.fov = 45
    cam.scale_factor = N_X * 1.7
    if do_axis: margin = 1.3
    else: margin = 1
    cam.set_range((-N_X/2, N_X/2), (-N_Y/2*margin, N_Y/2/margin), (-N_frame/2, N_frame/2))
    view.camera = cam
    if not(name is None):
        im = canvas.render(size=figsize)
        app.quit()
        import vispy.io as io
        io.write_png(name + ext, im)
    else:
        app.quit()
        return im
Esempio n. 23
0
def visualize(z_in, azimuth=25., elevation=30.,
    thresholds=[0.94, .89, .75, .5, .25, .1], opacities=[.9, .8, .7, .5, .2, .1],
#     thresholds=[0.94, .89, .75], opacities=[.99, .7, .2],
#     thresholds=[0.7, .5, .2], opacities=[.95, .5, .2],
    fourier_label = {'f_x':'f_x', 'f_y':'f_y', 'f_t':'f_t'},
    name=None, ext=ext, do_axis=True, do_grids=False, draw_projections=True,
    colorbar=False, f_N=2., f_tN=2., figsize=figsize, figpath=figpath, **kwargs):
    """

    Visualization of the Fourier spectrum by showing 3D contour plots at different thresholds

    parameters
    ----------
    z : envelope of the cloud

    """
    z = z_in.copy()
    N_X, N_Y, N_frame = z.shape
    fx, fy, ft = get_grids(N_X, N_Y, N_frame)

    # Normalize the amplitude.
    z /= z.max()

    from vispy import app, scene
    try:
        AffineTransform = scene.transforms.AffineTransform
    except:
        AffineTransform = scene.transforms.MatrixTransform

    app.use_app('pyglet')
    #from vispy.util.transforms import perspective, translate, rotate
    from vispy.color import Color
    transparent = Color(color='black', alpha=0.)
    import colorsys
    canvas = scene.SceneCanvas(size=figsize, bgcolor='white', dpi=450)
    view = canvas.central_widget.add_view()

    vol_data = np.rollaxis(np.rollaxis(z, 1), 2)
#         volume = scene.visuals.Volume(vol_data, parent=view.scene)#frame)
    center = scene.transforms.STTransform(translate=( -N_X/2, -N_Y/2, -N_frame/2))
#         volume.transform = center
#         volume.cmap = 'blues'

    if draw_projections:
        from vispy.color import Colormap
        cm = Colormap([(1.0, 1.0, 1.0, 1.0), 'k'])
        opts = {'parent':view.scene, 'cmap':cm, 'clim':(0., 1.)}

        energy_xy = np.rot90(np.max(z, axis=2)[:, ::-1], 3)[:, ::-1]
        fourier_xy = scene.visuals.Image(np.rot90(energy_xy), **opts)
        tr_xy = AffineTransform()
        tr_xy.rotate(90, (0, 0, 1))
        tr_xy.translate((N_X/2, -N_Y/2, -N_frame/2))
        fourier_xy.transform = tr_xy

        energy_xt = np.rot90(np.max(z, axis=1)[:, ::-1], 3)[::-1, ::-1]
        fourier_xt = scene.visuals.Image(energy_xt, **opts)
        tr_xt = AffineTransform()
        tr_xt.rotate(90, (1, 0, 0))
        tr_xt.translate((-N_X/2, N_Y/2, -N_frame/2))
        fourier_xt.transform = tr_xt

        energy_yt = np.max(z, axis=0)#[:, ::-1]
        fourier_yt = scene.visuals.Image(energy_yt, **opts)
        tr_yt = AffineTransform()
        tr_yt.rotate(90, (0, 1, 0))
        tr_yt.translate((-N_X/2, -N_Y/2, N_frame/2))
        fourier_yt.transform = tr_yt

    # Generate iso-surfaces at different energy levels
    surfaces = []
    for i_, (threshold, opacity) in enumerate(list(zip(thresholds, opacities))):
        surfaces.append(scene.visuals.Isosurface(z, level=threshold,
#                                         color=Color(np.array(colorsys.hsv_to_rgb(1.*i_/len(thresholds), 1., 1.)), alpha=opacity),
                                    color=Color(np.array(colorsys.hsv_to_rgb(.66, 1., 1.)), alpha=opacity),
                                    shading='smooth', parent=view.scene)
                                                )
        surfaces[-1].transform = center

    # Draw a sphere at the origin
    axis = scene.visuals.XYZAxis(parent=view.scene)
    for p in ([1, 1, 1, -1, 1, 1], [1, 1, -1, -1, 1, -1], [1, -1, 1, -1, -1, 1],[1, -1, -1, -1, -1, -1],
              [1, 1, 1, 1, -1, 1], [-1, 1, 1, -1, -1, 1], [1, 1, -1, 1, -1, -1], [-1, 1, -1, -1, -1, -1],
              [1, 1, 1, 1, 1, -1], [-1, 1, 1, -1, 1, -1], [1, -1, 1, 1, -1, -1], [-1, -1, 1, -1, -1, -1]):
        line = scene.visuals.Line(pos=np.array([[p[0]*N_X/2, p[1]*N_Y/2, p[2]*N_frame/2], [p[3]*N_X/2, p[4]*N_Y/2, p[5]*N_frame/2]]), color='black', parent=view.scene)

    axisX = scene.visuals.Line(pos=np.array([[0, -N_Y/2, 0], [0, N_Y/2, 0]]), color='red', parent=view.scene)
    axisY = scene.visuals.Line(pos=np.array([[-N_X/2, 0, 0], [N_X/2, 0, 0]]), color='green', parent=view.scene)
    axisZ = scene.visuals.Line(pos=np.array([[0, 0, -N_frame/2], [0, 0, N_frame/2]]), color='blue', parent=view.scene)

    if do_axis:
        t = {}
        for text in ['f_x', 'f_y', 'f_t']:
            t[text] = scene.visuals.Text(fourier_label[text], parent=canvas.scene, face='Helvetica', color='black')
            t[text].font_size = 8
        t['f_x'].pos = canvas.size[0] // 3, canvas.size[1] - canvas.size[1] // 8
        t['f_y'].pos = canvas.size[0] - canvas.size[0] // 8, canvas.size[1] - canvas.size[1] // 6
        t['f_t'].pos = canvas.size[0] // 8, canvas.size[1] // 2

    cam = scene.TurntableCamera(elevation=elevation, azimuth=azimuth, up='z')
    cam.fov = 48
    cam.scale_factor = N_X * 1.8
    if do_axis: margin = 1.35
    else: margin = 1
    cam.set_range((-N_X/2*margin, N_X/2/margin), (-N_Y/2*margin, N_Y/2/margin), (-N_frame/2*margin, N_frame/2/margin))
    view.camera = cam

    im = canvas.render(size=figsize)
    app.quit()
    if not(name is None):
        import vispy.io as io
        io.write_png(name + ext, im)
    else:
        return im
Esempio n. 24
0
canvas = scene.SceneCanvas(keys='interactive')
view = canvas.central_widget.add_view()


# t1 = scene.visuals.Text('Text in root scene (24 pt)', parent=canvas.scene, color='red')
# t1.font_size = 16
# t1.pos = canvas.size[0] // 2, canvas.size[1] // 4
# Add a 3D axis to keep us oriented
axis = scene.visuals.XYZAxis(parent=view.scene)
# s = scene.transforms.STTransform(scale=(50, 50, 50, 1))
# affine = s.as_matrix()
# axis.transform = affine
# Use a 3D camera
# Manual bounds; Mesh visual does not provide bounds yet
# Note how you can set bounds before assigning the camera to the viewbox
cam = scene.TurntableCamera(elevation=30, azimuth=0, fov=100.)
cam.set_range((0, 200), (0, 200), (0, 200))
view.camera = cam


files = find_files(DIR)
writer = imageio.get_writer('animation.gif')

for n, file in enumerate(files):
  s, v, t = get_scenes(file, view, canvas, labels=TreeDict[n])
  im = canvas.render()
  writer.append_data(im)
  for surf in s:
    surf.visible = False
  v.visible = False
  t.visible = False
Esempio n. 25
0
                                                       RZ[1] - RZ[0]))
        coll = ax.plot_trisurf(verts[:, 0],
                               verts[:, 1],
                               faces,
                               verts[:, 2],
                               cmap='jet',
                               lw=0,
                               shade=True)

# Surface plot with VisPy
# --------------------------
    canvas = scene.SceneCanvas(keys='interactive', bgcolor='white')
    view = canvas.central_widget.add_view()
    for l in levels:
        surf = scene.visuals.Isosurface(SOURCE,
                                        level=l,
                                        shading='smooth',
                                        parent=view.scene)
        surf.transform = scene.transforms.STTransform(translate=(0, 0, 0),
                                                      scale=(RX[1] - RX[0],
                                                             RY[1] - RY[0],
                                                             RZ[1] - RZ[0]))
        axis = scene.visuals.XYZAxis(parent=view.scene)
        cam = scene.TurntableCamera(elevation=30., azimuth=60., distance=50.0)
        view.camera = cam

# Show all plots
# --------------------------
    canvas.show()
plt.show()
Esempio n. 26
0
# Copyright (c) Vispy Development Team. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
"""
This example demonstrates the use of the SurfacePlot visual.
"""

import sys
import numpy as np

from vispy import app, scene
from vispy.util.filter import gaussian_filter

canvas = scene.SceneCanvas(keys='interactive', bgcolor='w')
view = canvas.central_widget.add_view()
view.camera = scene.TurntableCamera(up='z', fov=60)

# Simple surface plot example
# x, y values are not specified, so assumed to be 0:50
z = np.random.normal(size=(250, 250), scale=200)
z[100, 100] += 50000
z = gaussian_filter(z, (10, 10))
p1 = scene.visuals.SurfacePlot(z=z, color=(0.3, 0.3, 1, 1))
p1.transform = scene.transforms.MatrixTransform()
p1.transform.scale([1 / 249., 1 / 249., 1 / 249.])
p1.transform.translate([-0.5, -0.5, 0])

view.add(p1)

# p1._update_data()  # cheating.
# cf = scene.filters.ZColormapFilter('fire', zrange=(z.max(), z.min()))
Esempio n. 27
0
# Copyright (c) 2014, Vispy Development Team. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
"""
This example demonstrates the use of the SurfacePlot visual.
"""

import sys
import numpy as np

from vispy import app, scene
from vispy.util.filter import gaussian_filter

canvas = scene.SceneCanvas(keys='interactive')
view = canvas.central_widget.add_view()
view.camera = scene.TurntableCamera(up='z')

# Simple surface plot example
# x, y values are not specified, so assumed to be 0:50
z = gaussian_filter(np.random.normal(size=(50, 50)), (1, 1)) * 10
p1 = scene.visuals.SurfacePlot(z=z, color=(0.5, 0.5, 1, 1), shading='smooth')
p1.transform = scene.transforms.AffineTransform()
p1.transform.scale([1 / 49., 1 / 49., 0.02])
p1.transform.translate([-0.5, -0.5, 0])

view.add(p1)

# Add a 3D axis to keep us oriented
axis = scene.visuals.XYZAxis(parent=view.scene)

if __name__ == '__main__':
Esempio n. 28
0
canvas.show()
view = canvas.central_widget.add_view()

cols = 10
rows = 10
radius = 2
nbr_level = 20
mesh = create_sphere(cols, rows, radius=radius)
vertices = mesh.get_vertices()
tris = mesh.get_faces()

cl = np.linspace(-radius, radius, nbr_level + 2)[1:-1]

scene.visuals.Isoline(vertices=vertices,
                      tris=tris,
                      data=vertices[:, 2],
                      levels=cl,
                      color_lev='winter',
                      parent=view.scene)

# Add a 3D axis to keep us oriented
scene.visuals.XYZAxis(parent=view.scene)

view.camera = scene.TurntableCamera()
view.camera.set_range((-1, 1), (-1, 1), (-1, 1))

if __name__ == '__main__':
    canvas.show()
    if sys.flags.interactive == 0:
        app.run()
Esempio n. 29
0
                timer.stop()
                self._ready = True

        timer.timeout.connect(_calc_vertices)
        timer.start()
        self.vertices = vertices


if __name__ == '__main__':
    # load config params
    try:
        with open(CONFIG_FILE) as f:
            config = json.load(f)
    except FileNotFoundError:
        print('config file not found.')
        config = {'pre_rendering': True}

    vispy.use('pyqt5')
    canvas = scene.SceneCanvas(keys="interactive",
                               size=(1200, 800),
                               show=False)
    camera = scene.TurntableCamera(up='+z')

    myui = MyUi()

    handler = UIHandler(myui,
                        canvas,
                        camera,
                        use_pre_rendering=config['pre_rendering'])

    canvas.app.run()