Changeset 985
- Timestamp:
- Mar 1, 2005, 6:51:23 PM (20 years ago)
- Location:
- inundation/ga/storm_surge/pmesh/load_mesh
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
inundation/ga/storm_surge/pmesh/load_mesh/loadASCII.py
r978 r985 32 32 segment_tags : [tag,tag,...] list of strings 33 33 triangles : [(v1,v2,v3), (v4,v5,v6),....] lists of points 34 triangle tags: [ s1,s2,...] A list of strings34 triangle tags: [[s1],[s2],...] A list of list of strings (probably not neccecary. a list of string should be ok) 35 35 triangle neighbors: [[t1,t2,t3], [t4,t5,t6],..] lists of triangles 36 36 … … 53 53 from string import find, rfind 54 54 55 from Numeric import array, Float, reshape, concatenate #, transpose55 from Numeric import array, Float, Int16, Character,reshape, concatenate 56 56 57 57 from os.path import splitext … … 85 85 Note: This might throw a can't load file error 86 86 """ 87 fd = open(ofile,'r') 88 dict = read_triangulation(fd) 89 dict_mesh = read_outline(fd) 90 for element in dict_mesh.keys(): 91 dict[element] = dict_mesh[element] 92 93 fd.close() 87 88 if ofile[-4:]== ".tsh": 89 fd = open(ofile,'r') 90 dict = read_triangulation(fd) 91 dict_mesh = read_outline(fd) 92 for element in dict_mesh.keys(): 93 dict[element] = dict_mesh[element] 94 fd.close() 95 elif ofile[-4:]== ".msh": 96 dict = read_tsh_file(ofile) 97 else: 98 msg = 'Extension %s is unknown' %ofile[-4:] 99 raise IOError, msg 94 100 return dict 95 101 … … 570 576 571 577 572 def write_msh_file(filename, mesh_dict): 573 """Write .pts NetCDF file 574 Return a Points dictionary. see header for definition. 575 576 WARNING: This function mangles the mesh_dict data structure 578 def write_msh_file(filename, mesh): 579 """Write .msh NetCDF file 580 581 WARNING: This function mangles the mesh data structure 577 582 """ 578 583 579 from Scientific.IO.NetCDF import NetCDFFile 580 581 point_atts2array(point_atts) 584 from Scientific.IO.NetCDF import NetCDFFile 585 586 IntType = Int16 587 588 # 589 #the triangulation 590 mesh['vertices'] = array(mesh['vertices']).astype(Float) 591 mesh['vertex_attributes'] = array(mesh['vertex_attributes']).astype(Float) 592 mesh['vertex_attribute_titles'] = array(mesh['vertex_attribute_titles']).astype(Character) 593 mesh['segments'] = array(mesh['segments']).astype(IntType) 594 mesh['segment_tags'] = array(mesh['segment_tags']).astype(Character) 595 mesh['triangles'] = array(mesh['triangles']).astype(IntType) 596 mesh['triangle_tags'] = array(mesh['triangle_tags']).astype(Character) 597 mesh['triangle_neighbors'] = array(mesh['triangle_neighbors']).astype(IntType) 598 599 #the outline 600 mesh['points'] = array(mesh['points']).astype(Float) 601 mesh['point_attributes'] = array(mesh['point_attributes']).astype(Float) 602 mesh['outline_segments'] = array(mesh['outline_segments']).astype(IntType) 603 mesh['outline_segment_tags'] = array(mesh['outline_segment_tags']).astype(Character) 604 mesh['holes'] = array(mesh['holes']).astype(Float) 605 mesh['regions'] = array(mesh['regions']).astype(Float) 606 mesh['region_tags'] = array(mesh['region_tags']).astype(Character) 607 mesh['region_max_areas'] = array(mesh['region_max_areas']).astype(Float) 608 609 #mesh = mesh_dict2array(mesh) 610 #print "new_mesh",new_mesh 611 #print "mesh",mesh 612 582 613 # NetCDF file definition 583 614 outfile = NetCDFFile(filename, 'w') … … 588 619 'of spatial point data' 589 620 590 # dimension definitions 591 shape = point_atts['pointlist'].shape[0] 592 outfile.createDimension('number_of_points', shape) 593 outfile.createDimension('number_of_dimensions', 2) #This is 2d data 594 595 # variable definition 596 outfile.createVariable('points', Float, ('number_of_points', 597 'number_of_dimensions')) 598 599 #create variables 600 outfile.variables['points'][:] = point_atts['pointlist'] #.astype(Float32) 601 for key in point_atts['attributelist'].keys(): 602 outfile.createVariable(key, Float, ('number_of_points',)) 603 outfile.variables[key][:] = point_atts['attributelist'][key] #.astype(Float32) 604 outfile.close() 605 621 # dimension definitions - fixed 622 outfile.createDimension('num_of_dimensions', 2) #This is 2d data 623 outfile.createDimension('num_of_segment_ends', 2) #Segs have two points 624 outfile.createDimension('num_of_triangle_vertices', 3) 625 outfile.createDimension('num_of_triangle_faces', 3) 626 outfile.createDimension('num_of_region_max_area', 1) 627 628 # dimension definitions - variable 629 #trianglulation 630 outfile.createDimension('num_of_vertices', mesh['vertices'].shape[0]) 631 outfile.createDimension('num_of_vertex_attributes', 632 mesh['vertex_attributes'].shape[1]) 633 outfile.createDimension('num_of_vertex_attribute_title_chars', 634 mesh['vertex_attribute_titles'].shape[1]) 635 636 outfile.createDimension('num_of_segments', 637 mesh['segments'].shape[0]) 638 outfile.createDimension('num_of_segment_tag_chars', 639 mesh['segment_tags'].shape[1]) 640 outfile.createDimension('num_of_triangles', 641 mesh['triangles'].shape[0]) 642 outfile.createDimension('num_of_triangle_tag_chars', 643 mesh['triangle_tags'].shape[2]) 644 outfile.createDimension('num_of_triangle_tag_per_triangle', 645 mesh['triangle_tags'].shape[1]) 646 647 #outline 648 outfile.createDimension('num_of_points', mesh['points'].shape[0]) 649 outfile.createDimension('num_of_point_attributes', 650 mesh['point_attributes'].shape[1]) 651 outfile.createDimension('num_of_outline_segments', 652 mesh['outline_segments'].shape[0]) 653 outfile.createDimension('num_of_outline_segment_tag_chars', 654 mesh['outline_segment_tags'].shape[1]) 655 outfile.createDimension('num_of_holes', mesh['holes'].shape[0]) 656 outfile.createDimension('num_of_regions', mesh['regions'].shape[0]) 657 outfile.createDimension('num_of_region_tag_chars', 658 mesh['region_tags'].shape[1]) 659 660 661 # variable definitions 662 # trianglulation 663 outfile.createVariable('vertices', Float, ('num_of_vertices', 664 'num_of_dimensions')) 665 outfile.createVariable('vertex_attributes', Float, ('num_of_vertices', 666 'num_of_vertex_attributes')) 667 outfile.createVariable('vertex_attribute_titles', 668 Character, 669 ( 'num_of_vertex_attributes','num_of_vertex_attribute_title_chars' )) 670 outfile.createVariable('segments', 671 IntType, 672 ('num_of_segments', 'num_of_segment_ends')) 673 outfile.createVariable('segment_tags', 674 Character, 675 ('num_of_segments', 676 'num_of_segment_tag_chars')) 677 outfile.createVariable('triangles', 678 IntType, 679 ('num_of_triangles', 'num_of_triangle_vertices')) 680 outfile.createVariable('triangle_tags', 681 Character, 682 ('num_of_triangles', 683 'num_of_triangle_tag_per_triangle', 684 'num_of_triangle_tag_chars')) 685 outfile.createVariable('triangle_neighbors', 686 IntType, 687 ('num_of_triangles', 'num_of_triangle_faces')) 688 689 690 # outline 691 outfile.createVariable('points', Float, ('num_of_points', 692 'num_of_dimensions')) 693 outfile.createVariable('point_attributes', Float, ('num_of_points', 694 'num_of_point_attributes')) 695 696 outfile.createVariable('outline_segments', 697 IntType, 698 ('num_of_outline_segments', 'num_of_segment_ends')) 699 outfile.createVariable('outline_segment_tags', 700 Character, 701 ('num_of_outline_segments', 702 'num_of_outline_segment_tag_chars')) 703 outfile.createVariable('holes', Float, ('num_of_holes', 704 'num_of_dimensions')) 705 outfile.createVariable('regions', Float, ('num_of_regions', 706 'num_of_dimensions')) 707 outfile.createVariable('region_tags', 708 Character, 709 ('num_of_regions', 710 'num_of_region_tag_chars')) 711 outfile.createVariable('region_max_areas', 712 Float, 713 ('num_of_regions',)) #'num_of_region_max_area')) 714 715 # Setting the variables 716 #triangulation 717 outfile.variables['vertices'][:] = mesh['vertices'] 718 outfile.variables['vertex_attributes'][:] = mesh['vertex_attributes'] 719 outfile.variables['vertex_attribute_titles'][:] = mesh['vertex_attribute_titles'] 720 outfile.variables['segments'][:] = mesh['segments'] 721 outfile.variables['segment_tags'][:] = mesh['segment_tags'] 722 outfile.variables['triangles'][:] = mesh['triangles'] 723 outfile.variables['triangle_tags'][:] = mesh['triangle_tags'] 724 outfile.variables['triangle_neighbors'][:] = mesh['triangle_neighbors'] 725 726 # Outline 727 outfile.variables['points'][:] = mesh['points'] 728 outfile.variables['point_attributes'][:] = mesh['point_attributes'] 729 outfile.variables['outline_segments'][:] = mesh['outline_segments'] 730 outfile.variables['outline_segment_tags'][:] = mesh['outline_segment_tags'] 731 outfile.variables['holes'][:] = mesh['holes'] 732 outfile.variables['regions'][:] = mesh['regions'] 733 outfile.variables['region_tags'][:] = mesh['region_tags'] 734 outfile.variables['region_max_areas'][:] = mesh['region_max_areas'] 735 736 outfile.close() 737 738 739 740 def read_msh_file(file_name): 741 """ 742 Read in an msh file. 743 744 """ 745 746 from Scientific.IO.NetCDF import NetCDFFile 747 748 #Check contents 749 #Get NetCDF 750 fid = NetCDFFile(file_name, 'r') 751 752 mesh = {} 753 # Get the variables 754 # the triangulation 755 mesh['vertices'] = fid.variables['vertices'][:] 756 mesh['vertex_attributes'] = fid.variables['vertex_attributes'][:] 757 titles = fid.variables['vertex_attribute_titles'][:] 758 mesh['vertex_attribute_titles'] = [] 759 for i, title in enumerate(titles): 760 mesh['vertex_attribute_titles'].append(titles[i].tostring().strip()) 761 mesh['segments'] = fid.variables['segments'][:] 762 tags = fid.variables['segment_tags'][:] 763 mesh['segment_tags'] =[] 764 for i, tag in enumerate(tags): 765 mesh['segment_tags'].append(tags[i].tostring().strip()) 766 mesh['triangles'] = fid.variables['triangles'][:] 767 tags = fid.variables['triangle_tags'][:] 768 mesh['triangle_tags'] =[] 769 for i, tag in enumerate(tags): 770 mesh['triangle_tags'].append(tags[i].tostring().strip()) 771 mesh['triangle_neighbors'] = fid.variables['triangle_neighbors'][:] 772 773 #the outline 774 mesh['points'] = fid.variables['points'][:] 775 mesh['point_attributes'] = fid.variables['point_attributes'][:] 776 mesh['outline_segments'] = fid.variables['outline_segments'][:] 777 tags = fid.variables['outline_segment_tags'][:] 778 mesh['outline_segment_tags'] =[] 779 for i, tag in enumerate(tags): 780 mesh['outline_segment_tags'].append(tags[i].tostring().strip()) 781 782 mesh['holes'] = fid.variables['holes'][:] 783 mesh['regions'] = fid.variables['regions'][:] 784 tags = fid.variables['region_tags'][:] 785 mesh['region_tags'] =[] 786 for i, tag in enumerate(tags): 787 mesh['region_tags'].append(tags[i].tostring().strip()) 788 mesh['region_max_areas'] = fid.variables['region_max_areas'][:] 789 #mesh[''] = fid.variables[''][:] 790 791 fid.close() 792 793 return mesh 794 606 795 607 796 ## used by alpha shapes … … 779 968 outfile.variables[key][:] = point_atts['attributelist'][key] #.astype(Float32) 780 969 outfile.close() 781 782 # used to be load_xya_file 970 783 971 def load_points_file(ofile,delimiter = ','): 784 972 """ 785 load a file, ofile, with the format 1st line header, 786 x,y, [attributes] 973 load an .xya or .pts file 787 974 """ 788 975 … … 805 992 msg = 'Extension %s is unknown' %ofile[-4:] 806 993 raise IOError, msg 807 808 809 810 994 return points_dict 811 995 -
inundation/ga/storm_surge/pmesh/load_mesh/test_loadASCII.py
r975 r985 26 26 class loadASCIITestCase(unittest.TestCase): 27 27 def setUp(self): 28 pass 29 28 self.dict ={} 29 self.dict['outline_segments'] = [(0, 1), (1, 2), (0, 2), (0, 3)] 30 self.dict['outline_segment_tags'] = ['50', '40', '30', '20'] 31 self.dict['holes'] = [(0.2, 0.6)] 32 self.dict['point_attributes'] = [[5, 2], [4, 2], [3, 2], [2,2]] 33 self.dict['regions'] = [(0.3, 0.3),(0.3, 0.4)] 34 self.dict['region_tags'] = ['1.3', 'yeah'] 35 self.dict['region_max_areas'] = [36.0,-7.1] 36 self.dict['points'] = [(0.0, 0.0), (0.0, 4.0), (4.0, 0.0), (1.0, 1.0)] 37 38 self.dict['vertices'] = [(0.0, 0.0), (0.0, 4.0), 39 (4.0, 0.0), (1.0, 1.0), (2.0, 2.0)] 40 self.dict['triangles'] = [(3, 2, 4), (1, 0, 3), 41 (3, 4,1), (2, 3, 0)] 42 self.dict['segments'] = [(0, 1), (1, 4), (2, 0), 43 (0, 3), (4, 2)] 44 self.dict['triangle_tags'] = [['1.3'], ['1.3'], 45 ['1.3'], ['1.3']] 46 self.dict['vertex_attributes'] = [[1.2,2.], [1.2,2.], [1.2,2.], [1.2,2.], [1.2,3.]] 47 self.dict['triangle_neighbors'] = [[-1, 2, 3], [3, 2, -1], 48 [-1, 1, 0], [1, -1, 0]] 49 self.dict['segment_tags'] = ['50', '40', '30', '20', '40'] 50 self.dict['vertex_attribute_titles'] = ['bed elevation', 'height'] 30 51 def tearDown(self): 31 52 pass … … 33 54 34 55 def test_import_mesh(self): 35 dict ={} 36 dict['outline_segments'] = [(0, 1), (1, 2), (0, 2), (0, 3)] 37 dict['outline_segment_tags'] = ['50', '40', '30', '20'] 38 dict['holes'] = [(0.2, 0.6)] 39 dict['point_attributes'] = [[5, 2], [4, 2], [3, 2], [2,2]] 40 dict['regions'] = [(0.3, 0.3)] 41 dict['region_tags'] = ['1.3'] 42 dict['region_max_areas'] = [36.0] 43 dict['points'] = [(0.0, 0.0), (0.0, 4.0), (4.0, 0.0), (1.0, 1.0)] 44 56 57 dict = self.dict 45 58 fileName = tempfile.mktemp(".txt") 46 59 fd = open(fileName,'w') … … 70 83 array(dict['outline_segment_tags']), 71 84 'test_import_mesh failed. Test 4') 72 #print "loaded_dict['regions']",loaded_dict['regions']73 #print "dict['regions']",dict['regions']74 85 self.failUnless(array(loaded_dict['regions']) == 75 86 array(dict['regions']), … … 89 100 import os 90 101 import tempfile 91 92 meshDict = {} 93 meshDict['vertices'] = [(0.0, 0.0), (0.0, 4.0), 94 (4.0, 0.0), (1.0, 1.0), (2.0, 2.0)] 95 meshDict['triangles'] = [(3, 2, 4), (1, 0, 3), 96 (3, 4,1), (2, 3, 0)] 97 meshDict['segments'] = [(0, 1), (1, 4), (2, 0), 98 (0, 3), (4, 2)] 99 meshDict['triangle_tags'] = [['1.3'], ['1.3'], 100 ['1.3'], ['1.3']] 101 meshDict['vertex_attributes'] = [[1.2,2.], [1.2,2.], [1.2,2.], [1.2,2.], [1.2,3.]] 102 meshDict['triangle_neighbors'] = [[-1, 2, 3], [3, 2, -1], 103 [-1, 1, 0], [1, -1, 0]] 104 meshDict['segment_tags'] = ['50', '40', '30', '20', '40'] 105 meshDict['vertex_attribute_titles'] = ['bed elevation', 'height'] 106 102 103 meshDict = self.dict 107 104 fileName = tempfile.mktemp(".tsh") 108 105 export_triangulation_file(fileName, meshDict) … … 142 139 143 140 os.remove(fileName) 144 141 142 def test_read_write_msh_file(self): 143 144 dict = self.dict.copy() 145 fileName = tempfile.mktemp(".txt") 146 write_msh_file(fileName,dict) 147 loaded_dict = read_msh_file(fileName) 148 os.remove(fileName) 149 150 151 dict = self.dict 152 #print "*********************" 153 #print dict 154 #print "**loaded_dict*******************" 155 #print loaded_dict 156 #print "*********************" 157 158 159 self.failUnless(array(loaded_dict['points']) == 160 array(dict['points']), 161 'test_import_mesh failed. Test 1') 162 self.failUnless(array(loaded_dict['point_attributes']) == 163 array(dict['point_attributes']), 164 'test_import_mesh failed. Test 2') 165 self.failUnless(array(loaded_dict['outline_segments']) == 166 array(dict['outline_segments']), 167 'test_import_mesh failed. Test 3') 168 self.failUnless(array(loaded_dict['outline_segment_tags']) == 169 array(dict['outline_segment_tags']), 170 'test_import_mesh failed. Test 4') 171 self.failUnless(array(loaded_dict['regions']) == 172 array(dict['regions']), 173 'test_import_mesh failed. Test 5') 174 self.failUnless(array(loaded_dict['region_tags']) == 175 array(dict['region_tags']), 176 'test_import_mesh failed. Test 5') 177 self.failUnless(array(loaded_dict['region_max_areas']) == 178 array(dict['region_max_areas']), 179 'test_import_mesh failed. Test 5') 180 181 self.failUnless(array(loaded_dict['holes']) == 182 array(dict['holes']), 183 'test_import_mesh failed. Test 6') 184 185 self.failUnless(array(dict['vertices']) == 186 array(loaded_dict['vertices']), 187 'test_export_triangulation_file failed. Test 1') 188 self.failUnless(array(dict['triangles']) == 189 array(loaded_dict['triangles']), 190 'test_export_triangulation_file failed. Test 2') 191 self.failUnless(array(dict['segments']) == 192 array(loaded_dict['segments']), 193 'test_export_triangulation_file failed. Test 3') 194 self.failUnless(array(dict['triangle_tags']) == 195 array(loaded_dict['triangle_tags']), 196 'test_export_triangulation_file failed. Test 4') 197 198 self.failUnless(dict['vertex_attributes'] == 199 loaded_dict['vertex_attributes'], 200 'test_export_triangulation_file failed. Test 5') 201 self.failUnless(array(dict['triangle_neighbors']) == 202 array(loaded_dict['triangle_neighbors']), 203 'test_export_triangulation_file failed. Test 6') 204 self.failUnless(array(dict['segment_tags']) == 205 array(loaded_dict['segment_tags']), 206 'test_export_triangulation_file failed. Test 7') 207 self.failUnless(array(dict['vertex_attribute_titles']) == 208 array(loaded_dict['vertex_attribute_titles']), 209 'test_export_triangulation_file failed. Test 8') 210 145 211 def test_loadpts(self): 146 212
Note: See TracChangeset
for help on using the changeset viewer.