EDA365电子工程师网

标题: 【分享源代碼】更改选定VIA的NET属性/更改VIA的网络 [打印本页]

作者: XYX365    时间: 2016-1-16 10:36
标题: 【分享源代碼】更改选定VIA的NET属性/更改VIA的网络
本帖最后由 XYX365 于 2016-1-16 13:32 编辑

【分享源代碼】更改选定VIA的NET属性/更改VIA的网络

[attach]107451[/attach]
;Load:                load("fChangeViaNet.il")
;Command:        cvn
;使用方法:
;        1.執行cvn
;        2.選擇vias (兩種方式:直接滑鼠點選或是框選)
;        3.選擇新的net名稱 (兩種方式:直接滑鼠點選新的net物件,另外是在Option上勾選Enable,在瀏覽Net名稱)
;        以上步驟就可以改變Via的網路名稱
;
;        4.滑鼠右鍵功能選單:
;                Done => 結束程式,
;                Oops => 恢復上一次的動作,
;                Cancel => 取消程式.
;        5.Option功能選項:
;                "Enable" => 啟用網路名稱,
;                "Popup選單" => 要改變的網路名稱(如果是空白,會改為由滑鼠點選物件網路),
;                "..." => 瀏覽選擇網路名稱.
;
;程式的特色:
;        1.兩種選擇:直接點選其他物件的網路和選擇Option上的網路名稱,
;        2.滑鼠右鍵Oops恢復上一次功能,沒有任何事件可以恢復時,其選項就變成灰色不能再選.
;        3.源代碼分享,讓所有人都可以依照自己的方式加入其他功能,
;                例如加入快捷鍵.
;                或是在右鍵選單加其他功能.
;                或是自己再優化程式代碼,以加快程式執行速度.
;                或是將英文訊息改文中文訊息.
;                或是其他功能,自己想像.

[attach]107447[/attach]

