本文整理汇总了Python中upconvert.core.design.Design类的典型用法代码示例。如果您正苦于以下问题:Python Design类的具体用法?Python Design怎么用?Python Design使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Design类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: parse
def parse(self, filename, library_filename=None):
""" Parse a kicad file into a design """
design = Design()
segments = set() # each wire segment
junctions = set() # wire junction point (connects all wires under it)
self.instance_names = []
self.library = KiCADLibrary()
if library_filename is None:
directory, _ = split(filename)
for dir_file in listdir(directory):
if dir_file.endswith('.lib'):
self.library.parse(directory + '/' + dir_file)
for cpt in self.library.components:
design.add_component(cpt.name, cpt)
with open(filename) as f:
libs = []
line = f.readline().strip()
# parse the library references
while line and line != "$EndDescr":
if line.startswith('LIBS:'):
libs.extend(line.split(':', 1)[1].split(','))
line = f.readline().strip()
# Now parse wires and components, ignore connections, we get
# connectivity from wire segments
line = f.readline()
while line:
prefix = line.split()[0]
if line.startswith('Wire Wire Line'):
self.parse_wire(f, segments)
elif prefix == "Connection": # Store these to apply later
self.parse_connection(line, junctions)
elif prefix == "Text":
design.design_attributes.add_annotation(
self.parse_text(f, line))
elif prefix == "$Comp": # Component Instance
inst, comp = self.parse_component_instance(f)
design.add_component_instance(inst)
if comp is not None:
design.add_component(comp.name, comp)
self.ensure_component(design, inst.library_id, libs)
line = f.readline()
segments = self.divide(segments, junctions)
design.nets = self.calc_nets(design, segments)
design.scale(MULT)
return design
示例2: test_units
def test_units(self):
""" Capture absence of units. """
layout = Layout()
layout.units = None
layout.layers.append(Layer())
design = Design()
design.layout = layout
writer = Writer()
writer.write(design)
示例3: test_images
def test_images(self):
""" Capture images with no data. """
layer = Layer()
layer.images.append(Image())
layout = Layout()
layout.units = 'mm'
layout.layers.append(layer)
design = Design()
design.layout = layout
writer = Writer()
writer.write(design)
示例4: test_generating_geda_commands_for_toplevel_shapes
def test_generating_geda_commands_for_toplevel_shapes(self):
design = Design()
design.shapes = [
shape.Line((0, 0), (0, 50)),
shape.Circle(0, 0, 300),
]
design.pins = [
components.Pin('E', (0, 0), (0, 30)),
components.Pin('E', (0, 0), (0, 30)),
]
commands = self.geda_writer.generate_body_commands(design)
## default pins require 6 commands, shapes require 1 command
self.assertEquals(len(commands), 2*6 + 2*1)
示例5: parse
def parse(self, infile='.'):
""" Parse tokens from gerber files into a design. """
is_zip = infile.endswith('.zip')
openarchive = ZipFile if is_zip else TarFile.open
archive = batch_member = None
try:
# define multiple layers from folder
if LAYERS_CFG in infile:
archive = None
cfg_name = infile
cfg = open(cfg_name, 'r')
# define multiple layers from archivea
else:
archive = openarchive(infile)
batch = archive.namelist if is_zip else archive.getnames
batch_member = archive.open if is_zip else archive.extractfile
cfg_name = [n for n in batch() if LAYERS_CFG in n][0]
cfg = batch_member(cfg_name)
# define single layer from single gerber file
except ReadError:
name, ext = path.split(infile)[1].rsplit('.', 1)
layer_defs = [LayerDef(ext.lower() == 'ger' and name or ext,
'unknown', infile)]
self._gen_layers(layer_defs, None, None)
# tidy up batch specs
else:
layer_defs = [LayerDef(rec[0],
rec[1],
path.join(path.split(cfg_name)[0], rec[2]))
for rec in
csv.reader(cfg, skipinitialspace=True)]
cfg.close()
self._gen_layers(layer_defs, archive, batch_member)
# tidy up archive
finally:
if archive:
archive.close()
# compile design
if DEBUG:
self._debug_stdout()
self.layout.units = (self.params['MO'] == 'IN' and 'inch' or 'mm')
design = Design()
design.layout = self.layout
return design
示例6: parse
def parse(self):
'''Returns a Design built up from a schematic file that represents one
sheet of the original schematic'''
tree = ViewDrawBase.parse(self)
# tree['lines'] is a [list of [list of lines]]
tree['shape'].extend(sum(tree['lines'], []))
ckt = Design()
# TODO little weak here, a copy instead?
ckt.components = self.lib
for net in tree['net']:
ckt.add_net(net)
for inst in tree['inst']:
ckt.add_component_instance(inst)
# hold on tight, this is ugly
for (netid, netpt, pinid) in inst.conns:
net = [n for n in ckt.nets if n.net_id == netid][0]
comp = ConnectedComponent(inst.instance_id, pinid)
net.ibpts[netpt - 1].add_connected_component(comp)
del inst.conns
for net in ckt.nets:
del net.ibpts
for shape in tree['shape']:
ckt.add_shape(shape)
if isinstance(shape, Label):
ann = Annotation(shape.text, shape.x, shape.y,
shape._rotation, True)
ckt.design_attributes.add_annotation(ann)
for k, v, annot in tree['attr']:
ckt.design_attributes.add_attribute(k, v)
ckt.design_attributes.add_annotation(annot)
return ckt
示例7: __init__
def __init__(self):
self.design = Design()
# map (component, gate name) to body indices
self.cptgate2body_index = {}
# map (component, gate name) to pin maps, dicts from strings
# (pin names) to Pins. These are used during pinref processing
# in segments.
self.cptgate2pin_map = defaultdict(dict)
# map (component, gate names) to annotation maps, dicts from
# strings (name|value) to Annotations. These represent the
# >NAME and >VALUE texts on eagle components, which must be
# converted into component instance annotations since their
# contents depend on the component instance name and value.
self.cptgate2ann_map = defaultdict(dict)
# map part names to component instances. These are used during
# pinref processing in segments.
self.part2inst = {}
# map part names to gate names to symbol attributes. These
# are used during pinref processing in segments.
self.part2gate2symattr = defaultdict(dict)
示例8: parse
def parse(self, inputfile):
""" Parse a gEDA file into a design.
Returns the design corresponding to the gEDA file.
"""
inputfiles = []
## check if inputfile is in ZIP format
if zipfile.is_zipfile(inputfile):
self.geda_zip = zipfile.ZipFile(inputfile)
for filename in self.geda_zip.namelist():
if filename.endswith('.sch'):
inputfiles.append(filename)
else:
inputfiles = [inputfile]
self.design = Design()
## parse frame data of first schematic to extract
## page size (assumes same frame for all files)
with self._open_file_or_zip(inputfiles[0]) as stream:
self._check_version(stream)
for line in stream.readlines():
if 'title' in line and line.startswith('C'):
obj_type, params = self._parse_command(StringIO(line))
assert(obj_type == 'C')
params['basename'], _ = os.path.splitext(
params['basename'],
)
log.debug("using title file: %s", params['basename'])
self._parse_title_frame(params)
## store offset values in design attributes
self.design.design_attributes.attributes.update({
'_geda_offset_x': str(self.offset.x),
'_geda_offset_y': str(self.offset.y),
'_geda_frame_width': str(self.frame_width),
'_geda_frame_height': str(self.frame_height),
})
for filename in inputfiles:
f_in = self._open_file_or_zip(filename)
self._check_version(f_in)
self.parse_schematic(f_in)
basename, _ = os.path.splitext(os.path.basename(filename))
self.design.design_attributes.metadata.set_name(basename)
## modify offset for next page to be shifted to the right
self.offset.x = self.offset.x - self.frame_width
f_in.close()
return self.design
示例9: parse
def parse(self):
'''Returns a Design built up from a schematic file that represents one
sheet of the original schematic'''
tree = ViewDrawBase.parse(self)
# tree['lines'] is a [list of [list of lines]]
tree['shape'].extend(sum(tree['lines'], []))
ckt = Design()
# TODO little weak here, a copy instead?
ckt.components = self.lib
for net in tree['net']:
ckt.add_net(net)
for inst in tree['inst']:
ckt.add_component_instance(inst)
# hold on tight, this is ugly
for (netid, netpt, pinid) in inst.conns:
net = [n for n in ckt.nets if n.net_id == netid][0]
comp = ConnectedComponent(inst.instance_id, pinid)
net.ibpts[netpt - 1].add_connected_component(comp)
del inst.conns
for net in ckt.nets:
del net.ibpts
# too bad designs don't have top-level shapes (yet?)
#map(ckt.add_shape, tree['shape'])
for lbl in [s for s in tree['shapes'] if isinstance(s, Label)]:
ann = Annotation(lbl.text, lbl.x, lbl.y, lbl.rotation, True)
ckt.design_attributes.add_annotation(ann)
for k, v in tree['attr']:
ckt.design_attributes.add_attribute(k, v)
self.correct_y(ckt, tree['Dbounds'][0])
return ckt
示例10: parse
def parse(self, filename):
""" Parse a specctra file into a design """
self.design = Design()
with open(filename) as f:
data = f.read()
tree = DsnParser().parse(data)
struct = self.walk(tree)
self.resolution = struct.resolution
self._convert(struct)
return self.design
示例11: __init__
def __init__(self):
self.design = Design()
# This maps fritzing connector keys to (x, y) coordinates
self.points = {} # (index, connid) -> (x, y)
# This maps fritzing component indices to ComponentInstances
self.component_instances = {} # index -> ComponentInstance
# Map connector keys to the list of connector keys they
# are connected to.
self.connects = {} # (index, connid) -> [(index, connid)]
self.components = {} # idref -> ComponentParser
self.fritzing_version = None
self.fzz_zipfile = None # The ZipFile if we are parsing an fzz
示例12: parse
def parse(self, filename, library_filename=None):
""" Parse a kicad file into a design """
design = Design()
segments = set() # each wire segment
junctions = set() # wire junction point (connects all wires under it)
if library_filename is None:
library_filename = splitext(filename)[0] + '-cache.lib'
if exists(library_filename):
for cpt in parse_library(library_filename):
design.add_component(cpt.name, cpt)
with open(filename) as f:
libs = []
line = f.readline().strip()
# parse the library references
while line and line != "$EndDescr":
if line.startswith('LIBS:'):
libs.extend(line.split(':', 1)[1].split(','))
line = f.readline().strip()
# Now parse wires and components, ignore connections, we get
# connectivity from wire segments
line = f.readline()
while line:
prefix = line.split()[0]
if line.startswith('Wire Wire Line'):
self.parse_wire(f, segments)
elif prefix == "Connection": # Store these to apply later
self.parse_connection(line, junctions)
elif prefix == "Text":
design.design_attributes.add_annotation(
self.parse_text(f, line))
elif prefix == "$Comp": # Component Instance
inst = self.parse_component_instance(f)
design.add_component_instance(inst)
if inst.library_id not in design.components.components:
cpt = lookup_part(inst.library_id, libs)
if cpt is not None:
design.components.add_component(cpt.name, cpt)
line = f.readline()
segments = self.divide(segments, junctions)
design.nets = self.calc_nets(segments)
self.calc_connected_components(design)
return design
示例13: parse_schematic
def parse_schematic(self, stream):
""" Parse a gEDA schematic provided as a *stream* object into a
design.
Returns the design corresponding to the schematic.
"""
# pylint: disable=R0912
if self.design is None:
self.design = Design()
self.segments = set()
self.net_points = dict()
self.net_names = dict()
obj_type, params = self._parse_command(stream)
while obj_type is not None:
objects = getattr(self, "_parse_%s" % obj_type)(stream, params)
attributes = self._parse_environment(stream)
self.design.design_attributes.attributes.update(attributes or {})
self.add_objects_to_design(self.design, objects)
obj_type, params = self._parse_command(stream)
## process net segments into nets & net points and add to design
self.divide_segments()
calculated_nets = self.calculate_nets()
for cnet in sorted(calculated_nets, key=lambda n : n.net_id):
self.design.add_net(cnet)
return self.design
示例14: DesignTests
class DesignTests(unittest.TestCase):
""" The tests of the core module design feature """
def setUp(self):
""" Setup the test case. """
self.des = Design()
def tearDown(self):
""" Teardown the test case. """
pass
def test_create_new_design(self):
""" Test the creation of a new empty design. """
self.assertEqual(len(self.des.nets), 0)
def test_empty_bounds(self):
'''bounds() on an empty design is to include just the origin'''
for point in self.des.bounds():
self.assertEqual(point.x, 0)
self.assertEqual(point.y, 0)
def test_bounds_nets(self):
'''Test bounds() with just the design's nets'''
leftnet = Net('foo1')
topnet = Net('foo2')
rightnet = Net('foo3')
botnet = Net('foo4')
# limits minx=2, miny=1, maxx=7, maxy=9
mkbounds(leftnet, 2, 3, 3, 3)
mkbounds(topnet, 3, 1, 3, 3)
mkbounds(rightnet, 3, 3, 7, 3)
mkbounds(botnet, 3, 3, 3, 9)
self.des.add_net(topnet)
self.des.add_net(rightnet)
self.des.add_net(leftnet)
self.des.add_net(botnet)
top_left, btm_right = self.des.bounds()
self.assertEqual(top_left.x, 2)
self.assertEqual(top_left.y, 1)
self.assertEqual(btm_right.x, 7)
self.assertEqual(btm_right.y, 9)
def test_bounds_annots(self):
'''Test bounds() with just Annotations added as design attributes'''
left = Annotation('foo1', 3, 3, 0, True)
top = Annotation('foo2', 3, 3, 0, True)
right = Annotation('foo3', 3, 3, 0, True)
bot = Annotation('foo4', 3, 3, 0, True)
mkbounds(left, 2, 3, 3, 3)
mkbounds(top, 3, 2, 3, 3)
mkbounds(right, 3, 3, 5, 3)
mkbounds(bot, 3, 3, 3, 6)
for anno in (left, right, bot, top):
self.des.design_attributes.add_annotation(anno)
top_left, btm_right = self.des.bounds()
self.assertEqual(top_left.x, 2)
self.assertEqual(top_left.y, 2)
self.assertEqual(btm_right.x, 5)
self.assertEqual(btm_right.y, 6)
def test_bounds_parts(self):
'''test bounds() with just components in the design'''
libcomp = Component('bar')
libcomp.add_symbol(Symbol())
libcomp.symbols[0].add_body(Body())
mkbounds(libcomp.symbols[0].bodies[0], 0, 0, 10, 10)
self.des.add_component('foo', libcomp)
for (x, y) in ((1, 3), (3, 2), (5, 3), (3, 7)):
compinst = ComponentInstance(str((x, y)), 'foo', 0)
compinst.add_symbol_attribute(SymbolAttribute(x, y, 0, False))
self.des.add_component_instance(compinst)
top_left, btm_right = self.des.bounds()
self.assertEqual(top_left.x, 1)
self.assertEqual(top_left.y, 2)
self.assertEqual(btm_right.x, 15)
self.assertEqual(btm_right.y, 17)
def test_bounds_neg_coords(self):
'''Test bounds() when the schematic is all negative coordinates'''
net = Net('foo')
mkbounds(net, -1, -2, -3, -4)
self.des.add_net(net)
top_left, btm_right = self.des.bounds()
self.assertEqual(top_left.x, -3)
self.assertEqual(top_left.y, -4)
self.assertEqual(btm_right.x, -1)
self.assertEqual(btm_right.y, -2)
def test_bounds_all_elts(self):
'''bounds() with all the elements competing'''
net = Net('foo')
mkbounds(net, 3, 3, -1, -2)
self.des.add_net(net)
annot = Annotation('foo', 3, 3, 0, True)
mkbounds(annot, 3, 3, 3, 5)
#.........这里部分代码省略.........
示例15: __init__
#.........这里部分代码省略.........
confidence += 0.25
if 'netname=' in data:
confidence += 0.25
return confidence
def set_offset(self, point):
""" Set the offset point for the gEDA output. As OpenJSON
positions the origin in the center of the viewport and
gEDA usually uses (40'000, 40'000) as page origin, this
allows for translating from one coordinate system to
another. It expects a *point* object providing a *x* and
*y* attribute.
"""
## create an offset of 5 grid squares from origin (0,0)
self.offset.x = point.x
self.offset.y = point.y
def parse(self, inputfile):
""" Parse a gEDA file into a design.
Returns the design corresponding to the gEDA file.
"""
inputfiles = []
## check if inputfile is in ZIP format
if zipfile.is_zipfile(inputfile):
self.geda_zip = zipfile.ZipFile(inputfile)
for filename in self.geda_zip.namelist():
if filename.endswith('.sch'):
inputfiles.append(filename)
else:
inputfiles = [inputfile]
self.design = Design()
## parse frame data of first schematic to extract
## page size (assumes same frame for all files)
with self._open_file_or_zip(inputfiles[0]) as stream:
self._check_version(stream)
for line in stream.readlines():
if 'title' in line and line.startswith('C'):
obj_type, params = self._parse_command(StringIO(line))
assert(obj_type == 'C')
params['basename'], _ = os.path.splitext(
params['basename'],
)
log.debug("using title file: %s", params['basename'])
self._parse_title_frame(params)
## store offset values in design attributes
self.design.design_attributes.attributes.update({
'_geda_offset_x': str(self.offset.x),
'_geda_offset_y': str(self.offset.y),
'_geda_frame_width': str(self.frame_width),
'_geda_frame_height': str(self.frame_height),
})
for filename in inputfiles:
f_in = self._open_file_or_zip(filename)
self._check_version(f_in)
self.parse_schematic(f_in)