找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 83|回复: 2
打印 上一主题 下一主题

[求助]在Set telskill窗口输入程序名,正常;但在command输入指令,Form中按钮不可用

[复制链接]

45

主题

821

帖子

2831

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2831
跳转到指定楼层
1#
发表于 2018-2-5 13:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

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

x
以下程序,在command窗口输入stackvias,只能弹出Form,不能进行“Delete”等操作;
但是,在Set telskill窗口,输入Stack_Vias_(),能进行“Delete”等操作。


axlCmdRegister("stackvias" `Stack_Vias_)

procedure( Stack_Vias_()
        stackvia=nil
        collect_stack_vias()       
        if( length(StackViaXYList)==0 then
                axlUIConfirm("There are no Stack Via.") ;若不存在重叠过孔,则弹出对话框
        else
                Create_sv_Form()  
                myform2=axlFormCreate( (gensym) form_file nil 'Form_Action t)
                axlMsgPut("%d stack vias exist."  length(StackViaXYList)) ;在command框里显示内容
                axlUIWPrint(myform2 sprintf(nil "%d stack vias exist."  length(StackViaXYList))) ;在Form底下显示内容
                axlFormListDeleteAll(myform2 "List1")
                axlFormSetField(myform2 "List1" StackViaXYList) ;把StackViaXYList的内容显示到Form list里。
                ;axlFormListSelect(myform2 "List1" selected_list) ;高亮选择的对象
                axlClearSelSet()
                axlFormSetInfo(myform2 "Msg_Field" "Please select vias from the list above.")
                axlFormDisplay(myform2)
        );if                                
);procedure

procedure( collect_stack_vias()
        index_dbid_list = nil
        index_dbid_list_list = nil
        StackViaXYList = nil       
        index_num = 0
        axlClearSelSet()
        axlVisibleDesign(nil)
        axlVisibleLayer( "VIA CLASS/TOP" t)
        axlVisibleLayer( "BOARD GEOMETRY/OUTLINE" t)
        axlVisibleUpdate(t)
        axlSetFindFilter(?enabled `("NOALL" "VIAS") ?onButtons `("VIAS"))
        vias = axlGetSelSet(axlAddSelectAll())       
        foreach( via  vias
                axlClearSelSet()
                axlSetFindFilter(?enabled `("NOALL" "VIAS") ?onButtons `("VIAS"))
                lx=car(via->xy)-0.5 ;mm为单位时的设置
                ly=cadr(via->xy)-0.5
                ux=car(via->xy)+0.5
                uy=cadr(via->xy)+0.5
                axlAddSelectBox(list(lx:ly ux:uy))
                if( axlGetSelSetCount()>1  then ;axlGetSelSetCount()>1,表示存在重叠过孔
                        index_dbid_list = list(index_num via) ;编号和过孔dbid组合。为每个过孔添加一个编号,是为了在执行Delete时不会删错dbid。
                        index_dbid_list_list = cons(index_dbid_list index_dbid_list_list) ;index_dbid_list_list = (... (编号1 VIA1_dbid) (编号0 VIA0_dbid))。好像传不到后面去。
                       
                        StackVia_XY = "  " ;设定StackVia_XY为字符串类型
                        sprintf(StackVia_XY "%L" via->xy) ;把过孔坐标变成字符串,例如"(50.56 28.8)"
                        sprintf(StackVia_index "VIA%d" index_num) ;把编号和字符串"VIA"结合成新字符串,例如"VIA1"
                        StackVia_XY_index = strcat(StackVia_XY "  " StackVia_index) ;把过孔坐标字符串、空格字符串和编号字符串进行结合,组成新的字符串,例如"(50.56 28.8)  VIA1"。
                        StackViaXYList = cons(StackVia_XY_index StackViaXYList) ;举例:StackViaXYList =(... "(54.4 28.16)  VIA2" "(50.56 28.8)  VIA1" "(50.56 28.8)  VIA0")
                        index_num++
                );if                               
        );foreach       
        ;index_dbid_list_list
);procedure

procedure( Create_sv_Form()
form_file = "d_form.form"
myform = outfile(form_file "w")
fprintf(myform "FILE_TYPE=FORM_DEFN VERSION=2\n")
fprintf(myform "FORM AUTOGREYTEXT\n")
fprintf(myform "FIXED\n")
fprintf(myform "PORT 30 45\n")
fprintf(myform "HEADER \"Stack Vias\"\n\n")
fprintf(myform "TILE\n\n")

fprintf(myform "TEXT \"Stack Vias:\"\n")
fprintf(myform "TLOC 2 1\n")
fprintf(myform "ENDTEXT \n\n\n")

fprintf(myform "FIELD List1\n")
fprintf(myform "FLOC 2 3\n")
fprintf(myform "LIST \"\" 27 8\n")
fprintf(myform "FGROUP \"Form1\"\n")
fprintf(myform "OPTIONS multiselect\n")
fprintf(myform "ENDFIELD \n\n")

fprintf( myform "TEXT\n")
fprintf( myform "TLOC 2 18\n") ;控制语句显示位置
fprintf( myform "INFO Msg_Field 30\n") ;这里的30控制INFO显示内容的长度
fprintf( myform "ENDTEXT\n")

fprintf(myform "FIELD Delete\n")
fprintf(myform "FLOC 11 20\n")
fprintf(myform "MENUBUTTON \"Delete\" 9 3\n")
fprintf(myform "FGROUP \"Form1\"\n")
fprintf(myform "ENDFIELD \n\n")

fprintf(myform "ENDTILE\n\n")
fprintf(myform "ENDFORM\n\n")

close(myform)
)

procedure( Form_Action(myform2)
        case(myform2->curField
       
                ("List1"                               
                        selected_list = axlFormListGetSelItems(myform2 "List1") ;当前Form List中被选中的项的list
                        ;使窗口跳转到当前选择的过孔
                        foreach(sel_via selected_list        ;访问每个选中的Form List项
                                foreach(com_list index_dbid_list_list ;访问每个重叠过孔的(序号 过孔dbid)组合。 index_dbid_list_list 看前面。
                                        index_num2 = nth(0 com_list) ;提取编号
                                        via_dbid = nth(1 com_list) ;提取过孔dbid
                                        Via_XY = "  "
                                        sprintf(Via_XY "%L" via_dbid->xy)
                                        sprintf(Via_index "VIA%d" index_num2)
                                        Via_XY_index = strcat(Via_XY "  " Via_index)
                                        ;以下是跳转语句
                                        if(Via_XY_index == sel_via then
                                                selected_via_dbid_x = car(via_dbid->xy)
                                                selected_via_dbid_y = cadr(via_dbid->xy)
                                                lx = selected_via_dbid_x - 5 ;mm为单位时的设置
                                                ly = selected_via_dbid_y - 5
                                                hx = selected_via_dbid_x + 5
                                                hy = selected_via_dbid_y + 5
                                                window_bbox = list(lx:ly hx:hy)
                                                axlWindowBoxSet( window_bbox)
                                        );if
                                );foreach
                        );foreach                       
                );List1
               
                ("Delete"                       
                        ;删除list里选中的项                               
                        axlFormListDeleteItem(myform2 "List1" selected_list)
                       
                        ;删除PCB中的过孔                       
                        foreach(sel_via selected_list       
                                foreach(com_list index_dbid_list_list
                                        index_num2 = nth(0 com_list)
                                        via_dbid = nth(1 com_list)
                                        Via_XY = "  "
                                        sprintf(Via_XY "%L" via_dbid->xy)
                                        sprintf(Via_index "VIA%d" index_num2)
                                        Via_XY_index = strcat(Via_XY "  " Via_index)
                                        if(Via_XY_index==sel_via then
                                                axlDeleteObject( via_dbid t)                                               
                                        );if
                                );foreach       
                        );foreach                                                       
                );delete
               
        );case
);procedure       

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

117

主题

2352

帖子

1万

积分

EDA365特邀版主

Rank: 6Rank: 6

积分
13799

最佳敬业奖

2#
发表于 2018-2-27 13:50 | 只看该作者
16.6测试没问题

点评

版主大哥,感谢你的回复。我的版本也是16.6,可就是不行。 不研究它了,还是自己的基本功不够扎实,还给老师了。  详情 回复 发表于 2018-2-27 14:01

45

主题

821

帖子

2831

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2831
3#
 楼主| 发表于 2018-2-27 14:01 | 只看该作者

版主大哥,感谢你的回复。我的版本也是16.6,可就是不行。
不研究它了,还是自己的基本功不够扎实,还给老师了。

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

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-12-12 05:21 , Processed in 0.061124 second(s), 37 queries , Gzip On.

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

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

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