Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: leilei4908

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

[复制链接]
 楼主| 发表于 2015-9-1 17:25:21 | 显示全部楼层
vivienluo 发表于 2015-9-1 16:55
判断一个path的起点或终点坐标与另一个path的起点或终点坐标是否一致。
  1. procedure( Line2Shape()
  2.         axlClearSelSet()
  3.         axlSetFindFilter(?enabled '("noall" "linesegs")        ?onButtons '("noall" "linesegs"))
  4.         axlSingleSelectBox()
  5.         lines_listi = axlGetSelSet()
  6.         lines_listj = cdr(lines_listi)
  7.         axlClearSelSet()
  8.         start = list(car(car(lines_listi)->startEnd))
  9.         path = start
  10.         foreach(i lines_listi
  11.                 foreach(j lines_listj
  12.                         istart = list(car(i->startEnd)),iend = list(cadr(i->startEnd))
  13.                         jstart = list(car(j->startEnd)),jend = list(cadr(j->startEnd))
  14.                         if(istart == last(path) then
  15.                                 if(jstart == iend then path = append(iend path))
  16.                                 if(jend   == iend then path = append(iend path))
  17.                         )
  18.                         if(iend == last(path) then
  19.                                 if(jstart == istart then path = append(istart path))
  20.                                 if(jend   == istart then path = append(istart path))
  21.                         )
  22.                 )
  23.                 lines_listj = cdr(lines_listj)
  24.         )
  25.         path = append(start path)
  26.         axlSetFindFilter(?enabled '("all")        ?onButtons '("noall"))
  27.         print(path)
  28. )
  29. axlSetAlias("l2s" "Line2Shape")
复制代码

总是会漏掉好多点,罗老师帮我看看哪里有问题
发表于 2015-9-1 21:18:21 | 显示全部楼层
leilei4908 发表于 2015-9-1 17:25
总是会漏掉好多点,罗老师帮我看看哪里有问题

你的代碼有問題,我修改為下列代碼
  1. procedure(Line2Shape()
  2.         axlClearSelSet()
  3.         axlSetFindFilter(?enabled '("noall" "linesegs") ?onButtons '("noall" "linesegs"))
  4.         axlSingleSelectBox()
  5.         lines_listi = axlGetSelSet()
  6.         lines_listj = cdr(lines_listi)
  7.         axlClearSelSet()
  8.         start = car(car(lines_listi)->startEnd)
  9.         end = cadr(car(lines_listi)->startEnd)
  10.         path = list(start end)
  11.         while(lines_listj
  12.                 lMatch = setof(x lines_listj (car(x->startEnd) == end || cadr(x->startEnd) == end))
  13.                     when(lMatch
  14.                             if(car(car(lMatch)->startEnd) == end then
  15.                                     path = append1(path cadr(car(lMatch)->startEnd))
  16.                                     end = cadr(car(lMatch)->startEnd)
  17.                             else
  18.                                     path = append1(path car(car(lMatch)->startEnd))
  19.                                     end = car(car(lMatch)->startEnd)
  20.                             )
  21.                             lines_listj = remove(car(lMatch) lines_listj)
  22.                     )
  23.             )
  24.             axlSetFindFilter(?enabled '("all") ?onButtons '("noall"))
  25.         print(path)
  26. )
复制代码
发表于 2015-9-2 06:58:03 | 显示全部楼层
leilei4908 发表于 2015-9-1 09:07
不好意思,不能提供完整的源码,部分与问题不相关的已经删除

程式是正常的,
如果你要達成你的條件:
有没有什么方法在弹出确认框前就关闭V2VForm?

