def make_segment(self, openjson_net, pointset):
        wires = set() # ((x1, y1), (x2, y2))

        for point_id in pointset:
            p1 = openjson_net.points[point_id]
            x1 = self.make_length(p1.x)
            y1 = self.make_length(p1.y)

            for point_id in p1.connected_points:
                p2 = openjson_net.points[point_id]
                x2 = self.make_length(p2.x)
                y2 = self.make_length(p2.y)
                wires.add(tuple(sorted([(x1, y1), (x2, y2)])))

        seg = G.segment()

        layer = self.ensure_layer(openjson_net, "net")

        for (x1, y1), (x2, y2) in sorted(wires):
            wire = G.wire(x1=x1, y1=y1, x2=x2, y2=y2, layer=layer.number)
            seg.wire.append(wire)

        for point_id in pointset:
            for cc in openjson_net.points[point_id].connected_components:
                cid = self.inst2cpt[cc.instance_id]
                gate = self.cptpin2gate[cid, cc.pin_number]
                pinref = G.pinref(part=cc.instance_id, gate=gate, pin=cc.pin_number)
                seg.pinref.append(pinref)

        seg.pinref.sort(key=lambda p : (p.part, p.gate, p.pin))

        return seg
Example #2
0
    def make_segment(self, openjson_net, pointset):
        wires = set()  # ((x1, y1), (x2, y2))

        for point_id in pointset:
            p1 = openjson_net.points[point_id]
            x1 = self.make_length(p1.x)
            y1 = self.make_length(p1.y)

            for point_id in p1.connected_points:
                p2 = openjson_net.points[point_id]
                x2 = self.make_length(p2.x)
                y2 = self.make_length(p2.y)
                wires.add(tuple(sorted([(x1, y1), (x2, y2)])))

        seg = G.segment()

        layer = self.ensure_layer(openjson_net, "net")

        for (x1, y1), (x2, y2) in sorted(wires):
            wire = G.wire(x1=x1, y1=y1, x2=x2, y2=y2, layer=layer.number)
            seg.wire.append(wire)

        for point_id in pointset:
            for cc in openjson_net.points[point_id].connected_components:
                cid = self.inst2cpt[cc.instance_id]
                gate = self.cptpin2gate[cid, cc.pin_number]
                pin_name = self.pinnum2name[(cid, cc.pin_number)]
                pinref = G.pinref(part=cc.instance_id, gate=gate, pin=pin_name)
                seg.pinref.append(pinref)

        seg.pinref.sort(key=lambda p: (p.part, p.gate, p.pin))

        return seg
