예제 #1
0
def print_zones(f, zone_paths):

    for polygons in zone_paths:
        polygons = svgpath.rescale_polygon_list(polygons, scale, conv=roundint)
        polygons = simplefy.weakly_simplefy(polygons)
        for p in polygons:
            print_zone(f, p)
예제 #2
0
def print_module(f, name, fill_paths, segment_paths, pads, vias, holes, slots):

    print ("""(module """+str_escape(name)+""" (layer F.Cu) (tedit 0)
  (fp_text reference "" (at 0 0) (layer F.SilkS)
    (effects (font (thickness 0.15)))
  )
  (fp_text value "" (at 0 0) (layer F.SilkS)
    (effects (font (thickness 0.15)))
  )""", file=f)

    for layer, polygons in fill_paths:
        print("Layer: ", layer, file=sys.stderr)
        polygons = svgpath.rescale_polygon_list(polygons, scale, conv=roundint)
        polygons = simplefy.weakly_simplefy(polygons)

        for p in polygons:
            if p[0] != p[-1]:
                p = p + [p[0]]
                print("warning polygon not closed ", file=sys.stderr)
            if len(p) > 3:
                print_polygon(f, p, mapping[layer])
                print("polygon ", p, file=sys.stderr)
            else:
                print("polygon to small, ingoring, ", p, file=sys.stderr)

    for layer, polygons, width in segment_paths:
        polygons = svgpath.rescale_polygon_list(polygons, scale, conv=roundint)
        for p in polygons:
            print_segments(f, p, mapping[layer], width*scale)

    for x, y, size, drill in pads:
        print_pad(f, svgpath.rescale_point((x,y), scale, conv=roundint), scale*size, scale*drill)

    for x, y, size, drill in vias:
        print_via(f, svgpath.rescale_point((x,y), scale, conv=roundint), scale*size, scale*drill)

    for x, y, drill in holes:
        print_hole(f, svgpath.rescale_point((x,y), scale, conv=roundint), scale*drill)

    for polygons, size, drill in slots:
        polygons = svgpath.rescale_polygon_list(polygons, scale, conv=roundint)
        for p in polygons:
            for a, b in zip(p[:-1], p[1:]):
                print_slot(f, a, b, size*scale, drill*scale)

    print(")", file=f)
예제 #3
0
def print_module(name, fill_paths, segment_paths, pads):

    print """PCBNEW-LibModule-V1
$INDEX
"""

    print name
    print """$EndINDEX
$MODULE """ + name + """
Po 0 0 0 15 00000000 00000000 ~~
Li """ + name

    for layer, filename in fill_paths:
        print >> sys.stderr, filename
        with open(filename) as f:
            polygons = svgpath.path_to_polygons(f.read(1000000))

        polygons = svgpath.rescale_polygon_list(polygons, svgpath.scale,
                                                roundint)
        polygons = weakly_simplefy(polygons)

        for p in polygons:
            print_polygon(p, layer)

    for layer, filename, width in segment_paths:
        with open(filename) as f:
            polygons = svgpath.path_to_polygons(f.read(1000000))

        polygons = svgpath.rescale_polygon_list(polygons, svgpath.scale,
                                                roundint)

        for p in polygons:
            print_segments(p, layer, width * svgpath.scale)

    for topleft, w, h, pitch, size in pads:
        pads = pad_grid(topleft, w, h, pitch)
        for pad in pads:
            print_pad(svgpath.rescale_point(pad, svgpath.scale, roundint),
                      size)

    print """$EndMODULE """ + name + """
예제 #4
0
def print_zones_new(zone_paths):

    for layer, label, filename in zone_paths:
        with open(filename) as f:
            polygons = svgpath.path_to_polygons(f.read(1000000))

        polygons = svgpath.rescale_polygon_list(polygons, svgpath.new_scale,
                                                roundint)
        polygons = weakly_simplefy(polygons)

        for p in polygons:
            print_zone_new(p)
예제 #5
0
def print_zones(zone_paths):

    for layer, label, filename in zone_paths:
        print """$CZONE_OUTLINE
ZInfo 525A79DA 1 """ + '"' + label + '"' + """
ZLayer """ + layer + """
ZAux 4 E
ZClearance 200 T
ZMinThickness 100
ZOptions 0 16 F 200 200
ZSmoothing 0 0"""
        with open(filename) as f:
            polygons = svgpath.path_to_polygons(f.read(1000000))

        polygons = svgpath.rescale_polygon_list(polygons, svgpath.scale,
                                                roundint)
        polygons = weakly_simplefy(polygons)

        for p in polygons:
            print_zone(p, layer, label)
        print """$endCZONE_OUTLINE"""
예제 #6
0
def print_module(f, name, fill_paths, segment_paths, pads, vias, holes, slots):

    layers = ["front_mask", "front_silk", "front_paste", "front_copper", "back_mask", "back_silk", "back_copper", "back_paste", "edges"]

    for p in (fill_paths, segment_paths):
        for x in p:
            assert x[0] in layers
 
    for layer in layers:
        print("module {}_{}()".format(name, layer), file=f)
        print("{", file=f)
        print("\tunion()", file=f)
        print("\t{", file=f)

        for polygons in (p for l,p in fill_paths if layer == l):
            polygons = svgpath.rescale_polygon_list(polygons, scale, flipY=True, conv=roundint)
            polygons = simplefy.separate_cutouts(polygons)
            for p in polygons:
                print (layer,file = sys.stderr)
                print (p,file = sys.stderr)
                print_polygon(f, p, layer)

        print("\t};", file=f)
        print("};", file=f)

#        for polygons, width in (p,w for l,p,w segment_paths if layer == l):
#            print("layer_"+layer+"_segments = [\n\t[", file=f)
#            polygons = svgpath.rescale_polygon_list(polygons, scale, flipY=True, conv=roundint)
#            first=True
#            for p in polygons:
#                if not first:
#                    print("\t],[", file=f)
#                first=False
#                print_segments(f, p, mapping[layer], width*scale)
#            print("\t]", file=f)
#            print("];", file=f)
#            print(file=f)

    print("module {}_holes()".format(name, layer), file=f)
    print("{", file=f)
    print("\tunion()", file=f)
    print("\t{", file=f)

    for x, y, size, drill in pads:
        print("// pads", file=f)
        print_circle(f, svgpath.rescale_point((x,y), scale, flipY=True, conv=roundint), scale*drill)

    for x, y, size, drill in vias:
        print("// vias", file=f)
        print_circle(f, svgpath.rescale_point((x,y), scale, flipY=True, conv=roundint), scale*drill)

    for x, y, drill in holes:
        print("// holes", file=f)
        print_circle(f, svgpath.rescale_point((x,y), scale, flipY=True, conv=roundint), scale*drill)

    print("\t};", file=f)
    print("};", file=f)


    print("module {}_rings()".format(name, layer), file=f)
    print("{", file=f)
    print("\tunion()", file=f)
    print("\t{", file=f)

    for x, y, size, drill in pads:
        print("// pads", file=f)
        print_circle(f, svgpath.rescale_point((x,y), scale, flipY=True, conv=roundint), scale*size)

    for x, y, size, drill in vias:
        print("// vias", file=f)
        print_circle(f, svgpath.rescale_point((x,y), scale, flipY=True, conv=roundint), scale*size)

    print("\t};", file=f)
    print("};", file=f)

    for polygons, size, drill in slots:
        polygons = svgpath.rescale_polygon_list(polygons, scale, flipY=True, conv=roundint)
        for p in polygons:
            for a, b in zip(p[:-1], p[1:]):
                print_slot(f, a, b, size*scale, drill*scale)