EDA365电子论坛网

标题: 我东拼西凑的改了一个SKILL,出错了。 [打印本页]

作者: NIWO99    时间: 2025-3-20 11:07
标题: 我东拼西凑的改了一个SKILL,出错了。
本帖最后由 NIWO99 于 2025-3-20 11:09 编辑

在百度上搜了一个SKILL,加载后出错。没的学过语言,所以完全不懂。求高手帮我看看。先谢啦!
提示如下:
*Error* eval: not a function - "p"
*Error* load: error while loading file - "d.il" at line 1



axlCmdRegister ("p", 'showlayers)
defun(showlayers ()
  axlVisibleDesign (nil)
    foreach (item args) layerNum (evalstring item)
      showlayer (layerNum)
  (axlVisibleUpdate (t)
)
defun (showlayer (layerNum)
  let (allLayer (axlGetParam "paramLayerGroup:ETCH")->groupMembers)
    let (layerName (nth (evalstring layerNum) allLayer))
      let (etchLayer (strcat "ETCH/" layerName))
        axlVisibleLayer etchLayer (t)
        when (eq (axlDBGetLayerType etchLayer) "PLANE")
          axlVisibleLayer "ANTI ETCH/ALL" (t)
          axlVisibleLayer (strcat "PIN/" layerName) (t)
          axlVisibleLayer (strcat "VIA CLASS/" layerName) (t)
          axlVisibleLayer (strcat "BOUNDARY/" layerName) (t)
      )
    )
  )

作者: 式试1813    时间: 2025-3-20 13:13
本帖最后由 式试1813 于 2025-3-20 16:26 编辑

修改了下括号,语法错误,但是程序还有一些变量没看懂出处,也没初始化
  1. axlCmdRegister("p" 'showlayers)
  2. defun(showlayers ()
  3.     axlVisibleDesign (nil)
  4.     foreach (item args) ;这个args其他地方也没有这个变量
  5.       layerNum (evalstring item);没看懂
  6.       showlayer(layerNum)
  7.   (axlVisibleUpdate (t))
  8.   )
  9. defun (showlayer (layerNum)
  10.   let (()
  11.      allLayer (axlGetParam "paramLayerGroup:ETCH")->groupMembers
  12.      layerName (nth (evalstring layerNum) allLayer)
  13.       let (etchLayer (strcat "ETCH/" layerName))
  14.         axlVisibleLayer etchLayer (t)
  15.         when(eq((axlDBGetLayerType etchLayer) "PLANE")
  16.           axlVisibleLayer("ANTI ETCH/ALL" t)
  17.           axlVisibleLayer(strcat "PIN/" layerName t)
  18.           axlVisibleLayer(strcat "VIA CLASS/" layerName t)
  19.           axlVisibleLayer(strcat "BOUNDARY/" layerName t)
  20.              )
  21.       )
复制代码



作者: chenxiumei    时间: 2025-3-20 16:01
式试1813 发表于 2025-3-20 13:13
1

这个skill用来干啥的

作者: 式试1813    时间: 2025-3-20 16:26
chenxiumei 发表于 2025-3-20 16:01
这个skill用来干啥的

我也不知道干嘛的,帮他找一些原因

作者: chenxiumei    时间: 2025-3-20 17:01
式试1813 发表于 2025-3-20 16:26
我也不知道干嘛的,帮他找一些原因

我猜也是AI

作者: db-_-    时间: 2025-3-20 17:38
写代码不是拼积木了,怎么能东拼西凑呢。
想学的话可以花时间认真看看基础。
作者: NIWO99    时间: 2025-3-21 10:22
式试1813 发表于 2025-3-20 16:26
我也不知道干嘛的,帮他找一些原因

没错就是AI生成的,我问AI关于axlGetParam的用法,它给我做了一个简单换层SKILL。结果、、、、

作者: NIWO99    时间: 2025-3-21 10:26
db-_- 发表于 2025-3-20 17:38
写代码不是拼积木了,怎么能东拼西凑呢。
想学的话可以花时间认真看看基础。

谢谢回答,主要是没学过编程语言所以没基础。就去问AI了,AI倒是很认真的给我做了一个,就是不能用。

作者: NIWO99    时间: 2025-3-21 10:30
式试1813 发表于 2025-3-20 13:13
修改了下括号,语法错误,但是程序还有一些变量没看懂出处,也没初始化

回谢谢帮忙,辛苦了。我主要是想用axlGetParam来实现换层,我是问了AI,它给我生成的。

作者: NIWO99    时间: 2025-3-21 10:53
我又重新生成了一个,看上去简单一些。结果第一行就出错了。
*Error* eval: not a function - "i"
*Error* load: error while loading file - "d.il" at line 1


axlCmdRegister ("i" 'showlayers) ; 注册指令"i"调用showlayers函数
defun(showlayers ()
  axlVisibleDesign (nil) ; 清空显示
    foreach (item args) layerNum (evalstring item)
      showlayer (layerNum); 设置每一层的显示
  (axlVisibleUpdate (t)
)

defun (showlayer (layerNum)
  let (allLayer (axlGetParam "paramLayerGroup:ETCH")->groupMembers)
    let (layerName (nth (evalstring layerNum) allLayer))
      let (etchLayer (strcat "ETCH/" layerName))
        axlVisibleLayer etchLayer (t)
          axlVisibleLayer (strcat "PIN/" layerName) (t)
          axlVisibleLayer (strcat "VIA CLASS/" layerName) (t)
          axlVisibleLayer (strcat "BOUNDARY/" layerName) (t)
      )
    )
  )
作者: NIWO99    时间: 2025-3-23 17:13
谢谢回复,我还在学习中。。。

作者: 雞翅加辣    时间: 2025-3-31 17:06
NIWO99 发表于 2025-3-23 17:13
谢谢回复,我还在学习中。。。

首先就是axlCmdRegister後面應該馬上就要接括號,但你弄了空白
再來是你每個defun內的括號,完全對不上,
舉例來說你的 foreach (item args) , 裡面應該要更多東西才對,所以很顯然右括號太早出現了。
建議你可以先理解foreach怎麼使用~會幫助你寫得更順

作者: NIWO99    时间: 2025-4-1 17:01
雞翅加辣 发表于 2025-3-31 17:06
首先就是axlCmdRegister後面應該馬上就要接括號,但你弄了空白
再來是你每個defun內的括號,完全對不上 ...

谢谢帮助,我这几又没学了,学晕了。改天想玩了我再试试。谢谢你!

作者: NIWO99    时间: 2025-4-1 17:05
NIWO99 发表于 2025-4-1 17:01
谢谢帮助,我这几又没学了,学晕了。改天想玩了我再试试。谢谢你!

其实我当时就想用这个axlGetParam来做个简单的换层快捷键,然后就百度找到这个,我直接拿来用发现不行。

作者: 雞翅加辣    时间: 2025-4-7 10:36
你可以先玩玩看這個。
Going_On=axlGetParam("paramLayerGroup:BOARD GEOMETRY/paramLayer:OUTLINE")
Going_On->visible=t
axlSetParam(Going_On)
然後呢你就會在活用一點,換成這個
axlGetParam(strcat("artwork:","SMT"))->groupMembers
慢慢去嘗試什麼東西會丟回什麼結果,你才能糾正AI xd
作者: NIWO99    时间: 2025-5-1 15:40
雞翅加辣 发表于 2025-4-7 10:36
你可以先玩玩看這個。
Going_On=axlGetParam("paramLayerGroup:BOARD GEOMETRY/paramLayer:OUTLINE")
Goi ...

好的,谢谢帮助!





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2