Example #3
0
    def make_eagle_symbol_for_openjson_body(self, name, body, cpt_name):
        """ Make an eaglexml symbol from an opensjon body. """

        symbol = G.symbol(name=name)

        layer = self.ensure_layer(body, 'symbol')

        for shape in body.shapes:
            if shape.type == 'line':
                symbol.wire.append(
                    G.wire(x1=self.make_length(shape.p1.x),
                           y1=self.make_length(shape.p1.y),
                           x2=self.make_length(shape.p2.x),
                           y2=self.make_length(shape.p2.y),
                           layer=layer.number))
            elif shape.type == 'rectangle':
                symbol.rectangle.append(
                    G.rectangle(x1=self.make_length(shape.x),
                                y1=self.make_length(shape.y) -
                                self.make_length(shape.height),
                                x2=self.make_length(shape.x) +
                                self.make_length(shape.width),
                                y2=self.make_length(shape.y),
                                layer=layer.number))
            elif shape.type == 'polygon':
                symbol.polygon.append(self.make_polygon(shape))
                symbol.polygon[-1].layer = layer.number
            elif shape.type == 'circle':
                symbol.circle.append(self.make_circle(shape))
                symbol.circle[-1].layer = layer.number

        for pin in body.pins:
            symbol.pin.append(
                G.pin(
                    name=self.pinnum2name[(cpt_name, pin.pin_number)].replace(
                        ' ', ''),  #delete space
                    x=self.make_length(pin.p2.x),
                    y=self.make_length(pin.p2.y),
                    length=self.get_pin_length(pin),
                    direction=pin.attributes.get('eaglexml_direction'),
                    visible=pin.attributes.get('eaglexml_visible'),
                    rot=self.get_pin_rotation(pin)))

        return symbol
    def make_eagle_symbol_for_openjson_body(self, name, body):
        """ Make an eaglexml symbol from an opensjon body. """

        symbol = G.symbol(name=name)

        layer = self.ensure_layer(body, 'symbol')

        for shape in body.shapes:
            if shape.type == 'line':
                symbol.wire.append(
                    G.wire(x1=self.make_length(shape.p1.x),
                           y1=self.make_length(shape.p1.y),
                           x2=self.make_length(shape.p2.x),
                           y2=self.make_length(shape.p2.y),
                           layer=layer.number))
            elif shape.type == 'rectangle':
                symbol.rectangle.append(
                    G.rectangle(x1=self.make_length(shape.x),
                                y1=self.make_length(shape.y)
                                - self.make_length(shape.height),
                                x2=self.make_length(shape.x)
                                + self.make_length(shape.width),
                                y2=self.make_length(shape.y),
                                layer=layer.number))
            elif shape.type == 'polygon':
                symbol.polygon.append(self.make_polygon(shape))
                symbol.polygon[-1].layer = layer.number
            elif shape.type == 'circle':
                symbol.circle.append(self.make_circle(shape))
                symbol.circle[-1].layer = layer.number

        for pin in body.pins:
            symbol.pin.append(
                G.pin(name=pin.pin_number,
                      x=self.make_length(pin.p2.x),
                      y=self.make_length(pin.p2.y),
                      length=self.get_pin_length(pin),
                      direction=pin.attributes.get('eaglexml_direction'),
                      visible=pin.attributes.get('eaglexml_visible'),
                      rot=self.get_pin_rotation(pin)))

        return symbol
    def test_arc_shape(self):
        """ Arc shapes are generated correctly. """
        parser = EagleXML()

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='180')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, 0)
        self.assertEqual(s.start_angle, 0.0)
        self.assertEqual(s.end_angle, 1.0)
        self.assertEqual(s.radius, parser.make_length('25.4'))

        w = wire(x1='-25.4', y1='0', x2='25.4', y2='0', curve='180')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, 0)
        self.assertEqual(s.start_angle, 1.0)
        self.assertEqual(s.end_angle, 0.0)
        self.assertEqual(s.radius, parser.make_length('25.4'))

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='90')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, self.make_length('-25.4'))
        self.assertEqual(s.start_angle, 0.25)
        self.assertEqual(s.end_angle, 0.75)
        self.assertEqual(s.radius, parser.make_length('35.915'))

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='-90')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, self.make_length('25.4'))
        self.assertEqual(s.start_angle, 1.25)
        self.assertEqual(s.end_angle, 1.75)
        self.assertEqual(s.radius, parser.make_length('35.915'))

        w = wire(x1='0', y1='25.4', x2='0', y2='-25.4', curve='90')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, self.make_length('25.4'))
        self.assertEqual(s.y, 0)
        self.assertEqual(s.start_angle, 0.75)
        self.assertEqual(s.end_angle, 1.25)
        self.assertEqual(s.radius, parser.make_length('35.915'))

        w = wire(x1='0', y1='25.4', x2='0', y2='-25.4', curve='-180')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, 0)
        self.assertEqual(s.start_angle, 1.5)
        self.assertEqual(s.end_angle, 0.5)
        self.assertEqual(s.radius, parser.make_length('25.4'))

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='270')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, self.make_length('25.4'))
        self.assertEqual(s.start_angle, 1.75)
        self.assertEqual(s.end_angle, 1.25)
        self.assertEqual(s.radius, parser.make_length('35.915'))

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='-270')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, self.make_length('-25.4'))
        self.assertEqual(s.start_angle, 0.75)
        self.assertEqual(s.end_angle, 0.25)
        self.assertEqual(s.radius, parser.make_length('35.915'))
    def test_arc_shape(self):
        """ Arc shapes are generated correctly. """
        parser = EagleXML()

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='180')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, 0)
        self.assertEqual(s.start_angle, 0.0)
        self.assertEqual(s.end_angle, 1.0)
        self.assertEqual(s.radius, parser.make_length('25.4'))

        w = wire(x1='-25.4', y1='0', x2='25.4', y2='0', curve='180')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, 0)
        self.assertEqual(s.start_angle, 1.0)
        self.assertEqual(s.end_angle, 0.0)
        self.assertEqual(s.radius, parser.make_length('25.4'))

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='90')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, self.make_length('-25.4'))
        self.assertEqual(s.start_angle, 0.25)
        self.assertEqual(s.end_angle, 0.75)
        self.assertEqual(s.radius, parser.make_length('35.915'))

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='-90')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, self.make_length('25.4'))
        self.assertEqual(s.start_angle, 1.25)
        self.assertEqual(s.end_angle, 1.75)
        self.assertEqual(s.radius, parser.make_length('35.915'))

        w = wire(x1='0', y1='25.4', x2='0', y2='-25.4', curve='90')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, self.make_length('25.4'))
        self.assertEqual(s.y, 0)
        self.assertEqual(s.start_angle, 0.75)
        self.assertEqual(s.end_angle, 1.25)
        self.assertEqual(s.radius, parser.make_length('35.915'))

        w = wire(x1='0', y1='25.4', x2='0', y2='-25.4', curve='-180')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, 0)
        self.assertEqual(s.start_angle, 1.5)
        self.assertEqual(s.end_angle, 0.5)
        self.assertEqual(s.radius, parser.make_length('25.4'))

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='270')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, self.make_length('25.4'))
        self.assertEqual(s.start_angle, 1.75)
        self.assertEqual(s.end_angle, 1.25)
        self.assertEqual(s.radius, parser.make_length('35.915'))

        w = wire(x1='25.4', y1='0', x2='-25.4', y2='0', curve='-270')
        s = parser.make_shape_for_wire(w)
        self.assertEqual(s.x, 0)
        self.assertEqual(s.y, self.make_length('-25.4'))
        self.assertEqual(s.start_angle, 0.75)
        self.assertEqual(s.end_angle, 0.25)
        self.assertEqual(s.radius, parser.make_length('35.915'))