找回密码
 注册
关于网站域名变更的通知
查看: 3191|回复: 16
打印 上一主题 下一主题

怎样在skill里调用另一个skill

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-9-10 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
如题,各位大侠,怎样在skill里直接调用另一个skill呢,因为不想把需要调用的skill直接copy到另一个skill里,怎样才可以直接调用?

该用户从未签到

推荐
发表于 2017-5-27 16:29 | 只看该作者
defun(Cont_smy1 ()         
        prog( (all e)
        all = length(axlDBGetDesign()->symdefs) ;53
        return(all)
        e = t
        ))
发现 return后的语句不会执行,return必需与prog 一起用才行。
后面两个我用打印println(e)发现都是t
2.我是在写成.il里
axlCmdRegister("return1" 'Cont_smy1)      
axlSetAlias("~a" "return1")                                 
defun(Cont_smy1 ()                                                         
                       prog( (all e)                                       
                       all = length(axlDBGetDesign()->symdefs) ;53         
                       e = t                                                
                       println(e)                                          
                       ))                                                   

这样在allegro按快捷键运行的。
3.怎样在allegro command下输入set telskill里运行,能把你的运行截图给我?(就是你上次的运行结果的界面+代码,一行一行输入试了,也不对)
我直接把上面的代码复制到set telskill里的skill窗口里,运行时nil




该用户从未签到

推荐
发表于 2017-5-26 15:24 | 只看该作者
kevin890505 发表于 2017-5-25 22:12
skill里面的功能函数定义可以是全局的,所以skill调用skill和你skill里面调用一个功能是一样的,比如func ...

1_square_pad.i defun(square_pad (count)
                            。。。。。)
统计个数
2.check.il
load("1_square_pad.il");加载il文件                                                                                     
a = square_pad(y)                                                                             
               println(a)

发现打印出来的是t并不是数字4

点评

defun(Cont_smy1 () prog( (all e) all = length(axlDBGetDesign()->symdefs) ;53 return(all) e = t )) defun(Cont_smy2 () let( (all e) all = length(axlDBGetDesign()->symdefs) ;53  详情 回复 发表于 2017-5-26 16:19

该用户从未签到

推荐
发表于 2017-5-26 16:19 | 只看该作者
王开鑫55 发表于 2017-5-26 15:24
1_square_pad.i defun(square_pad (count)
                            。。。。。)
统计个数

defun(Cont_smy1 ()          
        prog( (all e)
        all = length(axlDBGetDesign()->symdefs) ;53

        return(all)
        e = t
        ))
       
defun(Cont_smy2 ()               
        let( (all e)
        all = length(axlDBGetDesign()->symdefs) ;53
        e = t
        ))

defun(Cont_smy3 ()          
        prog( (all e)
        all = length(axlDBGetDesign()->symdefs) ;53
        e = t
        ))       
调用结果:
Skill > a = Cont_smy1()
53
Skill > b = Cont_smy2()
t
Skill > c = Cont_smy3()
nil

对比下你会发现点什么,同样的  你把最后的e=t删了  看又会返回什么

该用户从未签到

6#
 楼主| 发表于 2013-9-10 15:59 | 只看该作者

axlShell 的参数是t_command,如果这样做的话我需要把skill先做成菜单形式再进行调用,对吗?

该用户从未签到

7#
发表于 2013-9-10 16:50 | 只看该作者
函数可以直接调用的

该用户从未签到

8#
 楼主| 发表于 2013-9-10 16:59 | 只看该作者
shirdon 发表于 2013-9-10 16:50
函数可以直接调用的

skill语言里的函数是可以直接调用的。但是我写的skill想在另一个skill里调用,要怎么做呢?

该用户从未签到

9#
发表于 2013-9-10 17:22 | 只看该作者
zhanyying 发表于 2013-9-10 16:59
skill语言里的函数是可以直接调用的。但是我写的skill想在另一个skill里调用,要怎么做呢?

上代码

该用户从未签到

10#
 楼主| 发表于 2013-9-10 17:34 | 只看该作者

版主的意思是要把调用的skill程序贴到l另一个skill里呢?还是说让我把代码贴这里呢?
如果是第一种,我知道怎么做,我是不想贴才问有什么好方法。
如果是第二种呢,我没有具体的代码。就是想在skill里可以调用script,那在skill里可以调用另一个skill 吗?

该用户从未签到

11#
发表于 2013-9-10 17:38 | 只看该作者
我不明白你说的一个skill调用另一个skill是什么意思,什么样叫一个skill?   一个skill文件?
先全部load进内存然后在一个skill运行过程中调用另一个的入口函数,这有什么困难吗

该用户从未签到

12#
 楼主| 发表于 2013-9-10 17:40 | 只看该作者
呵呵,可能我说的不够专业,不过我明白你的意思了,谢谢了{:soso_e100:}

该用户从未签到

13#
发表于 2013-9-14 14:36 | 只看该作者
本帖最后由 shirdon 于 2013-9-14 14:46 编辑
ifuture 发表于 2013-9-10 21:33
各文件都load进来。就可以直接用了。


正解,在allegro.ilinit里,
load("1.il")
load("2.il")

1.il 内容:

defun( _try ( a b)    注意函数名try与 (a b)之间有空格   
      ...  ...
        )

2.il 内容:

defun( _call ( c d)
       _try(c d)      调用try函数时,try与 (c d)之间不能有空格空格
)

实现调用

该用户从未签到

14#
发表于 2013-12-10 16:59 | 只看该作者
procedure( quick_open(t_open)
    if(!boundp('EVER_LAUNCHED) then
     axlShell("qview")
          axlShell("grids")
      EVER_LAUNCHED = t
    )
)
if(axlVersion('version)>15.7 then
  axlTriggerSet('open 'quick_open)

啥都不说,这就是用法

点评

A.skill调用B.skill,怎么把B.SKILL得到的满足条件的个数在A.skill里处理  详情 回复 发表于 2017-5-25 16:13
A.skill调用B.skill,怎,直接拿过来不行,未定义么把B.SKILL得到的满足条件的个数在A.skill里处理  详情 回复 发表于 2017-5-25 16:13

该用户从未签到

15#
发表于 2017-5-25 16:13 | 只看该作者
kevin890505 发表于 2013-12-10 16:59
procedure( quick_open(t_open)
    if(!boundp('EVER_LAUNCHED) then
     axlShell("qview")

A.skill调用B.skill,怎,直接拿过来不行,未定义么把B.SKILL得到的满足条件的个数在A.skill里处理

该用户从未签到

16#
发表于 2017-5-25 16:13 | 只看该作者
kevin890505 发表于 2013-12-10 16:59
procedure( quick_open(t_open)
    if(!boundp('EVER_LAUNCHED) then
     axlShell("qview")

A.skill调用B.skill,怎么把B.SKILL得到的满足条件的个数在A.skill里处理

点评

skill里面的功能函数定义可以是全局的,所以skill调用skill和你skill里面调用一个功能是一样的,比如funca(a b c),你可以在另一个skill里面调用funca(d e f),返回你想要的参数d/e/f直接用就可以了  详情 回复 发表于 2017-5-25 22:12

该用户从未签到

17#
发表于 2017-5-25 22:12 | 只看该作者
王开鑫55 发表于 2017-5-25 16:13
A.skill调用B.skill,怎么把B.SKILL得到的满足条件的个数在A.skill里处理

skill里面的功能函数定义可以是全局的,所以skill调用skill和你skill里面调用一个功能是一样的,比如funca(a b c),你可以在另一个skill里面调用funca(d e f),返回你想要的参数d/e/f直接用就可以了   

点评

1_square_pad.i defun(square_pad (count) 。。。。。) 统计个数 2.check.il load("1_square_pad.il");加载il文件  详情 回复 发表于 2017-5-26 15:24
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-22 22:34 , Processed in 0.093750 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表