source: branches/inundation-numpy-branch/pmesh/test_mesh.py @ 7447

Last change on this file since 7447 was 3514, checked in by duncan, 19 years ago

Hi all,
I'm doing a change in the anuga structure, moving the code to

\anuga_core\source\anuga

After you have done an svn update, the PYTHONPATH has to be changed to;
PYTHONPATH = anuga_core/source/

This is part of changes required to make installation of anuga quicker and reducing the size of our sandpits.

If any imports are broken, try fixing them. With adding anuga. to them for example. If this seems to have really broken things, email/phone me.

Cheers
Duncan

File size: 70.7 KB
Line 
1#!/usr/bin/env python
2#
3import tempfile
4import unittest
5
6try:
7    from pmesh.mesh import *
8except ImportError: 
9    from mesh import *
10   
11from mesh import *
12from load_mesh.loadASCII import *
13from coordinate_transforms.geo_reference import Geo_reference
14from anuga.utilities.polygon import inside_polygon
15
16class meshTestCase(unittest.TestCase):
17    def setUp(self):
18        pass
19   
20    def tearDown(self):
21        pass
22
23    def testPointDistance(self):
24        a = Point(0.0, 0.0)
25        b = Point(0.0, 10.0)
26       
27        self.failUnless( a.DistanceToPoint(b) == 10.0,
28                        'Point DistanceToPoint is wrong!')
29   
30    def testVertexDistance(self):
31        a = Vertex (0.0, 0.0)
32        b = Vertex (0.0, 10.0)
33       
34        self.failUnless( a.DistanceToPoint(b) == 10.0,
35                        'Point DistanceToPoint is wrong!')
36       
37    def testTriangle(self):
38        a = Vertex (0.0, 0.0)
39        b = Vertex (0.0, 2.0)
40        c = Vertex (2.0,0.0)
41        d = Vertex (0.0, 4.0)
42        e = Vertex (2.0, 2.0)
43        f = Vertex (4.0,0.0)
44       
45        t1 = Triangle(b,a,c)       
46        t2 = Triangle(b,c,e)     
47        t3 = Triangle(e,c,f)     
48        t4 = Triangle(d,b,e)
49        t2.setNeighbors(t3,t4,t1)
50       
51        self.failUnless( t2.neighbors[2].vertices[0] == b, 'Triangle initialisation is wrong!')
52   
53       
54    def testSegment(self):
55        a = Vertex (0.0, 0.0)
56        b = Vertex (0.0, 10.0)
57        s = Segment(a,b, tag = 20)     
58       
59        self.failUnless( s.vertices[0].DistanceToPoint(s.vertices[1]) == 10.0,
60                        'vertices in a segment are wrong')
61       
62        self.failUnless( s.tag == 20.0,
63                        'tag in a segment are wrong')
64
65    def testdeleteUserVertex(self):
66
67       
68        mesh = Mesh()
69        a = mesh.addUserVertex(0.0, 0.0)
70        b = mesh.addUserVertex (0.0, 2.0)
71        c = mesh.addUserVertex (2.0,0.0)
72       
73        s1 = mesh.addUserSegment(a,b)
74        s2 = mesh.addUserSegment(a,c)
75        s3 = mesh.addUserSegment(c,b)
76
77        mesh.deleteMeshObject (a) 
78        self.failUnless(mesh.userSegments[0] == s3,
79                        'Bad segment. ')       
80        self.failUnless(len(mesh.userSegments) ==1,
81                        'Segments not deleted.')
82        self.failUnless(len(mesh.userVertices) == 2,
83                        'Vertex not deleted.')
84       
85 
86    # FIXME add test for minAngle   
87    def testgenerateMesh(self):
88        a = Vertex (0.0, 0.0)
89        d = Vertex (0.0, 4.0)
90        f = Vertex (4.0,0.0)
91
92        s1 = Segment(a,d)
93        s2 = Segment(d,f)
94        s3 = Segment(a,f)
95
96        r1 = Region(0.3, 0.3,tag = 1.3,maxArea = .6)
97        #print r1
98        m = Mesh(userVertices=[a,d,f], userSegments=[s1,s2,s3], regions=[r1] )
99       
100        m.generateMesh("Q", maxArea = 2.1 )         
101
102        #print m
103
104        #m.plotMeshTriangle()
105
106        result = 1.414214
107        delta  = 0.00001
108       
109        self.failUnless((m.meshTriangles[1].vertices[0].x < result + delta) or
110                        (m.meshTriangles[1].vertices[0].x > result - delta),
111                        'generated mesh is wrong!')
112
113    def test_regionalMaxArea(self):
114        v0 = Vertex (0.0, 0.0)
115        v1 = Vertex (6.0, 0.0)
116        v2 = Vertex (6.0,6.0)
117        v3 = Vertex (0.0,6.0)
118
119        s1 = Segment(v0,v1)
120        s2 = Segment(v1,v2)
121        s3 = Segment(v3,v2)
122        s4 = Segment(v3,v0)
123        s5 = Segment(v2,v0)
124
125        r1 = Region(3, 1,tag = 1.3)
126        #print r1
127        m = Mesh(userVertices=[v0,v1,v2,v3], userSegments=[s1,s2,s3,s4,s5], regions=[r1] )
128       
129        m.generateMesh("Q", maxArea = 36 )         
130
131        #m.plotMeshTriangle()
132        #print "len(m.meshTriangles)",len(m.meshTriangles)
133
134        self.failUnless(len(m.meshTriangles) == 2, 
135                        'test_regionalMaxArea 1:generated mesh is wrong!')
136       
137        ## Another test case
138        r1 = Region(3, 1,tag = 1.3)
139        r2 = Region(1, 3,tag = 1.3, maxArea = 8)
140        m = Mesh(userVertices=[v0,v1,v2,v3], userSegments=[s1,s2,s3,s4,s5],
141                 regions=[r1,r2] )
142        m.generateMesh("Q", maxArea = 36 )
143       
144        self.failUnless(len(m.meshTriangles) >= 6,
145                        'testregion_with_maxarea 2: # of tris is wrong!')   
146       
147               
148        ## Another test case
149        r1 = Region(3, 1, tag = 1.3, maxArea = 8)
150        r2 = Region(1, 3, tag = 1.3, maxArea = 8)
151        m = Mesh(userVertices=[v0,v1,v2,v3], userSegments=[s1,s2,s3,s4,s5],
152                 regions=[r1,r2] )
153        m.generateMesh("Q", maxArea = 36 ) 
154        #print "len(m.meshTriangles)",len(m.meshTriangles)
155       
156        self.failUnless(len(m.meshTriangles) >= 8,
157                        'testregion_with_maxarea 3: # of tris is wrong!')
158               
159               
160        ## Another test case
161        r1 = Region(3, 1, tag = 1.3 )
162        r2 = Region(1, 3, tag = 1.3, maxArea = 8)
163        m = Mesh(userVertices=[v0,v1,v2,v3], userSegments=[s1,s2,s3,s4,s5],
164                 regions=[r1,r2] )
165        m.generateMesh("Q", maxArea = 8 ) 
166        self.failUnless(len(m.meshTriangles) >= 8,
167                        'testregion_with_maxarea 4: # of tris is wrong!')   
168
169       
170        ## Another test case
171        r1 = Region(3, 1,tag = 1.3, maxArea = 8)
172        r2 = Region(1, 3,tag = 1.3, maxArea = 8)
173        m = Mesh(userVertices=[v0,v1,v2,v3], userSegments=[s1,s2,s3,s4,s5],
174                 regions=[r1,r2] )
175        m.generateMesh("Q", maxArea = 36,isRegionalMaxAreas = False )     
176        self.failUnless(len(m.meshTriangles) == 2, 
177                        'test_regionalMaxArea 5:generated mesh is wrong!')
178       
179    def testdeleteUserVertex(self):
180        mesh = Mesh()
181        a = mesh.addUserVertex(0.0, 0.0)
182        b = mesh.addUserVertex (0.0, 2.0)
183        c = mesh.addUserVertex (2.0,0.0)
184       
185        s1 = mesh.addUserSegment(a,b)
186        s2 = mesh.addUserSegment(a,c)
187        s3 = mesh.addUserSegment(c,b)
188
189        mesh.deleteMeshObject (s2)
190       
191        #print ",s2 in mesh.userSegments" ,s2 in mesh.userSegments
192        self.failUnless(not(s2 in mesh.userSegments),
193                        'Bad segment. ')       
194        self.failUnless(len(mesh.userSegments) ==2,
195                        'Segments not deleted.')
196        self.failUnless(len(mesh.userVertices) == 3,
197                        'Vertex deleted, instead of segment.')
198
199    def testTriangleArea(self):
200        a = Vertex (10.0, 10.0)
201        b = Vertex (10.0, 20.0)
202        c = Vertex (20.0,10.0)
203       
204        d = Vertex (-20.0, 0.0)
205        e = Vertex (-20.0, -20.0)
206        f = Vertex (20.0,-20.0)
207       
208        t1 = Triangle(b,a,c)     
209        t2 = Triangle(e,d,f)
210       
211#         print "t1", t1
212#         print "t1 area ", t1.calcArea()
213#         print "t2", t2
214#         print "t2 area ", t2.calcArea()
215        self.failUnless( t1.calcArea() == 50 and t2.calcArea() == 400, 'Triangle area is wrong!')
216    def testisUserSegmentNew (self):
217        mesh = Mesh()
218        a = mesh.addUserVertex(0.0, 0.0)
219        b = mesh.addUserVertex (0.0, 2.0)
220        c = mesh.addUserVertex (2.0,0.0)
221        d = mesh.addUserVertex (2.0,3.0)
222       
223        s1 = mesh.addUserSegment(a,b)
224        s2 = mesh.addUserSegment(a,c)
225        s3 = mesh.addUserSegment(c,b)
226
227        self.failUnless(mesh.isUserSegmentNew(a,d) ,
228                        'Segment should be new. ')
229        self.failUnless(not(mesh.isUserSegmentNew(a,b)) ,
230                        'Segment should not be new. ')
231
232
233    def testisUserSegmentNew (self):
234        mesh = Mesh()
235        a = mesh.addUserVertex(0.0, 0.0)
236        b = mesh.addUserVertex (0.0, 2.0)
237        c = mesh.addUserVertex (2.0,0.0)
238        d = mesh.addUserVertex (2.0,3.0)
239       
240        s1 = mesh.addUserSegment(a,b)
241        s2 = mesh.addUserSegment(a,c)
242        s3 = mesh.addUserSegment(c,b)
243
244        self.failUnless(mesh.representedUserSegment(a,d) == None,
245                        'Segment should be new. ')
246        self.failUnless(mesh.representedUserSegment(a,b) == s1 ,
247                        'Segment should not be new. ')
248       
249    def testauto_segment(self):
250        p0 = Vertex (0.0, 0.0)
251        p1 = Vertex (0.0, 4.0)
252        p2 = Vertex (4.0,4.0)
253        p3 = Vertex (4.0,0.0)
254
255        s1 = Segment(p0,p1)
256       
257        m = Mesh(userVertices=[p0, p1, p2, p3], userSegments=[s1] ) 
258        m.auto_segment()
259       
260        #print 'Len', len(m.userSegments)
261        self.failUnless(len(m.getUserSegments()) == 4 ,
262                        'userSegments is wrong!')
263     
264        m.auto_segment()
265        self.failUnless(len(m.getUserSegments()) == 4 ,
266                        'userSegments is wrong!')
267     
268    def testauto_segmentII(self):
269        p1 = Vertex (3.0, 4.0)
270        p2 = Vertex (3.0,2.0)
271        p3 = Vertex (3.0,0.0)
272        p4 = Vertex (6.0, 4.0)
273        p5 = Vertex (6.0,2.0)
274        p0 = Vertex (6.0,0.0)
275
276
277        s1 = Segment(p2,p3)
278        s2 = Segment(p4,p5)
279       
280        m = Mesh(userVertices=[p0, p1, p2, p3, p4, p5],
281                 userSegments=[s1, s2])     
282
283        m.auto_segment()
284       
285        s3 = m.representedAlphaUserSegment(p3,p0)
286        self.failUnless(not (s3 == None) ,
287                        'userSegments is wrong!')
288
289       
290        s6 = m.representedAlphaUserSegment(p1,p4)       
291        self.failUnless(not (s6 == None) ,
292                        'userSegments is wrong!')
293       
294        # remove a segment, add a point, auto_segment
295        m.alphaUserSegments.remove(s3)
296        p6 = Vertex (1.0, 2.0)
297        m.userVertices.append(p6)
298       
299        m.auto_segment()
300       
301        s1_now = m.representedUserSegment(p3,p2)
302        self.failUnless(s1_now == s1 ,
303                        'userSegments is wrong!')
304       
305        s2_now = m.representedUserSegment(p5,p4)       
306        self.failUnless(s2_now == s2 ,
307                        'userSegments is wrong!')
308       
309        s3 = m.representedAlphaUserSegment(p3,p6)       
310        self.failUnless(not (s3 == None) ,
311                        'userSegments is wrong!')
312       
313        s4 = m.representedAlphaUserSegment(p3,p6)       
314        self.failUnless(not (s4 == None) ,
315                        'userSegments is wrong!')
316       
317        s5 = m.representedAlphaUserSegment(p4,p6)       
318        self.failUnless(s5 == None ,
319                        'userSegments is wrong!')
320        #print m
321       
322    def testRegions(self):
323        a = Vertex (0.0, 0.0)
324        b = Vertex (0.0, 2.0)
325        c = Vertex (2.0,0.0)
326        d = Vertex (0.0, 4.0)
327        e = Vertex (2.0, 2.0)
328        f = Vertex (4.0,0.0)
329        g = Vertex (0.0,-2.0)
330       
331        Segment.set_default_tag("")
332        s1 = Segment(a,b)
333        s2 = Segment(b,e)
334        s3 = Segment(e,c)
335        s4 = Segment(c,a)
336        s5 = Segment(b,d)
337        s6 = Segment(e,d)
338        s7 = Segment(e,f)
339        s8 = Segment(c,f)
340        s9 = Segment(g,c)
341        s10 = Segment(g,a)
342
343        r1 = Region(0.1,0.1,tag="22")
344        r2 = Region(0.1,2.1,tag="11")
345        r3 = Region(2.1,0.1)
346       
347        m = Mesh(userVertices=[a,b,c,d,e,f,g], userSegments=[s1,s2,s3,s4,s5,s6,s7,s8,s9,s10], regions=[r1,r2,r3] )
348        m.generateMesh("Q", maxArea = 2.1 )
349        #print m
350        Triangulation =  m.getTriangulation()
351        #print Triangulation[0].attribute
352        #print Triangulation[1].attribute
353        #print Triangulation[2].attribute
354        #print Triangulation[3].attribute
355        #print Triangulation[4].attribute
356       
357        self.failUnless(Triangulation[0].attribute == "" and
358                        Triangulation[1].attribute == "22" and
359                        Triangulation[2].attribute == "" and
360                        Triangulation[3].attribute == "11" and
361                        Triangulation[4].attribute == "22" ,
362                        'region attributes are wrong!')   
363
364    def test_vertexAttribs(self):
365        a = Vertex (0.0, 0.0, attributes = [12.0,2.0])
366        d = Vertex (0.0, 4.0, attributes = [9.0,7.0])
367        f = Vertex (4.0,0.0, attributes = [14.0,3.0])
368   
369        Segment.set_default_tag("")
370        s1 = Segment(a,d)
371        s2 = Segment(d,f)
372        s3 = Segment(a,f)
373     
374        r1 = Region(0.3, 0.3, tag = 88.9)
375     
376        m = Mesh(userVertices=[a,d,f], userSegments=[s1,s2,s3], regions=[r1])
377
378        m.generateMesh("Q", maxArea = 2.1)
379
380        vert = m.getMeshVertices()
381       
382        self.failUnless(vert[0].attributes == [12.0, 2.0] and
383                        vert[1].attributes == [9.0, 7.0] and
384                        vert[2].attributes == [14.0,3.0] and
385                        vert[3].attributes == [12.232233047033631, 4.4142135623730949] and
386                        vert[4].attributes == [13.0, 2.5] ,
387                        'vertex attributes are wrong!')
388
389       
390    def test_vertexAttribs2(self):
391   
392        a = Vertex (0.0, 0.0)
393        d = Vertex (0.0, 4.0)
394        f = Vertex (4.0,0.0)
395   
396        Segment.set_default_tag("")
397        s1 = Segment(a,d)
398        s2 = Segment(d,f)
399        s3 = Segment(a,f)
400     
401        r1 = Region(0.3, 0.3, tag = 88.9)
402     
403        m = Mesh(userVertices=[a,d,f], userSegments=[s1,s2,s3], regions=[r1])
404
405        m.generateMesh("Q", maxArea = 2.1 )
406
407        vert = m.getMeshVertices()
408        self.failUnless(vert[0].attributes == [] and
409                        vert[1].attributes == [] and
410                        vert[2].attributes == [] and
411                        vert[3].attributes == [] and
412                        vert[4].attributes == [],
413                        'vertex attributes are wrong!')
414
415    def test_segtag(self):
416   
417        a = Vertex (0.0, 0.0)
418        d = Vertex (0.0, 4.0)
419        f = Vertex (4.0,0.0)
420   
421        s1 = Segment(a,d,tag = 5)
422        s2 = Segment(d,f,tag = 7)
423        s3 = Segment(a,f,tag = 9)
424     
425        m = Mesh(userVertices=[a,d,f], userSegments=[s1,s2,s3])
426
427        m.generateMesh("Q", maxArea = 2.1 )
428
429        m.export_mesh_file("from_test_mesh.tsh")
430        seg = m.getMeshSegments()
431        #print "seg",seg
432        #print "seg[0].tag"
433        #print seg[0].tag
434        #print "seg[0].tag"
435       
436        self.failUnless(seg[0].tag == 5 and
437                        seg[1].tag == 7 and
438                        seg[2].tag == 9 and
439                        seg[3].tag == 7 and
440                        seg[4].tag == 9,
441                        'seg tags are wrong')
442           
443
444    def test_segtag2(self):
445   
446        a = Vertex (0.0, 0.0)
447        d = Vertex (0.0, 4.0)
448        f = Vertex (4.0,0.0)
449        e = Vertex (1.0,1.0)
450   
451        s1 = Segment(a,d)
452        s2 = Segment(d,f)
453        s3 = Segment(a,f)
454        s4 = Segment(a,e)
455     
456        m = Mesh(userVertices=[a,d,f,e], userSegments=[s1,s2,s3,s4])
457
458        m.generateMesh("Q", maxArea = 2.1)
459
460        seg = m.getMeshSegments()
461        self.failUnless(seg[0].tag == "exterior" and
462                        seg[1].tag == "exterior" and
463                        seg[2].tag == "exterior" and
464                        seg[3].tag == "" and
465                        seg[4].tag == "exterior",
466                        '2nd seg tags are wrong')
467
468    def test_asciiFile(self):
469   
470        a = Vertex (0.0, 0.0)  #, attributes = [1.1])
471        d = Vertex (0.0, 4.0)  #, attributes = [1.2])
472        f = Vertex (4.0,0.0)  #, attributes = [1.3])
473        e = Vertex (1.0,1.0)  #, attributes = [1.4])
474   
475        s1 = Segment(a,d)
476        s2 = Segment(d,f)
477        s3 = Segment(a,f)
478        s4 = Segment(a,e)
479     
480        m = Mesh(userVertices=[a,d,f,e], userSegments=[s1,s2,s3,s4])
481
482        m.generateMesh("Q", maxArea = 2.1 )
483        seg = m.getMeshSegments()
484       
485        fileName = tempfile.mktemp(".tsh")
486        m.export_mesh_file(fileName)
487        file = open(fileName)
488        lFile = file.read().split('\n')
489        file.close()
490        os.remove(fileName)
491       
492        #print "@^@^"
493        #for l in lFile:
494        #    print l,"<"
495        #print "@^@^"
496
497        # no need to check the title again
498        #self.failUnless(lFile[0] == "5 0 # <vertex #> <x> <y> [attributes] ...Triangulation Vertices..."
499          #              ,'Ascii file is wrong, vertex title')
500        self.failUnless(lFile[1] == "0 0.0 0.0 " and #1.1 " and
501                        lFile[2] == "1 0.0 4.0 " and #1.2 " and
502                        lFile[3] == "2 4.0 0.0 " and #1.3 " and
503                        lFile[4] == "3 1.0 1.0 " and #1.4 " and
504                        lFile[5] == "4 2.0 2.0 "  #1.25 "
505                        ,
506                        'Ascii file is wrong, vertex')
507       
508        #self.failUnless(lFile[6] == "# attribute column titles ...Triangulation Vertex Titles..."
509          #              ,'Ascii file is wrong, attribute column title')
510        self.failUnless(lFile[8] == "0 3 2 4 -1 2 3  " and
511                        lFile[9] == "1 1 0 3 3 2 -1  " and
512                        lFile[10] == "2 3 4 1 -1 1 0  " and
513                        lFile[11] == "3 2 3 0 1 -1 0  "
514                        ,
515                        'Ascii file is wrong, triangle') 
516
517        self.failUnless( lFile[13] == "0 0 1 exterior" and
518                        lFile[14] == "1 1 4 exterior" and
519                        lFile[15] == "2 2 0 exterior" and
520                        lFile[16] == "3 0 3 " and
521                        lFile[17] == "4 4 2 exterior" ,
522                        'Ascii file is wrong, segment')
523       
524       # self.failUnless(lFile[18] == '4 0 # <vertex #> <x> <y> [attributes] ...Mesh Vertices...',
525        #                'Ascii file is wrong, Mesh Vertices Title')
526       
527        self.failUnless(lFile[19] == '0 0.0 0.0 ' and #1.1 ' and
528                        lFile[20] == '1 0.0 4.0 ' and #1.2 ' and
529                        lFile[21] == '2 4.0 0.0 ' and #1.3 ' and
530                        lFile[22] == '3 1.0 1.0 ' #1.4 '
531                        ,
532                        'Ascii file is wrong, Mesh Vertices II')
533       
534        self.failUnless(lFile[24] == '0 0 1 ' and
535                        lFile[25] == '1 1 2 ' and
536                        lFile[26] == '2 0 2 ' and
537                        lFile[27] == '3 0 3 '
538                        ,'Ascii file is wrong, Mesh Segments')       
539
540 
541    def test_ascii_file(self):
542   
543        a = Vertex (0.0, 0.0) #, attributes = [1.1])
544        d = Vertex (0.0, 4.0) #, attributes = [1.2])
545        f = Vertex (4.0,0.0) #, attributes = [1.3])
546        e = Vertex (1.0,1.0) #, attributes = [1.4])
547   
548        s1 = Segment(a,d)
549        s2 = Segment(d,f)
550        s3 = Segment(a,f)
551        s4 = Segment(a,e)
552     
553        m = Mesh(userVertices=[a,d,f,e], userSegments=[s1,s2,s3,s4])
554
555        m.generateMesh("Q", maxArea = 2.1 )
556
557        seg = m.getMeshSegments()
558       
559        fileName = tempfile.mktemp(".tsh")
560        m.export_mesh_file(fileName)
561        file = open(fileName)
562        lFile = file.read().split('\n')
563        file.close()
564        os.remove(fileName)
565       
566        #print "@^@^"
567        #for l in lFile:
568        #    print l,"<"
569        #print "@^@^"
570        self.failUnless(lFile[0] == "5 0 # <# of verts> <# of vert attributes>, next lines <vertex #> <x> <y> [attributes] ...Triangulation Vertices..."
571                        ,
572                        'Ascii file is wrong, vertex title')
573        self.failUnless(lFile[1] == "0 0.0 0.0 " and #1.1 " and
574                        lFile[2] == "1 0.0 4.0 " and #1.2 " and
575                        lFile[3] == "2 4.0 0.0 " and #1.3 " and
576                        lFile[4] == "3 1.0 1.0 " and #1.4 " and
577                        lFile[5] == "4 2.0 2.0 "  #1.25 "
578                        ,
579                        'Ascii file is wrong, vertex')
580       
581        self.failUnless(lFile[6] == "# attribute column titles ...Triangulation Vertex Titles..."
582                        ,
583                        'Ascii file is wrong, attribute column title')
584        self.failUnless(lFile[7] == "4 # <# of triangles>, next lines <triangle #> [<vertex #>] [<neigbouring triangle #>] [attribute of region] ...Triangulation Triangles..." and
585                        lFile[8] == "0 3 2 4 -1 2 3  " and
586                        lFile[9] == "1 1 0 3 3 2 -1  " and
587                        lFile[10] == "2 3 4 1 -1 1 0  " and
588                        lFile[11] == "3 2 3 0 1 -1 0  "
589                        ,
590                        'Ascii file is wrong, triangle') 
591
592        self.failUnless(lFile[12] == "5 # <# of segments>, next lines <segment #> <vertex #>  <vertex #> [boundary tag] ...Triangulation Segments..." and
593                        lFile[13] == "0 0 1 exterior" and
594                        lFile[14] == "1 1 4 exterior" and
595                        lFile[15] == "2 2 0 exterior" and
596                        lFile[16] == "3 0 3 " and
597                        lFile[17] == "4 4 2 exterior" ,
598                        'Ascii file is wrong, segment')
599       
600        self.failUnless(lFile[18] == '4 0 # <# of verts> <# of vert attributes>, next lines <vertex #> <x> <y> [attributes] ...Mesh Vertices...',
601                        'Ascii file is wrong, Mesh Vertices Title')
602       
603        self.failUnless(lFile[19] == '0 0.0 0.0 ' and #1.1 ' and
604                        lFile[20] == '1 0.0 4.0 ' and #1.2 ' and
605                        lFile[21] == '2 4.0 0.0 ' and #1.3 ' and
606                        lFile[22] == '3 1.0 1.0 ' #1.4 '
607                        ,
608                        'Ascii file is wrong, Mesh Vertices II')
609       
610        self.failUnless(lFile[23] == '4 # <# of segments>, next lines <segment #> <vertex #>  <vertex #> [boundary tag] ...Mesh Segments...' and
611                        lFile[24] == '0 0 1 ' and
612                        lFile[25] == '1 1 2 ' and
613                        lFile[26] == '2 0 2 ' and
614                        lFile[27] == '3 0 3 ' and
615                        lFile[28] == '0 # <# of holes>, next lines <Hole #> <x> <y> ...Mesh Holes...' and
616                        lFile[29] == '0 # <# of regions>, next lines <Region #> <x> <y> <tag>...Mesh Regions...'
617                        ,
618                        'Ascii file is wrong, Mesh Segments')       
619 
620
621    def test_thinoutVertices(self):
622
623        v1 = Vertex(-20,-20)
624        v2 = Vertex(-11,-11)
625        v3 = Vertex(-10,-10)
626        v4 = Vertex(-9,-1)
627        v5 = Vertex(-8,2)
628        v6 = Vertex(6,3)
629        v7 = Vertex(12,9)
630        v8 = Vertex(15,3)
631        v9 = Vertex(24,3)
632        m = Mesh(userVertices = [v1,v2,v3,v4,v5,v6,v7,v8,v9])
633        m.thinoutVertices(10)
634         
635        self.failUnless(v1 in m.userVertices,
636                        'test_thinoutVertices, test 1 failed')
637        self.failUnless(v3 in m.userVertices,
638                        'test_thinoutVertices, test 2 failed')
639        self.failUnless(v4 in m.userVertices,
640                        'test_thinoutVertices, test 3 failed')
641        self.failUnless(v6 in m.userVertices,
642                        'test_thinoutVertices, test 4 failed')
643        self.failUnless(v7 in m.userVertices,
644                        'test_thinoutVertices, test 5 failed')
645        self.failUnless(v9 in m.userVertices,
646                        'test_thinoutVertices, test 6 failed')
647        self.failUnless(v5 not in m.userVertices,
648                        'test_thinoutVertices, test 7 failed')
649        self.failUnless(v2 not in m.userVertices,
650                        'test_thinoutVertices, test 8 failed')
651        self.failUnless(v8 not in m.userVertices,
652                        'test_thinoutVertices, test 9 failed')
653
654    def test_same_x_y(self):
655        v = Point(7,8)
656        f = Point(7,8)
657        f.same_x_y(v)
658
659        self.failUnless(f.same_x_y(v),
660                        'same_x_y True failed')
661        e = Point(7,9)
662        self.failUnless(not f.same_x_y(e),
663                        'same_x_y False failed')
664
665    def test_import_tsh(self):
666       
667        a_att = [5.0,2.0]
668        d_att =[4.0,2.0]
669        f_att = [3.0,2.0]
670        e_att = [2.0,2.0]
671        a_xy = [0.0, 0.0]
672        a = Vertex ( a_xy[0],a_xy[1]) #, attributes =a_att)
673        d = Vertex (0.0, 4.0) #, attributes =d_att)
674        f = Vertex (4.0,0.0) #, attributes =f_att)
675        e = Vertex (1.0,1.0) #, attributes =e_att)
676   
677        s1 = Segment(a,d, tag = "50")
678        s2 = Segment(d,f, tag = "40")
679        s3 = Segment(a,f, tag = "30")
680        s4 = Segment(a,e, tag = "20")
681     
682        r1 = Region(0.3, 0.3,tag = "1.3")
683        geo = Geo_reference(8.9,8.9,65)
684        m = Mesh(userVertices=[a,d,f,e],
685                 userSegments=[s1,s2,s3,s4],
686                 regions=[r1],
687                 geo_reference=geo)
688
689        m.generateMesh("Q", maxArea = 2.1)
690        fileName = tempfile.mktemp(".tsh")
691        #print "dgs!!!"
692        #print "****************** fileName", fileName
693        m.export_mesh_file(fileName)
694        #print "******************"
695        #print "m", m
696        #print "******************"
697        m_returned = importMeshFromFile(fileName)
698        #print "m_returned",m_returned
699        #print "******************"
700        #print "****************** fileName", fileName
701        os.remove(fileName)
702        self.failUnless(0 == m.__cmp__(m_returned),
703                        'loading and saving of a mesh failed')
704        # do this when .msh supports geo_refs
705        #self.failUnless(m.geo_reference == m_returned.geo_reference,
706        #                'loading and saving of a mesh geo refs failed')
707
708    def test_import_mesh(self):
709       
710        a_att = [5.0,2.0]
711        d_att =[4.0,2.0]
712        f_att = [3.0,2.0]
713        e_att = [2.0,2.0]
714        a_xy = [0.0, 0.0]
715        a = Vertex ( a_xy[0],a_xy[1]) #, attributes =a_att)
716        d = Vertex (0.0, 4.0) #, attributes =d_att)
717        f = Vertex (4.0,0.0) #, attributes =f_att)
718        e = Vertex (1.0,1.0) #, attributes =e_att)
719   
720        s1 = Segment(a,d, tag = "50")
721        s2 = Segment(d,f, tag = "40")
722        s3 = Segment(a,f, tag = "30")
723        s4 = Segment(a,e, tag = "20")
724     
725        r1 = Region(0.3, 0.3,tag = "1.3")
726        geo = Geo_reference(65,8.9,8.9)
727        m = Mesh(userVertices=[a,d,f,e],
728                 userSegments=[s1,s2,s3,s4],
729                 regions=[r1],
730                 geo_reference=geo)
731
732        m.generateMesh("Q", maxArea = 2.1)
733        fileName = tempfile.mktemp(".msh")
734        #print "dgs!!!"
735        #print "****************** fileName", fileName
736        m.export_mesh_file(fileName)
737        #print "******************"
738        #print "m", m
739        #print "******************"
740        m_returned = importMeshFromFile(fileName)
741        #print "m_returned",m_returned
742        #print "******************"
743        #print "****************** fileName", fileName
744        os.remove(fileName)
745        #print "m.geo_reference",m.geo_reference
746        #print "m_returned.geo_reference,",m_returned.geo_reference
747        self.failUnless(0 == m.__cmp__(m_returned),
748                        'loading and saving of a mesh failed')
749        self.failUnless(m.geo_reference == m_returned.geo_reference,
750                        'loading and saving of a mesh geo refs failed')
751
752    def test_normaliseMesh(self):
753       
754        a_att = [5.0,2.0]
755        d_att =[4.0,2.0]
756        f_att = [3.0,2.0]
757        e_att = [2.0,2.0]
758        a_xy = [10.0, 10.0]
759        a = Vertex ( a_xy[0],a_xy[1], attributes =a_att)
760        d = Vertex (15.0, 10.0, attributes =d_att)
761        f = Vertex (10.0,20.0, attributes =f_att)
762        e = Vertex (15.0,20.0, attributes =e_att)
763   
764        s1 = Segment(a,d, tag = 50)
765        s2 = Segment(d,e, tag = 40)
766        s3 = Segment(e,f, tag = 30)
767        s4 = Segment(f,a, tag = 20)
768     
769        r1 = Region(0.3, 0.3,tag = 1.3)
770        m = Mesh(userVertices=[a,d,f,e],
771                 userSegments=[s1,s2,s3,s4],
772                 regions=[r1])
773        m.normaliseMesh(1,0,1)
774        [xmin, ymin, xmax, ymax] = m.boxsize()
775        [attmin, attmax] = m.maxMinVertAtt(0)
776        self.failUnless(attmin == 0.0 and attmax == 1.0,
777                        'normalise failed')
778        self.failUnless(xmin == 0.0 and ymin == 0.0 and xmax == 0.5 and ymax == 1.0,
779                        'normalise failed')
780        m.normaliseMesh(200,-100,5)
781        [xmin, ymin, xmax, ymax] = m.boxsize()
782        [attmin, attmax] = m.maxMinVertAtt(0)
783        self.failUnless(attmin == 0.0 and attmax == 5.0,
784                        'normalise failed')
785        self.failUnless(xmin == -100.0 and ymin == -100.0 and xmax == 0.0 and ymax == 100.0,
786                        'normalise failed')
787       
788    def test_exportASCIIsegmentoutlinefile(self):
789        a = Vertex (0,0)
790        b = Vertex (0,3)
791        c = Vertex (3,3)
792        d = Vertex (1,2)
793        e = Vertex (3,1)
794     
795        s1 = Segment(a,b, tag = "50")
796        s2 = Segment(b,c, tag = "40")
797        s3 = Segment(c,a, tag = "30")
798     
799        r1 = Region(2, 1,tag = "1.3")
800        h1 = Hole(1,4)
801        m = Mesh(userVertices=[a,b,c,d,e],
802                 userSegments=[s1,s2,s3],
803                 regions=[r1],
804                 holes = [h1])     
805       
806        m.generateMesh("Q", maxArea = 2.1)
807        #print "mesh ***************dsg*", m
808
809        fileName = tempfile.mktemp(".tsh")
810        m.exportASCIIsegmentoutlinefile(fileName)
811       
812        m_returned = importMeshFromFile(fileName)
813
814        #print "m_returned ****",m_returned
815        #print "****************** fileName", fileName
816        os.remove(fileName)
817
818        #Trim mesh, so it should like like m_returned
819        m.meshVertices = []
820        m.meshTriangles = []
821        m.meshSegments = []
822        m.userVertices=[a,b,c]
823        #print "mesh ***************dsg*", m
824        #print "(m.__cmp__(m_returned)", m.__cmp__(m_returned)
825        self.failUnless(0 == m.__cmp__(m),
826                        'test_exportASCIIsegmentoutlinefile:loading and saving of a mesh failed')
827        # Having problems with this on linux.
828        #The ordering of the dictionary values wasn't the same as the windows
829        #returned value (verts.values())
830        #self.failUnless(0 == m.__cmp__(m_returned),
831        #                'test_exportASCIIsegmentoutlinefile:loading and saving of a mesh failed')
832       
833        self.failUnless(3 == len(m_returned.userVertices),
834                        'segmentoutlinefile:IO of a mesh failed')
835        self.failUnless(len(m.userSegments) == len(m_returned.userSegments),
836                        'segmentoutlinefile:IO of a mesh failed')
837        for i in range(len(m.userSegments)):
838            self.failUnless(m.userSegments[i].vertices[0].x ==
839                            m_returned.userSegments[i].vertices[0].x,
840                        'loading and saving of a mesh outline fialed')
841            self.failUnless(m.userSegments[i].vertices[0].y ==
842                            m_returned.userSegments[i].vertices[0].y,
843                        'loading and saving of a mesh outline fialed')
844            self.failUnless(m.userSegments[i].vertices[1].x ==
845                            m_returned.userSegments[i].vertices[1].x,
846                        'loading and saving of a mesh outline fialed')
847            self.failUnless(m.userSegments[i].vertices[1].y ==
848                            m_returned.userSegments[i].vertices[1].y,
849                        'loading and saving of a mesh outline fialed')
850
851 
852    def test_exportASCIIsegmentoutlinefile2(self):
853        a = Vertex (0,0)
854        b = Vertex (0,1)
855        c = Vertex (1,0)
856        d = Vertex (1,1)
857        e = Vertex (0.5,0.5)
858        f  = Vertex (0.6,0.6)
859     
860        s1 = Segment(a,e, tag = "50")
861        s2 = Segment(b,e, tag = "40")
862        s3 = Segment(c,e, tag = "30")
863        s4 = Segment(d,e, tag = "30")
864     
865        r1 = Region(2, 1,tag = "1.3")
866        h1 = Hole(1,4)
867        m = Mesh(userVertices=[a,b,c,d,e],
868                 userSegments=[s1,s2,s3,s4],
869                 regions=[r1],
870                 holes = [h1])     
871       
872        fileName = tempfile.mktemp(".tsh")
873        m.exportASCIIsegmentoutlinefile(fileName)
874       
875        m_returned = importMeshFromFile(fileName)
876        #print "****************** fileName", fileName
877        os.remove(fileName)
878
879        #Trim mesh, so it should like like m_returned
880        m.meshVertices = []
881        m.meshTriangles = []
882        m.meshSegments = []
883        m.userVertices=[a,e,d,b,c]
884        #print "mesh ***************dsg*", m
885        #print "(m.__cmp__(m_returned)", m.__cmp__(m_returned)
886        self.failUnless(0 == m.__cmp__(m),
887                        'loading and saving of a mesh failed')
888
889        self.failUnless(5 == len(m_returned.userVertices),
890                        'segmentoutlinefile:IO of a mesh failed')
891        self.failUnless(len(m.userSegments) == len(m_returned.userSegments),
892                        'segmentoutlinefile:IO of a mesh failed')
893        for i in range(len(m.userSegments)):
894            self.failUnless(m.userSegments[i].vertices[0].x ==
895                            m_returned.userSegments[i].vertices[0].x,
896                        'loading and saving of a mesh outline fialed')
897            self.failUnless(m.userSegments[i].vertices[0].y ==
898                            m_returned.userSegments[i].vertices[0].y,
899                        'loading and saving of a mesh outline fialed')
900            self.failUnless(m.userSegments[i].vertices[1].x ==
901                            m_returned.userSegments[i].vertices[1].x,
902                        'loading and saving of a mesh outline fialed')
903            self.failUnless(m.userSegments[i].vertices[1].y ==
904                            m_returned.userSegments[i].vertices[1].y,
905                        'loading and saving of a mesh outline fialed')
906
907
908    def test_loadxy(self):
909        """
910        To test the mesh side of loading xya files.
911        Not the loading of xya files
912        """
913        import os
914        import tempfile
915       
916        fileName = tempfile.mktemp(".xya")
917        file = open(fileName,"w")
918        file.write("elevation speed \n\
9191.0 0.0 10.0 0.0\n\
9200.0 1.0 0.0 10.0\n\
9211.0 0.0 10.4 40.0\n")
922        file.close()
923        #print fileName
924        m = importMeshFromFile(fileName)
925        os.remove(fileName)
926        self.failUnless(m.userVertices[0].x == 1.0,
927                        'loadxy, test 1 failed')
928        self.failUnless(m.userVertices[0].y == 0.0,
929                        'loadxy, test 2 failed')
930        #self.failUnless(m.userVertices[0].attributes == [10.0,0.0],
931        #                'loadxy, test 2.2 failed')
932        self.failUnless(m.userVertices[1].x == 0.0,
933                        'loadxy, test 3 failed')
934        self.failUnless(m.userVertices[1].y == 1.0,
935                        'loadxy, test 4 failed')
936        #self.failUnless(m.userVertices[1].attributes == [0.0,10.0],
937        #                'loadxy, test 5 failed')
938       
939    def test_exportPointsFile(self):
940        a = Vertex (0,0)
941        b = Vertex (0,3)
942        c = Vertex (3,3)
943        d = Vertex (1,2)
944        e = Vertex (3,1)
945        f = Vertex (3,1)
946     
947        s1 = Segment(a,b, tag = 50)
948        s2 = Segment(b,c, tag = 40)
949        s3 = Segment(c,a, tag = 30)
950     
951        r1 = Region(2, 1,tag = 1.3)
952        h1 = Hole(1,4)
953        # Warning mesh can't produce this type of data structure its self
954        m = Mesh(userVertices=[a,b,c,d,e],
955                 userSegments=[s1,s2,s3],
956                 regions=[r1],
957                 holes = [h1])
958       
959        fileName = tempfile.mktemp(".xya")
960        #fileName = 't.xya'
961        #os.remove(fileName)
962        m.exportPointsFile(fileName)
963        file = open(fileName)
964        lFile = file.read().split('\n')
965        file.close()
966
967        os.remove(fileName)
968        self.failUnless(lFile[0] == "" and
969                        lFile[1] == "0,0" and
970                        lFile[2] == "0,3" and
971                        lFile[3] == "3,3" 
972                        ,
973                        'exported Ascii xya file is wrong')
974        self.failUnless(lFile[4] == "1,2" and
975                        lFile[5] == "3,1" 
976                        ,
977                        'exported Ascii xya file is wrong')
978       
979        m.generateMesh("Q", maxArea = 2.1)
980        fileName = tempfile.mktemp(".xya")
981        fileName = 't.xya'
982        m.export_mesh_file('m.tsh')
983        m.exportPointsFile(fileName)
984        file = open(fileName)
985        lFile = file.read().split('\n')
986        file.close()
987        #os.remove(fileName)
988       
989        self.failUnless(lFile[0] == "" and
990                        lFile[1] == "0.0,0.0" and
991                        lFile[2] == "0.0,3.0" and
992                        lFile[3] == "3.0,3.0" and
993                        lFile[4] == "1.0,2.0" and
994                        lFile[5] == "3.0,1.0"
995                        ,
996                        'exported Ascii xya file is wrong')
997           
998    def test_exportPointsFilefile2(self):
999        m = Mesh()
1000       
1001        fileName = tempfile.mktemp(".xya")
1002        m.exportPointsFile(fileName)
1003        file = open(fileName)
1004        lFile = file.read().split('\n')
1005        file.close()
1006
1007        os.remove(fileName)
1008        #print "************* test_mesh exportPointsFilefile"
1009        #print "lFile",lFile
1010        #print "************* test_mesh exportPointsFilefile"
1011        self.failUnless(lFile[0] == "" 
1012                        ,
1013                        'exported Ascii xya file is wrong')
1014       
1015    def test_strings2ints(self):
1016        list = ["sea","river inlet","","sea","","moat"]
1017        preset = ["moat", "internal boundary"]
1018        [intlist, converter] = segment_strings2ints(list,preset )
1019        self.failUnless(intlist == [2,3 ,0 ,2 ,0 ,0 ]
1020                        ,
1021                        'test_strings2ints produces bad intlist')
1022        self.failUnless(converter == ['moat', 'internal boundary',
1023                                      'sea', 'river inlet']
1024                        ,
1025                        'test_strings2ints produces bad converter')
1026       
1027    def test_ints2strings(self):
1028        list = ["internal boundary","sea","river inlet",
1029            "","sea","","moat","internal boundary"]
1030        outlist = ['internal boundary', 'sea', 'river inlet', 'moat',
1031                   'sea', 'moat', 'moat', 'internal boundary']
1032        preset = ["moat", "internal boundary"]
1033        [intlist, converter] = segment_strings2ints(list,preset )
1034        newlist = segment_ints2strings(intlist, converter)
1035        self.failUnless(outlist == newlist
1036                        ,
1037                        'test_strings2ints produces bad intlist')
1038        self.failUnless(converter == ['moat', 'internal boundary',
1039                                      'sea', 'river inlet']
1040                        ,
1041                        'test_strings2ints produces bad converter')
1042       
1043    def test_ints2strings2(self):
1044        list = ["","",""]
1045        preset = ["moat", "internal boundary"]
1046        [intlist, converter] = segment_strings2ints(list,preset )
1047        newlist = segment_ints2strings(intlist, converter)
1048        outlist = ['moat', 'moat', 'moat']
1049        self.failUnless(outlist == newlist
1050                        ,
1051                        'test_strings2ints produces bad intlist')
1052        self.failUnless(converter == ['moat', 'internal boundary']
1053                        ,
1054                        'test_strings2ints produces bad converter')
1055
1056       
1057    def test_removeDuplicatedVertices(self):
1058        a = Vertex (0,0)
1059        a.index = 0
1060        b = Vertex (0,3)
1061        b.index = 1
1062        c = Vertex (3,3)
1063        c.index = 2
1064        d = Vertex (1,1)
1065        d.index = 3
1066        e = Vertex (3,1)
1067        e.index = 4
1068        f = Vertex (1,1)
1069        f.index = 5
1070        g = Vertex (1,1)
1071        g.index = 6
1072        inputVerts_noDups = [a,b,c,d,e]
1073       
1074        m = Mesh(userVertices=[a,b,c,d,e,f,g])
1075        counter = m.removeDuplicatedUserVertices()
1076        UserVerts = m.getUserVertices()
1077       
1078         
1079        self.failUnless(UserVerts == inputVerts_noDups,
1080                            'duplicate verts not removed')
1081        #for userVert, inputVert in map(None, UserVerts, inputVerts_noDups):
1082        #    self.failUnless(userVert.x == inputVert.x,
1083        #                    'x duplicate verts not removed')
1084        #    self.failUnless(userVert.y == inputVert.y,
1085        #                    'y duplicate verts not removed')
1086
1087       
1088    def test_ungenerateFileLoading(self):
1089       
1090        fileName = tempfile.mktemp(".txt")
1091        file = open(fileName,"w")
1092        file.write("         1       ??      ??\n\
1093       0.0       0.0\n\
1094       1.0       0.0\n\
1095       1.0       1.0\n\
1096       0.0       1.0\n\
1097       0.0       0.0\n\
1098END\n\
1099         2      ?? ??\n\
1100       10.0       10.0\n\
1101       10.0       20.0\n\
1102       20.0       20.0\n\
1103       10.0       10.0\n\
1104END\n\
1105END\n")
1106        file.close()
1107       
1108       
1109        a = Vertex (0.0, 0.0) #, attributes = [1.1])
1110        b = Vertex (0.0, 40.0) #, attributes = [1.2])
1111        c = Vertex (40.0,40.0) #, attributes = [1.3])
1112        d = Vertex (40.0,0.0) #, attributes = [1.4])
1113   
1114        s1 = Segment(a,b)
1115        s2 = Segment(b,c)
1116        s3 = Segment(c,d)
1117        s4 = Segment(d,a)
1118     
1119        m = Mesh(userVertices=[a,b,c,d], userSegments=[s1,s2,s3,s4])
1120        dict = importUngenerateFile(fileName)
1121        os.remove(fileName)
1122
1123        tag = "DSG"
1124        Segment.set_default_tag(tag)
1125        m.addVertsSegs(dict)
1126
1127        # have to reset this , since it's a class attribute
1128        Segment.set_default_tag("")
1129           
1130        self.failUnless(len(m.userSegments) ==11,
1131                        'Wrong segment list length.')
1132        self.failUnless(len(m.userVertices) == 11,
1133                        'Wrong vertex list length.')
1134        self.failUnless(m.userSegments[10].vertices[0] == m.userVertices[10],
1135                        'bad vertex on segment.')
1136        self.failUnless(m.userSegments[10].vertices[1] == m.userVertices[8],
1137                        'Bad segment.')
1138        self.failUnless(m.userSegments[10].tag == tag,
1139                        'wrong tag.')
1140   
1141    def test_ungenerateFileLoadingII(self):
1142       
1143        fileName = tempfile.mktemp(".txt")
1144        file = open(fileName,"w")
1145        file.write("         1       ??      ??\n\
1146       0.0       0.0\n\
1147       1.0       0.0\n\
1148       1.0       1.0\n\
1149       0.0       1.0\n\
1150       0.0       0.0\n\
1151END\n\
1152         2      ?? ??\n\
1153       10.0       10.0\n\
1154       10.0       20.0\n\
1155       20.0       20.0\n\
1156END\n\
1157END\n")
1158        file.close()
1159       
1160       
1161        a = Vertex (0.0, 0.0) #, attributes = [1.1])
1162        b = Vertex (0.0, 40.0) #, attributes = [1.2])
1163        c = Vertex (40.0,40.0) #, attributes = [1.3])
1164        d = Vertex (40.0,0.0) #, attributes = [1.4])
1165   
1166        s1 = Segment(a,b)
1167        s2 = Segment(b,c)
1168        s3 = Segment(c,d)
1169        s4 = Segment(d,a)
1170     
1171        m = Mesh(userVertices=[a,b,c,d], userSegments=[s1,s2,s3,s4])
1172        dict = importUngenerateFile(fileName)
1173        os.remove(fileName)
1174
1175        tag = "DSG"
1176        Segment.set_default_tag(tag)
1177        m.addVertsSegs(dict)
1178
1179        self.failUnless(len(m.userSegments) ==10,
1180                        'Wrong segment list length.')
1181        self.failUnless(len(m.userVertices) == 11,
1182                        'Wrong vertex list length.')
1183       
1184    def test_addVertsSegs(self):
1185        m = Mesh()
1186        Segment.set_default_tag("food")
1187        dict = {}
1188        dict['points'] = [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0]]
1189        dict['segments'] = [[0, 1], [1, 2]]
1190        dict['segment_tags'] = ['','do-op']
1191        m.addVertsSegs(dict)
1192        # have to reset this , since it's a class attribute
1193        Segment.set_default_tag("")
1194
1195       
1196        self.failUnless(len(m.userSegments) ==2,
1197                        'Wrong segment list length.')
1198        self.failUnless(len(m.userVertices) == 3,
1199                        'Wrong vertex list length.')
1200        self.failUnless(m.userSegments[0].tag =='food',
1201                        'Wrong segment tag length.')
1202        self.failUnless(m.userSegments[1].tag =='do-op',
1203                        'Wrong segment tag.')
1204       
1205    def test_addVertsSegs2(self):
1206        geo = Geo_reference(56,5,10)
1207        m = Mesh(geo_reference=geo)
1208        dict = {}
1209        dict['points'] = [[2.0, 1.0], [3.0, 1.0], [2.0, 2.0]]
1210        dict['segments'] = [[0, 1], [1, 2], [2,0]]
1211        dict['segment_tags'] = ['','do-op','']
1212        m.addVertsSegs(dict)
1213
1214    def test_exportASCIImeshfile(self):
1215   
1216        #a_att = [5,2]
1217        #d_att =[4,2]
1218        #f_att = [3,2]
1219        #e_att = [2,2]
1220        a_xy = [0.0, 0.0]
1221        a = Vertex ( a_xy[0],a_xy[1]) #, attributes =a_att)
1222        d = Vertex (0.0, 4.0) #, attributes =d_att)
1223        f = Vertex (4.0,0.0) #, attributes =f_att)
1224        e = Vertex (1.0,1.0) #, attributes =e_att)
1225   
1226        s1 = Segment(a,d, tag = "50")
1227        s2 = Segment(d,f, tag = "40")
1228        s3 = Segment(a,f, tag = "30")
1229        s4 = Segment(a,e, tag = "20")
1230     
1231        r1 = Region(0.3, 0.3,tag = "1.3", maxArea = 36)
1232
1233
1234        h1 = Hole(0.2,0.6)
1235       
1236        m = Mesh(userVertices=[a,d,f,e],
1237                 userSegments=[s1,s2,s3,s4],
1238                 regions=[r1],
1239                 holes=[h1])
1240
1241        seg = m.getUserSegments()
1242        points = m.getUserVertices()
1243        holes = m.getHoles()
1244        regions = m.getRegions()
1245        fileName = tempfile.mktemp(".tsh")
1246        m.export_mesh_file(fileName)
1247        #print "***************************fileName", fileName
1248        new_m = importMeshFromFile(fileName)
1249        os.remove(fileName)
1250       
1251
1252        #print '**@@@@@******'
1253        #print "new_m",new_m
1254        #print '**@@@@@******'
1255        #print "m",m
1256        #print '**@@@@@******'
1257       
1258        self.failUnless( new_m == m,
1259                         'loadASCIITestCase failed. test new 1')
1260           
1261    def test_Mesh2MeshList(self):
1262
1263        a_att = [5,2]
1264        d_att =[4,2]
1265        f_att = [3,2]
1266        e_att = [2,2]
1267        a_xy = [0.0, 0.0]
1268        a = Vertex ( a_xy[0],a_xy[1]) #, attributes =a_att)
1269        d = Vertex (0.0, 4.0) #, attributes =d_att)
1270        f = Vertex (4.0,0.0) #, attributes =f_att)
1271        e = Vertex (1.0,1.0) #, attributes =e_att)
1272   
1273        s1 = Segment(a,d, tag = "50")
1274        s2 = Segment(d,f, tag = "40")
1275        s3 = Segment(a,f, tag = "30")
1276        s4 = Segment(a,e, tag = "20")
1277     
1278        r1 = Region(0.3, 0.3,tag = "1.3", maxArea = 45)
1279        m = Mesh(userVertices=[a,d,f,e],
1280                 userSegments=[s1,s2,s3,s4],
1281                 regions=[r1])
1282
1283        m.generateMesh("Qa2.1")
1284
1285        seg = m.getMeshSegments()
1286        points = m.getMeshVertices()
1287        dict = m.Mesh2MeshList()
1288        #print "dict",dict
1289        # test not finished...
1290 
1291    def test_Mesh2IOTriangulationDict(self):
1292
1293        a_att = [5,2]
1294        d_att =[4,2]
1295        f_att = [3,2]
1296        e_att = [2,2]
1297        a_xy = [0.0, 0.0]
1298        a = Vertex ( a_xy[0],a_xy[1] , attributes =a_att)
1299        d = Vertex (0.0, 4.0 , attributes =d_att)
1300        f = Vertex (4.0,0.0 , attributes =f_att)
1301        e = Vertex (1.0,1.0 , attributes =e_att)
1302   
1303        s1 = Segment(a,d, tag = "50")
1304        s2 = Segment(d,f, tag = "40")
1305        s3 = Segment(a,f, tag = "30")
1306        s4 = Segment(a,e, tag = "20")
1307     
1308        r1 = Region(0.3, 0.3,tag = "1.3", maxArea = 45)
1309        m = Mesh(userVertices=[a,d,f,e],
1310                 userSegments=[s1,s2,s3,s4],
1311                 regions=[r1])
1312        titles = ['ele','friction']
1313        m.attributeTitles = titles
1314        m.generateMesh("Qa2.1")
1315
1316        seg = m.getMeshSegments()
1317        verts = m.getMeshVertices()
1318        dict = m.Mesh2IOTriangulationDict()
1319        #print "dict",dict
1320       
1321        self.failUnless( dict['vertex_attribute_titles'] == titles,
1322                         'test_Mesh2IOTriangulationDict failed. test 1')
1323        answer = [a_xy,[0.0, 4.0],[4.0,0.0], [1.0,1.0], [2.0,2.0]]
1324        #print "answer",answer
1325        #print "dict['vertices']",dict['vertices']
1326       
1327        self.failUnless( dict['vertices'] == answer,
1328                         'test_Mesh2IOTriangulationDict failed. test 2')
1329
1330       
1331        for pimport,pactual,pimpatt in map(None,dict['vertices'],
1332                                           verts,dict['vertex_attributes']):
1333            #assert all_close( pimport, (pactual.x,pactual.y))
1334            self.failUnless( pimport == [pactual.x,pactual.y],
1335                        'test_Mesh2IOTriangulationDict failed. test 2.1')
1336            self.failUnless( pimpatt == pactual.attributes,
1337                        'test_Mesh2IOTriangulationDict failed. test 2.2')
1338        self.failUnless( dict['segments'][0] == [0,1],
1339                        'test_Mesh2IOTriangulationDict failed. test 3')
1340        for segimp,segactual in map(None,dict['segment_tags'],seg):
1341            self.failUnless( segimp == segactual.tag,
1342                        'test_Mesh2IOTriangulationDict failed. test 4')
1343        #print " dict['triangles'][0]", dict['triangles'][0]
1344        self.failUnless( dict['triangles'][0] == [3,2,4],
1345                        'test_Mesh2IOTriangulationDict failed. test 5')
1346        self.failUnless( dict['triangle_neighbors'][0] == [-1,2,3],
1347                        'test_Mesh2IOTriangulationDict failed. test 6')
1348        self.failUnless( dict['triangle_tags'][0] == "1.3",
1349                         'test_Mesh2IOTriangulationDict failed. test 7')
1350
1351 
1352    def test_Mesh2IODict(self):
1353
1354        a_att = [5,2]
1355        d_att =[4,2]
1356        f_att = [3,2]
1357        e_att = [2,2]
1358        a_xy = [0.0, 0.0]
1359        a = Vertex ( a_xy[0],a_xy[1] , attributes =a_att)
1360        d = Vertex (0.0, 4.0 , attributes =d_att)
1361        f = Vertex (4.0,0.0 , attributes =f_att)
1362        e = Vertex (1.0,1.0 , attributes =e_att)
1363   
1364        s1 = Segment(a,d, tag = "50")
1365        s2 = Segment(d,f, tag = "40")
1366        s3 = Segment(a,f, tag = "30")
1367        s4 = Segment(a,e, tag = "20")
1368     
1369        r1 = Region(0.3, 0.3,tag = "1.3", maxArea = 45)
1370        m = Mesh(userVertices=[a,d,f,e],
1371                 userSegments=[s1,s2,s3,s4],
1372                 regions=[r1])
1373        titles = ['ele','friction']
1374        m.attributeTitles = titles
1375        m.generateMesh("Qa2.1")
1376
1377        seg = m.getMeshSegments()
1378        verts = m.getMeshVertices()
1379        dict = m.Mesh2IODict()
1380        #print "dict",dict
1381       
1382        self.failUnless( dict['vertex_attribute_titles'] == titles,
1383                         'test_Mesh2IOTriangulationDict failed. test 1')
1384        answer = [a_xy,[0.0, 4.0],[4.0,0.0], [1.0,1.0], [2.0,2.0]]
1385        #print "answer",answer
1386        #print "dict['vertices']",dict['vertices']
1387       
1388        self.failUnless( dict['vertices'] == answer,
1389                         'test_Mesh2IOTriangulationDict failed. test 2')
1390
1391       
1392        for pimport,pactual,pimpatt in map(None,dict['vertices'],
1393                                           verts,dict['vertex_attributes']):
1394            #assert all_close( pimport, (pactual.x,pactual.y))
1395            self.failUnless( pimport == [pactual.x,pactual.y],
1396                        'test_Mesh2IODict failed. test 2.1')
1397            self.failUnless( pimpatt == pactual.attributes,
1398                        'test_Mesh2IODict failed. test 2.2')
1399        self.failUnless( dict['segments'][0] == [0,1],
1400                        'test_Mesh2IODict failed. test 3')
1401        for segimp,segactual in map(None,dict['segment_tags'],seg):
1402            self.failUnless( segimp == segactual.tag,
1403                        'test_Mesh2IODict failed. test 4')
1404        #print " dict['triangles'][0]", dict['triangles'][0]
1405        self.failUnless( dict['triangles'][0] == [3,2,4],
1406                        'test_Mesh2IODict failed. test 5')
1407        self.failUnless( dict['triangle_neighbors'][0] == [-1,2,3],
1408                        'test_Mesh2IODict failed. test 6')
1409        self.failUnless( dict['triangle_tags'][0] == "1.3",
1410                         'test_Mesh2IODict failed. test 7')
1411
1412        seg = m.getUserSegments()
1413        points = m.getUserVertices()
1414        holes = m.getHoles()
1415        regions = m.getRegions()
1416       
1417        for pimport,pactual,pimpatt in map(None,dict['points'],points,dict['point_attributes']):
1418            self.failUnless( pimport == [pactual.x,pactual.y],
1419                        'test_Mesh2IODict failed. test 1')
1420            self.failUnless( pimpatt == pactual.attributes,
1421                        'test_Mesh2IODict failed. test 1.1')
1422        self.failUnless( dict['outline_segments'][0] == [0,1],
1423                        'test_Mesh2IODict failed. test 3')
1424        for segimp,segactual in map(None,dict['outline_segment_tags'],seg):
1425            self.failUnless( segimp == segactual.tag,
1426                        'test_Mesh2IODict failed. test 4')
1427        for holeimp,holeactual in map(None,dict['holes'],holes):
1428            self.failUnless( holeimp == [holeactual.x,holeactual.y],
1429                        'test_Mesh2IODict failed. test 5')
1430       
1431        for regimp,regactual,regattimp, regmaxarea in map(None,dict['regions'],regions, dict['region_tags'], dict['region_max_areas']):
1432            self.failUnless( regimp == [regactual.x,regactual.y],
1433                        'loadASCIITestCase failed. test 6')
1434            self.failUnless( regattimp == regactual.getTag(),
1435                        'loadASCIITestCase failed. test 7')
1436            self.failUnless( regmaxarea == regactual.getMaxArea(),
1437                        'loadASCIITestCase failed. test 7')
1438   
1439           
1440       
1441    def test_Mesh2IOOutlineDict(self):
1442
1443        a_att = [5,2]
1444        d_att =[4,2]
1445        f_att = [3,2]
1446        e_att = [2,2]
1447        a_xy = [0.0, 0.0]
1448        a = Vertex ( a_xy[0],a_xy[1] , attributes =a_att)
1449        d = Vertex (0.0, 4.0 , attributes =d_att)
1450        f = Vertex (4.0,0.0 , attributes =f_att)
1451        e = Vertex (1.0,1.0 , attributes =e_att)
1452   
1453        s1 = Segment(a,d, tag = "50")
1454        s2 = Segment(d,f, tag = "40")
1455        s3 = Segment(a,f, tag = "30")
1456        s4 = Segment(a,e, tag = "20")
1457     
1458        r1 = Region(0.3, 0.3,tag = "1.3", maxArea = 45)
1459        m = Mesh(userVertices=[a,d,f,e],
1460                 userSegments=[s1,s2,s3,s4],
1461                 regions=[r1])
1462        titles = ['ele','friction']
1463        m.attributeTitles = titles
1464        m.generateMesh("Qa2.1")
1465
1466        seg = m.getMeshSegments()
1467        verts = m.getMeshVertices()
1468        dict = m.Mesh2IOOutlineDict()
1469       
1470        seg = m.getUserSegments()
1471        points = m.getUserVertices()
1472        holes = m.getHoles()
1473        regions = m.getRegions()
1474       
1475        for pimport,pactual,pimpatt in map(None,dict['points'],points,dict['point_attributes']):
1476            self.failUnless( pimport == [pactual.x,pactual.y],
1477                        'loadASCIITestCase failed. test 1')
1478            self.failUnless( pimpatt == pactual.attributes,
1479                        'loadASCIITestCase failed. test 1.1')
1480        self.failUnless( dict['outline_segments'][0] == [0,1],
1481                        'loadASCIITestCase failed. test 3')
1482        for segimp,segactual in map(None,dict['outline_segment_tags'],seg):
1483            self.failUnless( segimp == segactual.tag,
1484                        'loadASCIITestCase failed. test 4')
1485        for holeimp,holeactual in map(None,dict['holes'],holes):
1486            self.failUnless( holeimp == [holeactual.x,holeactual.y],
1487                        'loadASCIITestCase failed. test 5')
1488        #for regimp,regactual in map(None,dict['regions'],regions):
1489         #   self.failUnless( [regimp[0],regimp[1]]==[regactual.x,regactual.y],
1490          #              'loadASCIITestCase failed. test 6')
1491           # self.failUnless( regimp[2] == regactual.getTag(),
1492            #            'loadASCIITestCase failed. test 7')
1493            #self.failUnless( regimp[3] == regactual.getMaxArea(),
1494             #           'loadASCIITestCase failed. test 7')
1495
1496           
1497        for regimp,regactual,regattimp, regmaxarea in map(None,dict['regions'],regions, dict['region_tags'], dict['region_max_areas']):
1498            self.failUnless( regimp == [regactual.x,regactual.y],
1499                        'loadASCIITestCase failed. test 6')
1500            self.failUnless( regattimp == regactual.getTag(),
1501                        'loadASCIITestCase failed. test 7')
1502            self.failUnless( regmaxarea == regactual.getMaxArea(),
1503                        'loadASCIITestCase failed. test 7')
1504
1505
1506#___________beginning of Peters tests
1507
1508    def test_set_stuff(self):
1509        """
1510        Documentation
1511        """
1512        #making a test mesh
1513        p0=[0.,2.]
1514        p1=[1.,2.]
1515        p2=[0.,1.]
1516        p3=[1.,1.]
1517        p4=[0.,0.]
1518        p5=[2.,0.]
1519        p6=[-1.,1.]
1520        point_list = [p0,p1,p2,p3,p4,p5,p6]
1521
1522        a0=[0]
1523        a1=[0]
1524        a2=[100]
1525        a3=[0]
1526        a4=[0]
1527        a5=[0]
1528        a6=[0]
1529        attribute=[a0,a1,a2,a3,a4,a5,a6]
1530       
1531        t0=[0,3,1]
1532        t1=[0,2,3]
1533        t2=[2,4,3]
1534        t3=[4,5,3]
1535        t4=[1,3,5]
1536        t5=[2,6,4]
1537
1538        n0=[4,-1,2]
1539        n1=[2,0,-1]
1540        n2=[3,1,5]
1541        n3=[4,2,-1]
1542        n4=[3,-1,0]
1543        n5=[-1,2,-1]
1544
1545        tri_list = [t0,t1,t2,t3,t4,t5]
1546        n_list = [n0,n1,n2,n3,n4,n5]
1547        for i in range(6):
1548            for j in (0,1,2):
1549                a=attribute[tri_list[i][j]]
1550                tri_list[i][j]=point_list[tri_list[i][j]]
1551                tri_list[i][j]=Vertex(tri_list[i][j][0]\
1552                                      ,tri_list[i][j][1],a)
1553            neighbours=n_list[i]
1554            tri_list[i]=Triangle(tri_list[i][0],\
1555                                 tri_list[i][1],tri_list[i][2]\
1556                                ,neighbors=neighbours)
1557
1558        #testing selectAll
1559        mesh = Mesh()
1560        mesh.attributeTitles=['attrib']
1561
1562        mesh.meshTriangles=tri_list
1563
1564        mesh.selectAllTriangles()
1565        A=mesh.sets[mesh.setID['All']]
1566        assert list_comp(tri_list,A)
1567
1568       #testing threshold
1569        mesh = Mesh()
1570        mesh.attributeTitles=['attrib']
1571
1572        mesh.meshTriangles=tri_list
1573        mesh.selectAllTriangles()
1574        mesh.threshold('All',min=30,max=35,attribute_name = 'attrib')
1575        A = [tri_list[1],tri_list[2],tri_list[5]]
1576        B = mesh.sets[mesh.setID['All']]
1577        assert list_comp(A,B)
1578       
1579
1580        A = [tri_list[3],tri_list[2],tri_list[5]]
1581        assert not list_comp(A,B)
1582
1583        #testing
1584
1585    def test_Discretised_Tuple_Set_rounding(self):
1586        #This is the hardest bit of DST
1587        from mesh import Discretised_Tuple_Set
1588
1589        tol = 0.1
1590        a=Discretised_Tuple_Set(p_rel=1,t_rel= tol)
1591        m = 0.541
1592        m_up = 0.6
1593        m_down = 0.5
1594        assert m_up == a.round_up_rel(m)
1595        assert m_down == a.round_down_rel(m)
1596
1597        tol = 0.1
1598        a=Discretised_Tuple_Set(p_rel=1,t_rel = tol)
1599        m = 0.539
1600        m_up = 0.5
1601        m_down = 0.5
1602        assert m_up == a.round_up_rel(m)
1603        assert m_down == a.round_down_rel(m)
1604
1605        tol = 0.5
1606        a=Discretised_Tuple_Set(p_rel=1,t_rel = tol)
1607
1608
1609        m = 0.6
1610        m_up = 0.7
1611        m_down = 0.5
1612        assert m_up == a.round_up_rel(m)
1613        assert m_down == a.round_down_rel(m)
1614
1615        m = 0.599
1616        m_up = 0.6
1617        m_down = 0.5
1618        assert m_up == a.round_up_rel(m)
1619        assert m_down == a.round_down_rel(m)
1620
1621    def test_Discretised_Tuple_Set_get(self):
1622        from mesh import Discretised_Tuple_Set
1623        tol = 0.25
1624        a=Discretised_Tuple_Set(p_rel=1,t_rel = tol)
1625        b = (1.1,1.1)
1626        a.append(b)
1627        list = [(1.2,1.),(1.,1.),(1.,1.2),(1.2,1.2)]
1628        for key in list:
1629            assert a[key][0]==b
1630            assert len(a[key])==1
1631       
1632        c = (2.1,1.)
1633        a.append(c)
1634        assert a[(2.,1.)][0]==c
1635        assert a[(2.2,1.)][0]==c
1636
1637    def test_mapped_Discretised_Tuple_Set(self):
1638
1639        from mesh import Mapped_Discretised_Tuple_Set
1640        from mesh import Discretised_Tuple_Set
1641
1642        def map(sequence):
1643            return [len(sequence)]
1644
1645        tol = 0.5
1646        a=Mapped_Discretised_Tuple_Set(map,p_rel=1,t_rel = tol)
1647        b = range(20)
1648        a.append(b)
1649        assert b in a[range(17)] 
1650        assert b in a[range(22)]
1651
1652        tol = 0.01
1653        a=Mapped_Discretised_Tuple_Set(map,p_rel=1,t_rel = tol)
1654        b = range(20)
1655        a.append(b)
1656        assert b in a[range(20)] 
1657        assert b in a[range(19)] 
1658        assert not range(17) in a
1659
1660#___________end of Peters tests
1661
1662    def test_add_region_from_polygon(self):
1663        m=Mesh()
1664        region = m.add_region_from_polygon([[0,0],[1,0],[0,1]],
1665                                  max_triangle_area = 88)
1666        self.failUnless(len(m.regions)==1,
1667                        'FAILED!')
1668        self.failUnless(region.getMaxArea()==88,
1669                        'FAILED!')
1670        self.failUnless(len(m.getUserSegments())==3,
1671                        'FAILED!')
1672        self.failUnless(len(m.userVertices)==3,
1673                        'FAILED!')
1674       
1675    def test_add_region_from_polygon2(self):
1676        m=Mesh()
1677        m.add_region_from_polygon([[0,0],[1,0],[1,1],[0,1]],
1678                               {'tagin':[0,1],'bom':[2]},
1679                                  max_triangle_area=10)
1680        self.failUnless(len(m.regions)==1,
1681                        'FAILED!')
1682        segs = m.getUserSegments()
1683        self.failUnless(len(segs)==4,
1684                        'FAILED!')
1685        self.failUnless(len(m.userVertices)==4,
1686                        'FAILED!') 
1687        self.failUnless(segs[0].tag=='tagin',
1688                        'FAILED!') 
1689        self.failUnless(segs[1].tag=='tagin',
1690                        'FAILED!') 
1691         
1692        self.failUnless(segs[2].tag=='bom',
1693                        'FAILED!') 
1694        self.failUnless(segs[3].tag=='',
1695                        'FAILED!') 
1696       
1697    def test_add_region_from_polygon3(self):
1698        x=-500
1699        y=-1000
1700        m=Mesh(geo_reference=Geo_reference(56,x,y))
1701
1702        # These are the absolute values
1703        polygon_absolute = [[0,0],[1,0],[1,1],[0,1]]
1704       
1705        x_p = -10
1706        y_p = -40
1707        geo_ref_poly = Geo_reference(56, x_p, y_p)
1708        polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute)
1709       
1710        poly_point = m.add_region_from_polygon(polygon,
1711                                               {'tagin':[0,1],'bom':[2]},
1712                                               geo_reference=geo_ref_poly,
1713                                               max_triangle_area=10)
1714        # poly_point values are relative to the mesh geo-ref
1715        # make them absolute
1716        self.failUnless(inside_polygon([poly_point.x+x,poly_point.y+y],
1717                                       polygon_absolute, closed = False),
1718                        'FAILED!')
1719               
1720        self.failUnless(len(m.regions)==1,
1721                        'FAILED!')
1722        segs = m.getUserSegments()
1723        self.failUnless(len(segs)==4,
1724                        'FAILED!')
1725        self.failUnless(len(m.userVertices)==4,
1726                        'FAILED!') 
1727        self.failUnless(segs[0].tag=='tagin',
1728                        'FAILED!') 
1729        self.failUnless(segs[1].tag=='tagin',
1730                        'FAILED!') 
1731         
1732        self.failUnless(segs[2].tag=='bom',
1733                        'FAILED!') 
1734        self.failUnless(segs[3].tag=='',
1735                        'FAILED!')
1736        verts = m.getUserVertices()
1737        #print "User verts",verts
1738        #print 'polygon',polygon
1739        #vert values are relative
1740        for point,new_point in map(None,polygon,verts):
1741            point_x = point[0] + geo_ref_poly.get_xllcorner()
1742            new_point_x = new_point.x + m.geo_reference.get_xllcorner()
1743            point_y = point[1] + geo_ref_poly.get_yllcorner()
1744            #print "new_point.y",new_point.y
1745            #print "m.geo_ref.get_yllcorner()",m.geo_reference.get_yllcorner()
1746            new_point_y = new_point.y + m.geo_reference.get_yllcorner()
1747            #print "point_y",point_y
1748            #print "new_point_y",new_point_y
1749           
1750            self.failUnless(point_x == new_point_x, ' failed')
1751            self.failUnless(point_y == new_point_y, ' failed')
1752           
1753         
1754    def test_add_region_from_polygon4(self):
1755        x=50000
1756        y=1000
1757        m=Mesh(geo_reference=Geo_reference(56,x,y))
1758        polygon = [[0,0],[1,0],[1,1],[0,1]]
1759       
1760        m.add_region_from_polygon(polygon,
1761                               {'tagin':[0,1],'bom':[2]},
1762                                  max_triangle_area=10)
1763        self.failUnless(len(m.regions)==1,
1764                        'FAILED!')
1765        segs = m.getUserSegments()
1766        self.failUnless(len(segs)==4,
1767                        'FAILED!')
1768        self.failUnless(len(m.userVertices)==4,
1769                        'FAILED!') 
1770        self.failUnless(segs[0].tag=='tagin',
1771                        'FAILED!') 
1772        self.failUnless(segs[1].tag=='tagin',
1773                        'FAILED!') 
1774         
1775        self.failUnless(segs[2].tag=='bom',
1776                        'FAILED!') 
1777        self.failUnless(segs[3].tag=='',
1778                        'FAILED!')
1779        verts = m.getUserVertices()
1780        #print "User verts",verts
1781        #print 'polygon',polygon
1782        #vert values are relative
1783        for point,new_point in map(None,polygon,verts):
1784            point_x = point[0] 
1785            new_point_x = new_point.x + m.geo_reference.get_xllcorner()
1786            #print "point_x",point_x
1787            #print "new_point_x",new_point_x
1788            point_y = point[1] 
1789            new_point_y = new_point.y + m.geo_reference.get_yllcorner()
1790           
1791            self.failUnless(point_x == new_point_x, ' failed')
1792            self.failUnless(point_y == new_point_y, ' failed')
1793
1794
1795    def test_add_hole_from_polygon(self):
1796        x=-500
1797        y=-1000
1798        m=Mesh(geo_reference=Geo_reference(56,x,y))
1799
1800        # These are the absolute values
1801        polygon_absolute = [[0,0],[1,0],[1,1],[0,1]]
1802       
1803        x_p = -10
1804        y_p = -40
1805        geo_ref_poly = Geo_reference(56, x_p, y_p)
1806        polygon = geo_ref_poly.change_points_geo_ref(polygon_absolute)
1807       
1808        poly_point = m.add_hole_from_polygon(polygon,
1809                                               {'tagin':[0,1],'bom':[2]},
1810                                               geo_reference=geo_ref_poly)
1811        # poly_point values are relative to the mesh geo-ref
1812        # make them absolute
1813        #print "poly_point.x+x",poly_point.x+x
1814        #print "polygon_absolute", polygon_absolute
1815        self.failUnless(inside_polygon([poly_point.x+x,poly_point.y+y],
1816                                       polygon_absolute, closed = False),
1817                        'FAILED!')
1818               
1819        self.failUnless(len(m.holes)==1,
1820                        'FAILED!')
1821        segs = m.getUserSegments()
1822        self.failUnless(len(segs)==4,
1823                        'FAILED!')
1824        self.failUnless(len(m.userVertices)==4,
1825                        'FAILED!') 
1826        self.failUnless(segs[0].tag=='tagin',
1827                        'FAILED!') 
1828        self.failUnless(segs[1].tag=='tagin',
1829                        'FAILED!') 
1830         
1831        self.failUnless(segs[2].tag=='bom',
1832                        'FAILED!') 
1833        self.failUnless(segs[3].tag=='',
1834                        'FAILED!')
1835        verts = m.getUserVertices()
1836        #print "User verts",verts
1837        #print 'polygon',polygon
1838        #vert values are relative
1839        for point,new_point in map(None,polygon,verts):
1840            point_x = point[0] + geo_ref_poly.get_xllcorner()
1841            new_point_x = new_point.x + m.geo_reference.get_xllcorner()
1842            point_y = point[1] + geo_ref_poly.get_yllcorner()
1843            #print "new_point.y",new_point.y
1844            #print "m.geo_ref.get_yllcorner()",m.geo_reference.get_yllcorner()
1845            new_point_y = new_point.y + m.geo_reference.get_yllcorner()
1846            #print "point_y",point_y
1847            #print "new_point_y",new_point_y
1848           
1849            self.failUnless(point_x == new_point_x, ' failed')
1850            self.failUnless(point_y == new_point_y, ' failed')
1851
1852    def test_add_circle(self):
1853        x=-500
1854        y=-1000
1855        m=Mesh(geo_reference=Geo_reference(56,x,y))
1856
1857        # These are the absolute values
1858        tag = 'hey'
1859        segment_count = 104
1860        radius = 30
1861        circle_center_absolute = [100,80]       
1862        x_p = -.666
1863        y_p = -.777
1864        geo_ref_poly = Geo_reference(56, x_p, y_p)
1865        circle_center = \
1866                geo_ref_poly.change_points_geo_ref(circle_center_absolute)
1867        circle_center = circle_center[0] #make a list of lists a list
1868        poly_point = m.add_circle(circle_center, radius, segment_count,
1869                                  tag=tag,
1870                                  region=True,
1871                                  center_geo_reference=geo_ref_poly)
1872        # poly_point values are relative to the mesh geo-ref
1873        # make them absolute
1874        #print "poly_point.x+x",poly_point.x+x
1875        #print "polygon_absolute", polygon_absolute
1876     
1877       
1878        m.export_mesh_file("aaat.msh")
1879       
1880        self.failUnless(len(m.regions)==1,
1881                        'FAILED!')
1882        segs = m.getUserSegments()
1883        self.failUnless(len(segs)==segment_count,
1884                        'FAILED!')
1885        self.failUnless(len(m.userVertices)==segment_count,
1886                        'FAILED!') 
1887        self.failUnless(segs[0].tag==tag,
1888                        'FAILED!') 
1889        self.failUnless(segs[1].tag==tag,
1890                        'FAILED!') 
1891         
1892        verts = m.getUserVertices()
1893       
1894        m.export_mesh_file("aaat.msh")
1895       
1896    def FIXMEtest_auto_set_geo_reference(self):
1897        x=50000
1898        y=1000
1899        m=Mesh(geo_reference=Geo_reference(56,x,y))
1900        polygon = [[0,0],[1,0],[1,1],[0,1]]
1901       
1902        m.add_region_from_polygon(polygon,
1903                               {'tagin':[0,1],'bom':[2]},
1904                                  max_triangle_area=10)
1905        m.auto_set_geo_reference()
1906       
1907       
1908def list_comp(A,B):
1909    yes = len(A)==len(B)
1910    for item in A:
1911        if not item in B:
1912            yes = False
1913    return yes
1914
1915#-------------------------------------------------------------
1916if __name__ == "__main__":
1917    suite = unittest.makeSuite(meshTestCase,'test')
1918    #suite = unittest.makeSuite(meshTestCase,'test_asciiFile')
1919    runner = unittest.TextTestRunner() #verbosity=2)
1920    runner.run(suite)
1921   
Note: See TracBrowser for help on using the repository browser.