[hide=d180]
  1. ;
  2. ;FileName:        fChangeViaNet.il
  3. ;Load:                load("fChangeViaNet.il")
  4. ;Command:        cvn
  5. ;使用方法:
  6. ;        1.執行cvn
  7. ;        2.選擇vias (兩種方式:直接滑鼠點選或是框選)
  8. ;        3.選擇新的net名稱 (兩種方式:直接滑鼠點選新的net物件,另外是在Option上勾選Enable,在瀏覽Net名稱)
  9. ;        以上步驟就可以改變Via的網路名稱
  10. ;
  11. ;        4.滑鼠右鍵功能選單:
  12. ;                Done => 結束程式,
  13. ;                Oops => 恢復上一次的動作,
  14. ;                Cancel => 取消程式.
  15. ;        5.Option功能選項:
  16. ;                "Enable" => 啟用網路名稱,
  17. ;                "Popup選單" => 要改變的網路名稱(如果是空白,會改為由滑鼠點選物件網路),
  18. ;                "..." => 瀏覽選擇網路名稱.
  19. ;
  20. ;程式的特色:
  21. ;        1.兩種選擇:直接點選其他物件的網路和選擇Option上的網路名稱,
  22. ;        2.滑鼠右鍵Oops恢復上一次功能,沒有任何事件可以恢復時,其選項就變成灰色不能再選.
  23. ;        3.源代碼分享,讓所有人都可以依照自己的方式加入其他功能,
  24. ;                例如加入快捷鍵.
  25. ;                或是在右鍵選單加其他功能.
  26. ;                或是自己再優化程式代碼,以加快程式執行速度.
  27. ;                或是將英文訊息改文中文訊息.
  28. ;                或是其他功能,自己想像.
  29. axlCmdRegister("cvn" 'fnChangeViaNet ?cmdType "interactive" ?doneCmd 'fnCVNPopupDone ?cancelCmd 'fnCVNPopupCancel)
  30. procedure(fnChangeViaNet() ;主程式
  31.         let((frmCVN)
  32.                 frmCVN = fnCVNBuildForm()
  33.                 fnCVNSetVariables(frmCVN)
  34.                 fnCVNSetFormField(frmCVN)
  35.                 fnCVNStart(frmCVN)
  36.         )
  37. )
  38. procedure(fnCVNBuildForm()
  39.         let((tFile pPort frmCVN)
  40.                 drain()
  41.                 tFile = axlTempFile()
  42.                 pPort = outfile(tFile)
  43.                 fprintf(pPort "FILE_TYPE=FORM_DEFN VERSION=2\nFORM\nFIXED\nPORT 1 1\n\n")
  44.                 fprintf(pPort "HEADER \"\"\n")
  45.                
  46.                 fprintf(pPort "POPUP <netname> \"\"\"\"\n")
  47.                                 
  48.                 fprintf(pPort "TILE\n\n")
  49.                
  50.                 fprintf(pPort "TEXT\n")
  51.                 fprintf(pPort "FLOC 1 0\n")
  52.                 fprintf(pPort "INFO ProgName 1\n")
  53.                 fprintf(pPort "FSIZE 25 2\n")
  54.                 fprintf(pPort "OPTIONS BOLD\n")
  55.                 fprintf(pPort "ENDTEXT\n")
  56.                                 
  57.                 fprintf(pPort "TEXT \"Assign net name:\"\n")
  58.                 fprintf(pPort "TLOC 1 3\n")
  59.                 fprintf(pPort "OPTIONS BOLD\n")
  60.                 fprintf(pPort "ENDTEXT\n")
  61.                
  62.                 fprintf(pPort "FIELD enable\n")
  63.                 fprintf(pPort "FLOC 2 5\n")
  64.                 fprintf(pPort "CHECKLIST \"Enable\"\n")
  65.                 fprintf(pPort "ENDFIELD\n")
  66.                
  67.                 fprintf(pPort "FIELD netname\n")
  68.                 fprintf(pPort "FLOC 2 7\n")
  69.                 fprintf(pPort "ENUMSET 18\n")
  70.                 fprintf(pPort "OPTIONS prettyprint\n")
  71.                 fprintf(pPort "POP \"netname\"\n")
  72.                 fprintf(pPort "ENDFIELD\n")
  73.         
  74.                 fprintf(pPort "FIELD browse\n")
  75.                 fprintf(pPort "FLOC 23 7\n")
  76.                 fprintf(pPort "MENUBUTTON \"...\" 3 3\n")
  77.                 fprintf(pPort "ENDFIELD\n")
  78.                
  79.                 fprintf(pPort "ENDTILE\n")
  80.                 fprintf(pPort "ENDFORM\n")
  81.                 close(pPort)
  82.                 axlControlRaise('options)
  83.                 frmCVN = axlMiniStatusLoad(gensym() tFile 'fnCVNCallback t)
  84.                 frmCVN
  85.         )
  86. )
  87. procedure(fnCVNCallback(frmCVN)
  88.         let((lNewName)
  89.                 case(frmCVN->curField
  90.                         ("browse"
  91.                                 lNewName = axlUIDataBrowse('NET '(RETRIEVE_OBJECT) "Please select net" t)
  92.                                 when(lNewName
  93.                                         frmCVN->lNetName = cons(car(lNewName) frmCVN->lNetName)
  94.                                         frmCVN->lNetName = sort(frmCVN->lNetName nil)
  95.                                         axlFormBuildPopup(frmCVN "netname" fnCVNSetPopupValue(frmCVN->lNetName))
  96.                                         axlFormSetField(frmCVN "netname" car(lNewName))
  97.                                 )
  98.                         )
  99.                 )
  100.         )
  101. )
  102. procedure(fnCVNChange(lSelObjs tNetName)
  103.         prog((tOldPadName lOldXY tOldNetName lNewVia tMessage)
  104.                 axlClearSelSet()
  105.                 foreach(dObj lSelObjs
  106.                         tOldPadName = dObj->name
  107.                         lOldXY = dObj->xy
  108.                         tOldNetName = dObj->net->name
  109.                         if(axlDBIsFixed(dObj) then
  110.                                 printf("E-Ignore Change FIXED VIA @ %L\n" dObj->xy)
  111.                                 return(nil)
  112.                         else
  113.                                 ;axlDBAssignNet
  114.                                 lNewVia = axlDBCreateVia(tOldPadName lOldXY tNetName)
  115.                         )
  116.                         if(tOldNetName then
  117.                                 tMessage = sprintf(nil "M-Change via net from %s to %s" tOldNetName tNetName)
  118.                         else
  119.                                 tMessage = sprintf(nil "M-Change via net from nil to %s" tNetName)
  120.                         )
  121.                         axlMsgPut(tMessage)
  122.                 )
  123.                 axlDeleteObject(lSelObjs) ;刪除舊的Via
  124.                 axlDBRefreshId(nil)
  125.                 axlClearSelSet()
  126.                 return(t)
  127.         )
  128. )
  129. procedure(fnCVNSetPopupValue(lList)
  130.         let((lNewList)
  131.                 foreach(dItem lList
  132.                         lNewList = append1(lNewList list(dItem dItem))
  133.                 )
  134.                 lNewList
  135.         )
  136. )
  137. procedure(fnCVNPopupCancel()
  138.         when(frmCVN->xTransMark
  139.                 axlDBTransactionRollback(frmCVN->xTransMark)
  140.         )
  141.         axlClearSelSet()
  142.         axlCancelEnterFun()
  143.         axlUICmdPopupSet(nil)
  144.         axlUIPopupSet(nil)
  145. )
  146. procedure(fnCVNPopupCallback(rEvent)
  147.         fnCVNPopupCheck(frmCVN)
  148. )
  149. ;=======================================
  150. procedure(fnCVNPopupCheck(frmCVN)
  151.         ;解決執行Oops後Popup變成灰色的
  152.         axlUICmdPopupSet(frmCVN->rPopupOrign)
  153.         if(frmCVN->xMarkCount >= 1 then
  154.                 axlUIPopupSet(frmCVN->rPopupOrign)
  155.         else
  156.                 axlUIPopupSet(frmCVN->rPopupGray)
  157.         )
  158. )
  159. procedure(fnCVNPopupDone()
  160.         when(frmCVN->xTransMark
  161.                 axlDBTransactionCommit(frmCVN->xTransMark)
  162.         )
  163.         axlClearSelSet()
  164.         axlFinishEnterFun()
  165.         axlUICmdPopupSet(nil)
  166.         axlUIPopupSet(nil)
  167. )
  168. procedure(fnCVNPopupInit()
  169.         ;定義Popup
  170.         frmCVN->rPopupOrign = axlUIPopupDefine(nil
  171.                 list(list("Done" 'fnCVNPopupDone)
  172.                         list("Oops" 'fnCVNPopupOops)
  173.                         list("Cancel" 'fnCVNPopupCancel)
  174.                 )
  175.         )
  176.         frmCVN->rPopupGray = axlUIPopupDefine(nil
  177.                 list(list("Done" 'fnCVNPopupDone)
  178.                         ;list("Oops" 'fnCVNPopupOops)        ;沒有任何選擇時會變成灰色
  179.                         list("Cancel" 'fnCVNPopupCancel)
  180.                 )
  181.         )
  182. )
  183. procedure(fnCVNPopupOops()
  184.         if(!axlDBTransactionOops(frmCVN->xTransMark) then
  185.                 frmCVN->xMarkCount = 0
  186.         else
  187.                 axlUIWPrint(nil "Oops")
  188.                 frmCVN->xMarkCount = sub1(frmCVN->xMarkCount)
  189.                 axlClearSelSet()
  190.         )
  191.         when(frmCVN->lSelVias
  192.                 frmCVN->lSelVias = nil
  193.                 lEventMask = list('PICK 'STARTDRAG 'STOPDRAG)
  194.                 axlSetFindFilter(?enabled list("noall" "vias") ?onButtons list("noall" "vias"))
  195.                 printf("M-Please select vias...\n")
  196.         )
  197.         fnCVNPopupCheck(frmCVN)
  198. )
  199. procedure(fnCVNPopupUndoTimes(rFormID @optional (xCount 1))
  200.         for(xIndex 0 xCount-1
  201.                 if(!axlDBTransactionOops(rFormID->xTransMark) then
  202.                         rFormID->xMarkCount = 0
  203.                 else
  204.                         rFormID->xMarkCount = sub1(rFormID->xMarkCount)
  205.                 )
  206.         )
  207. )
  208. procedure(fnCVNSetFormField(frmCVN)
  209.         axlFormColorize(frmCVN "ProgName" 'text 'red)
  210.         axlFormSetField(frmCVN "ProgName" frmCVN->tProgName)
  211. )
  212. procedure(fnCVNSetVariables(frmCVN)
  213.         frmCVN->tProgName = "   Change Via Net V1.00"
  214.         
  215.         frmCVN->lSelVias = nil        ;存放所選擇的Vias物件
  216.         frmCVN->lNetName = nil        ;Option上的Popup的net名稱選項
  217.         
  218.         ;設定滑鼠右鍵選單相關變數
  219.         frmCVN->xTransMark = nil
  220.         frmCVN->xMarkCount = 0
  221.         frmCVN->rPopupOrign = nil
  222.         frmCVN->rPopupGray = nil
  223. )
  224. procedure(fnCVNStart(frmCVN)
  225.         let(((bDoFlag t) lEventMask rEventID tNetName lTempXY)
  226.                 fnCVNPopupInit()
  227.                 axlEventSetStartPopup('fnCVNPopupCallback)
  228.                 frmCVN->xTransMark = axlDBTransactionStart()
  229.             axlClearSelSet()
  230.                 while(bDoFlag
  231.                         if(frmCVN->lSelVias then
  232.                                 lEventMask = list('PICK)
  233.                                 axlSetFindFilter(?enabled '("noall" "Vias" "Shapes" "Pins" "Clines") ?onButtons '("Vias" "Shapes" "Pins" "Clines"))
  234.                                 printf("M-Please pick via, shape, pin or cline to get a net!")
  235.                         else
  236.                                 lEventMask = list('PICK 'STARTDRAG 'STOPDRAG)
  237.                                 axlSetFindFilter(?enabled list("noall" "vias") ?onButtons list("noall" "vias"))
  238.                                 printf("M-Please select vias...\n")
  239.                         )
  240.                         rEventID = axlEnterEvent(lEventMask nil nil)
  241.                         caseq(rEventID->type
  242.                                 (PICK ;滑鼠按下左鍵一次
  243.                                         axlDBTransactionMark(frmCVN->xTransMark)
  244.                                         frmCVN->xMarkCount = add1(frmCVN->xMarkCount)
  245.                                         if(frmCVN->lSelVias then
  246.                                                 axlClearSelSet()
  247.                                                 if(axlAddSelectPoint(rEventID->xy) then
  248.                                                         tNetName = car(axlGetSelSet())->net->name
  249.                                                         fnCVNPopupUndoTimes(frmCVN) ;恢復一次
  250.                                                         when(fnCVNChange(frmCVN->lSelVias tNetName)
  251.                                                                 frmCVN->lSelVias = nil
  252.                                                         )
  253.                                                 else
  254.                                                         ;恢復一次,因為沒有選到認一物件
  255.                                                         fnCVNPopupUndoTimes(frmCVN)
  256.                                                         axlHighlightObject(frmCVN->lSelVias)
  257.                                                 )
  258.                                         else
  259.                                                 axlAddSelectPoint(rEventID->xy)
  260.                                                 frmCVN->lSelVias = axlGetSelSet()
  261.                                                 unless(frmCVN->lSelVias
  262.                                                         ;恢復一次,因為沒有選到認一物件
  263.                                                         fnCVNPopupUndoTimes(frmCVN)
  264.                                                 )
  265.                                                 when(axlFormGetField(frmCVN "enable") == "1" ;直接取option上的netname
  266.                                                         tNetName = axlFormGetField(frmCVN "netname")
  267.                                                         unless(tNetName == ""
  268.                                                                 when(fnCVNChange(frmCVN->lSelVias tNetName)
  269.                                                                         frmCVN->lSelVias = nil
  270.                                                                 )
  271.                                                         )
  272.                                                 )
  273.                                                 
  274.                                         )
  275.                                 )
  276.                                 (STARTDRAG ;使用滑鼠拉一個矩形框開始位置
  277.                                         lTempXY = rEventID->xy
  278.                                         axlAddSimpleRbandDynamics(lTempXY "box" ?origin lTempXY ?var_point (0:0))
  279.                                 )
  280.                                 (STOPDRAG ;使用滑鼠拉一個矩形框結束位置
  281.                                         axlClearDynamics()
  282.                                         axlDBTransactionMark(frmCVN->xTransMark)
  283.                                         frmCVN->xMarkCount = add1(frmCVN->xMarkCount)
  284.                                         axlAddSelectBox(list(lTempXY rEventID->xy))
  285.                                         frmCVN->lSelVias = axlGetSelSet()
  286.                                         unless(frmCVN->lSelVias
  287.                                                 ;恢復一次,因為沒有選到認一物件
  288.                                                 fnCVNPopupUndoTimes(frmCVN)
  289.                                         )
  290.                                         when(axlFormGetField(frmCVN "enable") == "1" ;直接取option上的netname
  291.                                                 tNetName = axlFormGetField(frmCVN "netname")
  292.                                                 unless(tNetName == ""
  293.                                                         when(fnCVNChange(frmCVN->lSelVias tNetName)
  294.                                                                 frmCVN->lSelVias = nil
  295.                                                         )
  296.                                                 )
  297.                                         )
  298.                                 )
  299.                                 (DONE ;滑鼠按下右鍵,選擇done
  300.                                         bDoFlag = nil
  301.                                 )
  302.                                 (CANCEL ;滑鼠按下右鍵,選擇cancel
  303.                                         bDoFlag = nil
  304.                                 )
  305.                         )
  306.                         fnCVNPopupCheck(frmCVN)
  307.                 )
  308.                 axlEventSetStartPopup()
  309.         )
  310. )
复制代码

[/hide]



作者: bingshuihuo    时间: 2016-1-18 12:28
不错?!!!!!!!!
作者: mistletoe    时间: 2016-1-19 09:42
非常不错  感谢分享
作者: 遵诺    时间: 2016-1-20 10:28
感谢分享~
作者: nanosoc    时间: 2016-1-20 10:31
谢谢楼主!
作者: XYX365    时间: 2016-1-20 10:34
nanosoc 发表于 2016-1-20 10:31
谢谢楼主!

不客氣,喜歡就回覆,就可以看到源碼,不用下載附件

作者: JIMDENG    时间: 2016-1-20 11:51
本帖最后由 JIMDENG 于 2016-1-20 14:29 编辑

大师的作品必属精品,学习来了!
作者: jcheapon    时间: 2016-1-20 12:32
好好研究一下

作者: T45524093    时间: 2016-1-22 08:42
大师的作品必属精品
作者: XYX365    时间: 2016-1-22 08:45
T45524093 发表于 2016-1-22 08:42
大师的作品必属精品

好久沒出現在討論區裡面.

作者: penny190    时间: 2016-1-22 14:26
謝謝大大的分享喔

作者: shimmy_su    时间: 2016-1-26 09:41
非常不错  感谢分享
作者: li262925    时间: 2016-1-28 10:09
谢谢楼主!
作者: nnew    时间: 2016-2-1 14:08
謝謝分享!!
作者: 卫冬冬    时间: 2016-2-9 15:25
学习学习学习学习 了解了解了解


作者: brady.lu    时间: 2016-2-15 17:17
你用的什么工具写的skill
作者: XYX365    时间: 2016-2-16 07:02
brady.lu 发表于 2016-2-15 17:17
你用的什么工具写的skill

Uedit32.exe編輯程式寫的skill

作者: 282209507    时间: 2016-2-26 08:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: chptbob    时间: 2016-2-26 10:15
謝謝分享!!
作者: angelly    时间: 2016-3-9 18:57
大师的作品必属精品,学习来了!
作者: langexie    时间: 2016-3-11 21:37
学习了,学到了不一样的风格,很不错!大师级。
作者: icebluexiong    时间: 2016-3-16 11:13
精华贴呀
作者: jyl518    时间: 2016-3-18 13:53
谢谢分享
作者: snow6333    时间: 2016-4-12 14:26
越來越多原始碼可以好好學習了,感謝
作者: dengbaba    时间: 2016-5-4 14:45
大师的作品必属精品
作者: jacksoon    时间: 2016-5-5 13:17
谢谢分享,但使用的时候直接卡死
作者: hy20060614    时间: 2016-7-18 11:52
谢谢分享
作者: xode    时间: 2016-8-9 11:16
很好的工具
作者: WZS_PCB    时间: 2016-11-2 20:51
喜欢喜欢相当喜欢,就喜欢楼主这样直接贴源码的!
作者: bruce777    时间: 2017-5-23 14:29
收下学习了,谢谢楼主
作者: marschiu2000    时间: 2017-6-1 14:06
非常不错  感谢分享

作者: Freese    时间: 2017-10-3 14:43
感謝樓主分享~~
作者: fruitpig345    时间: 2017-10-5 11:09

謝謝大大的分享喔
作者: Pang8343569    时间: 2017-10-9 17:36
感謝分享
作者: angelly    时间: 2017-10-10 11:42
谢谢楼主!
作者: angelly    时间: 2017-10-10 11:42
谢谢楼主!
作者: angelly    时间: 2017-10-10 11:42
谢谢楼主!
作者: weiprop    时间: 2017-10-13 23:07
感謝分享
作者: 坚持就是胜利    时间: 2017-10-16 16:49
最近在在找这个,学习一下
作者: weiprop    时间: 2017-10-17 00:26
感謝分享
作者: angelly    时间: 2017-10-17 06:34
很强大
作者: angelly    时间: 2017-10-17 06:34
很强大
作者: angelly    时间: 2017-10-17 06:34
很强大
作者: 坚持就是胜利    时间: 2017-11-27 16:37
研究一下
作者: T45524093    时间: 2018-1-21 00:06
XYX365 发表于 2016-1-22 08:45
好久沒出現在討論區裡面.

混不下去了,转行了。不过还是一直关注论坛的

作者: maikeo    时间: 2018-1-22 21:22
谢谢!
作者: greg2015    时间: 2018-1-23 11:50
感谢分享!
作者: slyg    时间: 2018-6-5 12:59
这个skill好的,尤其是via属性容易飞的场合,可以很方便的改回来。
作者: lorby    时间: 2018-7-14 19:55
很好的源码。




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