def parse_inst(self, args): """ Returns a parsed component instance. """ inst, libname, libnum, x, y, rot, _scale, _b = args.split() # scale is a floating point scaling constant. Also, evil. thisinst = ComponentInstance(inst, self.lookup(libname, libnum), 0) if int(rot) > 3: # part is flipped around y-axis. When applying transforms, flip it # first, then rotate it. rot = str(int(rot) - 4) # flip = True thisinst.add_symbol_attribute(SymbolAttribute(int(x), int(y), float(rot) / 2)) subdata = defaultdict(list) for phrase in self.stream: cmd, _sep, args = phrase.partition(' ') if cmd not in ('|R', 'A', 'C'): self.stream.push(phrase) break k, v = self.parsenode(cmd)(args) subdata[k].append(v) for annot in subdata['annot']: thisinst.symbol_attributes[0].add_annotation(annot) if '=' in annot.value: thisinst.add_attribute(*(annot.value.split('=', 1))) # Turns out C can reference a net before it's been created via # the N command. Really don't like passing stuff inband like this. Ugh. thisinst.conns = subdata['conn'] return ('inst', thisinst)
def parse_inst(self, args): """ Returns a parsed component instance. """ inst, libname, libnum, x, y, rot, _scale, _unknown = args.split() # scale is a floating point scaling constant. Also, evil. thisinst = ComponentInstance(inst, self.lookup(libname, libnum), 0) flip = False if int(rot) > 3: # part is flipped around y-axis. When applying transforms, flip it # first, then rotate it. rot = str(int(rot) - 4) flip = True thisinst.add_symbol_attribute(SymbolAttribute(int(x), int(y), (2 - float(rot) / 2) % 2, flip)) subdata = self.sub_nodes('|R A C'.split()) for annot in subdata['annot']: thisinst.symbol_attributes[0].add_annotation(annot) if '=' in annot.value: thisinst.add_attribute(*(annot.value.split('=', 1))) # Turns out C can reference a net before it's been created via # the N command. Really don't like passing stuff inband like this. Ugh. thisinst.conns = subdata['conn'] return ('inst', thisinst)
def parse_inst(self, args): """ Returns a parsed component instance. """ inst, libname, libnum, x, y, rot, scale, _unknown = args.split() # scale is a floating point scaling constant. Also, evil. if scale != '1': libkey = self.scaled_component(libname, libnum, scale) else: libkey = self.lookup(libname, libnum) thisinst = ComponentInstance(inst, libkey, 0) rot, flip = self.rot_and_flip(rot) thisinst.add_symbol_attribute(SymbolAttribute(int(x), int(y), rot, flip)) subdata = self.sub_nodes('|R A C'.split()) for annot in subdata['annot']: thisinst.symbol_attributes[0].add_annotation(annot) if '=' in annot.value: thisinst.add_attribute(*(annot.value.split('=', 1))) # Turns out C can reference a net before it's been created via # the N command. Really don't like passing stuff inband like this. Ugh. thisinst.conns = subdata['conn'] return ('inst', thisinst)
def parse_inst(self, args): """ Returns a parsed component instance. """ inst, libname, libnum, x, y, rot, scale, _unknown = args.split() # scale is a floating point scaling constant. Also, evil. if scale != '1': libkey = self.scaled_component(libname, libnum, scale) else: libkey = self.lookup(libname, libnum) thisinst = ComponentInstance(inst, self.lib.components[libkey], libkey, 0) rot, flip = self.rot_and_flip(rot) thisinst.add_symbol_attribute( SymbolAttribute(int(x), int(y), rot, flip)) subdata = self.sub_nodes('|R A C'.split()) for annot in subdata['annot']: thisinst.symbol_attributes[0].add_annotation(annot) if '=' in annot.value: thisinst.add_attribute(*(annot.value.split('=', 1))) # Turns out C can reference a net before it's been created via # the N command. Really don't like passing stuff inband like this. Ugh. thisinst.conns = subdata['conn'] return ('inst', thisinst)
def parse_inst(self, args): """ Returns a parsed component instance. """ inst, libname, libnum, x, y, rot, _scale, _unknown = args.split() # scale is a floating point scaling constant. Also, evil. thisinst = ComponentInstance(inst, self.lookup(libname, libnum), 0) flip = False if int(rot) > 3: # part is flipped around y-axis. When applying transforms, flip it # first, then rotate it. rot = str(int(rot) - 4) flip = True thisinst.add_symbol_attribute( SymbolAttribute(int(x), int(y), (2 - float(rot) / 2) % 2, flip)) subdata = self.sub_nodes('|R A C'.split()) for annot in subdata['annot']: thisinst.symbol_attributes[0].add_annotation(annot) if '=' in annot.value: thisinst.add_attribute(*(annot.value.split('=', 1))) # Turns out C can reference a net before it's been created via # the N command. Really don't like passing stuff inband like this. Ugh. thisinst.conns = subdata['conn'] return ('inst', thisinst)