EDA365电子工程师网

标题: 怎么实现手动连续Copy Via? [打印本页]

作者: lyh289114980    时间: 2014-10-22 18:27
标题: 怎么实现手动连续Copy Via?
请问各位大侠怎么实现按我给的ix iy连续点击按钮就连续复制Via,界面如下图

作者: deargds    时间: 2014-10-23 08:39
每次点击时,XY坐标按给定距离递增,再进行VIA创建
作者: lyh289114980    时间: 2014-10-23 08:45
deargds 发表于 2014-10-23 08:39
每次点击时,XY坐标按给定距离递增,再进行VIA创建

原理是这样,但是按下按钮不是程序执行完毕了吗?怎么能让它中途暂停下来等待点击下一个命令呢?

作者: deargds    时间: 2014-10-23 09:03
lyh289114980 发表于 2014-10-23 08:45
原理是这样,但是按下按钮不是程序执行完毕了吗?怎么能让它中途暂停下来等待点击下一个命令呢?

正常情况执行完就会停止的,要看下具体的代码.

作者: lyh289114980    时间: 2014-10-23 09:07
deargds 发表于 2014-10-23 09:03
正常情况执行完就会停止的,要看下具体的代码.

                  axlClearSelSet()
    axlSetFindFilter(?enabled `("NOALL" "VIAS")
                             ?onButtons `("VIAS"))
       mypopup = axlUIPopupDefine( nil
                 (list (list "Done" 'axlFinishEnterFun)
                 (list "Cancel" 'axlCancelEnterFun)))
    axlUIPopupSet( mypopup)       


    ; Use the generic select instead of box, so the user can use temp group
    axlSelect(?prompt "Select vias by pick or window.");   
    vias = axlGetSelSet()       
    x3=axlFormGetField(copyform "X11")
    y3=axlFormGetField(copyform "Y11")
    x=atof(x3)
    y=atof(y3)
       
        when(vias       
                axlCopyObject(vias, ?move x:y ?retainNet nil)
                axlVisibleUpdate(t)                                           
     );end when  
     );end defun


作者: deargds    时间: 2014-10-23 09:28
lyh289114980 发表于 2014-10-23 09:07
axlClearSelSet()
    axlSetFindFilter(?enabled `("NOALL" "VIAS")
                             ?onBu ...

axlSelect放到while循环中来执行,这样就不会结束了


作者: lyh289114980    时间: 2014-10-23 09:45
deargds 发表于 2014-10-23 09:28
axlSelect放到while循环中来执行,这样就不会结束了

这样不行吧,把axlSelect放到循环中只是让你循环选择VIA啊,与手动连续点击按钮复制不同呀。

作者: deargds    时间: 2014-10-23 10:19
lyh289114980 发表于 2014-10-23 09:45
这样不行吧,把axlSelect放到循环中只是让你循环选择VIA啊,与手动连续点击按钮复制不同呀。

不是太明白你这个程序要实现的功能,还有操作的方式,代码能全部贴出来更好.

作者: lyh289114980    时间: 2014-10-23 10:36
deargds 发表于 2014-10-23 10:19
不是太明白你这个程序要实现的功能,还有操作的方式,代码能全部贴出来更好.

这个就是Ecopy1按钮的全部代码啊,我的操作方式是:我在X1和Y1中输入两数值,然后点击Ecopy1这个按钮(中途选择一次Via),连续点击n次产生n个via。

作者: betamelody    时间: 2014-10-23 11:08
  1. axlUIPopupSet(mypopup)
  2. axlSelect(?prompt "Select vias by pick or window.")
  3. vias = axlGetSelSet()
  4. via = car(vias)
  5. xy = nil
  6. when(via
  7.   println("11")
  8.   axlClearSelSet()
  9.   while(xy = axlEnterPoint()
  10.     axlCopyObject(via ?move list(xCoord(xy)-xCoord(via->xy) yCoord(xy)-yCoord(via->xy)) ?retainNet nil)
  11.     axlVisibleUpdate(t)
  12.   )
  13.   axlShell("done")
  14. );end when
复制代码
且帮楼主一次,下次问问题的时候一定要先做好调研,然后再整理好问题的表述
作者: deargds    时间: 2014-10-23 11:31
本帖最后由 deargds 于 2014-10-23 11:40 编辑
lyh289114980 发表于 2014-10-23 10:36
这个就是Ecopy1按钮的全部代码啊,我的操作方式是:我在X1和Y1中输入两数值,然后点击Ecopy1这个按钮(中 ...

那用axlEnterPoint()来循环选点就行了,参考betamelody版主的代码
作者: lyh289114980    时间: 2014-10-23 12:15
betamelody 发表于 2014-10-23 11:08
且帮楼主一次,下次问问题的时候一定要先做好调研,然后再整理好问题的表述

唉。。。。算我描述不清吧,我的意思是:我在X1和Y1中输入两数值,然后点击Ecopy1这个按钮(中途选择一次Via,它的坐标a:b),连续点击n次按钮产生坐标n个via,这些Via的坐标依次为:(a+x^1,b+y^1);(a+x^2,b+y^2);(a+x^3,b+y^3)..........;(a+x^n,b+y^n).请注意我是连续点击按钮而不是连续点击屏幕上的任意点!

作者: deargds    时间: 2014-10-23 13:16
本帖最后由 deargds 于 2014-10-23 16:37 编辑
lyh289114980 发表于 2014-10-23 12:15
唉。。。。算我描述不清吧,我的意思是:我在X1和Y1中输入两数值,然后点击Ecopy1这个按钮(中途选择一次 ...

如果你希望ECOPY1按钮首次点击时允许选择VIAS,然后后面的点击只执行COPY VIA动作,可以参考下面代码,不过你需要在一次操作完成后将VIAS变量清除掉,以便下次选择目标VIA时生效:  另外针对程序建议选择目标VIA的动作跟COPY的动作分开来处理.
  1. unless(boundp('vias)
  2.         axlClearSelSet()
  3.         axlSetFindFilter(?enabled `("NOALL" "VIAS")
  4.         ?onButtons `("VIAS"))
  5.         mypopup = axlUIPopupDefine( nil
  6.         (list (list "Done" 'axlFinishEnterFun)
  7.         (list "Cancel" 'axlCancelEnterFun)))
  8.         axlUIPopupSet( mypopup)      

  9.         ; Use the generic select instead of box, so the user can use temp group
  10.         axlSelect(?prompt "Select vias by pick or window.");   
  11.         vias = axlGetSelSet()      
  12. )
复制代码

作者: lyh289114980    时间: 2014-10-23 15:39
deargds 发表于 2014-10-23 13:16
如果你希望ECOPY1按钮首次点击时允许选择VIAS,然后后面的点击只执行COPY VIA动作,可以参考下面代码,不 ...

这个方法可以试试,谢谢!

作者: lyh289114980    时间: 2014-10-23 18:06
deargds 发表于 2014-10-23 13:16
如果你希望ECOPY1按钮首次点击时允许选择VIAS,然后后面的点击只执行COPY VIA动作,可以参考下面代码,不 ...

版主请问下Allegro中的连线命令下的填写线宽的栏是怎么实现的,它可以选择以可以填写,而且它还能记住我填写过的线宽值,用skill怎么写?谢谢!

作者: deargds    时间: 2014-10-23 19:48
lyh289114980 发表于 2014-10-23 18:06
版主请问下Allegro中的连线命令下的填写线宽的栏是怎么实现的,它可以选择以可以填写,而且它还能记住我 ...

常规的输入框中添加POP定义即可,记忆参数需要在程序中做相应的处理。
FIELD xxx
FLOC 1 11\
STRFILLIN 26 52
POP YourPopup
ENDFIELD

作者: lyh289114980    时间: 2014-10-23 21:18
deargds 发表于 2014-10-23 19:48
常规的输入框中添加POP定义即可,记忆参数需要在程序中做相应的处理。
FIELD xxx
FLOC 1 11\

这个我会啊,但是只有自己预设的几个值啊,不能填写。是我哪出错了么

作者: lyh289114980    时间: 2014-10-24 09:01
deargds 发表于 2014-10-23 19:48
常规的输入框中添加POP定义即可,记忆参数需要在程序中做相应的处理。
FIELD xxx
FLOC 1 11\

谢谢版主,按照你格式已经好了。感谢!!!!

作者: pallayout    时间: 2014-10-25 19:37
头都看晕了,执行copy命令,设一下参数就好,




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2