def test_downscaling_valueerror(self): poly = Polygon2D( [Vector(0, 0), Vector(1, 0), Vector(1, 1), Vector(0, 1)]) self.assertRaises(ValueError, lambda: poly.downscale(2))
def test_path(self): poly = Polygon2D( [Vector(0, 0), Vector(10, 0), Vector(10, 10), Vector(0, 10)]) path = cover_polygon2d_with_path(poly, Vector(1, 1), 1, 0.5, 0.0)
def test_point_of_polygon(self): poly = Polygon2D( [Vector(0, 0), Vector(10, 0), Vector(10, 10), Vector(0, 10)]) point = poly.get_point_on_polygon(10) segment, point = point.get_segment_and_vector()
def test_to_path(self): poly = Polygon2D( [Vector(0, 0), Vector(10, 0), Vector(10, 10), Vector(0, 10)]) path1 = poly.to_path(0.1, Vector(1, 1)) path2 = Path.from_to(Vector(0, 0), Vector(10, 0), Vector(1, 1), 0.1) intersects = list(path1.get_intersecting_boxes(path2)) self.assertGreater(len(intersects), 1)
def test_iter_from(self): poly = Polygon2D( [Vector(0, 0), Vector(10, 0), Vector(10, 10), Vector(0, 10)]) self.assertEqual( list(poly.iter_from(12)), [Vector(10, 0), Vector(10, 10), Vector(0, 10), Vector(0, 0)])
def test_downscaling(self): poly = Polygon2D( [Vector(0, 0), Vector(10, 0), Vector(10, 10), Vector(0, 10)]) poly = poly.downscale(1) self.assertEqual(poly.points[0], Vector(1, 1).unitize()) self.assertEqual(poly.points[1], Vector(10, 0) + Vector(-1, 1).unitize()) self.assertEqual(poly.points[2], Vector(10, 10) + Vector(-1, -1).unitize()) self.assertEqual(poly.points[3], Vector(0, 10) + Vector(1, -1).unitize())
def test_nonintersecting(self): pc = [ Coordinates(50.022313, 21.990220), Coordinates(50.022935, 21.990492), Coordinates(50.021613, 21.991670), Coordinates(50.021544, 21.991540), Coordinates(50.022149, 21.991335), Coordinates(50.021385, 21.992079) ] xy_pc = XYPointCollection(pc) poly1 = Polygon2D([xypoint.to_vector() for xypoint in xy_pc[:3]]) poly2 = Polygon2D([xypoint.to_vector() for xypoint in xy_pc[3:]]) path1 = cover_polygon2d_with_path(poly1, Vector(5, 5, 5), 10, 0.3, 0) path1.set_z(50) path2 = cover_polygon2d_with_path(poly2, Vector(5, 5, 5), 10, 0.3, 0) path2.set_z(50) path1, path2 = make_nonintersecting([ MakeNonintersectingPaths(0, 100, path1), MakeNonintersectingPaths(0, 100, path2) ]) self.assertGreater(path2.length, 400) self.assertTrue(are_mutually_nonintersecting([path1, path2])) path1.simplify() path2.simplify()
def test_get_unit_vector_towards_polygon(self): poly = Polygon2D( [Vector(0, 0), Vector(10, 0), Vector(10, 10), Vector(0, 10)]) self.assertEqual(poly.total_perimeter_length, 40) self.assertEqual(poly.len_segments, [10, 10, 10, 10]) point = poly.get_point_on_polygon(0) self.assertEqual(point.get_unit_vector_towards_polygon(), Vector(1, 1).unitize()) point.advance(5) self.assertEqual(point.to_vector(), Vector(5, 0)) self.assertEqual(point.get_unit_vector_towards_polygon(), Vector(0, 1)) self.assertEqual(point.get_unit_vector_away_polygon(), Vector(0, -1)) point.advance(-10) self.assertEqual(point.to_vector(), Vector(0, 5)) self.assertEqual(point.get_unit_vector_towards_polygon(), Vector(1, 0)) point = poly.get_point_on_polygon(10) self.assertTrue(point.is_on_vertex()) self.assertEqual(point.get_unit_vector_towards_polygon(), Vector(-1, 1).unitize())
def test_point_contains(self): poly = Polygon2D([Vector(0, 0, 0), Vector(1, 0, 0), Vector(1, 1, 0)]) self.assertIn(Vector(0.5, 0.5, 0), poly) self.assertIn(Vector(0, 0, 0), poly) self.assertNotIn(Vector(2, 0.5, 0), poly) self.assertNotIn(Vector(2, 2, 0), poly)
def test_point_closest(self): poly = Polygon2D([Vector(0, 0, 0), Vector(1, 0, 0), Vector(1, 1, 0)]) closest = poly.get_closest_to(Vector(0.5, -0.5, 0), 10) self.assertLess(abs(closest - 0.5), 0.01) closest = poly.get_closest_to(Vector(2, 2, 0), 10) self.assertLess(abs(closest - 2), 0.01)