Пример #1
0
 def __init__(self, v):
     super(mirror, self).__init__()
     a, b = D(v[0]), -D(v[1])
     a = a / dmath.hypot(a, b)
     b = b / dmath.hypot(a, b)
     self.m[0,0] = 1 - 2 * a * a
     self.m[0,1] = - 2 * a * b
     self.m[1,0] = - 2 * a * b
     self.m[1,1] = 1 - 2 * b * b
Пример #2
0
 def center_radius_angle(self, m):
     points = xform(m, self.points)
     c = points[0]
     r, a = [], []
     for p in points[1:]:
         dx, dy = p[0] - c[0], p[1] - c[1]
         r.append(dmath.hypot(dx, dy))
         a.append(dmath.atan2(-dy, dx))
     return c, r, a
Пример #3
0
    def rect_pad(self, name, points, rounded, state):
        m = []
        ret = []
        for i in range(len(points)):
            p0, p1 = points[i], points[(i + 1) % len(points)]
            m.append(((p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2))
        dim0 = dmath.hypot(m[2][0] - m[0][0], m[2][1] - m[0][1])
        dim1 = dmath.hypot(m[3][0] - m[1][0], m[3][1] - m[1][1])

        c = ((m[0][0] + m[2][0]) / 2, (m[0][1] + m[2][1]) / 2)

        if dim0.quantize(D("0.000001")) == dim1.quantize(D("0.000001")):
            if rounded:
                ret.append(circ_pad(name, c, dim0 / 2), state)
            else:
                ret += self.rect_pad(name, [ points[0], points[1], m[1], m[3] ], False, state)
                ret += self.rect_pad(name, [ m[3], m[1], points[2], points[3] ], False, state)
            return ret
        if dim0 > dim1:
            angle = dmath.atan2(m[2][1] - m[0][1], m[2][0] - m[0][0])
        else:
            angle = dmath.atan2(m[3][1] - m[1][1], m[3][0] - m[1][0])

        flags = []
        if not rounded:
            flags.append("square")
        if state.get_onsolder():
            flags.append("onsolder")
        if not state.get_paste():
            flags.append("nopaste")

        thickness = min(dim0, dim1) / 2
        width = max(dim0, dim1) - thickness * 2
        p = []
        p.append((c[0] + dmath.cos(angle) * width / 2, c[1] + dmath.sin(angle) * width / 2))
        p.append((c[0] - dmath.cos(angle) * width / 2, c[1] - dmath.sin(angle) * width / 2))
        ret.append("""Pad [ %s %s %s %s %s %s %s "%s" "%s" "%s" ]""" % (
            P(p[0][0]), P(p[0][1]), P(p[1][0]), P(p[1][1]), P(thickness * 2),
            P(self.clearance * 2), P((self.mask + thickness) * 2), name, name,
            ",".join(flags)))
        return ret
Пример #4
0
 def render(self, obj, state):
     ret = []
     points = xform(state.m, obj.points)
     if type(obj) == circle:
         dx = points[1][0] - points[0][0]
         dy = points[1][1] - points[0][1]
         r = dmath.hypot(dx, dy)
         ret.append("""Pin [ %s %s %s %s %s %s "" "" "hole" ]""" % (
             P(points[0][0]), P(points[0][1]), P(r * 2),
             P(self.clearance * 2), P((self.mask + r) * 2),
             P(r * 2)))
     return ret
Пример #5
0
    def render(self, obj, state):
        ret = []
        points = xform(state.m, obj.points)
        if type(obj) == circle:
            name = state.get_name()
            if self.should_skip(name): return ret
            dx = points[1][0] - points[0][0]
            dy = points[1][1] - points[0][1]
            r = dmath.hypot(dx, dy)
            ret.append(self.circ_pad(name, points[0], r, state))
        elif type(obj) == square:
            name = state.get_name()
            if self.should_skip(name): return ret
            p = []
            for i in range(0, len(obj.paths[0]) - 1):
                p.append(points[obj.paths[0][i]])
            ret += self.rect_pad(name, p, obj.rounded, state)
        elif type(obj) == union:
            pass

        return ret