陛下万年 发表于 2025-7-11 10:20

下面是快速按顺序切换单个层面的skill源码,我想要在走线命令下运行这个skill,就是在无模状态下可以切换层,请问大神们我应该如何修改源码

本帖最后由 陛下万年 于 2025-7-11 10:21 编辑

axlSetAlias("switch_up" "SwitchLayer nil")
axlSetAlias("switch_down" "SwitchLayer")

axlCmdRegister( "SwitchLayer" 'SwitchLayer ?cmdType "interactive")
defun( 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)

陛下万年 发表于 2025-7-14 09:05

有懂的大神?帮忙看下。谢谢了。

柒 发表于 2025-7-12 09:32

老吴不是已经做好了还要你直接来搞?

陛下万年 发表于 2025-7-14 16:26

柒 发表于 2025-7-12 09:32
老吴不是已经做好了还要你直接来搞?

这位同学,请坐下!!!

mlszxc 发表于 2025-11-1 20:49

本帖最后由 mlszxc 于 2025-11-1 20:51 编辑

axlSetAlias("F1" "switch_up")
axlSetAlias("F2" "switch_down")

axlCmdRegister("SwitchLayer" 'SwitchLayer ?cmdType "interactive")
defun(SwitchLayer (@optional (prev nil))
    prog((lEtchLayer sCurLayerName iNextLayerNo sNextLayer currentCmd)
      ; 保存当前命令状态
      currentCmd = axlGetActiveFunckey()
      
      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: %s" 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))
      
      ; 如果支持动态层切换且当前在走线命令中
      if(isCallable('axlSetDynamicLayer) && currentCmd == "ROUTE" then
            axlSetDynamicLayer(strcat("ETCH/" sNextLayer))
      )
      
      axlUIWRedraw(nil)
    )
)




1. 快捷键设置
[*]使用 F1 和 F2 功能键作为切换快捷键
[*]可以在走线命令中直接使用,无需退出命令
2. 命令状态保持
[*]使用 axlGetActiveFunckey() 获取当前命令状态
[*]如果当前正在走线命令中,会保持命令继续执行
3. 动态层切换
[*]使用 axlSetDynamicLayer() 在走线过程中动态切换层
[*]这确保了在走线命令中切换层时,走线工具会自动使用新选择的层



陛下万年 发表于 2025-11-3 09:25

mlszxc 发表于 2025-11-1 20:49
axlSetAlias("F1" "switch_up")
axlSetAlias("F2" "switch_down")



非常感谢大佬在百忙之中帮我解惑!:handshake
页: [1]
查看完整版本: 下面是快速按顺序切换单个层面的skill源码,我想要在走线命令下运行这个skill,就是在无模状态下可以切换层,请问大神们我应该如何修改源码