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
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
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'))