markgoob 发表于 2024-1-25 13:22:58

快速創建焊盤skill

自己重新編譯幾樓科技的焊盤創建skill,放上碼源供大家參考

新增/改進功能
>將pad儲存位置改為當前目錄下
>新增建完pad後自動擺放
>將可輸入小數點擴充至後5位

将这两个档案另存为标头指定的档案名称,并放到allegro的skill目录下

快捷指令 pad

;档名请命名为 create_pad.il

axlCmdRegister("pad" 'pad_creater ?cmdType "general")

procedure( pad_creater()
let((form)

        form = create_pad_createform()
        create_pad_int_var(form)
        create_pad_update_form(form)

)
)


procedure( create_pad_createform()
let((file form)
        file = "~/pcbenv/create_pad_form.il"
        when(boundp('createpad_form)
                when(axlIsFormType(eval('createpad_form))
                        axlFormClose(eval('createpad_form))
                )
        )
        form = axlFormCreate('createpad_form file nil 'create_pad_CB t)
        form
       
)
)

procedure( create_pad_int_var(form)
let(()
       
        form->pop = ncons(nil)
        form->pop->padtype = list(
                list("SMD PAD" "padtype_smd")
                list("Thru Pin" "padtype_hole")
                list("Thru Via" "padtype_via")
        )
        form->var = ncons(nil)
        form->var->padtype = cadar(form->pop->padtype)
       
        form->var->rec_pad = t
        form->var->unitsel = "mil"
        form->var->pad_name = "smd100_80"
        form->var->value_W = 100.
        form->var->value_H = 80.
        form->var->value_D1 = 40.
        form->var->value_D2 = 60.
        form->var->sold_val = 4
       
        form->var->cir_cir_hole = t
       
        form->vis = ncons(nil)
        form->vis->rec_pad = 1
        form->vis->cir_pad = 1
        form->vis->obl_pad = 1
        form->vis->cir_cir_hole = 0
        form->vis->cir_Rec_hole = 0
        form->vis->cir_oval_hole = 0
        form->vis->oval_oval_hole = 0
        form->vis->nth_hole = 0
       
        form->vis->W_name = 1
        form->vis->value_W = 1
        form->vis->H_name = 1
        form->vis->value_H = 1
        form->vis->D1_name = 0
        form->vis->value_D1 = 0
        form->vis->D2_name = 0
        form->vis->value_D2 = 0
t
)
)


procedure( create_pad_CB(form)
let((SavePath tt)
        case(form->curField
                ("pad_name" | "value_W" | "value_H" | "value_D1" | "value_D2" | "sold_val"
                        evalstring(sprintf(nil "form->var->%s = %L" form->curField form->curValue))
                        when(form->curField == "pad_name"
                                form->var->pad_name = lowerCase(form->curValue)
                        )
                )
                ("unitsel"
                        form->var->value_W = axlMKSConvert(form->var->value_W form->var->unitsel form->curValue)
                        form->var->value_H = axlMKSConvert(form->var->value_H form->var->unitsel form->curValue)
                        form->var->value_D1 = axlMKSConvert(form->var->value_D1 form->var->unitsel form->curValue)
                        form->var->value_D2 = axlMKSConvert(form->var->value_D2 form->var->unitsel form->curValue)
                        form->var->sold_val = axlMKSConvert(form->var->sold_val form->var->unitsel form->curValue)
                        form->var->unitsel = form->curValue
                )
                ("rec_pad" | "cir_pad" | "obl_pad"
                        foreach(n0 list("rec_pad" "cir_pad" "obl_pad")
                                evalstring(sprintf(nil "form->var->%s = axlFormGetField(form %L)" n0 n0))
                        )
                )
                ("cir_cir_hole" | "cir_Rec_hole" | "cir_oval_hole" | "oval_oval_hole" | "nth_hole"
                        foreach(n0 list("cir_cir_hole" "cir_Rec_hole" "cir_oval_hole" "oval_oval_hole" "nth_hole")
                                evalstring(sprintf(nil "form->var->%s = axlFormGetField(form %L)" n0 n0))
                        )
                )
                ("cpad"
               
                        SavePath = getWorkingDir()
                        when(SavePath
                                tt = create_pad_CreateAction(form)
                                when(tt
                                        axlOSFileMove(tt strcat(SavePath "/" tt))
                                )
                        )
                )
                ("padtype"
                        form->var->padtype = form->curValue
                        form->var->sold_val = 4.
                        form->var->rec_pad = t
                        form->var->cir_pad = nil
                        form->var->obl_pad = nil
                        form->var->cir_cir_hole = t
                        form->var->cir_Rec_hole = nil
                        form->var->cir_oval_hole = nil
                        form->var->oval_oval_hole = nil
                        form->var->nth_hole = nil
                       
                        case(form->curValue
                                ("padtype_smd"
                                        form->vis->rec_pad = 1
                                        form->vis->cir_pad = 1
                                        form->vis->obl_pad = 1
                                        form->vis->cir_cir_hole = 0
                                        form->vis->cir_Rec_hole = 0
                                        form->vis->cir_oval_hole = 0
                                        form->vis->oval_oval_hole = 0
                                        form->vis->nth_hole = 0
                                )
                                ("padtype_hole"
                                        form->vis->rec_pad = 0
                                        form->vis->cir_pad = 0
                                        form->vis->obl_pad = 0
                                        form->vis->cir_cir_hole = 1
                                        form->vis->cir_Rec_hole = 1
                                        form->vis->cir_oval_hole = 1
                                        form->vis->oval_oval_hole = 1
                                        form->vis->nth_hole = 1
                                )
                                ("padtype_via"
                                        form->vis->rec_pad = 0
                                        form->vis->cir_pad = 0
                                        form->vis->obl_pad = 0
                                        form->vis->cir_cir_hole = 0
                                        form->vis->cir_Rec_hole = 0
                                        form->vis->cir_oval_hole = 0
                                        form->vis->oval_oval_hole = 0
                                        form->vis->nth_hole = 0
                                        form->var->sold_val = 0.
                                )
                        )
                )
        )
        unless(form->curField == ""
                create_pad_update_form(form)
        )
t
)
)


procedure( create_pad_update_form(form)
let((tt)
       
        form->var->W_name = "W"
        form->var->H_name = "H"
        case(form->var->padtype
                ("padtype_smd"
                        form->vis->D1_name = 0
                        form->vis->value_D1 = 0
                        form->vis->D2_name = 0
                        form->vis->value_D2 = 0
                        if(form->var->cir_pad then
                                form->vis->H_name = 0
                                form->vis->value_H = 0
                        else
                                form->vis->H_name = 1
                                form->vis->value_H = 1
                        )
                )
                ("padtype_hole"
                        form->vis->W_name = 1
                        form->vis->value_W = 1
                        form->vis->H_name = 1
                        form->vis->value_H = 1
                        form->vis->D1_name = 0
                        form->vis->value_D1 = 0
                        form->vis->D2_name = 0
                        form->vis->value_D2 = 0
                        cond(
                                (form->var->cir_cir_hole
                                        form->var->W_name = "D0"
                                        form->vis->H_name = 0
                                        form->vis->value_H = 0
                                        form->vis->D1_name = 1
                                        form->vis->value_D1 = 1
                                )
                                (form->var->cir_Rec_hole
                                        form->vis->H_name = 0
                                        form->vis->value_H = 0
                                        form->vis->D1_name = 1
                                        form->vis->value_D1 = 1
                                )
                                (form->var->cir_oval_hole
                                        form->vis->D1_name = 1
                                        form->vis->value_D1 = 1
                                )
                                (form->var->oval_oval_hole
                                        form->vis->D1_name = 1
                                        form->vis->value_D1 = 1
                                        form->vis->D2_name = 1
                                        form->vis->value_D2 = 1
                                )
                                (form->var->nth_hole
                                        form->vis->W_name = 0
                                        form->vis->value_W = 0
                                        form->var->H_name = "D1"
                                )
                        )
                )
                ("padtype_via"
                        form->var->W_name = "D0"
                        form->var->H_name = "D1"
                )
        )
       
        create_pad_RenamePad(form)
        foreach(n0 form->vis->?
                tt = member(n0 form->vis)
                axlFormSetFieldVisible(form symbolToString(car(tt)) cadr(tt))
        )
        foreach(n0 form->pop->?
                tt = member(n0 form->pop)
                axlFormBuildPopup(form symbolToString(car(tt)) cadr(tt))
        )
        foreach(n0 form->var->?
                tt = member(n0 form->var)
                axlFormSetField(form symbolToString(car(tt)) cadr(tt))
        )
        handle = axlGRPDrwInit(form "pad_view" 'create_pad_GrawView)
        handle->form = form
        unless(member(form->curField list("pad_name" "unitsel" "value_W" "value_H" "value_D1" "value_D2" "sold_val" "cpad"))
                axlGRPDrwUpdate(handle)
        )
        axlFormAutoResize(form)
        axlFormDisplay(form)

)

)


procedure( create_pad_GrawView(handle)
let((form s_xy xy_l xy_r)
        form = handle->form
        cond(
                (form->var->padtype == "padtype_smd"
                        axlGRPDrwMapWindow(handle 200 200)
                        putprop(handle "white" 'color)
                        putprop(handle "filled" 'fill)
                        axlGRPDrwRectangle(handle '(0 0) '(200 200))
                        cond(
                                (form->var->rec_pad
                                        putprop(handle "red" 'color)
                                        axlGRPDrwRectangle(handle 40:60 160:140)
                                        putprop(handle "black" 'color)
                                        axlGRPDrwLine(handle list(40:50 40:30))
                                        axlGRPDrwLine(handle list(160:50 160:30))
                                        axlGRPDrwText(handle 90:30 "W")
                                        axlGRPDrwLine(handle list(170:60 190:60))
                                        axlGRPDrwLine(handle list(170:140 190:140))
                                        axlGRPDrwText(handle 175:90 "H")
                                )
                                (form->var->cir_pad
                          putprop(handle "red" 'color)
                          axlGRPDrwCircle(handle 100:100 65)
                                        putprop(handle "black" 'color)
                                        axlGRPDrwLine(handle list(35:70 35:10))
                                        axlGRPDrwLine(handle list(165:70 165:10))
                                        axlGRPDrwText(handle 90:10 "W")
                                )
                                (form->var->obl_pad
                                        putprop(handle "red" 'color)
                                        axlGRPDrwCircle(handle 70:100 30)
                                        axlGRPDrwRectangle(handle 70:70 130:130)
                                        axlGRPDrwCircle(handle 130:100 30)
                                        putprop(handle "black" 'color)
                                        axlGRPDrwLine(handle list(40:60 40:30))
                                        axlGRPDrwLine(handle list(160:60 160:30))
                                        axlGRPDrwText(handle 90:40 "W")
                                        axlGRPDrwLine(handle list(170:70 190:70))
                                        axlGRPDrwLine(handle list(170:130 190:130))
                                        axlGRPDrwText(handle 175:90 "H")
                                )
                        )
                )
                (form->var->padtype == "padtype_hole"
                        axlGRPDrwMapWindow(handle 200 200)
                        putprop(handle "white" 'color)
                        putprop(handle "filled" 'fill)
                        axlGRPDrwRectangle(handle 0:0 200:200)
                        cond(
                                (form->var->cir_cir_hole
                                        putprop(handle "red" 'color)
                                        axlGRPDrwCircle(handle 100:100 60)
                                        putprop(handle "black" 'color)
                                        axlGRPDrwCircle(handle 100:100 30)
                                        axlGRPDrwLine(handle list(40:60 40:10))
                                        axlGRPDrwLine(handle list(160:60 160:10))
                                        axlGRPDrwText(handle 90:10 "D0")
                                        axlGRPDrwLine(handle list(80:170 80:190))
                                        axlGRPDrwLine(handle list(120:170 120:190))
                                        axlGRPDrwText(handle 90:170 "D1")
                                )
                                (form->var->cir_Rec_hole
                                        putprop(handle "red" 'color)
                                        axlGRPDrwRectangle(handle 40:40 160:160)
                                        putprop(handle "black" 'color)
                                        axlGRPDrwCircle(handle 100:100 30)
                                        axlGRPDrwLine(handle list(40:30 40:10))
                                        axlGRPDrwLine(handle list(160:30 160:10))
                                        axlGRPDrwText(handle 90:10 "W")
                                        axlGRPDrwLine(handle list(80:170 80:190))
                                        axlGRPDrwLine(handle list(120:170 120:190))
                                        axlGRPDrwText(handle 90:170 "D1")
                                )
                                (form->var->cir_oval_hole
                                        putprop(handle "red" 'color)
                                        axlGRPDrwCircle(handle 60:100 30)
                                        axlGRPDrwCircle(handle 140:100 30)
                                        axlGRPDrwRectangle(handle 60:70 140:130)
                                        putprop(handle "black" 'color)
                                        axlGRPDrwCircle(handle 100:100 20)
                                        axlGRPDrwLine(handle list(30:60 30:40))
                                        axlGRPDrwLine(handle list(170:60 170:40))
                                        axlGRPDrwText(handle 90:40 "W")
                                        axlGRPDrwLine(handle list(180:70 200:70))
                                        axlGRPDrwLine(handle list(180:130 200:130))
                                        axlGRPDrwText(handle 180:90 "H")
                                        axlGRPDrwLine(handle list(80:140 80:160))
                                        axlGRPDrwLine(handle list(120:140 120:160))
                                        axlGRPDrwText(handle 90:140 "D1")
                                )
                                (form->var->oval_oval_hole
                                        putprop(handle "red" 'color)
                                        axlGRPDrwCircle(handle 60:100 30)
                                        axlGRPDrwCircle(handle 140:100 30)
                                        axlGRPDrwRectangle(handle 60:70 140:130)
                                        putprop(handle "black" 'color)
                                        axlGRPDrwCircle(handle 80:100 20)
                                        axlGRPDrwCircle(handle 120:100 20)
                                        axlGRPDrwRectangle(handle 80:80 120:120)
                                        axlGRPDrwLine(handle list(30:60 30:40))
                                        axlGRPDrwLine(handle list(170:60 170:40))
                                        axlGRPDrwText(handle 90:40 "W")
                                        axlGRPDrwLine(handle list(180:70 200:70))
                                        axlGRPDrwLine(handle list(180:130 200:130))
                                        axlGRPDrwText(handle 180:90 "H")
                                        axlGRPDrwLine(handle list(20:80 0:80))
                                        axlGRPDrwLine(handle list(20:120 0:120))
                                        axlGRPDrwText(handle 0:90 "D1")
                                        axlGRPDrwLine(handle list(60:140 60:160))
                                        axlGRPDrwLine(handle list(140:140 140:160))
                                        axlGRPDrwText(handle 90:140 "D2")
                                )
                                (form->var->nth_hole
                                        putprop(handle "black" 'color)
                                        axlGRPDrwCircle(handle 100:100 30)
                                        axlGRPDrwLine(handle list(140:70 160:70))
                                        axlGRPDrwLine(handle list(140:130 160:130))
                                        axlGRPDrwText(handle 140:90 "D1")
                                )
                        )
                )
                (form->var->padtype == "padtype_via"
                        axlGRPDrwMapWindow(handle 200 200)
                        putprop(handle "white" 'color)
                        putprop(handle "filled" 'fill)
                        axlGRPDrwRectangle(handle 0:0 200:200)
                        putprop(handle "blue" 'color)
                        axlGRPDrwCircle(handle 100:100 60)
                        putprop(handle "black" 'color)
                        axlGRPDrwCircle(handle 100:100 30)
                        axlGRPDrwLine(handle list(40:60 40:10))
                        axlGRPDrwLine(handle list(160:60 160:10))
                        axlGRPDrwText(handle 90:10 "D0")
                        axlGRPDrwLine(handle list(170:70 190:70))
                        axlGRPDrwLine(handle list(170:130 190:130))
                        axlGRPDrwText(handle 170:90 "D1")
                )
               
        )
)
)


procedure( create_pad_RenamePad(form)
let((ttW ttH ttD1 ttD2)
        case(form->var->padtype
                ("padtype_smd"
                        if(form->var->unitsel == "mm" then
                                ttW = parseString(sprintf(nil "%.2f" form->var->value_W) ".")
                                ttH = parseString(sprintf(nil "%.2f" form->var->value_H) ".")
                        else
                                ttW = parseString(sprintf(nil "%L" form->var->value_W) ".")
                                ttH = parseString(sprintf(nil "%L" form->var->value_H) ".")
                        )
                        cond(
                                (form->var->rec_pad
                                        if(form->var->unitsel == "mm" then
                                                form->var->pad_name = sprintf(nil "smd%sm%s_%sm%s" car(ttW) cadr(ttW) car(ttH) cadr(ttH))
                                        else
                                                form->var->pad_name = sprintf(nil "smd%s_%s" car(ttW) car(ttH))
                                        )
                                )
                                (form->var->cir_pad
                                        if(form->var->unitsel == "mm" then
                                                form->var->pad_name = sprintf(nil "ball%sm%s" car(ttW) cadr(ttW))
                                        else
                                                form->var->pad_name = sprintf(nil "ball%s" car(ttW))
                                        )
                                )
                                (form->var->obl_pad
                                        if(form->var->unitsel == "mm" then
                                                form->var->pad_name = sprintf(nil "smd%sm%s_%sm%sob" car(ttW) cadr(ttW) car(ttH) cadr(ttH))
                                        else
                                                form->var->pad_name = sprintf(nil "smd%s_%sob" car(ttW) car(ttH))
                                        )
                                )
                        )
                )
                ("padtype_hole"
                        if(form->var->unitsel == "mm" then
                                ttW = parseString(sprintf(nil "%.2f" form->var->value_W) ".")
                                ttH = parseString(sprintf(nil "%.2f" form->var->value_H) ".")
                                ttD1 = parseString(sprintf(nil "%.2f" form->var->value_D1) ".")
                                ttD2 = parseString(sprintf(nil "%.2f" form->var->value_D2) ".")
                        else
                                ttW = parseString(sprintf(nil "%L" form->var->value_W) ".")
                                ttH = parseString(sprintf(nil "%L" form->var->value_H) ".")
                                ttD1 = parseString(sprintf(nil "%.2f" form->var->value_D1) ".")
                                ttD2 = parseString(sprintf(nil "%.2f" form->var->value_D2) ".")
                        )
                        cond(
                                (form->var->cir_cir_hole
                                        if(form->var->unitsel == "mm" then
                                                form->var->pad_name = sprintf(nil "pad%sm%scir%sm%sd" car(ttW) cadr(ttW) car(ttH) cadr(ttH))
                                        else
                                                form->var->pad_name = sprintf(nil "pad%scir%sd" car(ttW) car(ttH))
                                        )
                                )
                                (form->var->cir_Rec_hole
                                        if(form->var->unitsel == "mm" then
                                                form->var->pad_name = sprintf(nil "pad%sm%ssq%sm%sd" car(ttW) cadr(ttW) car(ttH) cadr(ttH))
                                        else
                                                form->var->pad_name = sprintf(nil "pad%ssq%sd" car(ttW) car(ttH))
                                        )
                                )
                                (form->var->cir_oval_hole
                                        if(form->var->unitsel == "mm" then
                                                form->var->pad_name = sprintf(nil "pad%sm%sx%sm%sob%sm%sd" car(ttW) cadr(ttW) car(ttH) cadr(ttH) car(ttD1) cadr(ttD1))
                                        else
                                                form->var->pad_name = sprintf(nil "pad%sx%sob%sd" car(ttW) car(ttH) car(ttD1))
                                        )
                                )
                                (form->var->oval_oval_hole
                                        if(form->var->unitsel == "mm" then
                                                form->var->pad_name = sprintf(nil "pad%sm%sx%sm%sob%sm%sx%sm%sd" car(ttW) cadr(ttW) car(ttH) cadr(ttH) car(ttD1) cadr(ttD1) car(ttD2) cadr(ttD2))
                                        else
                                                form->var->pad_name = sprintf(nil "pad%sx%sob%sx%sd" car(ttW) car(ttH) car(ttD1) car(ttD2))
                                        )
                                )
                                (form->var->nth_hole
                                        if(form->var->unitsel == "mm" then
                                                form->var->pad_name = sprintf(nil "npad%sm%scir" car(ttH) cadr(ttH))
                                        else
                                                form->var->pad_name = sprintf(nil "npad%scir" car(ttH))
                                        )
                                )
                        )
                )
                ("padtype_via"
                        if(form->var->unitsel == "mm" then
                                ttW = parseString(sprintf(nil "%.2f" form->var->value_W) ".")
                                ttH = parseString(sprintf(nil "%.2f" form->var->value_H) ".")
                                form->var->pad_name = sprintf(nil "via%sm%s_%sm%s" car(ttW) cadr(ttW) car(ttH) cadr(ttH))
                        else
                                ttW = parseString(sprintf(nil "%L" form->var->value_W) ".")
                                ttH = parseString(sprintf(nil "%L" form->var->value_H) ".")
                                form->var->pad_name = sprintf(nil "via%s_%s" car(ttW) car(ttH))
                        )
                )
        )
)
)

procedure( create_pad_CreateAction(form)
let((ttW ttH ttD1 ttD2 ttS figure file)
        file = nil
        case(form->var->padtype
                ("padtype_smd"
                        if(form->var->unitsel == "mm" then
                                ttW = axlMKS2UU(sprintf(nil "%.2f mm" form->var->value_W))
                                ttH = axlMKS2UU(sprintf(nil "%.2f mm" form->var->value_H))
                                ttS = axlMKS2UU(sprintf(nil "%.2f mm" form->var->sold_val))
                        else
                                ttW = axlMKS2UU(sprintf(nil "%L mil" form->var->value_W))
                                ttH = axlMKS2UU(sprintf(nil "%L mil" form->var->value_H))
                                ttS = axlMKS2UU(sprintf(nil "%L mil" form->var->sold_val))
                        )
                        cond(
                                (form->var->rec_pad
                                        figure = 'RECTANGLE
                                        when(ttH == ttW
                                                figure = 'SQUARE
                                        )
                                )
                                (form->var->cir_pad
                                        figure = 'CIRCLE
                                        ttH = ttW
                                )
                                (form->var->obl_pad
                                        figure = 'OBLONG_X
                                )
                        )
          pad_list = cons(make_axlPadStackPad(?layer "TOP" ?type 'REGULAR       
                  ?figure figure ?figureSize (ttW:ttH)) nil
          )
          pad_list = cons(make_axlPadStackPad(?layer "SOLDERMASK_TOP" ?type 'REGULAR
                  ?figure figure ?figureSize (ttW+ttS):(ttH+ttS)) pad_list
          )
          pad_list = cons(make_axlPadStackPad(?layer "PASTEMASK_TOP" ?type 'REGULAR       
                  ?figure figure ?figureSize (ttW:ttH)) pad_list
          )
          axlDBCreatePadStack(form->var->pad_name nil pad_list t)
                        when(axlPadstackToDisk(form->var->pad_name)
                       
                        file = strcat(form->var->pad_name ".pad")
                       
                                PLACEPIN = axlFormGetField(form "PLACEPIN")
                                if(axlDBGetDesign()->symbols == nil then
                                place_pin(form->var->pad_name)
                                else
                                axlMsgPut("This Place Mode only can use in dra file")
                                )
                                        axlMsgPut("Create Done!")               
                        )
                )
                ("padtype_hole" | "padtype_via"
                        if(form->var->unitsel == "mm" then
                                ttW = axlMKS2UU(sprintf(nil "%.2f mm" form->var->value_W))
                                ttH = axlMKS2UU(sprintf(nil "%.2f mm" form->var->value_H))
                                ttD1 = axlMKS2UU(sprintf(nil "%.2f mm" form->var->value_D1))
                                ttD2 = axlMKS2UU(sprintf(nil "%.2f mm" form->var->value_D2))
                                ttS = axlMKS2UU(sprintf(nil "%.2f mm" form->var->sold_val))
                        else
                                ttW = axlMKS2UU(sprintf(nil "%L mil" form->var->value_W))
                                ttH = axlMKS2UU(sprintf(nil "%L mil" form->var->value_H))
                                ttD1 = axlMKS2UU(sprintf(nil "%L mil" form->var->value_D1))
                                ttD2 = axlMKS2UU(sprintf(nil "%L mil" form->var->value_D2))
                                ttS = axlMKS2UU(sprintf(nil "%L mil" form->var->sold_val))
                        )
                        drill_data = make_axlPadStackDrill(?drillDiameter ttD1 ?figure 'CIRCLE
                                ?drillChar sprintf(nil "%L" ttD1) ?figureSize ttD1:ttD1 ?plating 'PLATED
                        )
                        cond(
                                (form->var->cir_cir_hole || form->var->padtype == "padtype_via"
                                        figure = 'CIRCLE
                                        ttH = ttW
                                )
                                (form->var->cir_Rec_hole
                                        figure = 'SQUARE
                                        ttH = ttW
                                )
                                (form->var->cir_oval_hole
                                        figure = 'OBLONG_X
                                )
                                (form->var->oval_oval_hole
                                        figure = 'OBLONG_X
                          drill_data = make_axlPadStackDrill(?holeType 'OVAL_SLOT ?slotSize ttD2:ttD1
                                  ?figure 'OBLONG_X ?drillChar sprintf(nil "%L" ttD1) ?plating 'PLATED
                                  )
                                )
                                (form->var->nth_hole
                                        drill_data = make_axlPadStackDrill(?drillDiameter ttD1 ?figure 'CIRCLE
                                                ?drillChar sprintf(nil "%L" ttD1) ?figureSize ttD1:ttD1 ?plating 'NON_PLATED
                                        )
                                        figure = 'CIRCLE
                                        ttD1 = ttH
                                        ttW = ttH
                                )
                        )
                        pad_list = cons(make_axlPadStackPad(?layer "TOP" ?type 'REGULAR       
                                ?figure figure ?figureSize ttW:ttH) nil
                        )
                        pad_list = cons(make_axlPadStackPad(?layer "DEFAULT INTERNAL" ?type 'REGULAR
                                ?figure figure ?figureSize ttW:ttH) pad_list
                        )
                        pad_list = cons(make_axlPadStackPad(?layer "BOTTOM" ?type 'REGULAR
                                ?figure figure ?figureSize ttW:ttH) pad_list
                        )
                        unless(ttS == 0
                                pad_list = cons(make_axlPadStackPad(?layer "SOLDERMASK_TOP" ?type 'REGULAR
                                        ?figure figure ?figureSize (ttW+ttS):(ttH+ttS)) pad_list
                                )
                                pad_list = cons(make_axlPadStackPad(?layer "SOLDERMASK_BOTTOM" ?type 'REGULAR       
                                        ?figure figure ?figureSize (ttW+ttS):(ttH+ttS)) pad_list
                                )
                        )
                        axlDBCreatePadStack(form->var->pad_name drill_data pad_list t)
                        when(axlPadstackToDisk(form->var->pad_name)
                       
                                file = strcat(form->var->pad_name ".pad")
                                axlMsgPut( "Pad create down" ) ;;;;;;<<

                                PLACEPIN = axlFormGetField(form "PLACEPIN")
                                if(axlDBGetDesign()->symbols == nil then
                                place_pin(form->var->pad_name)
                                else
                                axlMsgPut("This Place Mode only can use in dra file")
                                )
                                axlMsgPut("Create Done!")       
                               
                        )
                )
        )
        file
)
)

procedure( place_pin(pin_name)

                                ScriptFileName=axlTempFile()
                                Script_File=axlDMOpenFile("Grid_SCRIPT", ScriptFileName, "w")

                                fprintf(Script_File "scriptmode +i\n\n")
                                fprintf(Script_File "setwindow pcb\n")
                                fprintf(Script_File "add pin\n")
                                fprintf(Script_File "setwindow form.mini\n")
                                fprintf(Script_File "FORM mini pad_browse\n")
                                fprintf(Script_File "fillin %L\n" pin_name)
                                fprintf(Script_File "setwindow pcb\n")

                                axlDMClose(Script_File)
                                sprintf(runScript,"replay %s",ScriptFileName)
                                axlShell(runScript)
                                deleteFile(ScriptFileName)
                                axlMsgPut(strcat(">> " pin_name " placed done!"))

)

以下为视窗文件
#档名请命名为 create_pad_form.il

FILE_TYPE=FORM_DEFN VERSION=2
FORM
FIXED
PORT 60 35
HEADER "Pad Creater"

TILE

GROUP "Pad Info:"
GLOC 1 3
GSIZE 37 25
ENDGROUP


TEXT "Pad Type"
TLOC 3 1
ENDTEXT
POPUP <padtype_pop> "" ""
FIELD padtype
FLOC 11 1
ENUMSET 8
POP "padtype_pop"
ENDFIELD

TEXT "Unit"
TLOC 23 1
ENDTEXT
POPUP <unitsel_pop> "mm" "mm","mil" "mil"
FIELD unitsel
FLOC 27 1
ENUMSET 4
POP "unitsel_pop"
ENDFIELD


FIELD pad_view
THUMBNAIL
FLOC 3 6
FSIZE 15 10
ENDFIELD


FIELD rec_pad
FLOC 20 7
CHECKLIST "Rectangle" "smd"
ENDFIELD

FIELD cir_pad
FLOC 20 10
CHECKLIST "Circle" "smd"
ENDFIELD

FIELD obl_pad
FLOC 20 13
CHECKLIST "Oblone" "smd"
ENDFIELD

FIELD cir_cir_hole
FLOC 20 6
CHECKLIST "metal_round(Circle)" "hole"
ENDFIELD

FIELD cir_Rec_hole
FLOC 20 8
CHECKLIST "metal_round(Rec)" "hole"
ENDFIELD

FIELD cir_oval_hole
FLOC 20 10
CHECKLIST "metal_round(Oblone)" "hole"
ENDFIELD

FIELD oval_oval_hole
FLOC 20 12
CHECKLIST "metal_oblone(Oblone)" "hole"
ENDFIELD

FIELD nth_hole
FLOC 20 14
CHECKLIST "Not_metal_round" "hole"
ENDFIELD

TEXT "Pad Name:"
TLOC 2 18
ENDTEXT
FIELD pad_name
FLOC 10 18
STRFILLIN 20 50
ENDFIELD

TEXT "W"
TLOC 3 21
INFO W_name 7
ENDTEXT
FIELD value_W
FLOC 5 21
REALFILLIN 5 5
ENDFIELD


TEXT "H"
TLOC 12 21
INFO H_name 7
ENDTEXT
FIELD value_H
FLOC 14 21
REALFILLIN 5 5
ENDFIELD

TEXT "D1"
TLOC 3 24
INFO D1_name 7
ENDTEXT
FIELD value_D1
FLOC 6 24
REALFILLIN 4 4
ENDFIELD

TEXT "D2"
TLOC 12 24
INFO D2_name 7
ENDTEXT
FIELD value_D2
FLOC 15 24
REALFILLIN 4 4
ENDFIELD

TEXT "SolderMask + "
TLOC 21 21
ENDTEXT
FIELD sold_val
FLOC 32 21
REALFILLIN 4 4
ENDFIELD

FIELD cpad
FLOC 27 30
MENUBUTTON "Create" 10 4
ENDFIELD

FIELD PLACEPIN
FLOC 15 31
CHECKLIST "Place Pin"
ENDFIELD

ENDTILE
ENDFORM

sh_michael 发表于 2024-3-27 10:40:08

*Error* eval: unbound variable - \302\240    用不了哦

markgoob 发表于 2024-4-12 11:35:50

sh_michael 发表于 2024-3-27 10:40
*Error* eval: unbound variable - \302\240    用不了哦

你没有去allegro.ilinit里新增
load("create_pad.il")

不知道allegro.ilinit在哪,可以于allegro内输入
echo $localenv
即可查看skill目录,例如: C:/SPB_Data
那skill主目录通常就是 C:/SPB_Data/pcbenv

> 也请将两个档案也放置于/pcbenv目录下

fanyy 发表于 2024-6-2 12:45:31

用不了:)

一一一 发表于 2024-10-29 14:53:01

我也是用不了啊:)
页: [1]
查看完整版本: 快速創建焊盤skill