毛毛虫 发表于 2022-6-20 11:28:25

快速切换层面的skill

以下源码是可以按空格快速按顺序切换单个层面的skill,我想要在走线命令下运行这个skill,请问我应该如何修改源码

axlSetAlias("EDA_switch_up" "EDA365_SwitchLayer nil")
axlSetAlias("EDA_switch_down" "EDA365_SwitchLayer")

axlCmdRegister( "EDA365_SwitchLayer" 'EDA365_SwitchLayer ?cmdType "interactive")
defun( EDA365_SwitchLayer (@optional (prev nil))
prog((lEtchLayer sCurLayerName iNextLayerNo sNextLayer)
      lEtchLayer = setof(layer axlGetParam("paramLayerGroup:ETCH")->groupMembers nequal(axlDBGetLayerType(strcat("ETCH/" layer)) "PLANE"))
      sCurLayerName = cadr(parseString(axlGetActiveLayer() "/"))
      if( member(sCurLayerName lEtchLayer) then
                if(prev then
                        iNextLayerNo = length(lEtchLayer) - length(member(sCurLayerName lEtchLayer))
                        when(iNextLayerNo < 1 iNextLayerNo = length(lEtchLayer))
                else
                        iNextLayerNo = length(lEtchLayer) - length(member(sCurLayerName lEtchLayer)) + 2
                        when(iNextLayerNo > length(lEtchLayer) iNextLayerNo = 1)
                )
      else
                iNextLayerNo = 1
      )
      
      sNextLayer = nthelem(iNextLayerNo lEtchLayer)
      axlMsgPut("Current Layer:%L" sNextLayer)
      axlVisibleDesign(nil)
    axlVisibleLayer( strcat("ETCH/" sNextLayer) t )
      axlVisibleLayer( strcat("PIN/" sNextLayer) t )
      axlVisibleLayer( strcat("VIA CLASS/" sNextLayer) t )
      axlVisibleLayer( strcat("DRC ERROR CLASS/" sNextLayer) t )
    axlVisibleLayer( "BOARD GEOMETRY/OUTLINE" t )
      axlSetActiveLayer(strcat("ETCH/" sNextLayer))
      axlUIWRedraw(nil)
)
)

毛毛虫 发表于 2022-6-21 10:43:49

找到一个能实现需求的skill,但是加密了,看不到源码

毛毛虫 发表于 2022-6-21 10:47:36

skill说明如图

Gary_rui 发表于 2022-6-22 09:38:23

顶一下,这不是骗子,实测可用

你太优秀了 发表于 2022-6-23 22:41:36

我能说你tm是个骗子么

毛毛虫 发表于 2022-7-20 17:24:32


把defun()函数换成procedure()就可以在任何模式下,快速换层了

毛毛虫 发表于 2022-7-20 17:27:04

axlSetAlias("Pgup" "SwitchLayer nil");PageUp切换上一层
axlSetFunckey("Pgdown" "skill SwitchLayer");PageDown切换上一层


axlCmdRegister( "SwitchLayer" 'SwitchLayer ?cmdType "interactive")
procedure(SwitchLayer(@optional (prev nil))
prog((lEtchLayer sCurLayerName iNextLayerNo sNextLayer)
      lEtchLayer = setof(layer axlGetParam("paramLayerGroup:ETCH")->groupMembers nequal(axlDBGetLayerType(strcat("ETCH/" layer)) "PLANE"))
      sCurLayerName = cadr(parseString(axlGetActiveLayer() "/"))
      if( member(sCurLayerName lEtchLayer) then
                if(prev then
                        iNextLayerNo = length(lEtchLayer) - length(member(sCurLayerName lEtchLayer))
                        when(iNextLayerNo < 1 iNextLayerNo = length(lEtchLayer))
                else
                        iNextLayerNo = length(lEtchLayer) - length(member(sCurLayerName lEtchLayer)) + 2
                        when(iNextLayerNo > length(lEtchLayer) iNextLayerNo = 1)
                )
      else
                iNextLayerNo = 1
      )
      
      sNextLayer = nthelem(iNextLayerNo lEtchLayer)
      axlMsgPut("Current Layer:%L" sNextLayer)
      axlVisibleDesign(nil)
    axlVisibleLayer( strcat("ETCH/" sNextLayer) t )
      axlVisibleLayer( strcat("PIN/" sNextLayer) t )
      axlVisibleLayer( strcat("VIA CLASS/" sNextLayer) t )
      axlVisibleLayer( strcat("DRC ERROR CLASS/" sNextLayer) t )
    axlVisibleLayer( "BOARD GEOMETRY/OUTLINE" t )
      axlSetActiveLayer(strcat("ETCH/" sNextLayer))
      axlUIWRedraw(nil)
)
);end procedure

毛毛虫 发表于 2022-7-20 17:30:50

..

happle 发表于 2022-7-21 15:23:12

亲测可用
页: [1]
查看完整版本: 快速切换层面的skill