def testregion_with_maxarea(self): points = [] seglist = [] holelist = [] regionlist = [(3, 1, 1.0)] points = [(0.0, 0.0), (6.0, 0.0), (6.0, 6.0), (0.0, 6.0)] pointattlist = [[], [], [], []] seglist = [(0, 1), (1, 2), (3, 2), (3, 0), (0, 2)] segattlist = [0, 0, 0, 0, 0] mode = "Qzpna36a" data = generate_mesh(points, seglist, holelist, regionlist, pointattlist, segattlist, mode, points) self.assertTrue( len(data['generatedtrianglelist']) == 2, 'testregion_with_maxarea 1: # of tris is wrong!') # Another test case regionlist = [(3, 1, 1.0), (1, 3, 1.0, 8.0)] mode = "Qzp21na36a" data = generate_mesh(points, seglist, holelist, regionlist, pointattlist, segattlist, mode, points) # print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist']) # for Duncan On unix this returns a 7 triangle result. # for Duncan on Windows returns a 6 triangle result. # for Ole on nautilus this returns 6 # for Duncan on nautilus this returns 7 # It seems to be the results from triangle that is # causing the different results, and we are treating # triangle as a back box. self.assertTrue( len(data['generatedtrianglelist']) >= 6, 'testregion_with_maxarea 2: # of tris is wrong!') # Another test case regionlist = [(3, 1, 1.0, 8.0), (1, 3, 1.0, 8.0)] mode = "Qzpna36a" data = generate_mesh(points, seglist, holelist, regionlist, pointattlist, segattlist, mode, points) # print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist']) # On unix this returns a 10 triangle result. # Windows returns a 8 triangle result. self.assertTrue( len(data['generatedtrianglelist']) >= 8, 'testregion_with_maxarea 3: # of tris is wrong!') # Another test case regionlist = [(3, 1, 1.0), (1, 3, 1.0, 8.0)] mode = "Qzpna8a" data = generate_mesh(points, seglist, holelist, regionlist, pointattlist, segattlist, mode, points) # print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist']) # On unix this returns a 10 triangle result. # Windows returns a 8 triangle result. self.assertTrue( len(data['generatedtrianglelist']) >= 8, 'testregion_with_maxarea 4: # of tris is wrong!')
def testregion_with_maxarea(self): points = [] seglist = [] holelist = [] regionlist = [(3,1,1.0)] points = [(0.0,0.0),(6.0,0.0),(6.0,6.0),(0.0,6.0)] pointattlist = [[],[],[],[]] seglist = [(0,1),(1,2),(3,2),(3,0),(0,2)] segattlist = [0,0,0,0,0] mode = "Qzpna36a" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) self.assertTrue(len(data['generatedtrianglelist']) == 2, 'testregion_with_maxarea 1: # of tris is wrong!') ## Another test case regionlist = [(3,1,1.0),(1,3,1.0,8.0)] mode = "Qzp21na36a" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) #print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist']) # for Duncan On unix this returns a 7 triangle result. # for Duncan on Windows returns a 6 triangle result. # for Ole on nautilus this returns 6 # for Duncan on nautilus this returns 7 # It seems to be the results from triangle that is # causing the different results, and we are treating # triangle as a back box. self.assertTrue(len(data['generatedtrianglelist']) >= 6, 'testregion_with_maxarea 2: # of tris is wrong!') ## Another test case regionlist = [(3,1,1.0,8.0),(1,3,1.0,8.0)] mode = "Qzpna36a" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) #print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist']) # On unix this returns a 10 triangle result. # Windows returns a 8 triangle result. self.assertTrue(len(data['generatedtrianglelist']) >= 8, 'testregion_with_maxarea 3: # of tris is wrong!') ## Another test case regionlist = [(3,1,1.0),(1,3,1.0,8.0)] mode = "Qzpna8a" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) #print "len(data['generatedtrianglelist']",len(data['generatedtrianglelist']) # On unix this returns a 10 triangle result. # Windows returns a 8 triangle result. self.assertTrue(len(data['generatedtrianglelist']) >= 8, 'testregion_with_maxarea 4: # of tris is wrong!')
def testrectangleIIc(self): points = [] seglist = [] holelist = [] regionlist = [] points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)] pointattlist = None regionlist.append( (1.2,1.2,5.0) ) seglist = [(0,1),(1,3),(3,2),(2,0)] segattlist = None mode = "Qzp" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) correct = num.array([(1, 0, 2), (2, 3, 1)]) self.assertTrue(num.alltrue(data['generatedtrianglelist'].flat == \ correct.flat), 'trianglelist is wrong!') correct = num.array([(0, 1), (1, 3), (3, 2), (2, 0)]) self.assertTrue(num.alltrue(data['generatedsegmentlist'].flat == \ correct.flat), 'segmentlist is wrong!') correct = num.array([(0.0, 0.0), (0.0, 10.0), (3.0, 0.0), (3.0, 10.0)]) self.assertTrue(num.allclose(data['generatedpointlist'].flat, \ correct.flat), 'Failed')
def testsegmarker(self): holelist = [] regionlist = [] points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)] pointattlist = [[],[],[],[]] regionlist.append( (1.2,1.2,5.0) ) seglist = [(0,1),(1,3),(3,2),(2,0)] segattlist = [1.0,2.0,3.0,4.0] mode = "Qzp" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) correct = num.array([(1, 0, 2), (2, 3, 1)]) self.assertTrue(num.alltrue(data['generatedtrianglelist'].flat == \ correct.flat), 'trianglelist is wrong!') correct = num.array([(0, 1), (1, 3), (3, 2), (2, 0)]) self.assertTrue(num.alltrue(data['generatedsegmentlist'].flat == \ correct.flat), 'segmentlist is wrong!') correct = num.array([(0.0, 0.0), (0.0, 10.0), (3.0, 0.0), (3.0, 10.0)]) self.assertTrue(num.allclose(data['generatedpointlist'].flat, \ correct.flat), 'Failed') self.assertTrue(num.alltrue(data['generatedsegmentmarkerlist'] == \ num.array([1,2,3,4])), 'Failed!')
def test_numeric_arrays(self): points = [] seglist = [] holelist = [] regionlist = [] points = [(0.0, 0.0), (0.0, 10.0), (3.0, 0.0), (3.0, 10.0)] pointattlist = [] # 5.0 is the region tag, 99.0 is the max area tri_tag = 123456.0 regionlist.append([0.2, 0.2, tri_tag, 99.0]) seglist = [(0, 1), (1, 3), (3, 2), (2, 0)] segattlist = [21, 22, 23, 24] # The 'A' has to be there to get the region marker stuff working mode = "QzpnA" #mode = "jQpznAa2000.1a" #print('mode', mode) data = generate_mesh(points, seglist, holelist, regionlist, pointattlist, segattlist, mode, points) #print("data", data) correct = num.array([(1, 0, 2), (2, 3, 1)]) self.assertTrue( num.alltrue(data['generatedtrianglelist'].flat == correct.flat), 'trianglelist is wrong!') correct = num.array([(0, 1), (1, 3), (3, 2), (2, 0)]) self.assertTrue( num.alltrue(data['generatedsegmentlist'].flat == correct.flat), 'segmentlist is wrong!') correct = num.array([(0.0, 0.0), (0.0, 10.0), (3.0, 0.0), (3.0, 10.0)]) self.assertTrue( num.allclose(data['generatedpointlist'].flat, correct.flat), 'Failed') correct = num.array([[tri_tag], [tri_tag]]) self.assertTrue( num.allclose(data['generatedtriangleattributelist'].flat, correct.flat), 'Failed') correct = num.array([(0, 1), (1, 3), (3, 2), (2, 0)]) self.assertTrue( num.alltrue(data['generatedsegmentlist'].flat == correct.flat), 'Failed!') correct = num.array(segattlist, num.int) self.assertTrue( num.allclose(data['generatedsegmentmarkerlist'].flat, correct.flat), 'Failed') # I copied these answers from the output, so bad test.. correct = num.array([(-1, 1, -1), (-1, 0, -1)]) self.assertTrue( num.alltrue( data['generatedtriangleneighborlist'].flat == correct.flat), 'Failed!')
def test_numeric_arrays(self): points = [] seglist = [] holelist = [] regionlist = [] points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)] pointattlist = [] # 5.0 is the region tag, 99.0 is the max area tri_tag = 123456.0 regionlist.append( [0.2,0.2, tri_tag,99.0] ) seglist = [(0,1),(1,3),(3,2),(2,0)] segattlist = [21,22,23,24] #The 'A' has to be there to get the region marker stuff working mode = "QzpnA" #mode = "jQpznAa2000.1a" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) #print "data", data correct = num.array([(1, 0, 2), (2, 3, 1)]) self.assertTrue(num.alltrue(data['generatedtrianglelist'].flat == \ correct.flat), 'trianglelist is wrong!') correct = num.array([(0, 1), (1, 3), (3, 2), (2, 0)]) self.assertTrue(num.alltrue(data['generatedsegmentlist'].flat == \ correct.flat), 'segmentlist is wrong!') correct = num.array([(0.0, 0.0), (0.0, 10.0), (3.0, 0.0), (3.0, 10.0)]) self.assertTrue(num.allclose(data['generatedpointlist'].flat, \ correct.flat), 'Failed') correct = num.array([[tri_tag], [tri_tag]]) self.assertTrue(num.allclose(data['generatedtriangleattributelist'].flat, \ correct.flat), 'Failed') correct = num.array([(0, 1), (1, 3), (3, 2), (2, 0)]) self.assertTrue(num.alltrue(data['generatedsegmentlist'].flat == \ correct.flat), 'Failed!') correct = num.array(segattlist, num.int) self.assertTrue(num.allclose(data['generatedsegmentmarkerlist'].flat, correct.flat), 'Failed') # I copied these answers from the output, so bad test.. correct = num.array([(-1, 1, -1), (-1, 0, -1)]) self.assertTrue(num.alltrue(data['generatedtriangleneighborlist'].flat == \ correct.flat), 'Failed!')
def test_pointattlist(self): # segattlist = [] points = [] seglist = [] holelist = [] regionlist = [] points = [(0.0,0.0),(0.0,4.0),(4.0,2.0),(2.0,0.0)] pointattlist = [0.,0.,10.,10.] regionlist.append( [0.2,0.2,2.1, 99.] ) seglist = [(0,1),(1,2),(2,3),(3,0)] segattlist = [11,12,13,14] mode = "Qzp" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) correct = num.array([[0.0],[0.0],[10],[10]]) self.assertTrue(num.allclose(data['generatedpointattributelist'].flat, \ correct.flat), 'Failed') pointattlist = [[0.],[0.],[10.],[10.]] mode = "Qzp" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) correct = num.array([[0.0],[0.0],[10],[10]]) self.assertTrue(num.allclose(data['generatedpointattributelist'].flat, \ correct.flat), 'Failed') pointattlist = [[0.,1],[0.,1],[10.,20],[10.,20]] mode = "Qzp" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) #print "data", data correct = num.array(pointattlist) self.assertTrue(num.allclose(data['generatedpointattributelist'].flat, \ correct.flat), 'Failed')
def _alpha_shape_algorithm(self, alpha=None): """ Given a set of points (self.points) and an optional alpha value determines the alpha shape boundary (stored in self.boundary, accessed by get_boundary). Inputs: alpha: The alpha value can be optionally specified. If it is not specified the optimum alpha value will be used. """ self.alpha = alpha ## Build Delaunay triangulation from anuga.mesh_engine.mesh_engine import generate_mesh points = [] seglist = [] holelist = [] regionlist = [] pointattlist = [] segattlist = [] points = [(pt[0], pt[1]) for pt in self.points] pointattlist = [[] for i in range(len(points))] mode = "Qzcn" tridata = generate_mesh(points, seglist, holelist, regionlist, pointattlist, segattlist, mode) self.deltri = tridata['generatedtrianglelist'] self.deltrinbr = tridata['generatedtriangleneighborlist'] self.hulledges = tridata['generatedsegmentlist'] ## Build Alpha table ## the following routines determine alpha thresholds for the ## triangles, edges, and vertices of the delaunay triangulation self._tri_circumradius() self._edge_intervals() self._vertex_intervals() if alpha == None: # Find optimum alpha # Ken Clarkson's hull program uses smallest alpha so that # every vertex is non-singular so... self.optimum_alpha = max([iv[0] for iv in self.vertexinterval \ if iv!=[] ]) alpha = self.optimum_alpha self.alpha = alpha reg_edge = self.get_regular_edges(self.alpha) self.boundary = [self.edge[k] for k in reg_edge] self._init_boundary_triangles() return
def _alpha_shape_algorithm(self, alpha=None): """ Given a set of points (self.points) and an optional alpha value determines the alpha shape boundary (stored in self.boundary, accessed by get_boundary). Inputs: alpha: The alpha value can be optionally specified. If it is not specified the optimum alpha value will be used. """ self.alpha = alpha ## Build Delaunay triangulation from anuga.mesh_engine.mesh_engine import generate_mesh points = [] seglist = [] holelist = [] regionlist = [] pointattlist = [] segattlist = [] points = [(pt[0], pt[1]) for pt in self.points] pointattlist = [ [] for i in range(len(points)) ] mode = "Qzcn" tridata = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist,mode) self.deltri = tridata['generatedtrianglelist'] self.deltrinbr = tridata['generatedtriangleneighborlist'] self.hulledges = tridata['generatedsegmentlist'] ## Build Alpha table ## the following routines determine alpha thresholds for the ## triangles, edges, and vertices of the delaunay triangulation self._tri_circumradius() self._edge_intervals() self._vertex_intervals() if alpha==None: # Find optimum alpha # Ken Clarkson's hull program uses smallest alpha so that # every vertex is non-singular so... self.optimum_alpha = max([iv[0] for iv in self.vertexinterval \ if iv!=[] ]) alpha = self.optimum_alpha self.alpha = alpha reg_edge = self.get_regular_edges(self.alpha) self.boundary = [self.edge[k] for k in reg_edge] self._init_boundary_triangles() return
def testbad_segattlist(self): holelist = [] regionlist = [] points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)] pointattlist = [[],[],[],[]] seglist = [(0,1),(1,3),(3,2),(2,0)] segattlist = [0,0] mode = "Qzpn" try: data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) except ANUGAError: pass else: self.assertTrue(0 ==1, 'bad segment attribute list did not raise error!')
def FIXME_bad_hole(self): holelist = [(9.0)] regionlist = [] points = [(0.0, 0.0), (0.0, 10.0), (3.0, 0.0), (3.0, 10.0)] pointattlist = [[], [], [], []] seglist = [(0, 1), (1, 3), (3, 2), (2, 0)] segattlist = [0, 0, 0, 0] mode = "Qzpn" try: data = generate_mesh(points, seglist, holelist, regionlist, pointattlist, segattlist, mode, points) except TypeError: pass else: self.assertTrue(0 == 1, 'bad hole list did not raise error!')
def FIXME_bad_hole(self): holelist = [(9.0)] regionlist = [] points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)] pointattlist = [[],[],[],[]] seglist = [(0,1),(1,3),(3,2),(2,0)] segattlist = [0,0,0,0] mode = "Qzpn" try: data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) except TypeError: pass else: self.assertTrue(0 ==1, 'bad hole list did not raise error!')
def test_bad_point_attsII(self): points = [] seglist = [] holelist = [] regionlist = [] points = [(0.0, 0.0), (0.0, 10.0), (3.0, 0.0), (3.0, 10.0)] pointattlist = [[1], [2], [3], [4, 8]] regionlist.append((1.2, 1.2, 5.0)) seglist = [(0, 1), (1, 3), (3, 2), (2, 0)] segattlist = [0, 0, 0, 0] mode = "Qzp" try: data = generate_mesh(points, seglist, holelist, regionlist, pointattlist, segattlist, mode, points) except ANUGAError: pass else: self.assertTrue(0 == 1, 'bad list did not raise error!')
def testrectangle_regionsII(self): points = [] seglist = [] holelist = [] regionlist = [] points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)] pointattlist = [[],[],[],[]] #it seems that #triangle only associates one region with a triangle regionlist.append( [1.3,1.3,88.33] ) regionlist.append( [1.2,1.2,77,55] ) seglist = [(0,1),(1,3),(3,2),(2,0)] segattlist = [0,0,0,0] mode = "QAzpq" data = generate_mesh(points,seglist,holelist,regionlist, pointattlist,segattlist, mode, points) correct = num.array([[77.0], [77.0], [77.0], [77.0]]) self.assertTrue(num.allclose(data['generatedtriangleattributelist'].flat, correct.flat), 'Failed')
def test_bad_point_attsII(self): points = [] seglist = [] holelist = [] regionlist = [] points = [(0.0,0.0),(0.0,10.0),(3.0,0.0),(3.0,10.0)] pointattlist = [[1],[2],[3],[4,8]] regionlist.append( (1.2,1.2,5.0) ) seglist = [(0,1),(1,3),(3,2),(2,0)] segattlist = [0,0,0,0] mode = "Qzp" try: data = generate_mesh(points,seglist,holelist, regionlist,pointattlist,segattlist, mode, points) except ANUGAError: pass else: self.assertTrue(0 ==1, 'bad list did not raise error!')