在调用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?
我遇到的情况是运行起来后比较卡,呈现的现象就是没有及时关掉。 完整的代码贴一个。是不是函数的位置放错了 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:10 编辑
vivienluo 发表于 2015-8-31 22:24
完整的代码贴一个。是不是函数的位置放错了
部分源码已贴,我估计是函数放错位置了
省略掉的部分有很大的计算量,是不是因为这个?
有什么修改建议么?
把运行部分做到一个函数里面试试。。。 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")
也就是要改成这样的么? leilei4908 发表于 2015-9-1 11:43
也就是要改成这样的么?
试试。不行的话我可以帮你修改修改 本帖最后由 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是怎么做的? leilei4908 发表于 2015-9-1 15:13
这个到是可以搁置一段时间,现在主要要解决封闭lines创建shape的功能
为什么这里的objType都是"Path ...
判断一个path的起点或终点坐标与另一个path的起点或终点坐标是否一致。