leilei4908 发表于 2015-8-31 10:51:32

在调用Form后如何先关闭Form再执行后续程序?

本帖最后由 leilei4908 于 2015-8-31 10:57 编辑

procedure( V2VFormAction(V2VForm)
run = nil
case( V2VForm->curField
("CMD_OK"
axlFormClose(V2VForm)
axlCancelEnterFun( )
run = 1
); --------------------------
)
if(run then
axlClearSelSet()
axlSetFindFilter(?enabled '("noall" "vias") ?onButtons '("noall" "vias"))
axlUIConfirm("Please Choose The Box By Mouse")
axlSingleSelectBox()
)
)

为什么弹出确认框前没有关闭V2VForm,而是执行完所有程序后才关闭的?是因为之后的程序还在procedure函数内么?
有没有什么方法在弹出确认框前就关闭V2VForm?

wisology 发表于 2015-8-31 18:54:14

我遇到的情况是运行起来后比较卡,呈现的现象就是没有及时关掉。

vivienluo 发表于 2015-8-31 22:24:53

完整的代码贴一个。是不是函数的位置放错了

leilei4908 发表于 2015-9-1 09:07:25

axlCmdRegister( "Via2ViaDistance" `Via2ViaDistance)
procedure( Via2ViaDistance()
        V2VForm = axlFormCreate( (gensym) "Via2Via.form" nil 'V2VFormAction t nil )
        axlFormDisplay(V2VForm)
)
procedure( V2VFormAction(V2VForm)
        run = nil
        case( V2VForm->curField
                ("Box"
                        axlFormClose(V2VForm)
                        axlCancelEnterFun( )
                        run = 1
                ); --------------------------
                ("All"
                        axlFormClose(V2VForm)
                        axlCancelEnterFun( )
                        run = 2
                ); --------------------------
        )
        if(run then
                axlClearSelSet()
                axlSetFindFilter(?enabled '("noall" "vias")        ?onButtons '("noall" "vias"))
                if(run == 1 then
                        axlUIConfirm("Please Choose The Box")
                        axlSingleSelectBox()
                else
                        axlAddSelectAll()
                )
                via_all_listi = axlGetSelSet()
                via_all_listj = cdr(via_all_listi)
                axlClearSelSet()
                ...
                axlVisibleDesign(nil);隐藏所有层面
                axlVisibleLayer("via class/top" t);显示via class-top
                axlVisibleLayer("via class/bottom" t);显示via class-bottom
                axlVisibleLayer("board geometry/outline" t)
                axlVisibleLayer("package geometry/silkscreen_top" t);
                axlVisibleLayer("package geometry/silkscreen_bottom" t);
                axlVisibleUpdate(t);立即更新
        )
        axlSetFindFilter(?enabled '("all")        ?onButtons '("noall" "vias"))
)
axlSetAlias("v2v" "Via2ViaDistance")

不好意思,不能提供完整的源码,部分与问题不相关的已经删除

leilei4908 发表于 2015-9-1 09:09:34

本帖最后由 leilei4908 于 2015-9-1 09:10 编辑

vivienluo 发表于 2015-8-31 22:24
完整的代码贴一个。是不是函数的位置放错了

部分源码已贴,我估计是函数放错位置了
省略掉的部分有很大的计算量,是不是因为这个?
有什么修改建议么?

vivienluo 发表于 2015-9-1 10:55:22

把运行部分做到一个函数里面试试。。。

leilei4908 发表于 2015-9-1 11:43:39

axlCmdRegister( "Via2ViaDistance" `Via2ViaDistance)
procedure( Via2ViaDistance()
        V2VForm = axlFormCreate( (gensym) "Via2Via.form" nil 'V2VFormAction t nil )
        axlFormDisplay(V2VForm)
)
run = nil
procedure( V2VFormAction(V2VForm)
        case( V2VForm->curField
                ("Box"
                        axlFormClose(V2VForm)
                        axlCancelEnterFun( )
                        run = 1
                ); --------------------------
                ("All"
                        axlFormClose(V2VForm)
                        axlCancelEnterFun( )
                        run = 2
                ); --------------------------
        )
)
procedure( check()
        if(run then
                axlClearSelSet()
                axlSetFindFilter(?enabled '("noall" "vias")      ?onButtons '("noall" "vias"))
                if(run == 1 then
                        axlUIConfirm("Please Choose The Box")
                        axlSingleSelectBox()
                else
                        axlAddSelectAll()
                )
                via_all_listi = axlGetSelSet()
                via_all_listj = cdr(via_all_listi)
                axlClearSelSet()
                ...
                axlVisibleDesign(nil);隐藏所有层面
                axlVisibleLayer("via class/top" t);显示via class-top
                axlVisibleLayer("via class/bottom" t);显示via class-bottom
                axlVisibleLayer("board geometry/outline" t)
                axlVisibleLayer("package geometry/silkscreen_top" t);
                axlVisibleLayer("package geometry/silkscreen_bottom" t);
                axlVisibleUpdate(t);立即更新
        )
        axlSetFindFilter(?enabled '("all")      ?onButtons '("noall" "vias"))
)
axlSetAlias("v2v" "Via2ViaDistance")
也就是要改成这样的么?

vivienluo 发表于 2015-9-1 14:02:21

leilei4908 发表于 2015-9-1 11:43
也就是要改成这样的么?

试试。不行的话我可以帮你修改修改

leilei4908 发表于 2015-9-1 15:13:39

本帖最后由 leilei4908 于 2015-9-1 15:38 编辑

vivienluo 发表于 2015-9-1 14:02
试试。不行的话我可以帮你修改修改

这个到是可以搁置一段时间,现在主要要解决封闭lines创建shape的功能
axlClearSelSet()
axlSetFindFilter(?enabled '("noall" "lines")      ?onButtons '("noall" "lines"))
axlSingleSelectBox()
lines_listi = axlGetSelSet()
axlClearSelSet()
foreach(i lines_listi
      print(i->objType)
)
为什么这里的objType都是"Path"?我需要把FindFilter的"lines"改成"linesegs"么?
对这些获取到的线段,我怎么判断是否是封闭图形?然后要转换成path?转成poly?最后转成shape?
官方的conpose shape是怎么做的?

vivienluo 发表于 2015-9-1 16:55:46

leilei4908 发表于 2015-9-1 15:13
这个到是可以搁置一段时间,现在主要要解决封闭lines创建shape的功能

为什么这里的objType都是"Path ...

判断一个path的起点或终点坐标与另一个path的起点或终点坐标是否一致。
页: [1] 2 3 4 5
查看完整版本: 在调用Form后如何先关闭Form再执行后续程序?