|
这个东西,用SKill做比较简单的吧 。
下面这是一段一键重进film的代码,自己根据需求修改film名称和film包含层 ,后面就可以一键创建了。
(defun ns_gerber_help ()
let((txt_file)
txt_file = axlDMOpenFile("ALLEGRO_TEXT", "help_info", "w")
fprintf(txt_file "This Skill Program Creates Artwork Films\n")
fprintf(txt_file "To Run the Program Type \"ns_gerber\" on the Allegro Command line.\n")
fprintf(txt_file "\n")
fprintf(txt_file "NB:You Need To Create Drill Legend Before Running The Program\n")
fprintf(txt_file "-----------------------------------------------------------------\n")
fprintf(txt_file "Tested on Allegro SPB 17.2\n")
fprintf(txt_file "Written by: ")
fprintf(txt_file "Ole Ejlersen\n")
fprintf(txt_file "ReEdit by: ")
fprintf(txt_file "ZS_KING\n")
fprintf(txt_file "-----------------------------------------------------------------\n")
axlDMClose(txt_file)
axlUIViewFileCreate("help_info.txt" "Help for creating gerber films" t)
))
(defun ns_gerber ()
; ns_gerber_help()
; initialize variables
units = car(axlDBGetDesignUnits())
; Specify undefined line width below (in mm)
undefwidth = "0.1016"
ext = 10000
when(units == "mils" ext = 10)
case(units
("millimeters" ext = 10000)
("mils" ext = 100)
("inch" ext = 0.01)
("microns" ext = 10000000)
("millimeters" ext = 10000)
("millimeters" ext = 10000)
)
;sprintf(ulw "%f" 1000 * axlMKSConvert(undefwidth "millimeters" units)) ;undefined_line_width
sprintf(ulw "%f" ext * axlMKS2UU(strcat("0.10" " millimeters") ))
ulw =atoi(ulw)
;sprintf(sbb "%f" 1000 * axlMKSConvert(2.54 "millimeters" units)) ; shape bounding box, only used for negative artwork
sprintf(sbb "%f" ext * axlMKS2UU(strcat("2.54" " millimeters") )) ; shape bounding box, only used for negative artwork
sbb = atoi(sbb)
axlMsgPut("ulw %A | sbb %A " ulw sbb)
;delete existing film records
my_films_members = axlGetParam("artwork")->groupMembers
; create temp artwork film - will be deleted later on
(axlfcreate "temp" '(0 0 0 200 2540 1 0 0 0 0 0 1 1) nil)
foreach(film my_films_members;->groupMembers
filmparams = axlGetParam(strcat("artwork:" film))
axlDeleteObject(filmparams)
)
; get conductor layers
my_layers = axlGetParam("paramLayerGroup:etch")
etchcount = 0
i = 0
foreach(layer my_layers->groupMembers
layerparams = axlLayerGet(strcat("ETCH/" layer))
if(layerparams->type=="PLANE" && layerparams->drcPhotoType=="negative" then
pm = 0 ; plot mode negative
pm1 = t
else
pm = 1 ; plot mode positive
pm1 = nil
)
; sprintf(film_name "%d_%s" ++i layer)
sprintf(film_name "%s" layer)
ld1 = strcat("VIA CLASS/" layer)
ld2 = strcat("PIN/" layer)
ld3 = strcat("ETCH/" layer)
data_list = (list "BOARD GEOMETRY/OUTLINE" ld1 ld2 ld3)
param_list = (list 0 0 0 ulw sbb pm 0 0 0 0 0 1 1)
axlFilmCreate(film_name
?negative pm1
?undefineLineWidth axlMKS2UU("0.127 millimeters")
?shapeBoundingBox axlMKS2UU("2.54 millimeters")
?mirrored nil
?fullContact nil
?vectorBasedPad t
?drawHolesOnly nil
?layers data_list
)
;(axlfcreate film_name param_list data_list)
++etchcount
)
; Create drill layers gerber files
param_list = (list 0 0 0 ulw sbb 1 0 0 0 0 0 1 1)
drill_created = "YES"
drill_count = 0
my_layers = axlGetParam("paramLayerGroup:Manufacturing")
foreach(layer my_layers->groupMembers
if(nindex(layer "NCLEGEND")!=nil then
ld1 = strcat("MANUFACTURING/" layer)
data_list = (list "BOARD GEOMETRY/OUTLINE" ld1)
; film_name = layer
film_name_0 = index(strcat(layer) "-")
;film_name = strcat("DRILL" film_name_0)
film_name = sprintf(nil "DRILL_%s" film_name_0 )
(axlfcreate film_name param_list data_list)
++drill_count
else
drill_created = "NO"
)
if(nindex(layer "NCBACKDRILL")!=nil then
ld2 = strcat("MANUFACTURING/" layer)
data_list = (list "BOARD GEOMETRY/OUTLINE" ld2)
; film_name = layer
film_name_0 = index(strcat(layer) "-")
film_name = strcat("BACKDRILL" film_name_0)
(axlfcreate film_name param_list data_list)
++drill_count
else
drill_created = "NO"
)
)
if( drill_created == "NO" && drill_count == 0 then
axlUIConfirm( "No drill drawing generated - Please create!" )
)
param_list = (list 0 0 0 ulw sbb 1 0 0 0 0 0 1 1)
; Board outline
; data_list = (list "BOARD GEOMETRY/OUTLINE")
; film_name = "Board_outline"
; (axlfcreate film_name param_list data_list)
; Soldermask top
data_list = (list "BOARD GEOMETRY/OUTLINE" "PIN/SOLDERMASK_TOP" "VIA CLASS/SOLDERMASK_TOP" "PACKAGE GEOMETRY/SOLDERMASK_TOP" "BOARD GEOMETRY/SOLDERMASK_TOP")
film_name = "Soldermask_top"
(axlfcreate film_name param_list data_list)
; Soldermask bottom
data_list = (list "BOARD GEOMETRY/OUTLINE" "PIN/SOLDERMASK_BOTTOM" "VIA CLASS/SOLDERMASK_BOTTOM" "PACKAGE GEOMETRY/SOLDERMASK_BOTTOM" "BOARD GEOMETRY/SOLDERMASK_BOTTOM")
film_name = "Soldermask_bot"
(axlfcreate film_name param_list data_list)
; Pastemask top
data_list = (list "BOARD GEOMETRY/OUTLINE" "BOARD GEOMETRY/PASTEMASK_TOP" "VIA CLASS/PASTEMASK_TOP" "PIN/PASTEMASK_TOP")
film_name = "Pastemask_top"
(axlfcreate film_name param_list data_list)
; Pastemask bottom
data_list = (list "BOARD GEOMETRY/OUTLINE" "BOARD GEOMETRY/PASTEMASK_BOTTOM" "VIA CLASS/PASTEMASK_BOTTOM" "PIN/PASTEMASK_BOTTOM")
film_name = "Pastemask_bot"
(axlfcreate film_name param_list data_list)
; Assembly top
data_list = (list "BOARD GEOMETRY/OUTLINE" "MANUFACTURING/TITLE_BLOCK_TOP" "REF DES/ASSEMBLY_TOP" "PACKAGE GEOMETRY/ASSEMBLY_TOP")
film_name = "Assembly_top"
(axlfcreate film_name param_list data_list)
; Assembly bottom
data_list = (list "BOARD GEOMETRY/OUTLINE" "MANUFACTURING/TITLE_BLOCK_BOTTOM" "REF DES/ASSEMBLY_BOTTOM" "PACKAGE GEOMETRY/ASSEMBLY_BOTTOM")
film_name = "Assembly_bot"
(axlfcreate film_name param_list data_list)
; Silkscreen top
jobcounter = 71
data_list = (list "BOARD GEOMETRY/OUTLINE" "PACKAGE GEOMETRY/SILKSCREEN_TOP" "BOARD GEOMETRY/SILKSCREEN_TOP" "REF DES/SILKSCREEN_TOP")
film_name = "Silkscreen_top"
(axlfcreate film_name param_list data_list)
; Silkscreen bottom
data_list = (list "BOARD GEOMETRY/OUTLINE" "PACKAGE GEOMETRY/SILKSCREEN_BOTTOM" "BOARD GEOMETRY/SILKSCREEN_BOTTOM" "REF DES/SILKSCREEN_BOTTOM")
film_name = "Silkscreen_bot"
(axlfcreate film_name param_list data_list)
; Masterdrawing
; data_list = (list "Manufacturing/Stackup_figure")
; film_name = "Masterdrawing"
; (axlfcreate film_name param_list data_list)
; Delete temp layer
filmparams = axlGetParam(strcat("artwork:" "temp"))
axlDeleteObject(filmparams)
axlUIWPrint(nil " \271\342\273\346\265\376\262\343\322\321\311\350\326\303\315\352\263\311 \243\254\307\353\274\354\262\351\317\340\271\330\262\316\312\375 !");
); end ns_gerber
axlCmdRegister( "ns_gerber" `ns_gerber)
|
|