EDA365电子论坛网

标题: SKILL请教:如何获取mini form中的值 [打印本页]

作者: db-_-    时间: 2022-2-14 17:44
标题: SKILL请教:如何获取mini form中的值
我想获取自带命令的mini form中的值,有什么办法吗?

比如点击move,在option中会自动调用allegro自带的x:\Cadence_SPB_17.2-2016\share\pcb\text\forms目录下面的mini.form,打开这个form文件可以找到想要的field,以及POP list。使用FORM mini可以修改值,但是有什么办法能够获取到form中的值吗。
  1. FIELD rotate_type
  2. FLOC 10 10
  3. ENUMSET 11
  4. POP "rot_type"
  5. ENDFIELD
复制代码

另外,FORM mini类似的介绍很少,请问在哪里可以找到更多关于FORM mini怎么使用的介绍?



作者: oewqe    时间: 2022-2-14 17:52
想看看大神怎么说的

作者: leilei4908    时间: 2022-2-15 10:34
本帖最后由 leilei4908 于 2022-2-15 10:35 编辑

截取部分代码供你参考
axlCmdRegister("rp" 'wlRouteKeepoutByPad) ;cmdType "general" 和 axlMiniStatusLoad 不能共用
procedure(wlRouteKeepoutByPad()
prog((tempf f)
        tempf = axlTempFile()
        f = outfile(tempf "w")
        fprintf(f "FILE_TYPE=FORM_DEFN VERSION=2\n")
        fprintf(f "FORM\n")
        fprintf(f "FIXED\n")
        fprintf(f "PORT 21 7\n")
        fprintf(f "HEADER \"RouteKeepoutByPad\"\n")
        
        fprintf(f "TILE\n")
        fprintf(f "GROUP \"[\321\241\324\361]   Select\"\n")
        fprintf(f "GLOC 1 1\n")
        fprintf(f "GSIZE 24 7\n")
        fprintf(f "ENDGROUP\n")

; ......
; ......
        fprintf(f "FIELD width\n")
        fprintf(f "FLOC 16 31\n")
        fprintf(f "REALFILLIN 6 8\n")
        fprintf(f "DECIMAL %n\n" cadr(axlDBGetDesignUnits()))
        fprintf(f "ENDFIELD\n")
        fprintf(f "ENDTILE\n")
        fprintf(f "ENDFORM\n")
        close(f)
        rpForm = axlMiniStatusLoad( (gensym) tempf 'rpFormAction)
        axlFormDisplay(rpForm)

        errset(deleteFile(tempf))

; ......
; ......

        g_Mark = nil
        axlClearSelSet()
        axlSetFindFilter(?enabled '(noall pins vias) ?onButtons '(noall pins vias))
        mypopup = axlUIPopupDefine( nil list(
                list( "Done" 'wlDone)
                list( "Cancel" 'wlCancel)
                list( "Back" 'wlBack)
                list( "Oops" 'wlOops)
        ))
        when(g_Mark axlDBTransactionCommit(g_Mark))
        g_Mark = axlDBTransactionStart()
        while(axlSelect()
                axlUIPopupSet(mypopup)
                pads = axlGetSelSet()
                axlClearSelSet()

; ......
; ......

                axlClearSelSet()
                axlSetFindFilter(?enabled '(noall pins vias) ?onButtons '(noall pins vias))
                ;axlDBTransactionCommit(g_Mark)
        )
        axlUIPopupSet(nil)        
        axlSetFindFilter(?enabled '(noall) ?onButtons '(noall))
        return(nil)
))

procedure(rpFormAction(rpForm)
prog(()
; ......
; ......

        when(axlFormGetField(rpForm "width") rp_width = axlFormGetField(rpForm "width"))

; ......
; ......
))




作者: leilei4908    时间: 2022-2-15 10:37
自带的,倒是没去研究过
应该可以用script录制重播的方式去操作

作者: db-_-    时间: 2022-2-15 11:02
leilei4908 发表于 2022-2-15 10:34
截取部分代码供你参考
axlCmdRegister("rp" 'wlRouteKeepoutByPad) ;cmdType "general" 和 axlMiniStatusL ...

你贴的这些我都知道。只想知道获取另一个命令中用到的form的值。

作者: leilei4908    时间: 2022-2-15 16:01
db-_- 发表于 2022-2-15 11:02
你贴的这些我都知道。只想知道获取另一个命令中用到的form的值。

你的意思是不是,要获取到 form handle(form dbid) ?一般 form dbid 都会创建成局部变量,即使知道变量名,要获取id或者控制form,应该是不可能的吧?

作者: db-_-    时间: 2022-2-15 16:02
leilei4908 发表于 2022-2-15 16:01
你的意思是不是,要获取到 form handle(form dbid) ?一般 form dbid 都会创建成局部变量,即使知道变量 ...

获取别人的form handle也可以。
FORM mini都可以直接修改值,我在想,应该也可以获取值才对。能set应该也能get啊。

作者: leilei4908    时间: 2022-2-15 16:13
db-_- 发表于 2022-2-15 16:02
获取别人的form handle也可以。
FORM mini都可以直接修改值,我在想,应该也可以获取值才对。能set应该 ...

FORM mini可以直接修改值    ?怎么实现的呢?
我能想到的方法就是skill生成scr文件,然后replay去修改

作者: db-_-    时间: 2022-2-15 16:15
leilei4908 发表于 2022-2-15 16:13
FORM mini可以直接修改值    ?怎么实现的呢?
我能想到的方法就是skill生成scr文件,然后replay去修改
...

你move的时候,在控制台输入以下命令试试。应该是可以来回切。

  1. skill FORM mini rotate_point User Pick
  2. skill FORM mini rotate_point Sym Origin
复制代码



作者: leilei4908    时间: 2022-2-15 16:27
本帖最后由 leilei4908 于 2022-2-15 16:28 编辑
db-_- 发表于 2022-2-15 16:15
你move的时候,在控制台输入以下命令试试。应该是可以来回切。

试了,Command控制台,输入的指令,去掉前面的skill就行
要加skill的话
是要 skill axlShell("FORM mini rotate_point User Pick")

作者: db-_-    时间: 2022-2-15 16:31
leilei4908 发表于 2022-2-15 16:27
试了,Command控制台,输入的指令,去掉前面的skill就行
要加skill的话
是要 skill axlShell("FORM min ...

对 我2了。反正修改是可以的。我还想读取。

作者: digitzing    时间: 2022-2-16 16:19
学习了!!!
作者: db-_-    时间: 2022-5-14 13:04
已搞定。插入dll,获取对话框控件文字即可。




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