=>你可以在此行axlFormClose(V2VForm) 前面,加入 axlUIWShow(V2VForm 'hide) 就可以.
 楼主| 发表于 2015-9-2 09:08:52 | 显示全部楼层
本帖最后由 leilei4908 于 2015-9-2 09:23 编辑
XYX365 发表于 2015-9-1 21:18
你的代碼有問題,我修改為下列代碼


lMatch = setof(x lines_listj (car(x->startEnd) == end || cadr(x->startEnd) == end))
这一行代码我不理解是什么意图,是把listj中所有符合条件的x赋值给lMatch么
运行你的代码后程序就会无响应,应该是死循环了,是因为最后的
lines_listj = remove(car(lMatch) lines_listj)
没有把listj清空么?
发表于 2015-9-2 09:19:52 | 显示全部楼层
本帖最后由 XYX365 于 2015-9-2 09:24 编辑
leilei4908 发表于 2015-9-2 09:08
lMatch = setof(x lines_listj (car(x->startEnd) == end || cadr(x->startEnd) == end))
这一行代码我 ...

lMatch = setof(x lines_listj (car(x->startEnd) == end || cadr(x->startEnd) == end))
这一行代码我不理解是什么意图,是把listj中所有符合条件的x赋值给lMatch么
=>是的

运行你的代码后程序就会无响应,应该是死循环了,是因为最后的
lines_listj = remove(car(lMatch) lines_listj)
没有把listj清空么?
=>問題可能是你的line沒有全連在一起或是你有框選兩個以上,由Line所組成的封閉線

解決方式改為下面
  1. procedure(Line2Shape()
  2.         axlClearSelSet()
  3.         axlSetFindFilter(?enabled '("noall" "linesegs") ?onButtons '("noall" "linesegs"))
  4.         axlSingleSelectBox()
  5.         lines_listi = axlGetSelSet()
  6.         lines_listj = cdr(lines_listi)
  7.         axlClearSelSet()
  8.         start = car(car(lines_listi)->startEnd)
  9.         end = cadr(car(lines_listi)->startEnd)
  10.         path = list(start end)
  11.         xCount = 1
  12.         while(lines_listj && xCount <= length(cdr(lines_listi))
  13.                 lMatch = setof(x lines_listj (car(x->startEnd) == end || cadr(x->startEnd) == end))
  14.                     when(lMatch
  15.                             if(car(car(lMatch)->startEnd) == end then
  16.                                     path = append1(path cadr(car(lMatch)->startEnd))
  17.                                     end = cadr(car(lMatch)->startEnd)
  18.                             else
  19.                                     path = append1(path car(car(lMatch)->startEnd))
  20.                                     end = car(car(lMatch)->startEnd)
  21.                             )
  22.                             lines_listj = remove(car(lMatch) lines_listj)
  23.                     )
  24.                     xCount++
  25.             )
  26.             axlSetFindFilter(?enabled '("all") ?onButtons '("noall"))
  27.         print(path)
  28. )
复制代码
 楼主| 发表于 2015-9-2 09:26:09 | 显示全部楼层
本帖最后由 leilei4908 于 2015-9-2 09:40 编辑
XYX365 发表于 2015-9-2 09:19
lMatch = setof(x lines_listj (car(x->startEnd) == end || cadr(x->startEnd) == end))
这一行代码我 ...


是这样的,我在框选的时候,肯定会选中封闭图形外的线,所以
lines_listj = remove(car(lMatch) lines_listj)
不会把listj清空
我应该增加一个判断,path回到起点就跳出循环
顺便问下
append和append1有什么区别

判断条件改成
while(last(path) != list(start)
就可以了
但是有个问题,如果listi中第一条线是封闭曲线外的线,那么也会进入死循环
发表于 2015-9-2 09:37:44 | 显示全部楼层
leilei4908 发表于 2015-9-2 09:26
是这样的,我在框选的时候,肯定会选中封闭图形外的线,所以
lines_listj = remove(car(lMatch) lines ...

我应该增加一个判断,path回到起点就跳出循环)
=>這種方式也可以
顺便问下
append和append1有什么区别
=>append 是兩個list合併成一個list
append1是將後面的元素附加到list後面
cons是將元素附加到list最前面
发表于 2015-9-2 10:02:24 | 显示全部楼层
leilei4908 发表于 2015-9-2 09:26
是这样的,我在框选的时候,肯定会选中封闭图形外的线,所以
lines_listj = remove(car(lMatch) lines ...


但是有个问题,如果listi中第一条线是封闭曲线外的线,那么也会进入死循环
=>你也可以加入判斷,只要判斷此條line的開始和結束位置是否一樣就知道
 楼主| 发表于 2015-9-2 10:08:17 | 显示全部楼层
XYX365 发表于 2015-9-2 10:02
但是有个问题,如果listi中第一条线是封闭曲线外的线,那么也会进入死循环
=>你也可以加入判斷,只要判 ...

接下来就要考虑“吕”字型的和“回”字形的封闭图形分别添加shape了,两位老师有什么好的建议么?
发表于 2015-9-2 10:17:32 | 显示全部楼层
leilei4908 发表于 2015-9-2 10:08
接下来就要考虑“吕”字型的和“回”字形的封闭图形分别添加shape了,两位老师有什么好的建议么?

接下来就要考虑“吕”字型的和“回”字形的封闭图形分别添加shape了,两位老师有什么好的建议么?
=>一樣加入判斷,
只要第一個封閉的迴路完成後,
先將此path存放到list裡面,
再重新讀取剩下的,
並再將path附加到先前的list

只是這個判斷 while(last(path) != list(start) ,
可能要修改一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-11-23 23:52 , Processed in 0.120913 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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