def dist_polygon_pad(poly: Polygon, pad: 'Pad') -> float: if not pad.is_through(): if pad.layer != poly.layer: return float("inf") # ignoring typing here since we don't have stubs for the polygon lib return poly.get_poly_repr().distance(pad.get_poly_repr()) # type: ignore
def test_polyons(self): p = self.__setup_via_pairs_layers() n1 = Net() p.nets.add_net(n1) n2 = Net() p.nets.add_net(n2) ext = [Point2(0,0), Point2(10,0), Point2(10,10), Point2(0, 10)] int1 = [Point2(1,1), Point2(2,1), Point2(2,2), Point2(1,2)] int2 = [Point2(4,1), Point2(5,1), Point2(5,2), Point2(4,2)] po = Polygon(p.stackup.layers[0], ext, [int1, int2], n1) p.artwork.add_artwork(po) p_new = self.__saverestore(p) pols = p_new.artwork.polygons self.assertEqual(len(pols), 1) pol_new = list(pols)[0] self.assertIsInstance(pol_new, Polygon) r = pol_new.get_poly_repr() # All LineRings contain the first element as the last, so we drop during the comparison pb = po.get_poly_repr() self.assertListEqual(list(r.exterior.coords), [tuple(i) for i in pb.exterior.coords]) interiors = r.interiors self.assertEqual(len(interiors), 2) self.assertListEqual(list(interiors[0].coords), [tuple(i) for i in pb.interiors[0].coords]) self.assertListEqual(list(interiors[1].coords), [tuple(i) for i in pb.interiors[1].coords]) self.assertIsNotNone(pol_new.net) self.assertIsNotNone(pol_new.layer)
def dist_polygon_via(p: Polygon, v: Via) -> float: if p.layer not in v.viapair.all_layers: return float("inf") # ignoring typing here since we don't have stubs for the polygon lib return p.get_poly_repr().distance(v.get_poly_repr()) # type: ignore
def dist_polygon_polygon(p1: Polygon, p2: Polygon) -> float: if p1.layer != p2.layer: return float("inf") # ignoring typing here since we don't have stubs for the polygon lib return p1.get_poly_repr().distance(p2.get_poly_repr()) # type: ignore
def pt_inside_polygon(poly: Polygon, pt: Vec2) -> bool: pt = ShapelyPoint(pt) # ignoring typing because there's no stubs for polygon return poly.get_poly_repr().intersects(pt) # type: ignore