def _plot3d_points_flat_fired(self): '''Plot array of variable using colormap ''' aramis_cdt = self.aramis_cdt m.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1) , size=(1600, 900)) engine = m.get_engine() scene = engine.scenes[0] scene.scene.disable_render = True plot3d_var = getattr(aramis_cdt, self.plot3d_var_) mask = np.logical_or(np.isnan(aramis_cdt.x_arr), aramis_cdt.data_array_undeformed_mask[0, :, :]) mask = None m.points3d(aramis_cdt.x_arr[mask], aramis_cdt.y_arr[mask], aramis_cdt.z_arr[mask], plot3d_var[mask], mode='cube', scale_mode='none', scale_factor=1) m.view(0, 0) scene.scene.parallel_projection = True scene.scene.disable_render = False if self.plot_title: m.title('step no. %d' % aramis_cdt.evaluated_step_idx, size=0.3) m.scalarbar(orientation='horizontal', title=self.plot3d_var_) # plot axes m.axes() m.show()
offset_arr = np.array([xyoffset, xyoffset, zoffset]) pts = pts + offset_arr return pts if __name__ == '__main__': from numpy import mgrid, c_, hstack, vstack, shape from etsproxy.mayavi import mlab geo_supprt = GeoSUPPRT() shape_xy = 2 shape_z = 1 grid = mgrid[0:1:complex(0, shape_xy + 1), 0:1:complex(0, shape_xy + 1 ), 0:1:complex(0, shape_z + 1)] X, Y, Z = grid gpoints = c_[ X.flatten(), Y.flatten(), Z.flatten() ] mlab.figure(bgcolor=(1.,1.,1.,)) fp1 = geo_supprt(gpoints) mlab.points3d(fp1[:, 0], fp1[:, 1], fp1[:, 2], scale_factor = 0.003 , resolution = 8) mlab.axes() mlab.show()
#=========================================================================== # Prepare plotting #=========================================================================== tdir = tempfile.mkdtemp() n_img = n_mu_q_arr.shape[0] fnames = [os.path.join(tdir, 'x%02d.jpg' % i) for i in range(n_img) ] f = m.figure(1, size = (1000, 500), fgcolor = (0, 0, 0), bgcolor = (1., 1., 1.)) s = m.surf(n_e_arr[1], n_e_arr[2], n_mu_q_arr[0, :, :]) ms = s.mlab_source m.axes(s, color = (.7, .7, .7), extent = (-1, 1, 0, 1, 0, 1), ranges = (-0.21, 0.21, 0.1, 20, 0, max_mu_q), xlabel = 'x[mm]', ylabel = 'Lr[mm]', zlabel = 'f[N]',) m.view(-60.0, 70.0, focalpoint = [0., 0.45, 0.45]) m.savefig(fnames[0]) for i, fname in enumerate(fnames[1:]): ms.scalars = n_mu_q_arr[i, :, :] m.savefig(fname) images = string.join(fnames, ' ') destination = os.path.join('fig', 'fiber_cb_8p_anim.gif') import platform if platform.system() == 'Linux':
# Prepare plotting #=========================================================================== tdir = tempfile.mkdtemp() n_img = n_mu_q_arr.shape[0] fnames = [os.path.join(tdir, 'x%02d.jpg' % i) for i in range(n_img)] f = m.figure(1, size=(1000, 500), fgcolor=(0, 0, 0), bgcolor=(1., 1., 1.)) s = m.surf(n_e_arr[1], n_e_arr[2], n_mu_q_arr[0, :, :]) ms = s.mlab_source m.axes( s, color=(.7, .7, .7), extent=(-1, 1, 0, 1, 0, 1), ranges=(-0.21, 0.21, 0.1, 20, 0, max_mu_q), xlabel='x[mm]', ylabel='Lr[mm]', zlabel='f[N]', ) m.view(-60.0, 70.0, focalpoint=[0., 0.45, 0.45]) m.savefig(fnames[0]) for i, fname in enumerate(fnames[1:]): ms.scalars = n_mu_q_arr[i, :, :] m.savefig(fname) images = string.join(fnames, ' ') destination = os.path.join('fig', 'fiber_cb_8p_anim.gif')
def plot3d_cracks(self): # set background color to white and forground color to black # m.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1), size=(900, 600)) # get mayavi engine # engine = m.get_engine() scene = engine.scenes[0] scene.scene.disable_render = True #----------------------------------- # plot crack width ('crack_field_w') #----------------------------------- # flatten z_arr # @todo: use instead: extent = [xmin, xmax, ymin, ymax, zmin, zmax], # z_arr = np.zeros_like(self.z_arr) # NOTE: coordinate order is switched in order to display glyphs at their tail instead of their center # (only possible in mayavis's x-direction) # plot3d_var = getattr(self, self.plot3d_var_[0]) # plot3d_var = getattr(self, 'crack_field_w') vmax = self.plot3d_var_[1] m.points3d(z_arr, self.x_arr, self.y_arr, plot3d_var, mode='cube', colormap="blue-red", scale_mode='scalar', vmax=vmax) # plot scalarbar # m.scalarbar(orientation='horizontal', title=self.plot3d_var) # figure title # uses directory path by default # if plot_title == 'true': m.title(os.path.join(self.data_dir, self.basename)) # scale glyphs # glyph = engine.scenes[0].children[0].children[0].children[0] glyph.glyph.glyph_source.glyph_position = 'tail' glyph.glyph.glyph_source.glyph_source.x_length = self.glyph_x_length_cr glyph.glyph.glyph_source.glyph_source.y_length = self.glyph_y_length_cr glyph.glyph.glyph_source.glyph_source.z_length = self.glyph_z_length_cr #----------------------------------- # plot displacement jumps ('d_ux_w') #----------------------------------- # plot3d_var = getattr(self, 'd_ux_w') plot3d_var = getattr(self, 'crack_field_w') m.points3d(z_arr, self.x_arr, self.y_arr, plot3d_var, mode='cube', colormap="blue-red", scale_mode='none', vmax=vmax) # m.surf(z_arr, self.x_arr, self.y_arr, colormap="blue-red") glyph1 = engine.scenes[0].children[1].children[0].children[0] # # switch order of the scale_factor corresponding to the order of the glyph1.glyph.glyph_source.glyph_source.x_length = self.glyph_z_length glyph1.glyph.glyph_source.glyph_source.y_length = self.glyph_x_length glyph1.glyph.glyph_source.glyph_source.z_length = self.glyph_y_length # rotate scene # scene = engine.scenes[0] scene.scene.parallel_projection = True m.view(0, 90) # scene.scene.camera.position = [616.49832063929375, 638.29074243238438, 514.06081220962164] # scene.scene.camera.focal_point = [11.259753942489624, 11.990119934082031, 9.7502956390380859] # scene.scene.camera.view_angle = 30.0 # scene.scene.camera.view_up = [0.79246046934594205, -0.54446721176015089, -0.27488517574095594] # scene.scene.camera.clipping_range = [595.49259262137014, 1526.1362976999562] # scene.scene.camera.compute_view_plane_normal() glyph.glyph.glyph_source.glyph_position = 'head' glyph.glyph.glyph_source.glyph_position = 'tail' module_manager = engine.scenes[0].children[0].children[0] module_manager.scalar_lut_manager.scalar_bar_representation.minimum_size = np.array([1, 1]) module_manager.scalar_lut_manager.scalar_bar_representation.position2 = np.array([ 0.20603604, 0.16827586]) module_manager.scalar_lut_manager.scalar_bar_representation.moving = 0 module_manager.scalar_lut_manager.scalar_bar_representation.position = np.array([ 0.53971972, 0.19931035]) module_manager.scalar_lut_manager.scalar_bar_representation.maximum_size = np.array([100000, 100000]) scene.scene.disable_render = False # plot axes # m.axes() m.show()
def plot3d_points(self): # set background color to white and forground color to black # m.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1), size=(900, 600)) # NOTE: the missing facettes have all the coordinate position (0,0,0); # the missing facettes therefore are displayed in points3d as missing elements (gaps) plot3d_var = getattr(self, self.plot3d_var_[0]) vmax = self.plot3d_var_[1] # m.points3d(self.x_arr, self.y_arr, self.z_arr, plot3d_var, mode = 'cube', colormap = "blue-red", scale_mode ='none', vmax = vmax) # m.points3d(self.x_arr_avg, self.y_arr_avg, self.z_arr, plot3d_var, mode = 'cube', colormap = "blue-red", scale_mode ='none', vmax = vmax) m.points3d(self.x_arr, self.y_arr, self.z_arr, plot3d_var, mode='cube', colormap="blue-red", scale_mode='none', vmax=vmax) # switch coordinate order to display glyphs at their head/tail insted of their center # m.points3d(self.z_arr, self.x_arr, self.y_arr, plot3d_var, mode = 'cube', colormap = "blue-red", scale_mode ='none', vmax = vmax) # plot scalarbar # m.scalarbar(orientation='horizontal', title=self.plot3d_var) # @todo: predefine scalarbar position # m.scalarbar().position = [0., 0.] # plot axes # m.axes() # figure title # uses directory path by default # if plot_title == 'true': m.title(os.path.join(self.data_dir, self.basename)) # get mayavi engine # engine = m.get_engine() # scale glyphs # glyph = engine.scenes[0].children[0].children[0].children[0] glyph.glyph.glyph_source.glyph_source.x_length = self.glyph_x_length glyph.glyph.glyph_source.glyph_source.y_length = self.glyph_y_length glyph.glyph.glyph_source.glyph_source.z_length = self.glyph_z_length glyph.glyph.glyph_source.glyph_position = 'tail' # rotate scene # scene = engine.scenes[0] scene.scene.parallel_projection = True scene.scene.z_plus_view() # preset position of scalarbar # module_manager = engine.scenes[0].children[0].children[0] module_manager.scalar_lut_manager.scalar_bar_representation.maximum_size = np.array([100000, 100000]) module_manager.scalar_lut_manager.scalar_bar_representation.minimum_size = np.array([1, 1]) module_manager.scalar_lut_manager.scalar_bar_representation.position2 = np.array([ 0.20603604, 0.16827586]) module_manager.scalar_lut_manager.scalar_bar_representation.moving = 0 module_manager.scalar_lut_manager.scalar_bar_representation.position = np.array([ 0.40858859, 0.09310345]) module_manager.scalar_lut_manager.scalar_bar_representation.maximum_size = np.array([100000, 100000]) # # @todo: use mlab-functionality instead # view = mlab.view() # roll = mlab.roll() # # Reposition the camera # mlab.view(*view) # mlab.roll(roll) # # f = mlab.gcf() # camera = f.scene.camera # cam.parallel_scale = 9 m.show()
max_mu_q = np.max(np.fabs(s.mu_q_arr)) n_mu_q_arr = s.mu_q_arr / max_mu_q n_std_q_arr = np.sqrt(s.var_q_arr) / max_mu_q import etsproxy.mayavi.mlab as m f = m.figure(1, size=(1000, 500), fgcolor=(0, 0, 0), bgcolor=(1., 1., 1.)) s = m.surf(n_e_arr[1], n_e_arr[2], n_mu_q_arr[0, :, :]) m.axes( s, color=(.7, .7, .7), extent=(-1, 1, 0, 1, 0, 1), ranges=(-0.21, 0.21, 0.1, 20, 0, max_mu_q), xlabel='x', ylabel='Lr', zlabel='Force', ) m.view(-60.0, 70.0, focalpoint=[0., 0.45, 0.45]) # Store the information view = m.view() roll = m.roll() print(('view', view)) print(('roll', roll)) print((n_mu_q_arr.shape[2])) ms = s.mlab_source for i in range(1, n_mu_q_arr.shape[0]):
def _plot3d_points_fired(self): '''Plot arrays of variables in 3d relief ''' aramis_cdt = self.aramis_cdt m.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1), size=(900, 600)) engine = m.get_engine() scene = engine.scenes[0] scene.scene.disable_render = True #----------------------------------- # plot crack width ('crack_field_w') #----------------------------------- z_arr = np.zeros_like(aramis_cdt.z_arr) plot3d_var = getattr(aramis_cdt, self.plot3d_var_) m.points3d(z_arr, aramis_cdt.x_arr, aramis_cdt.y_arr, plot3d_var, mode='cube', colormap="blue-red", scale_mode='scalar', vmax=.2) # scale glyphs # glyph = engine.scenes[0].children[0].children[0].children[0] glyph.glyph.glyph_source.glyph_position = 'tail' glyph.glyph.glyph_source.glyph_source.x_length = self.glyph_x_length_cr glyph.glyph.glyph_source.glyph_source.y_length = self.glyph_y_length_cr glyph.glyph.glyph_source.glyph_source.z_length = self.glyph_z_length_cr #----------------------------------- # plot displacement jumps ('d_ux_w') #----------------------------------- plot3d_var = getattr(aramis_cdt, self.plot3d_var_) m.points3d(z_arr, aramis_cdt.x_arr, aramis_cdt.y_arr, plot3d_var, mode='cube', colormap="blue-red", scale_mode='none') glyph1 = engine.scenes[0].children[1].children[0].children[0] # # switch order of the scale_factor corresponding to the order of the glyph1.glyph.glyph_source.glyph_source.x_length = self.glyph_z_length glyph1.glyph.glyph_source.glyph_source.y_length = self.glyph_x_length glyph1.glyph.glyph_source.glyph_source.z_length = self.glyph_y_length # rotate scene # scene = engine.scenes[0] scene.scene.parallel_projection = True m.view(0, 90) glyph.glyph.glyph_source.glyph_position = 'head' glyph.glyph.glyph_source.glyph_position = 'tail' module_manager = engine.scenes[0].children[0].children[0] module_manager.scalar_lut_manager.scalar_bar_representation.minimum_size = np.array([1, 1]) module_manager.scalar_lut_manager.scalar_bar_representation.position2 = np.array([ 0.20603604, 0.16827586]) module_manager.scalar_lut_manager.scalar_bar_representation.moving = 0 module_manager.scalar_lut_manager.scalar_bar_representation.position = np.array([ 0.53971972, 0.19931035]) module_manager.scalar_lut_manager.scalar_bar_representation.maximum_size = np.array([100000, 100000]) scene.scene.disable_render = False if self.plot_title: m.title('step no. %d' % aramis_cdt.evaluated_step_idx, size=0.3) m.scalarbar(orientation='horizontal', title=self.plot3d_var_) # plot axes # m.axes() m.show()
n_e_arr = [ e / np.max(np.fabs(e)) for e in e_arr ] max_mu_q = np.max(np.fabs(s.mu_q_arr)) n_mu_q_arr = s.mu_q_arr / max_mu_q n_std_q_arr = np.sqrt(s.var_q_arr) / max_mu_q import etsproxy.mayavi.mlab as m f = m.figure(1, size = (1000, 500), fgcolor = (0, 0, 0), bgcolor = (1., 1., 1.)) s = m.surf(n_e_arr[1], n_e_arr[2], n_mu_q_arr[0, :, :]) m.axes(s, color = (.7, .7, .7), extent = (-1, 1, 0, 1, 0, 1), ranges = (-0.21, 0.21, 0.1, 20, 0, max_mu_q), xlabel = 'x', ylabel = 'Lr', zlabel = 'Force',) m.view(-60.0, 70.0, focalpoint = [0., 0.45, 0.45]) # Store the information view = m.view() roll = m.roll() print 'view', view print 'roll', roll print n_mu_q_arr.shape[2] ms = s.mlab_source for i in range(1, n_mu_q_arr.shape[0]): ms.scalars = n_mu_q_arr[i, :, :] fname = 'x%02d.jpg' % i