def bpssb300h(): pb = ProtoBoard(30, 12) for c in range(30): pb.addVTrace(c, 0, 4) pb.addVTrace(c, 7, 11) pb.addHTrace(0, 29, 5) pb.addHTrace(0, 29, 6) return pb, "bps_sb300_h.pb"
def sfbreadboardminih(): pb = ProtoBoard(17, 12) for c in range(17): pb.addVTrace(c, 0, 4) pb.addVTrace(c, 7, 11) pb.addHSkip(5) pb.addHSkip(6) return pb, "sf_breadboard_mini_h.pb"
def bpssb300v(): pb = ProtoBoard(12, 30) for r in range(30): pb.addHTrace(0, 4, r) pb.addHTrace(7, 11, r) pb.addVTrace(5, 0, 29) pb.addVTrace(6, 0, 29) return pb, "bps_sb300_v.pb"
def doubleperfv(cols, rows): pb = ProtoBoard(cols, rows) for c in range(cols): for r in range(0, rows - 1, 2): pb.addVTrace(c, r, r + 1) if rows % 2 == 1: for c in range(cols): pb.addVTrace(c, rows - 1, rows - 1) return pb, "double_perf_%d_%d_v.pb" % (cols, rows)
def doubleperfv(cols, rows): pb = ProtoBoard(cols,rows) for c in range(cols): for r in range(0, rows-1, 2): pb.addVTrace(c, r, r+1) if rows % 2 == 1: for c in range(cols): pb.addVTrace(c, rows-1, rows-1) return pb, "double_perf_%d_%d_v.pb" % (cols,rows)
def adapermaprotov(n): pb = ProtoBoard(18, n) for r in range(n): pb.addHTrace(3, 7, r) pb.addHTrace(10, 14, r) pb.addVSkip(2) pb.addVSkip(8) pb.addVSkip(9) pb.addVSkip(15) pb.addVTrace(0, 0, n - 1) pb.addVTrace(1, 0, n - 1) pb.addVTrace(16, 0, n - 1) pb.addVTrace(17, 0, n - 1) return pb, "ada_permaproto_%d_v.pb" % n
def adapermaprotoh(n): pb = ProtoBoard(n, 18) for c in range(n): pb.addVTrace(c, 3, 7) pb.addVTrace(c, 10, 14) pb.addHSkip(2) pb.addHSkip(8) pb.addHSkip(9) pb.addHSkip(15) pb.addHTrace(0, n - 1, 0) pb.addHTrace(0, n - 1, 1) pb.addHTrace(0, n - 1, 16) pb.addHTrace(0, n - 1, 17) return pb, "ada_permaproto_%d_h.pb" % n
def adapermaprotov(n): pb = ProtoBoard(18, n) for r in range(n): pb.addHTrace(3, 7, r) pb.addHTrace(10, 14, r) pb.addVSkip(2) pb.addVSkip(8) pb.addVSkip(9) pb.addVSkip(15) pb.addVTrace(0, 0, n-1) pb.addVTrace(1, 0, n-1) pb.addVTrace(16, 0, n-1) pb.addVTrace(17, 0, n-1) return pb, "ada_permaproto_%d_v.pb" % n
def adapermaprotoh(n): pb = ProtoBoard(n, 18) for c in range(n): pb.addVTrace(c, 3, 7) pb.addVTrace(c, 10, 14) pb.addHSkip(2) pb.addHSkip(8) pb.addHSkip(9) pb.addHSkip(15) pb.addHTrace(0, n-1, 0) pb.addHTrace(0, n-1, 1) pb.addHTrace(0, n-1, 16) pb.addHTrace(0, n-1, 17) return pb, "ada_permaproto_%d_h.pb" % n
def loadBoard(self, fn): try: with open(fn, "r") as x: xml = x.read() except: return None xmldoc = XMLDoc( xml, makelist=["trace", "cut", "removal", "wire", "component"]) compID.reInit() root = xmldoc.getRoot() sz = [int(x) for x in str(root.size).split(',')] pb = ProtoBoard(sz[0], sz[1]) try: pb.setDescription((str(root.description))) except AttributeError: pb.setDescription(None) try: tl = root.htraces.trace except AttributeError: tl = [] for t in tl: trc = [int(x) for x in str(t).split(',')] pb.addHTrace(trc[0], trc[1], trc[2]) try: tl = root.vtraces.trace except AttributeError: tl = [] for t in tl: trc = [int(x) for x in str(t).split(',')] pb.addVTrace(trc[0], trc[1], trc[2]) try: s = str(root.hskips).strip() except AttributeError: s = "" if len(s) > 0: for sk in s.split(','): pb.addHSkip(int(sk)) try: s = str(root.vskips).strip() except AttributeError: s = "" if len(s) > 0: for sk in s.split(','): pb.addVSkip(int(sk)) try: cl = root.hcuts.cut except AttributeError: cl = [] for c in cl: cut = [int(x) for x in str(c).split(',')] pb.addHCut(cut[0], cut[1], cut[2]) try: cl = root.vcuts.cut except AttributeError: cl = [] for c in cl: cut = [int(x) for x in str(c).split(',')] pb.addVCut(cut[0], cut[1], cut[2]) try: rl = root.removals.removal except AttributeError: rl = [] for r in rl: rmv = [int(x) for x in str(r).split(',')] pb.traceRemove([rmv[0], rmv[1]]) try: wirelist = root.wires.wire except AttributeError: wirelist = [] for w in wirelist: s = str(w.pointa) pta = [int(x) for x in s.split(',')] s = str(w.pointb) ptb = [int(x) for x in s.split(',')] s = str(w.color) clr = [int(x) for x in s.split(',')] c = StretchComponent(WIRENAME, pta, ptb, LT_WIRE) pb.addWire(c, wx.Colour(clr[0], clr[1], clr[2])) try: complist = root.components.component except AttributeError: complist = [] cl = self.settings.fixedComponentList for c in complist: tp = str(c.type) cid = str(c.id) nm = str(c.name) value = str(c.value) s = str(c.anchor) vw = int(str(c.view)) anchor = [int(x) for x in s.split(',')] comp = cl.getComponent(tp)[0] comp.setID(cid) comp.setName(nm) comp.setValue(value) comp.setAnchor(anchor) cl.setView(comp, vw) pb.addComponent(comp) compID.reserveID(cid) try: complist = root.stretchcomponents.component except AttributeError: complist = [] cl = self.settings.stretchComponentList for c in complist: tp = str(c.type) cid = str(c.id) nm = str(c.name) value = str(c.value) s = str(c.pointa) pta = [int(x) for x in s.split(',')] s = str(c.pointb) ptb = [int(x) for x in s.split(',')] comp = cl.getComponent(tp)[0] comp.setID(cid) comp.setP1(pta) comp.setP2(ptb) comp.setName(nm) comp.setValue(value) pb.addStretchComponent(comp) compID.reserveID(cid) try: complist = root.growcomponents.component except AttributeError: complist = [] cl = self.settings.growComponentList for c in complist: tp = str(c.type) cid = str(c.id) nm = str(c.name) value = str(c.value) s = str(c.pointa) pta = [int(x) for x in s.split(',')] s = str(c.pointb) ptb = [int(x) for x in s.split(',')] comp = cl.getComponent(tp)[0] comp.setID(cid) comp.setP1(pta) comp.setP2(ptb) comp.setName(nm) comp.setValue(value) pb.addGrowComponent(comp) compID.reserveID(cid) pb.setModified(False) return pb
def loadBoard(self, fn): try: with open(fn, "r") as x: xml = x.read() except: return None xmldoc = XMLDoc(xml, makelist=["trace", "cut", "removal", "wire", "component"]) compID.reInit() root = xmldoc.getRoot() sz = [int(x) for x in str(root.size).split(',')] pb = ProtoBoard(sz[0], sz[1]) try: pb.setDescription((str(root.description))) except AttributeError: pb.setDescription(None) try: tl = root.htraces.trace except AttributeError: tl = [] for t in tl: trc = [int(x) for x in str(t).split(',')] pb.addHTrace(trc[0], trc[1], trc[2]) try: tl = root.vtraces.trace except AttributeError: tl = [] for t in tl: trc = [int(x) for x in str(t).split(',')] pb.addVTrace(trc[0], trc[1], trc[2]) try: s = str(root.hskips).strip() except AttributeError: s = "" if len(s) > 0: for sk in s.split(','): pb.addHSkip(int(sk)) try: s = str(root.vskips).strip() except AttributeError: s = "" if len(s) > 0: for sk in s.split(','): pb.addVSkip(int(sk)) try: cl = root.hcuts.cut except AttributeError: cl = [] for c in cl: cut = [int(x) for x in str(c).split(',')] pb.addHCut(cut[0], cut[1], cut[2]) try: cl = root.vcuts.cut except AttributeError: cl = [] for c in cl: cut = [int(x) for x in str(c).split(',')] pb.addVCut(cut[0], cut[1], cut[2]) try: rl = root.removals.removal except AttributeError: rl = [] for r in rl: rmv = [int(x) for x in str(r).split(',')] pb.traceRemove([rmv[0], rmv[1]]) try: wirelist = root.wires.wire except AttributeError: wirelist = [] for w in wirelist: s = str(w.pointa) pta = [int(x) for x in s.split(',')] s = str(w.pointb) ptb = [int(x) for x in s.split(',')] s = str(w.color) clr = [int(x) for x in s.split(',')] c = StretchComponent(WIRENAME, pta, ptb, LT_WIRE) pb.addWire(c, wx.Colour(clr[0], clr[1], clr[2])) try: complist = root.components.component except AttributeError: complist = [] cl = self.settings.fixedComponentList for c in complist: tp = str(c.type) cid = str(c.id) nm = str(c.name) value = str(c.value) s = str(c.anchor) vw = int(str(c.view)) anchor = [int(x) for x in s.split(',')] comp = cl.getComponent(tp)[0] comp.setID(cid) comp.setName(nm) comp.setValue(value) comp.setAnchor(anchor) cl.setView(comp, vw) pb.addComponent(comp) compID.reserveID(cid) try: complist = root.stretchcomponents.component except AttributeError: complist = [] cl = self.settings.stretchComponentList for c in complist: tp = str(c.type) cid = str(c.id) nm = str(c.name) value = str(c.value) s = str(c.pointa) pta = [int(x) for x in s.split(',')] s = str(c.pointb) ptb = [int(x) for x in s.split(',')] comp = cl.getComponent(tp)[0] comp.setID(cid) comp.setP1(pta) comp.setP2(ptb) comp.setName(nm) comp.setValue(value) pb.addStretchComponent(comp) compID.reserveID(cid) try: complist = root.growcomponents.component except AttributeError: complist = [] cl = self.settings.growComponentList for c in complist: tp = str(c.type) cid = str(c.id) nm = str(c.name) value = str(c.value) s = str(c.pointa) pta = [int(x) for x in s.split(',')] s = str(c.pointb) ptb = [int(x) for x in s.split(',')] comp = cl.getComponent(tp)[0] comp.setID(cid) comp.setP1(pta) comp.setP2(ptb) comp.setName(nm) comp.setValue(value) pb.addGrowComponent(comp) compID.reserveID(cid) pb.setModified(False) return pb
class NewFileDialog(wx.Dialog): def __init__(self, parent): self.parent = parent self.settings = parent.settings self.images = parent.settings.images self.chosenTemplate = None self.pb = None title = "New Proto-board file" wx.Dialog.__init__(self, parent, wx.ID_ANY, title, size=(100, 100)) self.SetBackgroundColour("white") self.Bind(wx.EVT_CLOSE, self.onClose) sizer = wx.BoxSizer(wx.VERTICAL) sizer.AddSpacer((10, 10)) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.AddSpacer((20, 10)) box = wx.StaticBox(self, -1, "Choose an existing template") tmplSizer = wx.StaticBoxSizer(box, wx.VERTICAL) self.templates = [x for x in sorted(os.listdir(self.settings.templDir)) if x.endswith(".pbt")] self.descText = {} for t in self.templates: self.descText[t] = self.getTemplateDesc(os.path.join(self.settings.templDir, t)) self.chTempl = wx.Choice(self, wx.ID_ANY, choices = self.templates) self.chTempl.Bind(wx.EVT_CHOICE, self.onTemplChoice) if len(self.templates) > 0: self.chTempl.SetSelection(0) self.chosenTemplate = self.templates[0] tmplSizer.Add(self.chTempl, 0, wx.ALL, 10) self.tbTmplOk = wx.BitmapButton(self, wx.ID_ANY, self.images.pngOk, size=BDIM) self.setTemplateHelp() self.Bind(wx.EVT_BUTTON, self.onTmplOk, self.tbTmplOk) tmplSizer.Add(self.tbTmplOk, 0, wx.ALIGN_CENTER) hsizer.Add(tmplSizer, 0, wx.EXPAND) hsizer.AddSpacer((10, 10)) box = wx.StaticBox(self, -1, "Choose proto board parameters") rightSizer = wx.StaticBoxSizer(box, wx.VERTICAL) rightSizer.AddSpacer((20, 20)) t1 = wx.StaticText(self, wx.ID_ANY, "Columns:") self.scCols = wx.SpinCtrl(self, wx.ID_ANY, size=(50, -1)) self.scCols.SetRange(5,100) self.scCols.SetValue(5) t2 = wx.StaticText(self, wx.ID_ANY, "Rows:") self.scRows = wx.SpinCtrl(self, wx.ID_ANY, size=(50, -1)) self.scRows.SetRange(5,100) self.scRows.SetValue(5) t3 = wx.StaticText(self, wx.ID_ANY, "Trace Length:") self.scTraces = wx.SpinCtrl(self, wx.ID_ANY, size=(50, -1)) self.scTraces.SetRange(1,20) self.scTraces.SetValue(1) t4 = wx.StaticText(self, wx.ID_ANY, "Full Length:") self.cbFull = wx.CheckBox(self, wx.ID_ANY, "") t5 = wx.StaticText(self, wx.ID_ANY, "Vertical Traces:") self.cbVert = wx.CheckBox(self, wx.ID_ANY, "") isizer = wx.FlexGridSizer(cols=4, hgap=6, vgap=6) isizer.AddMany([ t1, self.scCols, t2, self.scRows, t3, self.scTraces, t4, self.cbFull, t5, self.cbVert]) rightSizer.Add(isizer, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.LEFT|wx.RIGHT, 10) rightSizer.AddSpacer((10, 10)) btnSizer=wx.BoxSizer(wx.HORIZONTAL) self.tbOk = wx.BitmapButton(self, wx.ID_ANY, self.images.pngOk, size=BDIM) self.tbOk.SetToolTipString("Create new proto-board file") self.Bind(wx.EVT_BUTTON, self.onOk, self.tbOk) btnSizer.Add(self.tbOk) btnSizer.AddSpacer((20, 20)) self.tbCancel = wx.BitmapButton(self, wx.ID_ANY, self.images.pngCancel, size=BDIM) self.tbCancel.SetToolTipString("Exit without creating new file") self.Bind(wx.EVT_BUTTON, self.onClose, self.tbCancel) btnSizer.Add(self.tbCancel) rightSizer.Add(btnSizer, 0, wx.ALIGN_CENTER_HORIZONTAL) hsizer.Add(rightSizer, 0, wx.EXPAND) hsizer.AddSpacer((20, 10)) sizer.Add(hsizer) sizer.AddSpacer((20, 20)) self.SetSizer(sizer) self.Fit() def getTemplateDesc(self, fnTmpl): try: with open(fnTmpl, "r") as x: xml = x.read() except: return None xmldoc = XMLDoc(xml, makelist=["trace", "cut", "removal", "wire", "component"]) root = xmldoc.getRoot() try: return root.description except AttributeError: return None def onTemplChoice(self, evt): self.chosenTemplate = self.chTempl.GetStringSelection() self.setTemplateHelp() def setTemplateHelp(self): if self.chosenTemplate is None: self.tbTmplOk.SetToolTipString("Create based on a template") elif self.descText[self.chosenTemplate] is None: self.tbTmplOk.SetToolTipString("Create using template %s" % self.chosenTemplate) else: self.tbTmplOk.SetToolTipString("Create using %s" % self.descText[self.chosenTemplate]) def getData(self): return self.pb def onTmplOk(self, evt): i = self.chTempl.GetSelection() fn = os.path.join(self.settings.templDir, self.chTempl.GetString(i)) self.pb = self.parent.loadBoard(fn) self.EndModal(wx.ID_OK) def onOk(self, evt): r = self.scRows.GetValue() c = self.scCols.GetValue() vertical = self.cbVert.IsChecked() if self.cbFull.IsChecked(): if vertical: tl = r else: tl = c else: tl = self.scTraces.GetValue() self.pb = ProtoBoard(c, r) if vertical: if tl > r: tl = r for i in range(c): for j in range(0, r-tl+1, tl): self.pb.addVTrace(i, j, j+tl-1) nl = r % tl if nl != 0: for i in range(c): self.pb.addVTrace(i, r-nl, r-1) else: if tl > c: tl = c for i in range(r): for j in range(0, c-tl+1, tl): self.pb.addHTrace(j, j+tl-1, i) nl = c % tl if nl != 0: for i in range(r): self.pb.addHTrace(c-nl, c-1, i) self.EndModal(wx.ID_OK) def onClose(self, evt): self.EndModal(wx.ID_CANCEL)