📄 autosilkutils.il
字号:
nonCuFilms = setof(filmName
axlGetParam("artwork") ->groupMembers
!index(buildString(axlGetParam(strcat("artwork:", filmName)) ->groupMembers), "ETCH/")
)
filmPairs = cons('("", ""), mapcar(lambda((filmName), list(filmName, filmName)), nonCuFilms))
axlFormBuildPopup(form, strcat(side, "FILMPOP"), filmPairs)
defaultFilm = eval(stringToSymbol(strcat("ASU_", side, "film"))) || defaultFilm
when(defaultFilm
axlFormSetField(form, strcat(side, "film"), defaultFilm)
unless(boundp('ASU_useFilms) && !ASU_useFilms, axlFormSetField(form, "usefilms", t), defvar(ASU_useFilms, t))
)
)
when(boundp('ASU_useSilk) && ASU_useSilk, axlFormSetField(form, "usesilk", t))
when(boundp('ASU_useOther) && ASU_useOther, axlFormSetField(form, "useother", t))
axlFormBuildPopup(form, "UCLASS", '("MANUFACTURING" "BOARD GEOMETRY" "PACKAGE GEOMETRY"))
cond(
(ASU_AUTOSILK != '(nil, nil, nil) && (!ASU_chkSubclass || ASU_chkSubclass == "autosilklayer")
axlFormSetField(form, "autosilklayer", t)
ASU_chkSubclass = "autosilklayer"
ASU_setChkClasses(form, ASU_autosilkChkClasses)
)
(ASU_SILKSCREEN != '(nil, nil, nil) && (!ASU_chkSubclass || ASU_chkSubclass == "silkscreenlayer")
axlFormSetField(form, "silkscreenlayer", t)
ASU_chkSubclass = "silkscreenlayer"
ASU_setChkClasses(form, ASU_silkChkClasses)
)
(ASU_ASSEMBLY != '(nil, nil, nil) && (!ASU_chkSubclass || ASU_chkSubclass == "assemblylayer")
axlFormSetField(form, "assemblylayer", t)
ASU_chkSubclass = "assemblylayer"
ASU_setChkClasses(form, ASU_assyChkClasses)
)
)
axlFormSetField(form, "checktop", ASU_checktop)
axlFormSetField(form, "checkbottom", ASU_checkbottom)
unless(axlFormGetField(form, "usefilms")
foreach(field, '("TOPfilm", "BOTTOMfilm"), axlFormSetFieldEditable(form, field, 0))
)
unless(axlFormGetField(form, "usesilk")
foreach(field, append(ASU_allChkClasses, ASU_subclasses), axlFormSetFieldEditable(form, field, 0))
foreach(field, '("checktop", "checkbottom"), axlFormSetFieldEditable(form, field, 0))
)
when(ASU_userClass
axlFormSetField(form, "userclass", ASU_userClass)
axlSubclassFormPopup(form, "usersubclass", ASU_userClass, nil)
)
when(ASU_userSubclass, axlFormSetField(form, "usersubclass", ASU_userSubclass))
unless(axlFormGetField(form, "useother")
foreach(field, '("userclass", "usersubclass"), axlFormSetFieldEditable(form, field, 0))
)
when(ASU_checkPins, axlFormSetField(form, "pins", t))
vias = findTypeObjects("VIAS")
foreach(side, '("TOP", "BOTTOM")
while(!viaResist && vias
when(axlDBGetPad(car(vias), strcat("PIN/SOLDERMASK_", side), "REGULAR"), viaResist = t)
vias = cdr(vias)
)
)
if(viaResist then when(ASU_checkVias, axlFormSetField(form, "vias", t)) else axlFormSetFieldEditable(form, "vias", 0))
if(ASU_getGeometryObjects("SOLDERMASK", "SHAPES")
then when(ASU_checksmShps, axlFormSetField(form, "smShps", t))
else axlFormSetFieldEditable(form, "smShps", 0)
)
axlFormSetFieldEditable(form, "viewLog", 0)
axlFormDisplay(form)
deleteFile(formFile)
))
defun( ASU_analyseDesign (allChkClasses, autosilkChkClasses, silkChkClasses, assemblyChkClasses)
let((nLayers, subclassPrefix, typeText, typeShapes, typeLines, class, classVar, text, shapes, lines, layers, (layN 0))
axlMeterCreate("Design Analysis" "Analysing..." t)
rexCompile(" ")
nLayers = (length(autosilkChkClasses) - 1 + length(silkChkClasses) - 1 + length(assemblyChkClasses) - 1) * 2
foreach(chkList, list(autosilkChkClasses, silkChkClasses, assemblyChkClasses)
subclassPrefix = substring(car(chkList), 5)
set(stringToSymbol(subclassPrefix), nil)
typeText = typeShapes = typeLines = nil
foreach(classChk, cdr(chkList)
class = car(classChk)
classVar = rexReplace(class, "_", 0)
text = shapes = lines = nil
when(axlGetParam(strcat("paramLayerGroup:", class)) ->groupMembers
layers = list(strcat(class, "/", subclassPrefix, "_TOP"), strcat(class, "/", subclassPrefix, "_BOTTOM"))
axlMeterUpdate(layN * 200 / nLayers , strcat("Analysing ", class, "/", subclassPrefix, " objects..."))
when(findTypeObjects("TEXT", ?layers layers), text = t, typeText = t)
when(findTypeObjects("SHAPES", ?layers layers), shapes = t, typeShapes = t)
when(findTypeObjects("LINES", ?layers layers), lines = t, typeLines = t)
and((text || shapes || lines), !member(classVar, allChkClasses), allChkClasses = append1(allChkClasses, classVar))
)
layN++
)
set(stringToSymbol(strcat("ASU_", subclassPrefix)), list(typeText, typeShapes, typeLines))
)
axlMeterDestroy()
allChkClasses
))
defun( ASU_formAction (form)
prog((curField, shpSpacing, txtSpacing, lineSpacing, chkClasses, nShps)
curField = form ->curField
when(curField == "", axlFormClose(form), axlCancelEnterFun(), return())
shpSpacing = axlFormGetField(form, "shpspc")
txtSpacing = axlFormGetField(form, "txtspc")
lineSpacing = axlFormGetField(form, "linespc")
ASU_checkshapes = axlFormGetField(form, "shapes")
ASU_shapescopyCheck = axlFormGetField(form, "shapescopyCheck")
ASU_checktext = axlFormGetField(form, "text")
ASU_checktextloc = axlFormGetField(form, "textloc")
ASU_quickChk = axlFormGetField(form, "quickchk")
axlFormSetFieldEditable(form, "quickchk", if(ASU_checktext, 1, 0))
ASU_checklines = axlFormGetField(form, "lines")
ASU_checkPins = axlFormGetField(form, "pins")
ASU_solderedpadsChk = axlFormGetField(form, "solderedpads")
axlFormSetFieldEditable(form, "solderedpads", if(ASU_checkPins, 1, 0))
ASU_checkVias = axlFormGetField(form, "vias")
ASU_checksmShps = axlFormGetField(form, "smShps")
unless(member(curField, ASU_subclasses)
ASU_tickedClasses = setof(chkClass, ASU_allChkClasses, axlFormGetField(form, chkClass))
)
if(ASU_checktextloc || ((ASU_checkshapes || ASU_checktext || ASU_checklines) && (ASU_checkPins || ASU_checkVias || ASU_checksmShps))
then foreach(field, '("checkWindow", "checkAll"), axlFormSetFieldEditable(form, field, 1))
else foreach(field, '("checkWindow", "checkAll"), axlFormSetFieldEditable(form, field, 0))
)
cond(
(axlFormGetField(form, "silkscreenlayer"), chkClasses = ASU_silkChkClasses)
(axlFormGetField(form, "autosilklayer"), chkClasses = ASU_autosilkChkClasses)
(axlFormGetField(form, "assemblylayer"), chkClasses = ASU_assyChkClasses)
(t, chkClasses = ASU_autosilkChkClasses)
)
case(curField
("txtspc", ASU_setSpacingProps(txtSpacing, shpSpacing, lineSpacing))
("txtspcHelp", ASU_helpDisplay("Text Spacing"))
("quickchkHelp", ASU_helpDisplay("Faster Text Check"))
("shpspc", ASU_setSpacingProps(txtSpacing, shpSpacing, lineSpacing))
("shpspcHelp", ASU_helpDisplay("Shape Spacing"))
("linespc", ASU_setSpacingProps(txtSpacing, shpSpacing, lineSpacing))
("linespcHelp", ASU_helpDisplay("Line Spacing"))
("textlocHelp", ASU_helpDisplay("Reference Text Locations"))
("pinsHelp", ASU_helpDisplay("Pins"))
("solderedpadsHelp", ASU_helpDisplay("Soldered Pads Only"))
("viasHelp", ASU_helpDisplay("Vias"))
("smShpsHelp", ASU_helpDisplay("Shapes"))
("copy"
nShps = ASU_copySilkShapesToAutoSilk(form, shpSpacing, ASU_shapescopyCheck, ASU_checkPins, ASU_checkVias, ASU_checksmShps, ASU_solderedpadsChk)
when(nShps > 0 && !axlFormIsFieldEditable(form, "shapes")
axlFormSetFieldEditable(form, "shapes", 1)
axlFormSetField(form, "shapes", t)
ASU_checkshapes = t
)
axlFormSetFieldEditable(form, "viewLog", 1)
)
("text", ASU_setChkClasses(form, chkClasses, t))
("shapes", ASU_setChkClasses(form, chkClasses, t))
("lines", ASU_setChkClasses(form, chkClasses, t))
("usefilms", ASU_setChkFields(form))
("usesilk", ASU_setChkFields(form))
("useother", ASU_setChkFields(form))
("TOPfilm", ASU_TOPfilm = axlFormGetField(form, "TOPfilm"))
("BOTTOMfilm", ASU_BOTTOMfilm = axlFormGetField(form, "BOTTOMfilm"))
("silkscreenlayer", ASU_chkSubclass = "silkscreenlayer", ASU_setChkClasses(form, ASU_silkChkClasses, t))
("autosilklayer", ASU_chkSubclass = "autosilklayer", ASU_setChkClasses(form, ASU_autosilkChkClasses, t))
("assemblylayer", ASU_chkSubclass = "assemblylayer", ASU_setChkClasses(form, ASU_assyChkClasses, t))
("userclass"
axlSubclassFormPopup(form, "usersubclass", axlFormGetField(form, "userclass"), nil)
ASU_userClass = axlFormGetField(form, "userclass")
)
("usersubclass", ASU_userSubclass = axlFormGetField(form, "usersubclass"))
("checktop", ASU_checktop = axlFormGetField(form, "checktop"))
("checkbottom", ASU_checkbottom = axlFormGetField(form, "checkbottom"))
("checkWindow"
ASU_checkSpacings(form, t, txtSpacing, shpSpacing, lineSpacing, ASU_checkshapes, ASU_checktext, ASU_checklines, ASU_checkPins, ASU_checkVias, ASU_checksmShps, ASU_solderedpadsChk, ASU_checktextloc)
axlFormSetFieldEditable(form, "viewLog", 1)
)
("checkAll"
ASU_checkSpacings(form, nil, txtSpacing, shpSpacing, lineSpacing, ASU_checkshapes, ASU_checktext, ASU_checklines, ASU_checkPins, ASU_checkVias, ASU_checksmShps, ASU_solderedpadsChk, ASU_checktextloc)
axlFormSetFieldEditable(form, "viewLog", 1)
)
("viewLog", ASU_showLog(ASU_drcMsgs))
("asuhelp", ASU_helpDisplay())
("cancel"
axlFormClose(form)
axlCancelEnterFun()
)
)
))
defun( ASU_setChkFields (form)
defvar(ASU_useFilms, axlFormGetField(form, "usefilms"))
defvar(ASU_useSilk, axlFormGetField(form, "usesilk"))
defvar(ASU_useOther, axlFormGetField(form, "useother"))
cond(
(ASU_useFilms
foreach(field, '("TOPfilm", "BOTTOMfilm"), axlFormSetFieldEditable(form, field, 1))
foreach(field, append(ASU_allChkClasses, ASU_subclasses), axlFormSetFieldEditable(form, field, 0))
foreach(field, '("userclass", "usersubclass", "checktop", "checkbottom"), axlFormSetFieldEditable(form, field, 0))
)
(ASU_useSilk
foreach(field, '("TOPfilm", "BOTTOMfilm", "userclass", "usersubclass"), axlFormSetFieldEditable(form, field, 0))
foreach(field, ASU_subclasses, axlFormSetFieldEditable(form, field, 1))
foreach(field, '("checktop", "checkbottom"), axlFormSetFieldEditable(form, field, 1))
cond(
(axlFormGetField(form, "silkscreenlayer"), ASU_setChkClasses(form, ASU_silkChkClasses, t))
(axlFormGetField(form, "autosilklayer"), ASU_setChkClasses(form, ASU_autosilkChkClasses, t))
(axlFormGetField(form, "assemblylayer"), ASU_setChkClasses(form, ASU_assyChkClasses, t))
)
)
(ASU_useOther
foreach(field, append(ASU_allChkClasses, ASU_subclasses), axlFormSetFieldEditable(form, field, 0))
foreach(field, '("TOPfilm", "BOTTOMfilm", "checktop", "checkbottom"), axlFormSetFieldEditable(form, field, 0))
foreach(field, '( "userclass", "usersubclass"), axlFormSetFieldEditable(form, field, 1))
)
)
)
defun( ASU_setSpacingProps (txtSpacing, shpSpacing, lineSpacing)
let((design)
design = axlDBGetDesign()
foreach(propName, '("ASU_TXTSPACING", "ASU_SHPSPACING", "ASU_LINESPACING")
unless(axlDBGetPropDictEntry(propName), axlDBCreatePropDictEntry(propName, "REAL", "DESIGNS"))
)
axlDBAddProp(design, list("ASU_TXTSPACING", txtSpacing))
axlDBAddProp(design, list("ASU_SHPSPACING", shpSpacing))
axlDBAddProp(design, list("ASU_LINESPACING", lineSpacing))
))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -