找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1944|回复: 48
打印 上一主题 下一主题

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

[复制链接]

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
跳转到指定楼层
1#
发表于 2016-1-16 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 XYX365 于 2016-1-16 13:32 编辑

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


;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.源代碼分享,讓所有人都可以依照自己的方式加入其他功能,
;                例如加入快捷鍵.
;                或是在右鍵選單加其他功能.
;                或是自己再優化程式代碼,以加快程式執行速度.
;                或是將英文訊息改文中文訊息.
;                或是其他功能,自己想像.



  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. )
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1威望 +10 收起 理由
deargds + 10 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏10 支持!支持! 反对!反对!

93

主题

582

帖子

3097

积分

五级会员(50)

Rank: 5

积分
3097
推荐
发表于 2018-1-21 00:06 | 只看该作者
XYX365 发表于 2016-1-22 08:45
好久沒出現在討論區裡面.

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

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
推荐
 楼主| 发表于 2016-2-16 07:02 | 只看该作者
brady.lu 发表于 2016-2-15 17:17
你用的什么工具写的skill

Uedit32.exe編輯程式寫的skill

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
推荐
 楼主| 发表于 2016-1-20 10:34 | 只看该作者

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

29

主题

2646

帖子

2805

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2805
2#
发表于 2016-1-18 12:28 来自手机 | 只看该作者
不错?!!!!!!!!

1

主题

17

帖子

313

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
313
3#
发表于 2016-1-19 09:42 | 只看该作者
非常不错  感谢分享

0

主题

29

帖子

296

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
296
4#
发表于 2016-1-20 10:28 | 只看该作者
感谢分享~

10

主题

126

帖子

1636

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1636
5#
发表于 2016-1-20 10:31 | 只看该作者
谢谢楼主!

点评

不客氣,喜歡就回覆,就可以看到源碼,不用下載附件  详情 回复 发表于 2016-1-20 10:34

57

主题

1181

帖子

1807

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1807
7#
发表于 2016-1-20 11:51 | 只看该作者
本帖最后由 JIMDENG 于 2016-1-20 14:29 编辑

大师的作品必属精品,学习来了!

0

主题

6

帖子

123

积分

二级会员(20)

Rank: 2Rank: 2

积分
123
8#
发表于 2016-1-20 12:32 | 只看该作者
好好研究一下

93

主题

582

帖子

3097

积分

五级会员(50)

Rank: 5

积分
3097
9#
发表于 2016-1-22 08:42 | 只看该作者
大师的作品必属精品

点评

好久沒出現在討論區裡面.  详情 回复 发表于 2016-1-22 08:45

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
10#
 楼主| 发表于 2016-1-22 08:45 | 只看该作者
T45524093 发表于 2016-1-22 08:42
大师的作品必属精品

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

点评

混不下去了,转行了。不过还是一直关注论坛的  详情 回复 发表于 2018-1-21 00:06

116

主题

960

帖子

5983

积分

五级会员(50)

Rank: 5

积分
5983
11#
发表于 2016-1-22 14:26 | 只看该作者
謝謝大大的分享喔

0

主题

13

帖子

194

积分

二级会员(20)

Rank: 2Rank: 2

积分
194
12#
发表于 2016-1-26 09:41 | 只看该作者
非常不错  感谢分享

33

主题

879

帖子

1348

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1348
13#
发表于 2016-1-28 10:09 | 只看该作者
谢谢楼主!

31

主题

529

帖子

2039

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2039
14#
发表于 2016-2-1 14:08 | 只看该作者
謝謝分享!!

65

主题

297

帖子

904

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
904
15#
发表于 2016-2-9 15:25 | 只看该作者
学习学习学习学习 了解了解了解

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-24 19:43 , Processed in 0.084024 second(s), 43 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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