def display3D(img, list_remove=[], dictionary=None, lut=black_and_white, lut_range = False, cell_separation = False, verbose=False, labels=False): """ paramètres : - img (SpatialImage ou SpatialImageAnalysis) : segmented tissu - list_remove (list) : une liste des cellules à enlever lors de l'affichage - dictionary (dict) : dictionnaire cells->scalar - lut : -Look-Up Table- disponibles dans 'colormaps.py' - lut_range (list) : list of 2 values defing the range (min, max) of the lut. - cell_separation (bool) : if True add a "separation" between cells. - verbose (bool) : pour afficher ou non les progressions - labels (bool) : display labels of cell in 3D. Examples : im1 = imread('/home/vince/softs/vplants/vplants/trunk/vtissue/imaging/mars_alt/test/data/segmentation/imgSeg.inr.gz') im1a=SpatialImageAnalysis(im1) dictionary=dict(zip(im1a.labels(), im1a.volume())) labs=im1a.labels() L1=im1a.L1()[1] filtre=[i for i in labs if i not in L1] display3D(im1, verbose=True) Fonction maitre en deux parties : 1. Gestion du format de l'objet donné en paramètre; 2. Gestion de l'affichage. """ if cell_separation: # -- Management of file format if isinstance(img,SpatialImageAnalysis3D): im = compute_cell_separation(img.image) elif isinstance(img,SpatialImage): im = compute_cell_separation(img) else: print "for now this file format is not managed by display3D" return None # -- Management of file format if isinstance(img,SpatialImageAnalysis3D): if list_remove == None: list_remove = img._ignoredlabels a, a2, sc, m, m2 = rootSpI(img.image, list_remove = list_remove, sc = dictionary, lut_range = lut_range, verbose=verbose) elif isinstance(img,SpatialImage): a, a2, sc, m, m2 = rootSpI(img, list_remove = list_remove, sc = dictionary, lut_range = lut_range, verbose=verbose) else: print "for now this file format is not managed by display3D" return None # -- choice of colormap m.lookup_table = lut(m.lookup_table) from openalea.image.all import black_and_white m2.lookup_table = black_and_white(m2.lookup_table) # -- switching on the viewer and loading the object and the scalarbar viewer = ivtk.viewer() viewer.scene.add_actor(a) viewer.scene.add_actor(a2) if dictionary != None and lut_range != None: viewer.scene.add_actor(sc) if labels: if isinstance(img,SpatialImageAnalysis3D): lab=create_labels(img, viewer.scene.renderer) viewer.scene.add_actor(lab)
def main(instantiate_gui=True): """Simple test case.""" from tvtk.tools import ivtk v = ivtk.viewer(browser=False, instantiate_gui=instantiate_gui) cs = tvtk.ConeSource() m = tvtk.PolyDataMapper(input=cs.output) a = tvtk.Actor(mapper=m) v.scene.add_actor(a) v.scene.reset_zoom() b = PipelineBrowser(v.scene) b.show() return v, b, a
def main(instantiate_gui=True): """Simple test case.""" from tvtk.tools import ivtk v = ivtk.viewer(browser=False, instantiate_gui=instantiate_gui) cs = tvtk.ConeSource() m = tvtk.PolyDataMapper(input_connection=cs.output_port) a = tvtk.Actor(mapper=m) v.scene.add_actor(a) v.scene.reset_zoom() b = PipelineBrowser(v.scene) b.show() return v, b, a
def figure(outline=True, browser=True): """Simple helper function that returns a usable figure. Parameters ---------- - outline : `bool` (default: True) If True, create an outline bounding box along with an axes marker for the scene. - browser : `bool` (default, True) If True, creates an IVTK scene with an embedded PipelineBrowser. If False, does not create it. """ v = ivtk.viewer(browser) f = Figure(v.scene) if outline: o = Outline() f.add(o) v.scene.reset_zoom() return f
mbg, mb, mbc = TutorialTree() q = map(list, mbc.q) q[1] = [np.pi/2.] q[2] = [-np.pi/4.] q[3] = [-np.pi/2.] q[4] = [0.5] mbc.q = q rbd.forwardKinematics(mb, mbc) X_s = sva.PTransformd(sva.RotY(-np.pi/2.), e.Vector3d(0.1, 0., 0.)) mbv = MultiBodyViz(mbg, mb, endEffectorDict={'b4':(X_s, 0.1, (0., 1., 0.))}) # test MultiBodyViz from tvtk.tools import ivtk viewer = ivtk.viewer() mbv.addActors(viewer.scene) mbv.display(mb, mbc) # test axis from axis import Axis a1 = Axis(text='test', length=0.2) a1.addActors(viewer.scene) a1.X = sva.PTransformd(sva.RotX(np.pi/2.), e.Vector3d.UnitX()) # test vector6d from vector6d import ForceVecViz, MotionVecViz M = sva.MotionVecd(e.Vector3d(0.2, 0.1, 0.), e.Vector3d(0.1, 0., 0.2)) F = sva.ForceVecd(e.Vector3d(-0.2, -0.1, 0.), e.Vector3d(-0.1, 0., -0.2)) MV = MotionVecViz(M, a1.X) FV = ForceVecViz(F, sva.PTransformd(sva.RotX(np.pi/2.), e.Vector3d.UnitX()*1.4))
def display3D(img, list_remove=[], dictionary=None, lut=black_and_white, lut_range=False, cell_separation=False, verbose=False, labels=False): """ paramètres : - img (SpatialImage ou SpatialImageAnalysis) : segmented tissu - list_remove (list) : une liste des cellules à enlever lors de l'affichage - dictionary (dict) : dictionnaire cells->scalar - lut : -Look-Up Table- disponibles dans 'colormaps.py' - lut_range (list) : list of 2 values defing the range (min, max) of the lut. - cell_separation (bool) : if True add a "separation" between cells. - verbose (bool) : pour afficher ou non les progressions - labels (bool) : display labels of cell in 3D. Examples : im1 = imread('/home/vince/softs/vplants/vplants/trunk/vtissue/imaging/mars_alt/test/data/segmentation/imgSeg.inr.gz') im1a=SpatialImageAnalysis(im1) dictionary=dict(zip(im1a.labels(), im1a.volume())) labs=im1a.labels() L1=im1a.L1()[1] filtre=[i for i in labs if i not in L1] display3D(im1, verbose=True) Fonction maitre en deux parties : 1. Gestion du format de l'objet donné en paramètre; 2. Gestion de l'affichage. """ if cell_separation: # -- Management of file format if isinstance(img, SpatialImageAnalysis3D): im = compute_cell_separation(img.image) elif isinstance(img, SpatialImage): im = compute_cell_separation(img) else: print "for now this file format is not managed by display3D" return None # -- Management of file format if isinstance(img, SpatialImageAnalysis3D): if list_remove == None: list_remove = img._ignoredlabels a, a2, sc, m, m2 = rootSpI(img.image, list_remove=list_remove, sc=dictionary, lut_range=lut_range, verbose=verbose) elif isinstance(img, SpatialImage): a, a2, sc, m, m2 = rootSpI(img, list_remove=list_remove, sc=dictionary, lut_range=lut_range, verbose=verbose) else: print "for now this file format is not managed by display3D" return None # -- choice of colormap m.lookup_table = lut(m.lookup_table) from openalea.image.all import black_and_white m2.lookup_table = black_and_white(m2.lookup_table) # -- switching on the viewer and loading the object and the scalarbar viewer = ivtk.viewer() viewer.scene.add_actor(a) viewer.scene.add_actor(a2) if dictionary != None and lut_range != None: viewer.scene.add_actor(sc) if labels: if isinstance(img, SpatialImageAnalysis3D): lab = create_labels(img, viewer.scene.renderer) viewer.scene.add_actor(lab)
#!/usr/bin/env python from IPython.display import Image from tvtk.tools import ivtk #from graph import Axis viewer = ivtk.viewer() viewer.size = (640, 480) viewer.scene.camera.focal_point = (0.175, 0.321, 0.0) viewer.scene.camera.position = (0.175, 0.321, 3.3) display_number = 1 def display(): global display_number path = 'img/%s.png' % display_number display_number += 1 viewer.scene.save(path) return Image(path) import numpy as np import eigen3 as e import spacevecalg as sva
def render(self, filename=None, crop=True, add_actors=[]): renderer = tvtk.Renderer(background = (1, 1, 1)) subset = tvtk.ExtractVOI( sample_rate = (self.sample_rate, self.sample_rate, 1), voi = (self._x_min, self._x_max, self._y_min, self._y_max, 0, 0)) configure_input(subset, self._dtm_reader) cropped = tvtk.Threshold() configure_input(cropped, subset) cropped.threshold_by_upper(-9998) geom = tvtk.GeometryFilter() configure_input(geom, cropped) surface1 = tvtk.WarpScalar(scale_factor = self.z_exaggeration) configure_input(surface1, geom) triangles = tvtk.TriangleFilter() configure_input(triangles, surface1) reduced = tvtk.DecimatePro(target_reduction = 0.5, preserve_topology = True) configure_input(reduced, triangles) strips = tvtk.Stripper() configure_input(strips, reduced) texture_plane = tvtk.TextureMapToPlane( origin = (0, self._y_max, 0), point1 = (self._x_max, self._y_max, 0), point2 = (0, 0, 0)) configure_input(texture_plane, strips) map_normals = tvtk.PolyDataNormals() configure_input(map_normals, texture_plane) surface = tvtk.PolyDataMapper(scalar_visibility = False) configure_input(surface, map_normals) #map_image = tvtk.PNGReader(file_name = overlay_file) map_texture = tvtk.Texture(interpolate = True) configure_input(map_texture, self._overlay) geomap_actor = tvtk.Actor(mapper = surface, texture = map_texture, visibility = True) renderer.add_actor(geomap_actor) overhead_light = tvtk.Light() overhead_light.set_color(1, 1, 1) overhead_light.focal_point = ((self._x_max - self._x_min) / 2, (self._y_max - self._y_min) / 2, 0) overhead_light.position = ((self._x_max - self._x_min) / 2, (self._y_max - self._y_min) / 2, 2000) overhead_light.intensity = 0.5 renderer.add_light(overhead_light) headlight = tvtk.Light(light_type = 'headlight') renderer.add_light(headlight) renderer.active_camera.set(**self.camera_settings) ## add axes indicator: #axes = tvtk.AxesActor() #axes.total_length = (300,) * 3 #text_property = tvtk.TextProperty() #text_property.font_family = 'arial' #text_property.font_size = 40 #text_property.color = (0, 0, 0) #axes.x_axis_caption_actor2d.text_actor.text_scale_mode = False #axes.y_axis_caption_actor2d.text_actor.text_scale_mode = False #axes.z_axis_caption_actor2d.text_actor.text_scale_mode = False #axes.x_axis_caption_actor2d.caption_text_property = text_property #axes.y_axis_caption_actor2d.caption_text_property = text_property #axes.z_axis_caption_actor2d.caption_text_property = text_property #axes.x_axis_caption_actor2d.position = [10, 0] #axes.y_axis_caption_actor2d.position = [20, -20] #axes.z_axis_caption_actor2d.position = [20, 0] #axes.x_axis_shaft_property.line_width = 3 #axes.y_axis_shaft_property.line_width = 3 #axes.z_axis_shaft_property.line_width = 3 #renderer.add_actor(axes) ## shift it a little bit: #transform = tvtk.Transform() #transform.translate((400, 400, 0)) #axes.user_transform = transform # add additional actors: for actor in add_actors: renderer.add_actor(actor) if filename is None: v = ivtk.viewer() v.scene.add_actors(renderer.actors) cam = v.scene.camera else: render_window = tvtk.RenderWindow(size = (840, 700), position = (100, 100)) render_window.add_renderer(renderer) cam = renderer.active_camera if filename is not None: render_window.render() render_large = tvtk.RenderLargeImage(input = renderer, magnification = 2) writer = tvtk.PNGWriter(file_name = filename) configure_input(writer, render_large) writer.write() if crop: # crop image to non-white pixels: image = Image.open(filename) bg = Image.new(image.mode, image.size, (255, 255, 255)) diff = ImageChops.difference(image, bg) bbox = diff.getbbox() image = image.crop(bbox) image.save(filename)