下面是快速按顺序切换单个层面的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-12 09:32
老吴不是已经做好了还要你直接来搞?
这位同学,请坐下!!! 本帖最后由 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() 在走线过程中动态切换层
[*]这确保了在走线命令中切换层时,走线工具会自动使用新选择的层
mlszxc 发表于 2025-11-1 20:49
axlSetAlias("F1" "switch_up")
axlSetAlias("F2" "switch_down")
非常感谢大佬在百忙之中帮我解惑!:handshake
页:
[1]
