我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 408|回复: 5

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

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:452
  • 打卡月天数:10
  • 打卡总奖励:1330
  • 最近打卡:2026-09-23 16:44:03

11

主题

816

回帖

1990

积分

二级逆天

积分
1990

终身成就奖社区居民新人进步奖

发表于 2025-7-11 10:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 陛下万年 于 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)

回复

使用道具 举报

  • 打卡等级:以坛为家III
  • 打卡总天数:452
  • 打卡月天数:10
  • 打卡总奖励:1330
  • 最近打卡:2026-09-23 16:44:03

11

主题

816

回帖

1990

积分

二级逆天

积分
1990

终身成就奖社区居民新人进步奖

 楼主| 发表于 2025-7-14 09:05 | 显示全部楼层
有懂的大神?帮忙看下。谢谢了。
回复

使用道具 举报

  • 打卡等级:以坛为家III
  • 打卡总天数:490
  • 打卡月天数:0
  • 打卡总奖励:1996
  • 最近打卡:2026-05-25 09:00:01

10

主题

778

回帖

2888

积分

二级逆天

积分
2888

终身成就奖新人进步奖社区居民社区明星最爱沙发

发表于 2025-7-12 09:32 | 显示全部楼层
老吴不是已经做好了  还要你直接来搞?

点评

这位同学,请坐下!!!  详情 回复 发表于 2025-7-14 16:26
回复

使用道具 举报

  • 打卡等级:以坛为家III
  • 打卡总天数:452
  • 打卡月天数:10
  • 打卡总奖励:1330
  • 最近打卡:2026-09-23 16:44:03

11

主题

816

回帖

1990

积分

二级逆天

积分
1990

终身成就奖社区居民新人进步奖

 楼主| 发表于 2025-7-14 16:26 | 显示全部楼层
柒 发表于 2025-7-12 09:32
老吴不是已经做好了  还要你直接来搞?

这位同学,请坐下!!!
回复

使用道具 举报

  • 打卡等级:初入少年
  • 打卡总天数:4
  • 打卡月天数:0
  • 打卡总奖励:8
  • 最近打卡:2025-11-11 17:55:26

1

主题

18

回帖

17

积分

一级逆天

积分
17
发表于 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
回复

使用道具 举报

  • 打卡等级:以坛为家III
  • 打卡总天数:452
  • 打卡月天数:10
  • 打卡总奖励:1330
  • 最近打卡:2026-09-23 16:44:03

11

主题

816

回帖

1990

积分

二级逆天

积分
1990

终身成就奖社区居民新人进步奖

 楼主| 发表于 2025-11-3 09:25 | 显示全部楼层
mlszxc 发表于 2025-11-1 20:49
axlSetAlias("F1" "switch_up")
axlSetAlias("F2" "switch_down")

非常感谢大佬在百忙之中帮我解惑!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请举报投诉

本站所有资料仅限参考学习交流,PCB原理图源码等所有资料不保证准确没问题,请不要用作生产。否则后果自负。

闽公网安备35062302000276号 | 闽ICP备2024076463号-1 | 论坛技术支持QQ群171867948 | 论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表