找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

【分享源代碼】批量重命名PIN NUMBER/Rename Pin Number

  [复制链接]

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

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

【分享源代碼】批量重命名PIN NUMBER/Rename Pin Number



;
;FileName:        fRPN.il
;Load:                load("fRPN.il")
;Command:        rpn
;使用方法:
;        1.執行rpn
;        2.選擇pins (兩種方式:直接滑鼠點選或是框選)
;        以上步驟就可以改變pin的名稱
;
;        3.滑鼠右鍵功能選單:
;                Done => 結束程式,
;                Oops => 恢復上一次的動作,
;                Cancel => 取消程式.
;        4.Option功能選項:
;                "Pin Number"         => Pin名稱數值, 如1, 2, 3.... 或 A1, A2, A3....
;                "Step"                         => 遞增數值
;                "Text Blk"                 => 文字的編號
;                "Left To Right"        => 方向由左到右
;                "Right To Left"        => 方向由右到左
;                "Up To Down"        => 方向由上到下
;                "Down To Up"        => 方向由下到上
;
;程式的特色:
;        1.只能在Package模式下執行
;        2.兩種選擇:直接點選或框選,
;        3.滑鼠右鍵Oops恢復上一次功能,沒有任何事件可以恢復時,其選項就變成灰色不能再選.
;        4.源代碼分享,讓所有人都可以依照自己的方式加入其他功能,
;                例如加入快捷鍵.
;                或是在右鍵選單加其他功能.
;                或是自己再優化程式代碼,以加快程式執行速度.
;                或是將英文訊息改文中文訊息.
;                或是其他功能,自己想像.





  1. ;
  2. ;FileName:        fRPN.il
  3. ;Load:                load("fRPN.il")
  4. ;Command:        rpn
  5. ;使用方法:
  6. ;        1.執行rpn
  7. ;        2.選擇pins (兩種方式:直接滑鼠點選或是框選)
  8. ;        以上步驟就可以改變pin的名稱
  9. ;
  10. ;        3.滑鼠右鍵功能選單:
  11. ;                Done => 結束程式,
  12. ;                Oops => 恢復上一次的動作,
  13. ;                Cancel => 取消程式.
  14. ;        4.Option功能選項:
  15. ;                "Pin Number"         => Pin名稱數值, 如1, 2, 3.... 或 A1, A2, A3....
  16. ;                "Step"                         => 遞增數值
  17. ;                "Text Blk"                 => 文字的編號
  18. ;                "Left To Right"        => 方向由左到右
  19. ;                "Right To Left"        => 方向由右到左
  20. ;                "Up To Down"        => 方向由上到下
  21. ;                "Down To Up"        => 方向由下到上
  22. ;
  23. ;程式的特色:
  24. ;        1.只能在Package模式下執行
  25. ;        2.兩種選擇:直接點選或框選,
  26. ;        3.滑鼠右鍵Oops恢復上一次功能,沒有任何事件可以恢復時,其選項就變成灰色不能再選.
  27. ;        4.源代碼分享,讓所有人都可以依照自己的方式加入其他功能,
  28. ;                例如加入快捷鍵.
  29. ;                或是在右鍵選單加其他功能.
  30. ;                或是自己再優化程式代碼,以加快程式執行速度.
  31. ;                或是將英文訊息改文中文訊息.
  32. ;                或是其他功能,自己想像.
  33. axlCmdRegister("rpn" 'fnRenamePinNumber ?cmdType "interactive" ?doneCmd 'fnRPNPopupDone ?cancelCmd 'fnRPNPopupCancel)
  34. procedure(fnRenamePinNumber() ;主程式
  35.         prog((frmRPN)
  36.                 unless((axlDesignType(t) == "PACKAGE")
  37.                         printf("E-This tool only be used in Symbol!")
  38.                         return(nil)
  39.             )
  40.                
  41.                 frmRPN = fnRPNBuildForm()
  42.                 fnRPNSetVariables(frmRPN)
  43.                 fnRPNSetFormField(frmRPN)
  44.                 fnRPNStart(frmRPN)
  45.         )
  46. )
  47. procedure(fnRPNBuildForm()
  48.         let((tFile pPort frmRPN)
  49.                 drain()
  50.                 tFile = axlTempFile()
  51.                 pPort = outfile(tFile)
  52.                 fprintf(pPort "FILE_TYPE=FORM_DEFN VERSION=2\nFORM\nFIXED\nPORT 1 1\n\n")
  53.                 fprintf(pPort "HEADER \"\"\n")
  54.                 fprintf(pPort "TILE\n\n")
  55.                
  56.                 fprintf(pPort "TEXT\n")
  57.                 fprintf(pPort "FLOC 1 0\n")
  58.                 fprintf(pPort "INFO ProgName 1\n")
  59.                 fprintf(pPort "FSIZE 25 2\n")
  60.                 fprintf(pPort "OPTIONS BOLD\n")
  61.                 fprintf(pPort "ENDTEXT\n")
  62.                
  63.                 fprintf(pPort "GROUP \"Option\"\n")
  64.                 fprintf(pPort "GLOC 1 2\n")
  65.                 fprintf(pPort "GSIZE 25 9\n")
  66.                 fprintf(pPort "ENDGROUP\n")
  67.                                 
  68.                 fprintf(pPort "TEXT \"Pin Number\"\n")
  69.                 fprintf(pPort "TLOC 2 4\n")
  70.                 fprintf(pPort "OPTIONS BOLD\n")
  71.                 fprintf(pPort "ENDTEXT\n")
  72.                
  73.                 fprintf(pPort "FIELD pinNumber\n")
  74.                 fprintf(pPort "FLOC 13 4\n")
  75.                 fprintf(pPort "STRFILLIN 8 12\n")
  76.                 fprintf(pPort "ENDFIELD\n\n")
  77.                
  78.                 fprintf(pPort "TEXT \"Step\"\n")
  79.                 fprintf(pPort "TLOC 2 6\n")
  80.                 fprintf(pPort "OPTIONS BOLD\n")
  81.                 fprintf(pPort "ENDTEXT\n")
  82.                
  83.                 fprintf(pPort "FIELD step\n")
  84.                 fprintf(pPort "FLOC 13 6\n")
  85.                 fprintf(pPort "STRFILLIN 8 12\n")
  86.                 fprintf(pPort "ENDFIELD\n\n")
  87.                
  88.                 fprintf(pPort "TEXT \"Text Blk\"\n")
  89.                 fprintf(pPort "TLOC 2 8\n")
  90.                 fprintf(pPort "OPTIONS BOLD\n")
  91.                 fprintf(pPort "ENDTEXT\n")
  92.                
  93.                 fprintf(pPort "FIELD textBlock\n")
  94.                 fprintf(pPort "FLOC 13 8\n")
  95.                 fprintf(pPort "INTSLIDEBAR 2 25\n")
  96.                 fprintf(pPort "MIN 1\n")
  97.                 fprintf(pPort "MAX %d\n" axlDBControl('maxTextBlock))
  98.                 fprintf(pPort "ENDFIELD\n")
  99.                
  100.                 fprintf(pPort "GROUP \"Direction\"\n")
  101.                 fprintf(pPort "GLOC 1 11\n")
  102.                 fprintf(pPort "GSIZE 25 16\n")
  103.                 fprintf(pPort "ENDGROUP\n")
  104.                
  105.                 fprintf(pPort "TEXT \"Horizontal\"\n")
  106.                 fprintf(pPort "TLOC 2 13\n")
  107.                 fprintf(pPort "OPTIONS BOLD\n")
  108.                 fprintf(pPort "ENDTEXT\n")
  109.                
  110.                 fprintf(pPort "FIELD leftToRight\n")
  111.                 fprintf(pPort "FLOC 4 15\n")
  112.                 fprintf(pPort "CHECKLIST \"Left To Right\" \"Dir\"\n")
  113.                 fprintf(pPort "ENDFIELD\n")
  114.                
  115.                 fprintf(pPort "FIELD rightToLeft\n")
  116.                 fprintf(pPort "FLOC 4 17\n")
  117.                 fprintf(pPort "CHECKLIST \"Right To Left\" \"Dir\"\n")
  118.                 fprintf(pPort "ENDFIELD\n")
  119.                
  120.                 fprintf(pPort "TEXT \"Vertical\"\n")
  121.                 fprintf(pPort "TLOC 2 19\n")
  122.                 fprintf(pPort "OPTIONS BOLD\n")
  123.                 fprintf(pPort "ENDTEXT\n")
  124.                
  125.                 fprintf(pPort "FIELD upToDown\n")
  126.                 fprintf(pPort "FLOC 4 21\n")
  127.                 fprintf(pPort "CHECKLIST \"Up To Down\" \"Dir\"\n")
  128.                 fprintf(pPort "ENDFIELD\n")
  129.                
  130.                 fprintf(pPort "FIELD downToUp\n")
  131.                 fprintf(pPort "FLOC 4 23\n")
  132.                 fprintf(pPort "CHECKLIST \"Down To Up\" \"Dir\"\n")
  133.                 fprintf(pPort "ENDFIELD\n")
  134.                
  135.                 fprintf(pPort "ENDTILE\n")
  136.                 fprintf(pPort "ENDFORM\n")
  137.                 close(pPort)
  138.                 axlControlRaise('options)
  139.                 frmRPN = axlMiniStatusLoad(gensym() tFile 'fnRPNCallback t)
  140.                 frmRPN
  141.         )
  142. )
  143. procedure(fnRPNCallback(frmRPN)
  144.         let(()
  145.                 case(frmRPN->curField
  146.                         ("leftToRight"
  147.                                 when(frmRPN->curValue == "1"
  148.                                         frmRPN->sDir = 'hl
  149.                                 )
  150.                         )
  151.                         ("rightToLeft"
  152.                                 when(frmRPN->curValue == "1"
  153.                                         frmRPN->sDir = 'hr
  154.                                 )
  155.                         )
  156.                         ("downToUp"
  157.                                 when(frmRPN->curValue == "1"
  158.                                         frmRPN->sDir = 'vd
  159.                                 )
  160.                         )
  161.                         ("upToDown"
  162.                                 when(frmRPN->curValue == "1"
  163.                                         frmRPN->sDir = 'vu
  164.                                 )
  165.                         )
  166.                 )
  167.         )
  168. )
  169. procedure(fnRPNPopupCancel()
  170.         when(frmRPN->xTransMark
  171.                 axlDBTransactionRollback(frmRPN->xTransMark)
  172.         )
  173.         axlClearSelSet()
  174.         axlCancelEnterFun()
  175.         axlUICmdPopupSet(nil)
  176.         axlUIPopupSet(nil)
  177. )
  178. procedure(fnRPNPopupCallback(rEvent)
  179.         fnRPNPopupCheck(frmRPN)
  180. )
  181. ;=======================================
  182. procedure(fnRPNPopupCheck(frmRPN)
  183.         ;解決執行Oops後Popup變成灰色的
  184.         axlUICmdPopupSet(frmRPN->rPopupOrign)
  185.         if(frmRPN->xMarkCount >= 1 then
  186.                 axlUIPopupSet(frmRPN->rPopupOrign)
  187.         else
  188.                 axlUIPopupSet(frmRPN->rPopupGray)
  189.         )
  190. )
  191. procedure(fnRPNPopupDone()
  192.         when(frmRPN->xTransMark
  193.                 axlDBTransactionCommit(frmRPN->xTransMark)
  194.         )
  195.         axlClearSelSet()
  196.         axlFinishEnterFun()
  197.         axlUICmdPopupSet(nil)
  198.         axlUIPopupSet(nil)
  199. )
  200. procedure(fnRPNPopupInit()
  201.         ;定義Popup
  202.         frmRPN->rPopupOrign = axlUIPopupDefine(nil
  203.                 list(list("Done" 'fnRPNPopupDone)
  204.                         list("Oops" 'fnRPNPopupOops)
  205.                         list("Cancel" 'fnRPNPopupCancel)
  206.                 )
  207.         )
  208.         frmRPN->rPopupGray = axlUIPopupDefine(nil
  209.                 list(list("Done" 'fnRPNPopupDone)
  210.                         ;list("Oops" 'fnRPNPopupOops)        ;沒有任何選擇時會變成灰色
  211.                         list("Cancel" 'fnRPNPopupCancel)
  212.                 )
  213.         )
  214. )
  215. procedure(fnRPNPopupOops()
  216.         fnRPNPopupUndoTimes(frmRPN)
  217.         fnRPNPopupCheck(frmRPN)
  218. )
  219. procedure(fnRPNPopupUndoTimes(rFormID @optional (xCount 1))
  220.         for(xIndex 0 xCount-1
  221.                 if(!axlDBTransactionOops(rFormID->xTransMark) then
  222.                         rFormID->xMarkCount = 0
  223.                 else
  224.                         rFormID->xMarkCount = sub1(rFormID->xMarkCount)
  225.                 )
  226.         )
  227. )
  228. procedure(fnRPNSplitCharInt(tName)
  229.         prog((tStr xInt xInt)
  230.             if(stringp(tName) then
  231.                     rexCompile("[0-9]+$")
  232.                         tStr = rexReplace(tName "" 0)
  233.                         rexCompile("^[A-Za-z]+")
  234.                         tInt = rexReplace(tName "" 0)
  235.                         when(tInt
  236.                             xInt = atoi(tInt)
  237.                         )
  238.                         return(list(tStr xInt))
  239.                 else
  240.                         return(nil)
  241.             )
  242.         )
  243. )
  244. procedure(fnRPNProcess(frmRPN lSelects)
  245.         prog((tPinNumber tStep xStep tTextBlk lPinX lPinX lPNSplit tPNChar xPNNumber xNumber tNextPN lPNText
  246.                 tLastPN rPinText)
  247.                 ;取Option 上的設定值
  248.                 tPinNumber = axlFormGetField(frmRPN "pinNumber")
  249.                 tStep = axlFormGetField(frmRPN "step")
  250.                 xStep = atoi(tStep)
  251.                 tTextBlk = axlFormGetField(frmRPN "textBlock")
  252.                
  253.                 lPinX = mapcar(lambda((dObj) list(xCoord(dObj->xy) dObj)) lSelects)
  254.                 lPinY = mapcar(lambda((dObj) list(yCoord(dObj->xy) dObj)) lSelects)
  255.                 lPinX = sortcar(lPinX 'lessp)
  256.                 lPinY = sortcar(lPinY 'lessp)
  257.                 ;處裡Pin Number的英文字母和數字
  258.                 lPNSplit = fnRPNSplitCharInt(tPinNumber)
  259.                 unless(lPNSplit && fixp(cadr(lPNSplit))
  260.                         return(nil)
  261.                 )
  262.                 tPNChar = car(lPNSplit)
  263.                 xPNNumber = cadr(lPNSplit)
  264.                 xNumber = xPNNumber
  265.                 for(xCount xPNNumber ((xPNNumber + length(lSelects)) - 1)
  266.                         tNextPN = strcat(tPNChar sprintf(nil "%d" xNumber))
  267.                         lPNText = cons(tNextPN lPNText)
  268.                         xNumber = xNumber + xStep
  269.                         tLastPN = strcat(tPNChar sprintf(nil "%d" xNumber))
  270.                 )
  271.                 lPNText = reverse(lPNText)
  272.                 axlFormSetField(frmRPN "pinNumber" tLastPN)
  273.                 rPinText = make_axlTextOrientation(?textBlock tTextBlk ?rotation 0.0 ?mirrored nil ?justify "center")
  274.                 caseq(frmRPN->sDir
  275.                         (hl || hr
  276.                                 when(frmRPN->sDir == 'hr
  277.                                         lPNText = reverse(lPNText)
  278.                                 )
  279.                                 fnRPNRenameText(lPinX lPNText rPinText)
  280.                         )
  281.                         (vu || vd
  282.                                 when(frmRPN->sDir == 'vu
  283.                                         lPNText = reverse(lPNText)
  284.                                 )
  285.                                 fnRPNRenameText(lPinY lPNText rPinText)
  286.                         )
  287.                 )
  288.         )
  289. )
  290. procedure(fnRPNRenameText(lList lPNText rPinText)
  291.         let((lItem dPin lPinXY tPinName nPinRot tPinNum rPin)
  292.                 for(xIndex 0 (length(lList) - 1)
  293.                         lItem = nth(xIndex lList)
  294.                         when(lItem
  295.                                 dPin = cadr(lItem)
  296.                                 lPinXY = dPin->xy
  297.                                 tPinName = dPin->name
  298.                                 nPinRot = dPin->rotation
  299.                                 tPinNum = nth(xIndex lPNText)
  300.                                 unless(tPinNum == ""
  301.                                         rPin = make_axlPinText(?number tPinNum ?offset (0:0) ?text rPinText)
  302.                                         when(axlDBCreatePin(tPinName lPinXY rPin nPinRot)
  303.                                                 axlDeleteObject(dPin)
  304.                                           )
  305.                                 )
  306.                         )
  307.                 )
  308.         )
  309. )
  310. procedure(fnRPNSetFormField(frmRPN)
  311.         axlFormColorize(frmRPN "ProgName" 'text 'red)
  312.         axlFormSetField(frmRPN "ProgName" frmRPN->tProgName)
  313.         
  314.         axlFormColorize(frmRPN "pinNumber" 'background 'yellow)
  315.         axlFormSetField(frmRPN "pinNumber" "1")
  316.         axlFormSetField(frmRPN "step" 1)
  317.         axlFormSetField(frmRPN "textBlock" 1)
  318.         axlFormSetField(frmRPN "leftToRight" t)
  319. )
  320. procedure(fnRPNSetVariables(frmRPN)
  321.         frmRPN->tProgName = " Rename Pin Number V1.00"
  322.         
  323.         frmRPN->sDir = 'hl                ;設定方向為Left to Right
  324.                
  325.         ;設定滑鼠右鍵選單相關變數
  326.         frmRPN->xTransMark = nil
  327.         frmRPN->xMarkCount = 0
  328.         frmRPN->rPopupOrign = nil
  329.         frmRPN->rPopupGray = nil
  330. )
  331. procedure(fnRPNStart(frmRPN)
  332.         let((lVis (bDoFlag t) lEventMask rEventID lTempXY)
  333.                 lVis = axlVisibleGet()
  334.                 axlVisibleDesign(nil)
  335.                 axlVisibleLayer("PACKAGE GEOMETRY/PIN_NUMBER" t)
  336.                 axlVisibleLayer("PIN/TOP" t)
  337.                 axlVisibleLayer("PIN/BOTTOM" t)
  338.                 axlSetActiveLayer("PACKAGE GEOMETRY/PIN_NUMBER")
  339.                 axlVisibleUpdate(nil)
  340.                 fnRPNPopupInit()
  341.                 axlEventSetStartPopup('fnRPNPopupCallback)
  342.                 frmRPN->xTransMark = axlDBTransactionStart()
  343.             lEventMask = list('PICK 'STARTDRAG 'STOPDRAG)
  344.             axlClearSelSet()
  345.                 axlSetFindFilter(?enabled list("NOALL" "PINS") ?onButtons list("NOALL" "PINS"))
  346.                
  347.                 while(bDoFlag
  348.                         printf("M-Please select pins\n")
  349.                         rEventID = axlEnterEvent(lEventMask nil nil)
  350.                         caseq(rEventID->type
  351.                                 (PICK ;滑鼠按下左鍵一次
  352.                                         axlDBTransactionMark(frmRPN->xTransMark)
  353.                                         frmRPN->xMarkCount = add1(frmRPN->xMarkCount)
  354.                                         if(axlAddSelectPoint(rEventID->xy) then
  355.                                                 fnRPNProcess(frmRPN axlGetSelSet())
  356.                                         else
  357.                                                 ;恢復一次,因為沒有選到任一物件
  358.                                                 fnRPNPopupUndoTimes(frmRPN)
  359.                                         )
  360.                                 )
  361.                                 (STARTDRAG ;使用滑鼠拉一個矩形框開始位置
  362.                                         lTempXY = rEventID->xy
  363.                                         axlAddSimpleRbandDynamics(lTempXY "box" ?origin lTempXY ?var_point (0:0))
  364.                                 )
  365.                                 (STOPDRAG ;使用滑鼠拉一個矩形框結束位置
  366.                                         axlDBTransactionMark(frmRPN->xTransMark)
  367.                                         frmRPN->xMarkCount = add1(frmRPN->xMarkCount)
  368.                                         axlClearDynamics()
  369.                                         if(axlAddSelectBox(list(lTempXY rEventID->xy)) then
  370.                                                 fnRPNProcess(frmRPN axlGetSelSet())
  371.                                         else
  372.                                                 ;恢復一次,因為沒有選到任一物件
  373.                                                 fnRPNPopupUndoTimes(frmRPN)
  374.                                         )
  375.                                 )
  376.                                 (DONE ;滑鼠按下右鍵,選擇done
  377.                                         bDoFlag = nil
  378.                                 )
  379.                                 (CANCEL ;滑鼠按下右鍵,選擇cancel
  380.                                         bDoFlag = nil
  381.                                 )
  382.                         )
  383.                         fnRPNPopupCheck(frmRPN)
  384.                 )
  385.                 axlEventSetStartPopup()
  386.                 axlVisibleSet(lVis)
  387.         )
  388. )
复制代码

本帖子中包含更多资源

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

x

点评

支持!: 5.0
支持!: 5
  发表于 2016-12-28 13:33

评分

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

查看全部评分

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

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
推荐
 楼主| 发表于 2016-1-20 13:51 | 只看该作者
本帖最后由 XYX365 于 2016-1-20 13:53 编辑
redeveryday 发表于 2016-1-20 13:18
是的,另外我问一下,后面忽略部分如果改成下划线应该不受影响吧。

你只要修改下面兩個函數就可以,
請自行複製並覆蓋原來的程式碼



  1. procedure(fnRPNBuildForm()
  2.         let((tFile pPort frmRPN)
  3.                 drain()
  4.                 tFile = axlTempFile()
  5.                 pPort = outfile(tFile)
  6.                 fprintf(pPort "FILE_TYPE=FORM_DEFN VERSION=2\nFORM\nFIXED\nPORT 1 1\n\n")
  7.                 fprintf(pPort "HEADER \"\"\n")
  8.                 fprintf(pPort "TILE\n\n")
  9.                
  10.                 fprintf(pPort "TEXT\n")
  11.                 fprintf(pPort "FLOC 1 0\n")
  12.                 fprintf(pPort "INFO ProgName 1\n")
  13.                 fprintf(pPort "FSIZE 25 2\n")
  14.                 fprintf(pPort "OPTIONS BOLD\n")
  15.                 fprintf(pPort "ENDTEXT\n")
  16.                
  17.                 fprintf(pPort "GROUP \"Option\"\n")
  18.                 fprintf(pPort "GLOC 1 2\n")
  19.                 fprintf(pPort "GSIZE 25 11\n")
  20.                 fprintf(pPort "ENDGROUP\n")
  21.                                 
  22.                 fprintf(pPort "TEXT \"Pin Number\"\n")
  23.                 fprintf(pPort "TLOC 2 4\n")
  24.                 fprintf(pPort "OPTIONS BOLD\n")
  25.                 fprintf(pPort "ENDTEXT\n")
  26.                
  27.                 fprintf(pPort "FIELD pinNumber\n")
  28.                 fprintf(pPort "FLOC 13 4\n")
  29.                 fprintf(pPort "STRFILLIN 8 12\n")
  30.                 fprintf(pPort "ENDFIELD\n\n")
  31.                
  32.                 fprintf(pPort "TEXT \"Step\"\n")
  33.                 fprintf(pPort "TLOC 2 6\n")
  34.                 fprintf(pPort "OPTIONS BOLD\n")
  35.                 fprintf(pPort "ENDTEXT\n")
  36.                
  37.                 fprintf(pPort "FIELD step\n")
  38.                 fprintf(pPort "FLOC 13 6\n")
  39.                 fprintf(pPort "STRFILLIN 8 12\n")
  40.                 fprintf(pPort "ENDFIELD\n\n")
  41.                
  42.                 ;2016/01/20 新增
  43.                 fprintf(pPort "TEXT \"Ignore Suffix\"\n")
  44.                 fprintf(pPort "TLOC 2 8\n")
  45.                 fprintf(pPort "OPTIONS BOLD\n")
  46.                 fprintf(pPort "ENDTEXT\n")
  47.                 ;@@@@@ 2016/01/20 新增
  48.                 fprintf(pPort "FIELD ignoreSuffix\n")
  49.                 fprintf(pPort "FLOC 13 8\n")
  50.                 fprintf(pPort "STRFILLIN 8 12\n")
  51.                 fprintf(pPort "ENDFIELD\n\n")
  52.                
  53.                 fprintf(pPort "TEXT \"Text Blk\"\n")
  54.                 fprintf(pPort "TLOC 2 10\n")
  55.                 fprintf(pPort "OPTIONS BOLD\n")
  56.                 fprintf(pPort "ENDTEXT\n")
  57.                
  58.                 fprintf(pPort "FIELD textBlock\n")
  59.                 fprintf(pPort "FLOC 13 10\n")
  60.                 fprintf(pPort "INTSLIDEBAR 2 25\n")
  61.                 fprintf(pPort "MIN 1\n")
  62.                 fprintf(pPort "MAX %d\n" axlDBControl('maxTextBlock))
  63.                 fprintf(pPort "ENDFIELD\n")
  64.                
  65.                 fprintf(pPort "GROUP \"Direction\"\n")
  66.                 fprintf(pPort "GLOC 1 13\n")
  67.                 fprintf(pPort "GSIZE 25 16\n")
  68.                 fprintf(pPort "ENDGROUP\n")
  69.                
  70.                 fprintf(pPort "TEXT \"Horizontal\"\n")
  71.                 fprintf(pPort "TLOC 2 15\n")
  72.                 fprintf(pPort "OPTIONS BOLD\n")
  73.                 fprintf(pPort "ENDTEXT\n")
  74.                
  75.                 fprintf(pPort "FIELD leftToRight\n")
  76.                 fprintf(pPort "FLOC 4 17\n")
  77.                 fprintf(pPort "CHECKLIST \"Left To Right\" \"Dir\"\n")
  78.                 fprintf(pPort "ENDFIELD\n")
  79.                
  80.                 fprintf(pPort "FIELD rightToLeft\n")
  81.                 fprintf(pPort "FLOC 4 19\n")
  82.                 fprintf(pPort "CHECKLIST \"Right To Left\" \"Dir\"\n")
  83.                 fprintf(pPort "ENDFIELD\n")
  84.                
  85.                 fprintf(pPort "TEXT \"Vertical\"\n")
  86.                 fprintf(pPort "TLOC 2 21\n")
  87.                 fprintf(pPort "OPTIONS BOLD\n")
  88.                 fprintf(pPort "ENDTEXT\n")
  89.                
  90.                 fprintf(pPort "FIELD upToDown\n")
  91.                 fprintf(pPort "FLOC 4 23\n")
  92.                 fprintf(pPort "CHECKLIST \"Up To Down\" \"Dir\"\n")
  93.                 fprintf(pPort "ENDFIELD\n")
  94.                
  95.                 fprintf(pPort "FIELD downToUp\n")
  96.                 fprintf(pPort "FLOC 4 25\n")
  97.                 fprintf(pPort "CHECKLIST \"Down To Up\" \"Dir\"\n")
  98.                 fprintf(pPort "ENDFIELD\n")
  99.                
  100.                 fprintf(pPort "ENDTILE\n")
  101.                 fprintf(pPort "ENDFORM\n")
  102.                 close(pPort)
  103.                 axlControlRaise('options)
  104.                 frmRPN = axlMiniStatusLoad(gensym() tFile 'fnRPNCallback t)
  105.                 frmRPN
  106.         )
  107. )



  108. procedure(fnRPNProcess(frmRPN lSelects)
  109.         prog((tPinNumber tStep xStep tTextBlk lPinX lPinX lPNSplit tPNChar xPNNumber xNumber tNextPN lPNText
  110.                 tLastPN rPinText tIgnoreSuffix)
  111.                 ;取Option 上的設定值
  112.                 tPinNumber = axlFormGetField(frmRPN "pinNumber")
  113.                 tStep = axlFormGetField(frmRPN "step")
  114.                 xStep = atoi(tStep)
  115.                 tTextBlk = axlFormGetField(frmRPN "textBlock")
  116.                 tIgnoreSuffix = axlFormGetField(frmRPN "ignoreSuffix")
  117.                
  118.                 lPinX = mapcar(lambda((dObj) list(xCoord(dObj->xy) dObj)) lSelects)
  119.                 lPinY = mapcar(lambda((dObj) list(yCoord(dObj->xy) dObj)) lSelects)
  120.                 lPinX = sortcar(lPinX 'lessp)
  121.                 lPinY = sortcar(lPinY 'lessp)
  122.                 ;處裡Pin Number的英文字母和數字
  123.                
  124.                 ;忽略後綴字串
  125.                 rexCompile(strcat(tIgnoreSuffix "$"))
  126.                 tPinNumber = rexReplace(tPinNumber "" 0)
  127.                
  128.                 lPNSplit = fnRPNSplitCharInt(tPinNumber)
  129.                 unless(lPNSplit && fixp(cadr(lPNSplit))
  130.                         return(nil)
  131.                 )
  132.                 tPNChar = car(lPNSplit)
  133.                 xPNNumber = cadr(lPNSplit)
  134.                 xNumber = xPNNumber
  135.                 for(xCount xPNNumber ((xPNNumber + length(lSelects)) - 1)
  136.                         tNextPN = strcat(tPNChar sprintf(nil "%d%s" xNumber tIgnoreSuffix))
  137.                         lPNText = cons(tNextPN lPNText)
  138.                         xNumber = xNumber + xStep
  139.                         tLastPN = strcat(tPNChar sprintf(nil "%d%s" xNumber tIgnoreSuffix))
  140.                 )
  141.                 lPNText = reverse(lPNText)
  142.                 axlFormSetField(frmRPN "pinNumber" tLastPN)
  143.                 rPinText = make_axlTextOrientation(?textBlock tTextBlk ?rotation 0.0 ?mirrored nil ?justify "center")
  144.                 caseq(frmRPN->sDir
  145.                         (hl || hr
  146.                                 when(frmRPN->sDir == 'hr
  147.                                         lPNText = reverse(lPNText)
  148.                                 )
  149.                                 fnRPNRenameText(lPinX lPNText rPinText)
  150.                         )
  151.                         (vu || vd
  152.                                 when(frmRPN->sDir == 'vu
  153.                                         lPNText = reverse(lPNText)
  154.                                 )
  155.                                 fnRPNRenameText(lPinY lPNText rPinText)
  156.                         )
  157.                 )
  158.         )
  159. )
复制代码



点评

楼主,帮忙整一下吧。感谢。  详情 回复 发表于 2016-1-20 17:26
楼主,我刚试了一下,好像不好覆盖,只能增加进去,楼主能辛苦一下,帮忙整理好后再更新一个出来给大家。我相信应该不只我一个人需要这个功能的,非常感谢!!  详情 回复 发表于 2016-1-20 15:06

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
推荐
 楼主| 发表于 2016-1-21 07:30 | 只看该作者
redeveryday 发表于 2016-1-20 17:58
忽略的部分在递增,而需要递增的A1部分反而不递增了。另外,我还发现用的时候点击DONE之后相应的对话框就 ...

我知道你的操作問題在哪裡,
1.忽略後綴字串是Pin Number: A1-11, 其後綴必須是-11,而你輸入-1當然是會有問題.
2.程式使用說明,我應該寫的很清楚,如下
;        3.滑鼠右鍵功能選單:
;                Done => 結束程式,
;                Oops => 恢復上一次的動作,
;                Cancel => 取消程式.




还有一点对话框中rename按钮能做上去吗。这样我需要在操作时只要在点一下rename按钮就可以了。不知道这样好不好实现。
=> 操作方式是一每個人習慣不同,所以我才開放源代碼,讓大家能自行更改自己的使用習慣,


程式 rpn 一執行就是要更改pin名稱,再多加一個"rename"按鈕是多餘的.







附件是我整理好,其效果如圖





本帖子中包含更多资源

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

x

点评

大师,我刚才用了你编辑好的试了一下好了。估计是我昨天自己整理的有问题吧。太谢谢啦!继续支持写出更高的SKILL。  详情 回复 发表于 2016-1-21 09:26

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
推荐
 楼主| 发表于 2016-1-20 10:29 | 只看该作者
jcheapon 发表于 2016-1-20 10:22
非常需要学习源码呢

程式基本架構都差不多,差在處理的問題,你可以比較我最近所發表的三個程式,就會了解

【分享源代碼】自动创建板边的Anti Etch
https://www.eda365.com/forum.php? ... =1&&_dsign=16273882

【分享源代碼】更改选定VIA的NET属性/更改VIA的网络
https://www.eda365.com/forum.php?mod=viewthread&tid=116956&extra=page%3D1&page=1&&_dsign=cd145709






点评

XYX365的代码,都是精品。太棒了。  发表于 2017-9-6 14:11

63

主题

967

帖子

3164

积分

五级会员(50)

Rank: 5

积分
3164
2#
发表于 2016-1-20 09:12 | 只看该作者
感谢分享,新年快乐

63

主题

967

帖子

3164

积分

五级会员(50)

Rank: 5

积分
3164
3#
发表于 2016-1-20 09:28 | 只看该作者
果然比原来那个老skill好用,在17.0版本上也顺利使用。

0

主题

29

帖子

296

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

0

主题

6

帖子

123

积分

二级会员(20)

Rank: 2Rank: 2

积分
123
5#
发表于 2016-1-20 10:22 | 只看该作者
非常需要学习源码呢

点评

程式基本架構都差不多,差在處理的問題,你可以比較我最近所發表的三個程式,就會了解 【分享源代碼】自动创建板边的Anti Etch https://www.eda365.com/forum.php?mod=viewthread&tid=116852&extra=page%3D1&page=1&  详情 回复 发表于 2016-1-20 10:29

10

主题

126

帖子

1636

积分

四级会员(40)

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

积分
1636
6#
发表于 2016-1-20 10:26 | 只看该作者
感谢分享~

1

主题

17

帖子

313

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
313
8#
发表于 2016-1-20 11:07 | 只看该作者
不错,  感谢分享!

10

主题

126

帖子

1636

积分

四级会员(40)

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

积分
1636
9#
发表于 2016-1-20 11:11 | 只看该作者
楼主,看到的源码中procedure fnRPNSplitCharInt中的rexCompile语句显示为:rexCompile("[0-9]+[        DISCUZ_CODE_0        ]quot;),有问题,楼主能改一下吗?@XYX365

点评

已修正為 rexCompile("[0-9]+$")  详情 回复 发表于 2016-1-20 11:23

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
10#
 楼主| 发表于 2016-1-20 11:23 | 只看该作者
nanosoc 发表于 2016-1-20 11:11
楼主,看到的源码中procedure fnRPNSplitCharInt中的rexCompile语句显示为:rexCompile("[0-9]+[        DI ...

已修正為 rexCompile("[0-9]+$")

点评

谢谢楼主!  详情 回复 发表于 2016-1-20 11:33

10

主题

126

帖子

1636

积分

四级会员(40)

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

积分
1636
11#
发表于 2016-1-20 11:33 | 只看该作者
XYX365 发表于 2016-1-20 11:23
已修正為 rexCompile("[0-9]+$")

谢谢楼主!

66

主题

910

帖子

3062

积分

五级会员(50)

Rank: 5

积分
3062
12#
发表于 2016-1-20 11:36 | 只看该作者
楼主能增加一个多SITE集中在一起的BGA形式的命名吗,比如说A1-1,A2-1,A3-1.

点评

請問你們在命名pin時,其A1-1, A2-1, A3-1 後面的-1都是固定嗎? 還是會有別的.  详情 回复 发表于 2016-1-20 11:40

57

主题

1181

帖子

1807

积分

四级会员(40)

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

积分
1807
13#
发表于 2016-1-20 11:37 | 只看该作者
本帖最后由 JIMDENG 于 2016-1-20 11:48 编辑

看看大师的精品作品!确认可以用!感谢大师用这种分享源代码方式!

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
14#
 楼主| 发表于 2016-1-20 11:40 | 只看该作者
redeveryday 发表于 2016-1-20 11:36
楼主能增加一个多SITE集中在一起的BGA形式的命名吗,比如说A1-1,A2-1,A3-1.

請問你們在命名pin時,其A1-1, A2-1, A3-1 後面的-1都是固定嗎?
還是會有別的.

点评

不固定的,下一个就是A1-2,A2-1,A3-2,以此类推。前面其实是和单个BGA命名差不多的。就是后面要区分一下SITE。所以就会加个-1,-2或-3等  详情 回复 发表于 2016-1-20 12:18

66

主题

910

帖子

3062

积分

五级会员(50)

Rank: 5

积分
3062
15#
发表于 2016-1-20 12:18 | 只看该作者
XYX365 发表于 2016-1-20 11:40
請問你們在命名pin時,其A1-1, A2-1, A3-1 後面的-1都是固定嗎?
還是會有別的.

不固定的,下一个就是A1-2,A2-1,A3-2,以此类推。前面其实是和单个BGA命名差不多的。就是后面要区分一下SITE。所以就会加个-1,-2或-3等

点评

我還是有點搞不懂? 我目前的想法是忽略後綴字串,如圖 A1-1, A2-1, A3-1...... [attachimg]107651[/attachimg]  详情 回复 发表于 2016-1-20 12:42
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-20 06:08 , Processed in 0.082512 second(s), 48 queries , Gzip On.

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

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

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