예제 #1
0
    def hack_mlabsavefig(self, fname, size):
        oldx, oldy = self.scene.scene_editor.get_size()

        curx, cury = self.scene.scene_editor.control.Parent.Parent.Size
        cury -= 32  #the mayavi toolbar takes up 32 space, which is not what
        #we are setting

        self.scene.scene_editor.set_size((curx, cury))
        self.txt.visible = False  #label visibility is fixed in mayavi 4.3.1

        magnif_desired = max(size[0] // curx, size[1] // cury) + 1
        newsize = (int(size[0] / magnif_desired),
                   int(size[1] / magnif_desired))
        self.scene.scene_editor.set_size(newsize)
        from tvtk.api import tvtk
        filter = tvtk.WindowToImageFilter(read_front_buffer=True)
        filter.magnification = int(magnif_desired)
        self.scene.scene_editor._lift()
        filter.input = self.scene.scene_editor._renwin
        ex = tvtk.PNGWriter()
        ex.file_name = fname
        ex.input = filter.output
        self.scene.scene_editor._exporter_write(ex)

        #reset the old size
        self.scene.scene_editor.set_size((oldx, oldy))
        #restore the 3D region text if it was previously enabled
        self.txt.visible = self.ds.opts.show_floating_text
예제 #2
0
 def _get_window_to_image(self):
     w2if = tvtk.WindowToImageFilter(
         read_front_buffer=not self.off_screen_rendering)
     set_magnification(w2if, self.magnification)
     self._lift()
     w2if.input = self._renwin
     return w2if
예제 #3
0
 def export_picture(self, filename):
     w2if = tvtk.WindowToImageFilter()
     w2if.magnification = 2
     w2if.input = self.render_window
     ex = tvtk.PNGWriter()
     ex.file_name = filename
     ex.input = w2if.output
     ex.write()
예제 #4
0
 def save_png(self, file_name):
     """Save to a PNG image file."""
     if len(file_name) != 0:
         w2if = tvtk.WindowToImageFilter(read_front_buffer=True)
         w2if.magnification = self.magnification
         self._lift()
         w2if.input = self._renwin
         ex = tvtk.PNGWriter()
         ex.file_name = file_name
         ex.input = w2if.output
         self._exporter_write(ex)
예제 #5
0
def scene_to_png(scene):
    w2if = tvtk.WindowToImageFilter()
    w2if.input = scene.render_window
    ex = tvtk.PNGWriter()
    ex.write_to_memory = True
    configure_input(ex, w2if)
    ex.update()
    ex.write()
    data = base64.b64encode(ex.result.to_array()).decode('ascii')
    html = '<img src="data:image/png;base64,%s" alt="PNG image"></img>'
    return html % data
예제 #6
0
 def save_ps(self, file_name):
     """Saves the rendered scene to a rasterized PostScript image.
     For vector graphics use the save_gl2ps method."""
     if len(file_name) != 0:
         w2if = tvtk.WindowToImageFilter(read_front_buffer=True)
         w2if.magnification = self.magnification
         self._lift()
         w2if.input = self._renwin
         ex = tvtk.PostScriptWriter()
         ex.file_name = file_name
         ex.input = w2if.output
         self._exporter_write(ex)
예제 #7
0
 def save_tiff(self, file_name):
     """Save to a TIFF image file."""
     if len(file_name) != 0:
         w2if = tvtk.WindowToImageFilter(read_front_buffer=
                                           not self.off_screen_rendering)
         w2if.magnification = self.magnification
         self._lift()
         w2if.input = self._renwin
         ex = tvtk.TIFFWriter()
         ex.file_name = file_name
         ex.input = w2if.output
         self._exporter_write(ex)
예제 #8
0
 def save_png(self, file_name):
     """Save to a PNG image file."""
     if len(file_name) != 0:
         w2if = tvtk.WindowToImageFilter(
             read_front_buffer=not self.off_screen_rendering)
         w2if.magnification = self.magnification
         self._lift()
         w2if.input = self._renwin
         ex = tvtk.PNGWriter()
         ex.file_name = file_name
         configure_input(ex, w2if)
         self._exporter_write(ex)
예제 #9
0
 def on_key_down(iren_style, key):
     rendrr = iren_style.GetCurrentRenderer()
     rendrr = tvtk.to_tvtk(rendrr)
     if key == '+':
         for act in rendrr.actors:
             act.property.point_size *= 1.1
     elif key == '-':
         for act in rendrr.actors:
             act.property.point_size /= 1.1
     elif key == 's':
         ren_win = rendrr.render_window
         w2if = tvtk.WindowToImageFilter(input=ren_win)
         w2if.update()
         writer = tvtk.PNGWriter(file_name=snapshot_file, input=w2if.output)
         writer.write()
예제 #10
0
def compare_image_raw(renwin, img_fname, threshold=10, allow_resize=True):
    """Compares renwin's (a tvtk.RenderWindow) contents with the image
    file whose name is given in the second argument.  If the image
    file does not exist the image is generated and stored.  If not the
    image in the render window is compared to that of the figure.
    This function also handles multiple images and finds the best
    matching image.  If `allow_resize` is True then the images are
    rescaled if they are not of the same size.
    """
    # If this is not done the window may not be parented correctly.
    GUI.process_events()

    w2if = tvtk.WindowToImageFilter(read_front_buffer=False, input=renwin)
    w2if.update()
    return compare_image_with_saved_image(w2if.output, img_fname, threshold,
                                          allow_resize)
예제 #11
0
 def save_jpg(self, file_name, quality=None, progressive=None):
     """Arguments: file_name if passed will be used, quality is the
     quality of the JPEG(10-100) are valid, the progressive
     arguments toggles progressive jpegs."""
     if len(file_name) != 0:
         if not quality and not progressive:
             quality, progressive = self.jpeg_quality, self.jpeg_progressive
         w2if = tvtk.WindowToImageFilter(read_front_buffer=True)
         w2if.magnification = self.magnification
         self._lift()
         w2if.input = self._renwin
         ex = tvtk.JPEGWriter()
         ex.quality = quality
         ex.progressive = progressive
         ex.file_name = file_name
         ex.input = w2if.output
         self._exporter_write(ex)
예제 #12
0
    def render_bitmap(self,
                      width,
                      height,
                      filename=None,
                      azimuth=15.0,
                      elevation=30.0,
                      roll=0.0,
                      zoom=1.0,
                      pan_h=0.0,
                      pan_v=0.0):
        renderer = tvtk.Renderer()
        for actor in self.scene.actor_list:
            renderer.add_actor(actor)
        renderer.background = (1, 1, 0.8)

        renderer.reset_camera()
        camera = renderer.active_camera
        camera.roll(roll)
        camera.elevation(elevation)
        camera.azimuth(azimuth)
        camera.dolly(zoom)
        camera.yaw(pan_h)
        camera.pitch(pan_v)

        renderWindow = tvtk.RenderWindow()
        renderWindow.off_screen_rendering = True
        renderWindow.add_renderer(renderer)
        renderWindow.size = (width, height)
        renderWindow.render()

        windowToImageFilter = tvtk.WindowToImageFilter()
        windowToImageFilter.input = renderWindow
        windowToImageFilter.update()

        writer = tvtk.PNGWriter()
        if filename is not None:
            writer.file_name = filename
            writer.write_to_memory = False
        else:
            writer.write_to_memory = True
        writer.input_connection = windowToImageFilter.output_port
        writer.write()
        #data = numpy.asarray(writer.result).tostring()
        return writer.result
예제 #13
0
    def _render_animation_fired(self):
        self.stop = True
        n_frames_render = self.render_to_frame - self.render_from_frame
        # prepare the render window
        renwin = self._figure.scene.render_window
        aa_frames = renwin.aa_frames
        renwin.aa_frames = 8
        renwin.alpha_bit_planes = 1
        # turn on off screen rendering
        #renwin.off_screen_rendering = True
        # set size of window
        if self.fix_image_size:
            orig_size = renwin.size
            renwin.size = self.image_size
        # render the frames
        progress = ProgressDialog(title="Rendering", max=n_frames_render, 
                                  show_time=True, can_cancel=True)
        progress.open()
        self.is_rendering_animation = True
        for frame in range(self.render_from_frame, self.render_to_frame + 1):
            # move animation to desired frame, this will also render the scene
            self.current_frame = frame
            # prepare window to image writer
            render = tvtk.WindowToImageFilter(input=renwin, magnification=1)#, input_buffer_type='rgba')
            if not self.fix_image_size:
                render.magnification = self.magnification
            exporter = tvtk.PNGWriter(file_name=path.join(self.render_directory, self.render_name_pattern % frame))

            configure_input(exporter,render)
            exporter.write()
            do_continue, skip = progress.update(frame - self.render_from_frame)
            if not do_continue:
                break
        # reset the render window to old values
        renwin.aa_frames = aa_frames
        if self.fix_image_size:
            renwin.size = orig_size
        #renwin.off_screen_rendering = False
        self.is_rendering_animation = False
        progress.close()
예제 #14
0
def vtk_scene_to_array(scene, close=True):
    import numpy as np
    from tvtk.api import tvtk

    w2if = tvtk.WindowToImageFilter(read_front_buffer=True)
    w2if.magnification = scene.magnification
    scene._lift()
    w2if.input = scene._renwin
    w2if.update()
    imgdata = w2if.output
    w, h, _ = imgdata.dimensions
    #print w, h
    #print imgdata.point_data
    #print imgdata.point_data.scalars
    #print imgdata.point_data.scalars.to_array()
    arr = imgdata.point_data.scalars.to_array()
    arr.shape = h, w, -1
    arr = arr[::-1].copy()
    mask = np.all(arr == arr[0, 0], -1)
    x0, x1 = np.where(~np.all(mask, axis=0))[0][[0, -1]]
    y0, y1 = np.where(~np.all(mask, axis=1))[0][[0, -1]]
    if close:
        scene.close()
    return arr[y0:y1 + 1, x0:x1 + 1, :].copy()
예제 #15
0
    def ipython_view(self, width, height, view={}):
        import ipywidgets as widgets
        from IPython.display import Image, display, clear_output

        renderer = tvtk.Renderer()
        for actor in self.scene.actor_list:
            renderer.add_actor(actor)
        renderer.background = (1, 1, 0.8)
        #
        renderer.reset_camera()
        camera = renderer.active_camera
        if "position" in view:
            camera.position = view['position']
        if "focal_point" in view:
            camera.focal_point = view['focal_point']
        if "view_up" in view:
            camera.view_up = view['view_up']
#
        renderWindow = tvtk.RenderWindow()
        renderWindow.off_screen_rendering = True
        renderWindow.add_renderer(renderer)
        renderWindow.size = (width, height)
        renderWindow.render()

        windowToImageFilter = tvtk.WindowToImageFilter()
        windowToImageFilter.input = renderWindow
        windowToImageFilter.update()
        #
        filename = "/dev/shm/temp_vtk_put.png"
        writer = tvtk.PNGWriter()
        writer.file_name = filename
        writer.write_to_memory = False
        writer.input_connection = windowToImageFilter.output_port
        writer.write()

        view_out = {}

        def show():
            clear_output(wait=True)
            renderer.reset_camera_clipping_range()
            renderer.modified()
            renderWindow.render()
            windowToImageFilter.input = renderWindow
            windowToImageFilter.modified()
            windowToImageFilter.update()
            writer.write()
            view_out.update({
                "position": tuple(camera.position),
                "view_up": tuple(camera.view_up),
                "focal_point": tuple(camera.focal_point)
            })
            return display(Image(filename), grp)

        def r_up(arg):
            camera.orthogonalize_view_up()
            camera.elevation(10)
            return show()

        def r_down(arg):
            camera.orthogonalize_view_up()
            camera.elevation(-10)
            return show()

        def r_left(arg):
            camera.orthogonalize_view_up()
            camera.azimuth(10)
            return show()

        def r_right(arg):
            camera.orthogonalize_view_up()
            camera.azimuth(-10)
            return show()

        def pan_left(arg):
            camera.orthogonalize_view_up()
            camera.yaw(-2)
            return show()

        def pan_right(arg):
            camera.orthogonalize_view_up()
            camera.yaw(2)
            return show()

        def pan_up(arg):
            camera.orthogonalize_view_up()
            camera.pitch(-2)
            return show()

        def pan_down(arg):
            camera.orthogonalize_view_up()
            camera.pitch(2)
            return show()

        def roll_left(arg):
            camera.roll(10)
            return show()

        def roll_right(arg):
            camera.roll(-10)
            return show()

        def zoom_in(arg):
            camera.dolly(1.2)
            return show()

        def zoom_out(arg):
            camera.dolly(0.8)
            return show()

        b1 = widgets.Button(description='\u2191')
        b1.on_click(r_up)
        b2 = widgets.Button(description='\u2193')
        b2.on_click(r_down)
        b3 = widgets.Button(description='\u2190')
        b3.on_click(r_left)
        b4 = widgets.Button(description='\u2192')
        b4.on_click(r_right)
        b5 = widgets.Button(description='\u21ba')
        b5.on_click(roll_left)
        b6 = widgets.Button(description='\u21bb')
        b6.on_click(roll_right)

        b7 = widgets.Button(description='+')
        b7.on_click(zoom_in)
        b8 = widgets.Button(description='-')
        b8.on_click(zoom_out)
        b9 = widgets.Button(description='\u2190')
        b9.on_click(pan_left)
        b10 = widgets.Button(description='\u2192')
        b10.on_click(pan_right)
        b11 = widgets.Button(description='\u2191')
        b11.on_click(pan_up)
        b12 = widgets.Button(description='\u2193')
        b12.on_click(pan_down)

        grp1 = widgets.HBox(border_style="solid",
                            border_width=1,
                            border_radius=5,
                            padding=2,
                            margin=1)
        grp1.children = [b1, b2, b3, b4, b5, b6]

        grp2 = widgets.HBox(border_style="solid",
                            border_width=1,
                            border_radius=5,
                            padding=2,
                            margin=1)
        grp2.children = [b7, b8, b9, b10, b11, b12]

        grp = widgets.HBox(children=[grp1, grp2])

        show()
        return view_out
예제 #16
0
 def _w2if_default(self):
     w2if = tvtk.WindowToImageFilter()
     if self.scene is not None:
         w2if.input = self.scene.render_window
     return w2if
예제 #17
0
m = tvtk.PolyDataMapper()

# Note that VTK's GetOutput method is special because it has two call
# signatures: GetOutput() and GetOutput(int N) (which gets the N'th
# output).  In tvtk it is represented as both a property and as a
# method.  Using the output property will work fine if all you want is
# the default output.  OTOH if you want the N'th output use
# get_output(N).
m.input = cs.output  # or m.input = cs.get_output()

# Create the actor and set its mapper.
a = tvtk.Actor(mapper=m)

# Create a Renderer, add the actor and set its background color.
ren = tvtk.Renderer(background=(0.1, 0.2, 0.4))
ren.add_actor(a)
ren.reset_camera()

# Create a RenderWindow, add the renderer and set its size.
rw = tvtk.RenderWindow(size=(300, 300))
rw.off_screen_rendering = 1
rw.add_renderer(ren)

w2if = tvtk.WindowToImageFilter()
w2if.magnification = 2
w2if.input = rw
ex = tvtk.PNGWriter()
ex.file_name = "example.png"
ex.input = w2if.output
ex.write()