Changeset 935
- Timestamp:
- Feb 21, 2005, 5:21:02 PM (20 years ago)
- Location:
- inundation/ga/storm_surge/pmesh
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
inundation/ga/storm_surge/pmesh/load_mesh/loadASCII.py
r887 r935 66 66 67 67 def read_triangulation(fd): 68 """ 69 Read the generated triangulation, NOT the outline. 70 """ 68 71 delimiter = " " 69 72 ######### loading the point info … … 451 454 Following lines: <segment #> <vertex #> <vertex #> [boundary marker] 452 455 """ 456 #print "DSG************" 457 #print "gen_dict",gen_dict 458 #print "DSG************" 453 459 try: 454 460 fd = open(ofile,'w') … … 458 464 msg = 'Could not write file %s ' %fileName 459 465 raise IOError, msg 466 467 468 def write_ASCII_mesh(fd, 469 dict): 470 points = dict['pointlist'] 471 point_attributes = dict['pointattributelist'] 472 segments = dict['segmentlist'] 473 segment_markers = dict['segmentmarkerlist'] 474 holes = dict['holelist'] 475 regions = dict['regionlist'] 476 477 num_points = str(len(points)) 478 if (num_points == "0"): 479 num_point_atts = "0" 480 else: 481 num_point_atts = str(len(point_attributes[0])) 482 fd.write(num_points + " " + num_point_atts + " # <# of verts> <# of vert attributes>, next lines <vertex #> <x> <y> [attributes] ...Mesh Vertices..." + "\n") 483 484 # <x> <y> [attributes] 485 for i,point in enumerate(points): 486 attlist = "" 487 for att in point_attributes[i]: 488 attlist = attlist + str(att)+" " 489 attlist.strip() 490 fd.write(str(i) + " " 491 +str(point[0]) + " " 492 + str(point[1]) + " " 493 + attlist + "\n") 494 495 #One line: <# of segments> 496 fd.write(str(len(segments)) + 497 " # <# of segments>, next lines <segment #> <vertex #> <vertex #> [boundary marker] ...Mesh Segments..." + "\n") 498 499 #Following lines: <vertex #> <vertex #> [boundary marker] 500 for i,seg in enumerate(segments): 501 fd.write(str(i) + " " 502 + str(seg[0]) + " " 503 + str(seg[1]) + " " 504 + str(segment_markers[i]) + "\n") 505 506 #One line: <# of holes> 507 fd.write(str(len(holes)) + 508 " # <# of holes>, next lines <Hole #> <x> <y> ...Mesh Holes..." + "\n") 509 # <x> <y> 510 for i,h in enumerate(holes): 511 fd.write(str(i) + " " 512 + str(h[0]) + " " 513 + str(h[1]) + "\n") 514 515 #One line: <# of regions> 516 fd.write(str(len(regions)) + 517 " # <# of regions>, next lines <Region #> <x> <y> <tag>...Mesh Regions..." + "\n") 518 # <index> <x> <y> <tag> 519 #print "regions",regions 520 for i,r in enumerate(regions): 521 #print "r",r 522 fd.write(str(i) + " " 523 + str(r[0]) + " " 524 + str(r[1])+ " " 525 + str(r[2]) + "\n") 526 527 # <index> [<MaxArea>|""] 528 529 #One line: <# of regions> 530 fd.write(str(len(regions)) + 531 " # <# of regions>, next lines <Region #> [Max Area] ...Mesh Regions..." + "\n") 532 for i,r in enumerate(regions): 533 if len(r) < 4: 534 area = "" 535 else: 536 area = str(r[3]) 537 538 fd.write(str(i) + " " + area + "\n") 539 460 540 461 541 ## used by alpha shapes -
inundation/ga/storm_surge/pmesh/load_mesh/test_loadASCII.py
r891 r935 22 22 from Numeric import array #Float, arrayrange, concatenate 23 23 24 #FIXME (DSG): remove this dependency25 from mesh import *26 24 from loadASCII import * 27 25 from Numeric import array, allclose … … 34 32 pass 35 33 36 37 # FIXME move this to meshharness. have a test that doesn't depend on mesh 38 def ztest_import_triangulation(self): 39 40 a_att = [5,2] 41 d_att =[4,2] 42 f_att = [3,2] 43 e_att = [2,2] 44 a_xy = [0.0, 0.0] 45 a = Vertex ( a_xy[0],a_xy[1]) #, attributes =a_att) 46 d = Vertex (0.0, 4.0) #, attributes =d_att) 47 f = Vertex (4.0,0.0) #, attributes =f_att) 48 e = Vertex (1.0,1.0) #, attributes =e_att) 49 50 s1 = Segment(a,d, marker = "50") 51 s2 = Segment(d,f, marker = "40") 52 s3 = Segment(a,f, marker = "30") 53 s4 = Segment(a,e, marker = "20") 54 55 r1 = Region(0.3, 0.3,tag = "1.3", maxArea = 45) 56 m = Mesh(userVertices=[a,d,f,e], 57 userSegments=[s1,s2,s3,s4], 58 regions=[r1]) 59 60 m.generateMesh("QApza2.1") 61 62 seg = m.getMeshSegments() 63 points = m.getMeshVertices() 64 34 35 def test_import_mesh(self): 36 dict ={} 37 dict['segmentlist'] = [(0, 1), (1, 2), (0, 2), (0, 3)] 38 dict['segmentmarkerlist'] = ['50', '40', '30', '20'] 39 dict['holelist'] = [(0.2, 0.6)] 40 dict['pointattributelist'] = [[5, 2], [4, 2], [3, 2], [2,2]] 41 dict['regionlist'] = [(0.3, 0.3, '1.3',36.0)] 42 dict['pointlist'] = [(0.0, 0.0), (0.0, 4.0), (4.0, 0.0), (1.0, 1.0)] 43 65 44 fileName = tempfile.mktemp(".txt") 66 #print "fileName",fileName 67 68 #print "", 69 #print "", 70 71 m.exportASCIItriangulationfile(fileName) 72 73 dict = import_triangulation(fileName) 74 os.remove(fileName) 75 45 fd = open(fileName,'w') 46 write_ASCII_mesh(fd,dict) 47 fd.close() 48 loaded_dict = import_mesh(fileName) 49 os.remove(fileName) 50 51 #gen_dict = 52 #print "*********************" 76 53 #print dict 77 #print "seg",seg 78 for pimport,pactual,pimpatt in map(None,dict['generatedpointlist'],points,dict['generatedpointattributelist']): 79 self.failUnless( pimport == [pactual.x,pactual.y], 80 'loadASCIITestCase failed. test 1') 81 self.failUnless( pimpatt == pactual.attributes, 82 'loadASCIITestCase failed. test 1.1') 83 self.failUnless( dict['segmentlist'][0] == [0,1], 84 'loadASCIITestCase failed. test 3') 85 for segimp,segactual in map(None,dict['generatedsegmentmarkerlist'],seg): 86 self.failUnless( segimp == segactual.marker, 87 'loadASCIITestCase failed. test 4') 88 self.failUnless( dict['generatedtrianglelist'][0] == [3,2,4], 89 'loadASCIITestCase failed. test 5') 90 self.failUnless( dict['generatedtriangleneighborlist'][0] == [-1,2,3], 54 #print "**loaded_dict*******************" 55 #print loaded_dict 56 #print "*********************" 57 58 59 self.failUnless(array(loaded_dict['pointlist']) == 60 array(dict['pointlist']), 61 'test_import_mesh failed. Test 1') 62 self.failUnless(array(loaded_dict['pointattributelist']) == 63 array(dict['pointattributelist']), 64 'test_import_mesh failed. Test 2') 65 self.failUnless(array(loaded_dict['segmentlist']) == 66 array(dict['segmentlist']), 67 'test_import_mesh failed. Test 3') 68 self.failUnless(array(loaded_dict['segmentmarkerlist']) == 69 array(dict['segmentmarkerlist']), 70 'test_import_mesh failed. Test 4') 71 72 for regimp,regactual,regattimp, regmaxarea in map(None,loaded_dict['regionlist'],dict['regionlist'], loaded_dict['regionattributelist'], loaded_dict['regionmaxarealist']): 73 self.failUnless( regimp == [regactual[0],regactual[1]], 91 74 'loadASCIITestCase failed. test 6') 92 self.failUnless( dict['generatedtriangleattributelist'][0] == ["1.3"], 93 'loadASCIITestCase failed. test 7') 94 95 96 # FIXME move this to meshharness. have a test that doesn't depend on mesh 97 def ztest_import_mesh(self): 98 99 a_att = [5,2] 100 d_att =[4,2] 101 f_att = [3,2] 102 e_att = [2,2] 103 a_xy = [0.0, 0.0] 104 a = Vertex ( a_xy[0],a_xy[1], attributes =a_att) 105 d = Vertex (0.0, 4.0, attributes =d_att) 106 f = Vertex (4.0,0.0, attributes =f_att) 107 e = Vertex (1.0,1.0, attributes =e_att) 108 109 s1 = Segment(a,d, marker = "50") 110 s2 = Segment(d,f, marker = "40") 111 s3 = Segment(a,f, marker = "30") 112 s4 = Segment(a,e, marker = "20") 113 114 r1 = Region(0.3, 0.3,tag = "1.3", maxArea = 36) 115 116 117 h1 = Hole(0.2,0.6) 118 119 m = Mesh(userVertices=[a,d,f,e], 120 userSegments=[s1,s2,s3,s4], 121 regions=[r1], 122 holes=[h1]) 123 124 seg = m.getUserSegments() 125 points = m.getUserVertices() 126 holes = m.getHoles() 127 regions = m.getRegions() 128 fileName = tempfile.mktemp(".txt") 129 m.exportASCIImeshfile(fileName) 130 #print "***************************fileName", fileName 131 dict = import_mesh(fileName) 132 os.remove(fileName) 133 134 #print dict 135 136 for pimport,pactual,pimpatt in map(None,dict['pointlist'],points,dict['pointattributelist']): 137 self.failUnless( pimport == [pactual.x,pactual.y], 138 'loadASCIITestCase failed. test 1') 139 self.failUnless( pimpatt == pactual.attributes, 140 'loadASCIITestCase failed. test 1.1') 141 self.failUnless( dict['segmentlist'][0] == [0,1], 142 'loadASCIITestCase failed. test 3') 143 for segimp,segactual in map(None,dict['segmentmarkerlist'],seg): 144 self.failUnless( segimp == segactual.marker, 145 'loadASCIITestCase failed. test 4') 146 for holeimp,holeactual in map(None,dict['holelist'],holes): 147 self.failUnless( holeimp == [holeactual.x,holeactual.y], 148 'loadASCIITestCase failed. test 5') 149 for regimp,regactual,regattimp, regmaxarea in map(None,dict['regionlist'],regions, dict['regionattributelist'], dict['regionmaxarealist']): 150 self.failUnless( regimp == [regactual.x,regactual.y], 151 'loadASCIITestCase failed. test 6') 152 self.failUnless( regattimp == regactual.getTag(), 75 self.failUnless( regattimp == regactual[2], 153 76 'loadASCIITestCase failed. test 7') 154 self.failUnless( regmaxarea == regactual .getMaxArea(),77 self.failUnless( regmaxarea == regactual[3], 155 78 'loadASCIITestCase failed. test 7') 156 79 157 80 81 self.failUnless(array(loaded_dict['holelist']) == 82 array(dict['holelist']), 83 'test_import_mesh failed. Test 6') 84 158 85 def test_export_triangulation_file(self): 159 86 import os -
inundation/ga/storm_surge/pmesh/mesh.py
r915 r935 802 802 return deletedObs 803 803 804 def Mesh2triangList(self): 804 def Mesh2triangList(self, userVertices=None, 805 userSegments=None, 806 holes=None, 807 regions=None): 805 808 """ 806 809 Convert the Mesh to a dictionary of the lists needed for the triang modul; … … 813 816 """ 814 817 818 if userVertices is None: 819 userVertices = self.getUserVertices() 820 if userSegments is None: 821 userSegments = self.getUserSegments() 822 if holes is None: 823 holes = self.getHoles() 824 if regions is None: 825 regions = self.getRegions() 826 815 827 meshDict = {} 816 828 … … 818 830 pointattributelist=[] 819 831 index = 0 820 for vertex in self.userVertices:832 for vertex in userVertices: 821 833 vertex.index = index 822 834 pointlist.append((vertex.x,vertex.y)) … … 829 841 segmentlist=[] 830 842 segmentmarkerlist=[] 831 for seg in self.getUserSegments():843 for seg in userSegments: 832 844 segmentlist.append((seg.vertices[0].index,seg.vertices[1].index)) 833 845 segmentmarkerlist.append(seg.marker) 834 846 meshDict['segmentlist'] =segmentlist 835 847 meshDict['segmentmarkerlist'] =segmentmarkerlist 848 836 849 holelist=[] 837 for hole in self.holes:850 for hole in holes: 838 851 holelist.append((hole.x,hole.y)) 839 852 meshDict['holelist'] = holelist 840 853 841 854 regionlist=[] 842 for region in self.regions:855 for region in regions: 843 856 if (region.getMaxArea() != None): 844 857 regionlist.append((region.x,region.y,region.getTag(), … … 1511 1524 #Most probably, the Tkinter module is not available. 1512 1525 #""" 1513 1526 1527 # Is this used by anything? 1514 1528 def exportASCIItriangulationfile(self,ofile): 1515 1529 """ … … 1545 1559 meshDict['generatedsegmentlist'] = [] 1546 1560 meshDict['generatedsegmentmarkerlist'] = [] 1547 1548 1561 meshDict['generatedtrianglelist'] = [] 1549 1562 meshDict['generatedtriangleattributelist'] = [] … … 1636 1649 holes, 1637 1650 regions): 1638 numVert = str(len(userVertices)) 1639 if (numVert == "0"): 1640 numVertAttrib = "0" 1641 else: 1642 numVertAttrib = str(len(userVertices[0].attributes)) 1643 fd.write(numVert + " " + numVertAttrib + " # <# of verts> <# of vert attributes>, next lines <vertex #> <x> <y> [attributes] ...Mesh Vertices..." + "\n") 1644 1645 # <x> <y> [attributes] 1646 index = 0 1647 for vert in userVertices: 1648 vert.index = index 1649 index += 1 1650 attlist = "" 1651 for att in vert.attributes: 1652 attlist = attlist + str(att)+" " 1653 attlist.strip() 1654 fd.write(str(vert.index) + " " 1655 +str(vert.x) + " " 1656 + str(vert.y) + " " 1657 + attlist + "\n") 1658 1659 #One line: <# of segments> 1660 fd.write(str(len(userSegments)) + 1661 " # <# of segments>, next lines <segment #> <vertex #> <vertex #> [boundary marker] ...Mesh Segments..." + "\n") 1662 1663 #Following lines: <vertex #> <vertex #> [boundary marker] 1664 index = 0 1665 for seg in userSegments: 1666 fd.write(str(index) + " " 1667 + str(seg.vertices[0].index) + " " 1668 + str(seg.vertices[1].index) + " " 1669 + str(seg.marker) + "\n") 1670 index += 1 1671 1672 #One line: <# of holes> 1673 fd.write(str(len(holes)) + 1674 " # <# of holes>, next lines <Hole #> <x> <y> ...Mesh Holes..." + "\n") 1675 # <x> <y> 1676 index = 0 1677 for h in holes: 1678 fd.write(str(index) + " " 1679 + str(h.x) + " " 1680 + str(h.y) + "\n") 1681 index += 1 1682 1683 #One line: <# of regions> 1684 fd.write(str(len(regions)) + 1685 " # <# of regions>, next lines <Region #> <x> <y> <tag>...Mesh Regions..." + "\n") 1686 # <index> <x> <y> <tag> 1687 index = 0 1688 for r in regions: 1689 fd.write(str(index) + " " 1690 + str(r.x) + " " 1691 + str(r.y)+ " " 1692 + str(r.getTag()) + "\n") 1693 index += 1 1694 index = 0 1695 1696 # <index> [<MaxArea>|""] 1697 1698 #One line: <# of regions> 1699 fd.write(str(len(regions)) + 1700 " # <# of regions>, next lines <Region #> [Max Area] ...Mesh Regions..." + "\n") 1701 for r in regions: 1702 area = r.getMaxArea() 1703 if area == None: 1704 area = "" 1705 else: 1706 area = str(area) 1707 1708 fd.write(str(index) + " " + area + "\n") 1709 index += 1 1651 1652 dict = self.Mesh2triangList(userVertices, 1653 userSegments, 1654 holes, 1655 regions) 1656 #print "mesh*********" 1657 #print "dict",dict 1658 #print "mesh*********" 1659 load_mesh.loadASCII.write_ASCII_mesh(fd, dict) 1710 1660 1711 1661 def exportxyafile(self,ofile): -
inundation/ga/storm_surge/pmesh/meshHarness.py
r920 r935 759 759 m_returned = importMeshFromFile(fileName) 760 760 761 #print "m_returned ****",m_returned761 print "m_returned ****",m_returned 762 762 #print "****************** fileName", fileName 763 763 os.remove(fileName) … … 768 768 m.meshSegments = [] 769 769 m.userVertices=[a,b,c] 770 print "mesh ***************dsg*", m 770 771 #print "(m.__cmp__(m_returned)", m.__cmp__(m_returned) 771 772 self.failUnless(0 == m.__cmp__(m), … … 1050 1051 self.failUnless(len(m.userVertices) == 11, 1051 1052 'Wrong vertex list length.') 1053 1054 def test_exportASCIImeshfile(self): 1055 1056 a_att = [5,2] 1057 d_att =[4,2] 1058 f_att = [3,2] 1059 e_att = [2,2] 1060 a_xy = [0.0, 0.0] 1061 a = Vertex ( a_xy[0],a_xy[1], attributes =a_att) 1062 d = Vertex (0.0, 4.0, attributes =d_att) 1063 f = Vertex (4.0,0.0, attributes =f_att) 1064 e = Vertex (1.0,1.0, attributes =e_att) 1065 1066 s1 = Segment(a,d, marker = "50") 1067 s2 = Segment(d,f, marker = "40") 1068 s3 = Segment(a,f, marker = "30") 1069 s4 = Segment(a,e, marker = "20") 1070 1071 r1 = Region(0.3, 0.3,tag = "1.3", maxArea = 36) 1072 1073 1074 h1 = Hole(0.2,0.6) 1075 1076 m = Mesh(userVertices=[a,d,f,e], 1077 userSegments=[s1,s2,s3,s4], 1078 regions=[r1], 1079 holes=[h1]) 1080 1081 seg = m.getUserSegments() 1082 points = m.getUserVertices() 1083 holes = m.getHoles() 1084 regions = m.getRegions() 1085 fileName = tempfile.mktemp(".txt") 1086 m.exportASCIImeshfile(fileName) 1087 #print "***************************fileName", fileName 1088 dict = import_mesh(fileName) 1089 os.remove(fileName) 1090 1091 for pimport,pactual,pimpatt in map(None,dict['pointlist'],points,dict['pointattributelist']): 1092 self.failUnless( pimport == [pactual.x,pactual.y], 1093 'loadASCIITestCase failed. test 1') 1094 self.failUnless( pimpatt == pactual.attributes, 1095 'loadASCIITestCase failed. test 1.1') 1096 self.failUnless( dict['segmentlist'][0] == [0,1], 1097 'loadASCIITestCase failed. test 3') 1098 for segimp,segactual in map(None,dict['segmentmarkerlist'],seg): 1099 self.failUnless( segimp == segactual.marker, 1100 'loadASCIITestCase failed. test 4') 1101 for holeimp,holeactual in map(None,dict['holelist'],holes): 1102 self.failUnless( holeimp == [holeactual.x,holeactual.y], 1103 'loadASCIITestCase failed. test 5') 1104 for regimp,regactual,regattimp, regmaxarea in map(None,dict['regionlist'],regions, dict['regionattributelist'], dict['regionmaxarealist']): 1105 self.failUnless( regimp == [regactual.x,regactual.y], 1106 'loadASCIITestCase failed. test 6') 1107 self.failUnless( regattimp == regactual.getTag(), 1108 'loadASCIITestCase failed. test 7') 1109 self.failUnless( regmaxarea == regactual.getMaxArea(), 1110 'loadASCIITestCase failed. test 7') 1111 1052 1112 1053 1113 #------------------------------------------------------------- 1054 1114 if __name__ == "__main__": 1055 1115 suite = unittest.makeSuite(meshTestCase,'test') 1056 #suite = unittest.makeSuite(meshTestCase,'test_load')1057 1116 #suite = unittest.makeSuite(meshTestCase,'test_import_mesh') 1058 1117 runner = unittest.TextTestRunner() #verbosity=2)
Note: See TracChangeset
for help on using the changeset viewer.