def test_cut_shell_model_face_1(self): """ tests: - cut_edge_model_by_coord - cut_face_model_by_coord """ tol = 2. coord = CORD2R(1, rid=0, origin=[0.5, 0., 0.], zaxis=[0.5, 0., 1], xzplane=[1.5, 0., 0.], comment='') model, nodal_result = _cut_shell_model_quads() #------------------------------------------------------------------------- # triangles split_to_trias(model) model.coords[1] = coord model.write_bdf('tris.bdf') #print('----------------------------') title = 'result' p1 = None p2 = None zaxis = None #print(nodal_result) with self.assertRaises(TypeError): cut_and_plot_model(title, p1, p2, zaxis, model, coord, nodal_result, model.log, tol, plane_atol=1e-5, csv_filename=None, invert_yaxis=False, cut_type='face', plot=IS_MATPLOTLIB, show=False) os.remove('tris.bdf')
def test_cut_plate(self): """mode 10 is a sine wave""" log = SimpleLogger(level='warning', encoding='utf-8', log_func=None) bdf_filename = os.path.join(MODEL_PATH, 'plate_py', 'plate_py.dat') op2_filename = os.path.join(MODEL_PATH, 'plate_py', 'plate_py.op2') model = read_bdf(bdf_filename, log=log) op2_model = read_op2_geom(op2_filename, log=log) title = 'Mode 10 Eigenvector' p1 = None p2 = None zaxis = None coord = CORD2R(1, rid=0, origin=[0., 0., 0.], zaxis=[0., 0., 1], xzplane=[1., 0., 0.], comment='') model.coords[1] = coord ytol = 2. # real nodal_result = op2_model.eigenvectors[1].data[9, :, 2] cut_and_plot_model(title, p1, p2, zaxis, model, coord, nodal_result, model.log, ytol, plane_atol=1e-5, csv_filename='real_result.csv', invert_yaxis=False, cut_type='edge', plot=IS_MATPLOTLIB, show=False) # complex nodal_result2 = np.asarray(nodal_result, dtype='complex64') nodal_result2.imag = -nodal_result.real cut_and_plot_model(title, p1, p2, zaxis, model, coord, nodal_result2, model.log, ytol, plane_atol=1e-5, csv_filename='complex_result.csv', invert_yaxis=True, cut_type='edge', plot=IS_MATPLOTLIB, show=False) os.remove('real_result.csv') os.remove('complex_result.csv')
def test_cut_shell_model_1(self): """ tests: - cut_edge_model_by_coord - cut_face_model_by_coord """ model, nodal_result = _cut_shell_model_quads() coord = CORD2R(1, rid=0, origin=[0.5, 0., 0.], zaxis=[0.5, 0., 1], xzplane=[1.5, 0., 0.], comment='') model.coords[1] = coord tol = 2. #------------------------------------------------------------------------- title = 'result' p1 = None p2 = None zaxis = None cut_and_plot_model(title, p1, p2, zaxis, model, coord, nodal_result, model.log, tol, plane_atol=1e-5, csv_filename=None, invert_yaxis=False, cut_type='edge', plot=IS_MATPLOTLIB, show=False) #========================================================================= out = cut_edge_model_by_coord(model, coord, tol, nodal_result, plane_atol=1e-5) unused_local_points_array, unused_global_points_array, result_array = out assert len(result_array) == 16, len(result_array) unused_geometry_array, result_array, unused_rods = cut_face_model_by_coord( model, coord, tol, nodal_result, plane_atol=1e-5) result_array = np.array(result_array) assert result_array.shape == (1, 8, 7), result_array.shape os.remove('plane_edge.bdf') os.remove('plane_face.bdf')
def test_cut_shell_model_1(self): """ tests: - cut_edge_model_by_coord - cut_face_model_by_coord """ model, nodal_result = _cut_shell_model_quads() coord = CORD2R(1, rid=0, origin=[0.5, 0., 0.], zaxis=[0.5, 0., 1], xzplane=[1.5, 0., 0.], comment='') model.coords[1] = coord tol = 2. #------------------------------------------------------------------------- title = 'result' p1 = None p2 = None zaxis = None cut_and_plot_model(title, p1, p2, zaxis, model, coord, nodal_result, model.log, tol, plane_atol=1e-5, csv_filename=None, invert_yaxis=False, cut_type='edge', show=False) #========================================================================= local_points_array, global_points_array, result_array = cut_edge_model_by_coord( model, coord, tol, nodal_result, plane_atol=1e-5) assert len(result_array) == 16, len(result_array) geometry_array, result_array = cut_face_model_by_coord(model, coord, tol, nodal_result, plane_atol=1e-5) assert result_array is None, len(result_array) # no quad support os.remove('plane_edge.bdf') os.remove('plane_face.bdf')
def test_cut_shell_model_2(self): """ tests: - cut_edge_model_by_coord - cut_face_model_by_coord """ tol = 2. coord = CORD2R(1, rid=0, origin=[0.5, 0., 0.], zaxis=[0.5, 0., 1], xzplane=[1.5, 0., 0.], comment='') model, nodal_result = _cut_shell_model_quads() #------------------------------------------------------------------------- # triangles split_to_trias(model) model.coords[1] = coord model.write_bdf('tris.bdf') #print('----------------------------') title = 'result' p1 = None p2 = None zaxis = None cut_and_plot_model(title, p1, p2, zaxis, model, coord, nodal_result, model.log, tol, plane_atol=1e-5, csv_filename=None, invert_yaxis=False, cut_type='edge', plot=IS_MATPLOTLIB, show=False) out = cut_edge_model_by_coord( model, coord, tol, nodal_result, plane_atol=1e-5, csv_filename='cut_edge_2.csv') unused_local_points_array, unused_global_points_array, result_array = out assert len(result_array) == 20, len(result_array) unused_geometry_arrays, result_arrays, unused_rods = cut_face_model_by_coord( model, coord, tol, nodal_result, plane_atol=1e-5, csv_filename='cut_face_2.csv') assert len(result_arrays[0]) == 8, len(result_arrays) os.remove('tris.bdf') os.remove('cut_edge_2.csv') os.remove('cut_face_2.csv') os.remove('plane_edge.bdf') os.remove('plane_face.bdf')
def make_cutting_plane(self, model_name, p1, p2, zaxis, method='Z-Axis Projection', cid_p1=0, cid_p2=0, cid_zaxis=0, ytol=1., plane_atol=1e-5, plane_color=None, plane_opacity=0.5, csv_filename=None, show=True): """Creates a cutting plane of the aero_model for the active plot result""" if plane_color is None: plane_color = PURPLE_FLOAT assert len(plane_color) == 3, plane_color log = self.gui.log model = self.gui.models[model_name] class_name = model.__class__.__name__ if class_name in ['BDF', 'OP2Geom']: out = model.get_displacement_index_xyz_cp_cd() unused_icd_transform, icp_transform, xyz_cp, nid_cp_cd = out nids = nid_cp_cd[:, 0] nid_cd = nid_cp_cd[:, [0, 2]] xyz_cid0 = model.transform_xyzcp_to_xyz_cid(xyz_cp, nids, icp_transform, cid=0) else: log.error('%r is not supported' % class_name) return #xyz_min, xyz_max = model.xyz_limits xyz_min = xyz_cid0.min(axis=0) xyz_max = xyz_cid0.max(axis=0) assert len(xyz_min) == 3, xyz_min dxyz = np.abs(xyz_max - xyz_min) dim_max = dxyz.max() izero = np.where(dxyz == 0) dxyz[izero] = dim_max xyz1, xyz2, unused_z_global, i, k, origin, zaxis, xzplane = _p1_p2_zaxis_to_cord2r( model, p1, p2, zaxis, cid_p1=cid_p1, cid_p2=cid_p2, cid_zaxis=cid_zaxis, method=method) plane_actor = self.gui._create_plane_actor_from_points( xyz1, xyz2, i, k, dim_max, actor_name='plane') prop = plane_actor.GetProperty() prop.SetColor(*plane_color) prop.SetOpacity(plane_opacity) # 0=transparent, 1=solid self.gui.rend.Render() try: # i/j/k vector is nan coord = CORD2R(1, rid=0, origin=origin, zaxis=zaxis, xzplane=xzplane, comment='') except: log.error( 'The coordinate system is invalid; check your cutting plane.') return #print(coord) origin = coord.origin beta = coord.beta().T cid = '' self.gui.create_coordinate_system(cid, dim_max, label='%s' % cid, origin=origin, matrix_3x3=beta, coord_type='xyz') nnodes = xyz_cid0.shape[0] #nodal_result = np.linspace(0., 1., num=nnodes) #case = self.result_cases[self.icase_aero] #res_scalars, location = model.aero_raw_plot_result() (obj, (i, name)) = self.gui.result_cases[self.gui.icase_fringe] res_scalars = obj.get_scalar(i, name) location = obj.get_location(i, name) if res_scalars is None: if plane_actor is not None: plane_actor.VisibilityOn() #print(self.model_frame.plane_actor) #print(dir(self.model_frame.plane_actor)) #plane_actor.VisibilityOff() log.error('No result is selected.') return if hasattr(obj, 'titles'): title = obj.titles[0] elif hasattr(obj, 'title'): title = obj.title else: raise NotImplementedError(obj) plane_actor.VisibilityOn() if location == 'centroid': if hasattr(model, 'map_centroidal_result'): nodal_result = model.map_centroidal_result(res_scalars) else: log.error('Centroidal results are not supported.') return #np.savetxt('Cp_centroid.csv', res_scalars, header='# Cp') #np.savetxt('Cp_nodal.csv', nodal_result, header='# Cp') else: nodal_result = res_scalars assert len(nodal_result) == nnodes invert_yaxis = False if title in ['Cp']: invert_yaxis = True cut_and_plot_model(title, p1, p2, zaxis, model, coord, nodal_result, log, ytol, plane_atol=plane_atol, csv_filename=csv_filename, invert_yaxis=invert_yaxis, cut_type='edge', show=show)
def test_cut_shell_model_2(self): """ tests: - cut_edge_model_by_coord - cut_face_model_by_coord """ tol = 2. coord = CORD2R(1, rid=0, origin=[0.5, 0., 0.], zaxis=[0.5, 0., 1], xzplane=[1.5, 0., 0.], comment='') model, nodal_result = _cut_shell_model_quads() #------------------------------------------------------------------------- # triangles elements2 = {} neids = len(model.elements) for eid, elem in model.elements.items(): elem_a, elem_b = elem.split_to_ctria3(eid, eid + neids) elements2[elem_a.eid] = elem_a elements2[elem_b.eid] = elem_b model.elements = elements2 model.coords[1] = coord model.write_bdf('tris.bdf') #print('----------------------------') title = 'result' p1 = None p2 = None zaxis = None cut_and_plot_model(title, p1, p2, zaxis, model, coord, nodal_result, model.log, tol, plane_atol=1e-5, csv_filename=None, invert_yaxis=False, cut_type='edge', show=False) local_points_array, global_points_array, result_array = cut_edge_model_by_coord( model, coord, tol, nodal_result, plane_atol=1e-5, csv_filename='cut_edge_2.csv') assert len(result_array) == 20, len(result_array) geometry_arrays, result_arrays = cut_face_model_by_coord( model, coord, tol, nodal_result, plane_atol=1e-5, csv_filename='cut_face_2.csv') assert len(result_arrays[0]) == 8, len(result_arrays) os.remove('tris.bdf') os.remove('cut_edge_2.csv') os.remove('cut_face_2.csv') os.remove('plane_edge.bdf') os.remove('plane_face.bdf')