def draw_on(self, canvas, offset=(0, 0)):
   Pin_Drawable.draw_on(self, canvas, offset)
   ox, oy = offset
   w, h = self.width, self.height
   cx, cy = ox + w / 2, oy + h / 2
   pwr_x, pwr_y, gnd_x, gnd_y = self._pwr_gnd_positions(offset)
   self.parts.add(canvas.create_text(pwr_x + LABEL_PADDING * sign(cx - pwr_x),
       pwr_y + LABEL_PADDING * sign(cy - pwr_y), text='+', fill='white',
       justify=CENTER, font=FONT))
   self.parts.add(canvas.create_text(gnd_x + LABEL_PADDING * sign(cx - gnd_x),
       gnd_y + LABEL_PADDING * sign(cy - gnd_y), text='-', fill='white',
       justify=CENTER, font=FONT))
Example #2
0
def condensed_points(points):
  """
  Returns a collapsed version of |points| so that there are no three consecutive
      collinear points.
  """
  assert len(points) >= 1
  condensed = points[:1]
  for i in xrange(1, len(points) - 1):
    _x, _y = condensed[-1]
    x, y = points[i]
    x_, y_ = points[i + 1]
    if sign(x - _x) != sign(x_ - x) or sign(y - _y) != sign(y_ - y):
      condensed.append(points[i])
  condensed.append(points[-1])
  return condensed
def condensed_points(points):
    """
  Returns a collapsed version of |points| so that there are no three consecutive
      collinear points.
  """
    assert len(points) >= 1
    condensed = points[:1]
    for i in xrange(1, len(points) - 1):
        _x, _y = condensed[-1]
        x, y = points[i]
        x_, y_ = points[i + 1]
        if sign(x - _x) != sign(x_ - x) or sign(y - _y) != sign(y_ - y):
            condensed.append(points[i])
    condensed.append(points[-1])
    return condensed
Example #4
0
 def locs(self):
   """
   Returns an (approximate) list of the locations on the proto board covered by
       this wire.
   """
   dr = self.r_1 - self.r_2
   _dr = sign(dr)
   dc = self.c_1 - self.c_2
   _dc = sign(dc)
   if dr == 0:
     return [(self.r_1, c) for c in xrange(self.c_1, self.c_2 - _dc, -_dc)]
   elif dc == 0:
     return [(r, self.c_1) for r in xrange(self.r_1, self.r_2 - _dr, -_dr)]
   elif abs(dc) > abs(dr):
     return [(self.r_1 + (c - self.c_1) * dr / dc , c) for c in xrange(
         self.c_1, self.c_2 - _dc, -_dc)]
   else: # abs(dr) >= abs(dc)
     return [(r, self.c_1 + (r - self.r_1) * dc / dr) for r in xrange(
         self.r_1, self.r_2 - _dr, -_dr)]
Example #5
0
 def locs(self):
     """
 Returns an (approximate) list of the locations on the proto board covered by
     this wire.
 """
     dr = self.r_1 - self.r_2
     _dr = sign(dr)
     dc = self.c_1 - self.c_2
     _dc = sign(dc)
     if dr == 0:
         return [(self.r_1, c)
                 for c in xrange(self.c_1, self.c_2 - _dc, -_dc)]
     elif dc == 0:
         return [(r, self.c_1)
                 for r in xrange(self.r_1, self.r_2 - _dr, -_dr)]
     elif abs(dc) > abs(dr):
         return [(self.r_1 + (c - self.c_1) * dr / dc, c)
                 for c in xrange(self.c_1, self.c_2 - _dc, -_dc)]
     else:  # abs(dr) >= abs(dc)
         return [(r, self.c_1 + (r - self.r_1) * dc / dr)
                 for r in xrange(self.r_1, self.r_2 - _dr, -_dr)]
 def draw_on(self, canvas, offset=(0, 0)):
   Pin_Drawable.draw_on(self, canvas, offset)
   ox, oy = offset
   w, h = self.width, self.height
   cx, cy = ox + w / 2, oy + h / 2
   top_x, top_y, middle_x, middle_y, bottom_x, bottom_y = self._pin_positions(
       offset)
   self.parts.add(canvas.create_text(top_x + LABEL_PADDING * sign(cx - top_x),
       top_y + LABEL_PADDING * sign(cy - top_y), text='+', fill='white',
       justify=CENTER, font=FONT))
   self.parts.add(canvas.create_text(middle_x + LABEL_PADDING * sign(cx -
       middle_x), middle_y + LABEL_PADDING * sign(cy - middle_y), text='m',
       fill='white', justify=CENTER, font=FONT))
   self.parts.add(canvas.create_text(bottom_x + LABEL_PADDING * sign(cx -
       bottom_x), bottom_y + LABEL_PADDING * sign(cy - bottom_y), text='-',
       fill='white', justify=CENTER, font=FONT))
 def draw_on(self, canvas, offset=(0, 0)):
   Pin_Drawable.draw_on(self, canvas, offset)
   ox, oy = offset
   w, h = self.width, self.height
   cx, cy = ox + w / 2, oy + h / 2
   left_x, left_y, common_x, common_y, right_x, right_y = self._pin_positions(
       offset)
   self.parts.add(canvas.create_text(left_x + LABEL_PADDING * sign(cx -
       left_x), left_y + LABEL_PADDING * sign(cy - left_y), text='l',
       fill='white', justify=CENTER, font=FONT))
   self.parts.add(canvas.create_text(common_x + LABEL_PADDING * sign(cx -
       common_x), common_y + LABEL_PADDING * sign(cy - common_y), text='c',
       fill='white', justify=CENTER, font=FONT))
   self.parts.add(canvas.create_text(right_x + LABEL_PADDING * sign(cx -
       right_x), right_y + LABEL_PADDING * sign(cy - right_y), text='r',
       fill='white', justify=CENTER, font=FONT))
   # draw the button that shows whether a signal file has been selected
   lamp_cx = ox + LAMP_BOX_PADDING + LAMP_BOX_SIZE / 2
   lamp_cy = oy + LAMP_BOX_PADDING + LAMP_BOX_SIZE / 2
   lamp_box = canvas.create_rectangle(lamp_cx - LAMP_BOX_SIZE / 2, lamp_cy -
       LAMP_BOX_SIZE / 2, lamp_cx + LAMP_BOX_SIZE / 2, lamp_cy +
       LAMP_BOX_SIZE / 2, fill=LAMP_BOX_COLOR)
   lamp = create_circle(canvas, lamp_cx, lamp_cy, LAMP_RADIUS, fill=LAMP_COLOR
       if self.signal_file else LAMP_EMPTY_COLOR)
   def set_signal_file():
     """
     Opens a window to let the user choose a lamp signal file.
     """
     new_signal_file = askopenfilename(title=OPEN_LAMP_SIGNAL_FILE_TITLE,
         filetypes=[('%s files' % LAMP_SIGNAL_FILE_TYPE,
         LAMP_SIGNAL_FILE_EXTENSION)], initialfile=self.signal_file)
     if new_signal_file and new_signal_file != self.signal_file:
       self.signal_file = relpath(new_signal_file)
       canvas.itemconfig(lamp, fill=LAMP_COLOR)
       self.on_signal_file_changed()
   self.set_signal_file = set_signal_file
   self.parts.add(lamp_box)
   self.parts.add(lamp)