예제 #1
0
    def test_closed(self):
        pl = Polyline(init_points=[(1, 0), (1, 1), (0, 2)])
        self.assertFalse(pl.isClosed())
        pl.addPoint(1, 0)
        self.assertEqual(4, len(pl))
        self.assertTrue(pl.isClosed())

        pl = Polyline(init_points=[(1, 0), (1, 1), (0, 2)])
        self.assertFalse(pl.isClosed())
        pl.assertClosed()
        self.assertEqual(4, len(pl))
        self.assertTrue(pl.isClosed())
예제 #2
0
    def test_closed(self):
        pl = Polyline( init_points = [(1,0) , (1,1) , (0,2)])
        self.assertFalse( pl.isClosed() )
        pl.addPoint( 1,0 )
        self.assertEqual( 4 , len(pl) ) 
        self.assertTrue( pl.isClosed() )

        pl = Polyline( init_points = [(1,0) , (1,1) , (0,2)])
        self.assertFalse( pl.isClosed() )
        pl.assertClosed( )
        self.assertEqual( 4 , len(pl) ) 
        self.assertTrue( pl.isClosed() )
예제 #3
0
    def splitFaultBlocks(self , grid , fault_blocks ):
        boundingPolygon = Polyline(init_points = grid.getBoundingBox2D())
        boundingPolygon.assertClosed()
        if self.hasPolygon():
            if len(self.edges) == 1:
                return self.splitFaultBlockClosedPolygon( grid , fault_blocks , self.edges[0] )
            else:
                current_fault_block_layer = fault_blocks
                k = fault_blocks.getK()
                for edge in self.edges:
                    if isinstance(edge , Polyline):
                        # Start on a brand new fault block layer.
                        next_fault_block_layer = FaultBlockLayer( grid , k )
                        for block in current_fault_block_layer:
                            if block.containsPolyline(edge):
                                print "Block %d is split due to edge:%s" % (block.getBlockID() , edge.name())
                                sliced = GeometryTools.slicePolygon( boundingPolygon , edge )
                                inside_list = []
                                outside_list = []
                                for p in block:
                                    if GeometryTools.pointInPolygon( (p.x , p.y) , sliced ):
                                        inside_list.append( p )
                                    else:
                                        outside_list.append( p )

                                if len(inside_list) * len(outside_list) == 0:
                                    new_block = next_fault_block_layer.addBlock( )
                                    for p in inside_list:
                                        new_block.addCell(p.i , p.j)

                                    for p in outside_list:
                                        new_block.addCell(p.i , p.j)
                                else:
                                    layer = Layer( grid.getNX() , grid.getNY() )
                                    for p in inside_list:
                                        layer[p.i , p.j] = 1

                                    for p in outside_list:
                                        layer[p.i , p.j] = 2
                                            
                                    next_fault_block_layer.scanLayer( layer )
                            else:
                                next_fault_block_layer.insertBlockContent( block )

                        current_fault_block_layer = next_fault_block_layer
                return current_fault_block_layer
        else:
            return fault_blocks
예제 #4
0
    def test_extend_to_edge(self):
        bound = Polyline( init_points = [(0,0) , (1,0) , (1,1) , (0,1)] )
        l1 = Polyline( init_points = [(-1,0.5) , (0.5, 0.5)])
        l2 = Polyline( init_points = [(0.25,0.25) , (0.75, 0.75)])
        
        # Bound is not closed
        with self.assertRaises(AssertionError):
            GeometryTools.extendToEdge( bound , l1 )
            
        bound.assertClosed()
        # l1 is not fully contained in bound
        with self.assertRaises(ValueError):
            GeometryTools.extendToEdge( bound , l1 )

        l3 = GeometryTools.extendToEdge( bound , l2 )
        self.assertEqual( l3[0] , (0.00,0.00))
        self.assertEqual( l3[1] , (0.25,0.25))
        self.assertEqual( l3[2] , (0.75,0.75))
        self.assertEqual( l3[3] , (1.00,1.00))
        self.assertEqual( len(l3) , 4)
예제 #5
0
    def test_extend_to_edge(self):
        bound = Polyline(init_points=[(0, 0), (1, 0), (1, 1), (0, 1)])
        l1 = Polyline(init_points=[(-1, 0.5), (0.5, 0.5)])
        l2 = Polyline(init_points=[(0.25, 0.25), (0.75, 0.75)])

        # Bound is not closed
        with self.assertRaises(AssertionError):
            GeometryTools.extendToEdge(bound, l1)

        bound.assertClosed()
        # l1 is not fully contained in bound
        with self.assertRaises(ValueError):
            GeometryTools.extendToEdge(bound, l1)

        l3 = GeometryTools.extendToEdge(bound, l2)
        self.assertEqual(l3[0], (0.00, 0.00))
        self.assertEqual(l3[1], (0.25, 0.25))
        self.assertEqual(l3[2], (0.75, 0.75))
        self.assertEqual(l3[3], (1.00, 1.00))
        self.assertEqual(len(l3), 4)