⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autosilkutils.il

📁 skill语言在Cadence平台二次开发中大量使用
💻 IL
📖 第 1 页 / 共 5 页
字号:
    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 + -