fpc_footprint_wizard.py 3.84 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
#!/usr/bin/python

from pcbnew import *

class FPCFootprintWizard(FootprintWizardPlugin):
    def __init__(self):
        FootprintWizardPlugin.__init__(self)
        self.name = "FPC"
        self.description = "FPC Footprint Wizard"
        self.parameters = {
             "Pads":
12 13 14 15
                {"*n":40,           # not internal units preceded by "*"
                 "pitch":           FromMM(0.5),
                 "width":           FromMM(0.25),
                 "height":          FromMM(1.6)},
16
             "Shield":
17 18 19 20
                {"shield_to_pad":   FromMM(1.6),
                 "from_top":        FromMM(1.3),
                 "width":           FromMM(1.5),
                 "height":          FromMM(2)},
21

22
        }
23
        self.ClearErrors()
24

25
    # build a rectangular pad
26 27 28 29 30 31 32
    def smdRectPad(self,module,size,pos,name):
            pad = D_PAD(module)
            pad.SetSize(size)
            pad.SetShape(PAD_RECT)
            pad.SetAttribute(PAD_SMD)
            pad.SetLayerMask(PAD_SMD_DEFAULT_LAYERS)
            pad.SetPos0(pos)
33
            pad.SetPosition(pos)
34 35
            pad.SetPadName(name)
            return pad
36 37

    # This method checks the parameters provided to wizard and set errors
38
    def CheckParameters(self):
39 40
        p = self.parameters
        pads            = p["Pads"]["*n"]
41 42 43 44
        errors = ""
        if (pads<1):
            self.parameter_errors["Pads"]["n"]="Must be positive"
            errors +="Pads/n has wrong value, "
45 46
        p["Pads"]["n"] = int(pads)  # make sure it stays as int (default is float)

47 48 49 50 51 52 53
        pad_width       = p["Pads"]["width"]
        pad_height      = p["Pads"]["height"]
        pad_pitch       = p["Pads"]["pitch"]
        shl_width       = p["Shield"]["width"]
        shl_height      = p["Shield"]["height"]
        shl_to_pad      = p["Shield"]["shield_to_pad"]
        shl_from_top    = p["Shield"]["from_top"]
54 55 56 57 58

        return errors


    # build the footprint from parameters
59
    def BuildFootprint(self):
60

61 62 63
        print "parameters:",self.parameters
        #self.ClearErrors()
        #print "errors:",self.parameter_errors
64

65 66
        module = MODULE(None) # create a new module
        self.module = module
67

68
        p = self.parameters
69
        pads            = int(p["Pads"]["*n"])
70 71 72 73 74 75 76
        pad_width       = p["Pads"]["width"]
        pad_height      = p["Pads"]["height"]
        pad_pitch       = p["Pads"]["pitch"]
        shl_width       = p["Shield"]["width"]
        shl_height      = p["Shield"]["height"]
        shl_to_pad      = p["Shield"]["shield_to_pad"]
        shl_from_top    = p["Shield"]["from_top"]
77

78 79
        size_pad = wxSize(pad_width,pad_height)
        size_shld = wxSize(shl_width,shl_height)
80

81
        module.SetReference("FPC"+str(pads))   # give it a reference name
82 83
        module.Reference().SetPos0(wxPointMM(-1,-2))
        module.Reference().SetPosition(wxPointMM(-1,-2))
84

85 86
        # create a pad array and add it to the module
        for n in range (0,pads):
87
            pad = self.smdRectPad(module,size_pad,wxPoint(pad_pitch*n,0),str(n+1))
88
            module.Add(pad)
89

90 91 92

        pad_s0 = self.smdRectPad(module,
                            size_shld,
93
                            wxPoint(-shl_to_pad,shl_from_top),
94 95 96
                            "0")
        pad_s1 = self.smdRectPad(module,
                            size_shld,
97
                            wxPoint((pads-1)*pad_pitch+shl_to_pad,shl_from_top),
98 99
                            "0")

100 101 102 103
        module.Add(pad_s0)
        module.Add(pad_s1)

        e = EDGE_MODULE(module)
104
        e.SetStartEnd(wxPointMM(-1,0),wxPointMM(0,0))
105 106 107 108 109 110
        e.SetWidth(FromMM(0.2))
        e.SetLayer(EDGE_LAYER)
        e.SetShape(S_SEGMENT)
        module.Add(e)

        module.SetLibRef("FPC"+str(pads))
111

112

113 114 115 116 117 118 119 120 121
def register():
    # create our footprint wizard
    fpc_wizard = FPCFootprintWizard()

    # register it into pcbnew
    fpc_wizard.register()

    return fpc_wizard

122