1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- """
- TEST: box.c
- AUTHOR(S): Vaclav Petras
- PURPOSE: Test functions related to bounding box
- COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
- This program is free software under the GNU General Public
- License (>=v2). Read the file COPYING that comes with GRASS
- for details.
- """
- import ctypes
- import grass.lib.vector as libvect
- from grass.gunittest.case import TestCase
- from grass.gunittest.main import test
- class TestPointInBoundingBox(TestCase):
- """Test functions related to point in bounding box"""
- def setUp(self):
- """Create bbox object"""
- self.c_bbox = ctypes.pointer(libvect.bound_box())
- # x range
- self.c_bbox.contents.E = 220
- self.c_bbox.contents.W = 215
- # y range
- self.c_bbox.contents.N = 135
- self.c_bbox.contents.S = 125
- # z range
- self.c_bbox.contents.T = 340
- self.c_bbox.contents.B = 330
- def test_bbox_3d_in(self):
- """Check Vect_point_in_box() function with 3D points inside bbox"""
- self.check_point_in_3d(217, 130, 335)
- self.check_point_in_3d(219.999999, 125.000001, 339.999999)
- def test_bbox_3d_out(self):
- """Check Vect_point_in_box() function with 3D points outside bbox"""
- self.check_point_out_3d(100, 100, 100)
- self.check_point_out_3d(500, 593, 900)
- self.check_point_out_3d(-220, 130, 335)
- self.check_point_out_3d(220, -130, 335)
- self.check_point_out_3d(220, 130, -335)
- def check_point_in_3d(self, x, y, z):
- """Wraps Vect_point_in_box() with assert and a message"""
- self.assertTrue(
- libvect.Vect_point_in_box(x, y, z, self.c_bbox),
- msg="Point should be inside the bbox",
- )
- def check_point_out_3d(self, x, y, z):
- """Wraps Vect_point_in_box() with assert and a message"""
- self.assertFalse(
- libvect.Vect_point_in_box(x, y, z, self.c_bbox),
- msg="Point should be outside the bbox",
- )
- def test_bbox_2d_in(self):
- """Check Vect_point_in_box_2d() function with 2D points inside bbox"""
- self.check_point_in_2d(217, 130)
- self.check_point_in_2d(219.999999, 125.000001)
- def test_bbox_2d_out(self):
- """Check Vect_point_in_box_2d() function with 2D points outside bbox"""
- self.check_point_out_2d(100, 100)
- self.check_point_out_2d(500, 593)
- self.check_point_out_2d(-220, 130)
- self.check_point_out_2d(220, -130)
- self.check_point_out_2d(-220, -130)
- def check_point_in_2d(self, x, y):
- """Wraps Vect_point_in_box_2d() with assert, message and bbox"""
- self.assertTrue(
- libvect.Vect_point_in_box_2d(x, y, self.c_bbox),
- msg="Point should be inside the bbox",
- )
- def check_point_out_2d(self, x, y):
- """Wraps Vect_point_in_box_2d() with assert, message and bbox"""
- self.assertFalse(
- libvect.Vect_point_in_box_2d(x, y, self.c_bbox),
- msg="Point should be outside the bbox",
- )
- if __name__ == "__main__":
- test()
|