def test_inner_ring(self): ext = [Point2(0, 0), Point2(10, 0), Point2(10, 10), Point2(0, 10)] inner = [Point2(3, 3), Point2(7, 3), Point2(7, 7), Point2(3, 7)] inner2 = [Point2(4, 4), Point2(6, 4), Point2(6, 6), Point2(4, 6)] outer_ring = Polygon(self.l1, ext, [inner]) inner_ring = Polygon(self.l1, inner2) self.assertAlmostEqual(distance(outer_ring, inner_ring), 1) outer_ring.get_tris_repr() inner_ring.get_tris_repr()
def test_intersect(self): p = Polygon(self.l1, self.ext1) p2 = Polygon(self.l1, self.ext2) p3 = Polygon(self.l1, self.ext3) d = distance(p, p2) self.assertLessEqual(d, 0) d = distance(p2, p3) self.assertLessEqual(d, 0) d1 = distance(p, p3) self.assertGreater(d1, 0)
def deserialize(self, msg: ser.Artwork) -> None: for i_via in msg.vias: v = Via(deserialize_point2(i_via.point), self.__project.scontext.get(i_via.viapairSid), i_via.r, self.__lookup_net_helper(i_via.netSid)) self.add_artwork(v) for i_trace in msg.traces: t = Trace(deserialize_point2(i_trace.p0), deserialize_point2(i_trace.p1), i_trace.thickness, self.__project.scontext.get(i_trace.layerSid), self.__lookup_net_helper(i_trace.netSid)) self.add_artwork(t) for i_poly in msg.polygons: exterior = [deserialize_point2(j) for j in i_poly.exterior] interiors = [[deserialize_point2(k) for k in j] for j in i_poly.interiors] p = Polygon(self.__project.scontext.get(i_poly.layerSid), exterior, interiors, self.__lookup_net_helper(i_poly.netSid)) self.add_artwork(p) for i_airwire in msg.airwires: aw = Airwire(deserialize_point2(i_airwire.p0), deserialize_point2(i_airwire.p1), self.__project.scontext.get(i_airwire.p0LayerSid), self.__project.scontext.get(i_airwire.p1LayerSid), self.__project.scontext.get(i_airwire.netSid)) self.add_artwork(aw) for i_cmp in msg.components: if i_cmp.which() == "dip": cmp = DIPComponent.deserialize(self.__project, i_cmp) elif i_cmp.which() == "sip": cmp = SIPComponent.deserialize(self.__project, i_cmp) elif i_cmp.which() == "smd4": cmp = SMD4Component.deserialize(self.__project, i_cmp) elif i_cmp.which() == "passive2": cmp = Passive2Component.deserialize(self.__project, i_cmp) else: raise NotImplementedError() self.add_component(cmp)
def deserialize(self, msg): for i in msg.vias: v = Via(deserialize_point2(i.point), self.__project.scontext.get(i.viapairSid), i.r, self.__project.scontext.get(i.netSid)) self.add_artwork(v) for i in msg.traces: t = Trace(deserialize_point2(i.p0), deserialize_point2(i.p1), i.thickness, self.__project.scontext.get(i.layerSid), self.__project.scontext.get(i.netSid)) self.add_artwork(t) for i in msg.polygons: exterior = [deserialize_point2(j) for j in i.exterior] interiors = [[deserialize_point2(k) for k in j] for j in i.interiors] p = Polygon(self.__project.scontext.get(i.layerSid), exterior, interiors, self.__project.scontext.get(i.netSid)) self.add_artwork(p) for i in msg.airwires: aw = Airwire(deserialize_point2(i.p0), deserialize_point2(i.p1), self.__project.scontext.get(i.p0LayerSid), self.__project.scontext.get(i.p1LayerSid), self.__project.scontext.get(i.netSid)) self.add_artwork(aw) for i in msg.components: if i.which() == "dip": cmp = DIPComponent.deserialize(self.__project, i) elif i.which() == "smd4": cmp = SMD4Component.deserialize(self.__project, i) else: raise NotImplementedError() self.add_component(cmp)
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 test_separate_layers(self): p = Polygon(self.l1, self.ext1) p2 = Polygon(self.l2, self.ext2) self.assertGreater(distance(p, p2), 0)