EDA365电子工程师网

标题: 【分享源代碼】复位Assembly Refdes 到零件中心 [打印本页]

作者: XYX365    时间: 2016-1-22 11:58
标题: 【分享源代碼】复位Assembly Refdes 到零件中心
【分享源代碼】复位Assembly Refdes 到零件中心

;
; File name: fMAR.il
; Description : move assembly refdes to center
; Load : load(fMAR.il)
; COmmand : mar
;
; 使用方式:
;        1.執行mar
;        2.會提示 "Do you want reset all assembly refdes location?" , 按下"Yes" 就執行, "No" 取消
;
; 程式特色:
;        1.源代碼分享,讓所有人都可以依照自己的方式加入其他功能,
;                例如加入使用Option,並增加選擇其他refdes或文字
;                或是加入只處理選擇的文字.
;                或是其他功能,自己想像.

[attach]107744[/attach]

[hide=d180]
  1. ;
  2. ; File name: fMAR.il
  3. ; Description : move assembly refdes to center
  4. ; Load : load(fMAR.il)
  5. ; COmmand : mar
  6. ;
  7. ; 使用方式:
  8. ;        1.執行mar
  9. ;        2.會提示 "Do you want reset all assembly refdes location?" , 按下"Yes" 就執行, "No" 取消
  10. ;
  11. ; 程式特色:
  12. ;        1.源代碼分享,讓所有人都可以依照自己的方式加入其他功能,
  13. ;                例如加入使用Option,並增加選擇其他refdes或文字
  14. ;                或是加入只處理選擇的文字.
  15. ;                或是其他功能,自己想像.
  16. axlCmdRegister("mar" 'fnMoveAssemblyRefdes)
  17. procedure(fnMoveAssemblyRefdes()
  18.         prog((dSymbol lSymBox nSymLeftX nSymLeftY nSymRightX nSymRightY nCompCenterX nCompCenterY
  19.                 lTextBbox nTxtLeftX nTxtLeftY nTxtRightX nTxtRightY nTextCenterX nTextCenterY)
  20.                 unless(axlOKToProceed()
  21.                         axlUIConfirm("Please Finish current command!")
  22.                         return(nil)
  23.                 )
  24.                 unless(axlUIYesNo("Do you want reset all assembly refdes location?" nil 'no)
  25.                         return(nil)
  26.                 )
  27.                 ;只顯示Outline,Assembly的refdes和外框
  28.                 axlVisibleDesign(nil)
  29.                 axlVisibleLayer("BOARD GEOMETRY/OUTLINE" t)
  30.                 axlVisibleLayer("REF DES/ASSEMBLY_TOP" t)
  31.                 axlVisibleLayer("REF DES/ASSEMBLY_BOTTOM" t)
  32.                 axlVisibleLayer("PACKAGE GEOMETRY/ASSEMBLY_TOP" t)
  33.                 axlVisibleLayer("PACKAGE GEOMETRY/ASSEMBLY_BOTTOM" t)
  34.                 axlVisibleUpdate(t)
  35.                
  36.                 foreach(dComp axlDBGetDesign()->components
  37.                         dSymbol = dComp->symbol
  38.                         when(dSymbol
  39.                                 foreach(dRefdes axlDBGetAttachedText(dSymbol)
  40.                                         ;判斷refdes的層面
  41.                                         when((dRefdes->layer == "REF DES/ASSEMBLY_TOP") || (dRefdes->layer == "REF DES/ASSEMBLY_BOTTOM")
  42.                                                 when(dRefdes->text == dComp->name
  43.                                                         lSymBox = fnGetSymbolBbox(dComp->symbol)
  44.                                                         when(lSymBox
  45.                                                                 nSymLeftX = xCoord(lowerLeft(lSymBox))
  46.                                                                 nSymLeftY = yCoord(lowerLeft(lSymBox))
  47.                                                                 nSymRightX = xCoord(upperRight(lSymBox))
  48.                                                                 nSymRightY = yCoord(upperRight(lSymBox))
  49.                                                                 nCompCenterX = (nSymRightX + nSymLeftX) / 2.0
  50.                                                                 nCompCenterY = (nSymRightY + nSymLeftY) / 2.0
  51.                                                                 lTextBbox = dRefdes->bBox
  52.                                                                     nTxtLeftX = xCoord(lowerLeft(lTextBbox))
  53.                                                                 nTxtLeftY = yCoord(lowerLeft(lTextBbox))
  54.                                                                 nTxtRightX = xCoord(upperRight(lTextBbox))
  55.                                                                 nTxtRightY = yCoord(upperRight(lTextBbox))
  56.                                                                 nTextCenterX = (nTxtRightX + nTxtLeftX) / 2.0
  57.                                                                 nTextCenterY = (nTxtRightY + nTxtLeftY) / 2.0
  58.                                                                 axlTransformObject(dRefdes ?move list((nCompCenterX - nTextCenterX) (nCompCenterY - nTextCenterY)))
  59.                                                         )
  60.                                                 )
  61.                                         )
  62.                                 )
  63.                         )
  64.                 )
  65.                 return(t)
  66.         )
  67. )
  68. procedure(fnGetSymbolBbox(dSymbol) ;取得Symbol裡面 PLACE_BOUND_TOP or BOTTOM 的 bbox的大小
  69.         prog((lLayers)
  70.                 unless(dSymbol->objType == "symbol"
  71.                         return(nil)
  72.                 )
  73.                 lLayers = setof(x dSymbol->children ((x->layer == "PACKAGE GEOMETRY/PLACE_BOUND_TOP") || (x->layer == "PACKAGE GEOMETRY/PLACE_BOUND_BOTTOM")))
  74.                 foreach(dOne lLayers
  75.                         if(dOne->isMirrored then
  76.                                 when((dOne->objType == "shape")
  77.                                         return(dOne->bBox)
  78.                                 )
  79.                         else
  80.                                 when((dOne->objType == "shape")
  81.                                         return(dOne->bBox)
  82.                                 )
  83.                         )
  84.                 )
  85.                 axlMsgPut(sprintf(nil "E-%L:%L can not find Place_Bound!" dSymbol->refdes dSymbol->name))
  86.                 return(nil)
  87.         )
  88. )
复制代码

[/hide]


作者: nanosoc    时间: 2016-1-22 12:20
楼主又分享好代码,谢谢!
作者: JIMDENG    时间: 2016-1-22 12:42
大师的作品,必属精品!谢谢分享!

作者: mmyutian    时间: 2016-1-23 17:16
非常感謝樓主無私分享 太感謝了

作者: diandian08    时间: 2016-1-23 20:22
谢谢楼主分享

作者: tiankong2008    时间: 2016-1-24 08:28


作者: bingshuihuo    时间: 2016-1-25 08:41
非常感謝樓主無私分享 太感謝了
作者: LI165    时间: 2016-1-25 14:01
非常感謝
作者: zhu_ally    时间: 2016-1-25 16:29
很好的东东

作者: l8877l    时间: 2016-1-25 17:06
谢谢 楼主

作者: 姜灏1    时间: 2016-2-1 15:04
来看看,学习下
作者: wuyuhe    时间: 2016-2-16 08:49
谢谢楼主的分享!
作者: huzf    时间: 2016-2-16 14:24
看看
作者: yaoshasha    时间: 2016-2-19 15:24
谢谢分享

作者: 卫冬冬    时间: 2016-2-21 08:42
看看 了解了解 学习学习学习学习



作者: zqy610710    时间: 2016-3-1 08:48
谢谢楼主分享

作者: liujie123    时间: 2016-3-1 08:50
谢谢分享!
作者: liujie123    时间: 2016-3-1 09:30
我把fMAR.il文件放在pcbenv路径下,然后在allegro.ilinit里加上load(fMAR.il)
为什么我在PCB中执行mar 提示:E- Command not found: mar
是哪里搞错了吗?
作者: XYX365    时间: 2016-3-3 08:00
liujie123 发表于 2016-3-1 09:30
我把fMAR.il文件放在pcbenv路径下,然后在allegro.ilinit里加上load(fMAR.il)
为什么我在PCB中执行mar 提 ...

應該是在allegro.ilinit裡面加入 load("fMAR.il")
是我說明裡面寫錯.

作者: skill_rc    时间: 2016-4-14 14:37
谢谢分享!
作者: TobyTao_Zhang    时间: 2016-4-15 15:04
为什么我试了不行啊,我用的16.3  
作者: 361553894    时间: 2016-4-25 14:24
本帖最后由 361553894 于 2016-4-25 14:30 编辑

procedure(SymCenter(@optional (sym nil))
prog( (pins Xs Ys X Y)
when(stringp(sym) sym = car(axlSelectByName("REFDES" sym)))
unless(sym
  axlSetFindFilter(?enabled '("all") ?onButtons '("noall" "symbols"))
  sym = car(axlGetSelSet(axlSingleSelectPoint()))
)
unless(sym return(nil))
pins = sym->pins
Xs = nil, Ys = nil
foreach(pin pins
  Xs = append1(Xs car(pin->xy))
  Ys = append1(Ys cadr(pin->xy))
)
Xs = unique(Xs), Ys = unique(Ys)
X = 0.0, Y = 0.0
foreach(x Xs
  X = X + x
)
X = X / length(Xs)
foreach(y Ys
  Y = Y + y
)
Y = Y / length(Ys)
return(list(X,Y))
))
这是我写的获取零件中心的Skill

作者: carrie_wg    时间: 2016-4-26 14:34
感謝分享~學習一下~
作者: 76213665    时间: 2016-5-5 09:35
非常感謝樓主無私分享 太感謝了
作者: hayatokoc    时间: 2016-7-3 18:55
非常感謝樓主無私分享 ,感謝
作者: wu55    时间: 2016-7-7 14:56
Thanks
作者: 王开鑫55    时间: 2017-2-6 16:50
测量发现,place_bound_top与ref的中线点没有重合呢,会有偏移
作者: lovesweet33    时间: 2017-2-6 19:06
谢谢楼主分享
作者: carol8688    时间: 2017-2-20 10:58
謝謝分享

作者: amy4616    时间: 2017-5-31 17:16
感謝樓主分享!!
作者: 九月    时间: 2017-10-15 10:52
感谢分享
作者: JKK    时间: 2017-11-2 11:55
谢谢分享!
作者: angelly    时间: 2017-11-2 13:43
谢谢楼主分享
作者: angelly    时间: 2017-11-2 13:43
谢谢楼主分享
作者: angelly    时间: 2017-11-2 13:43
谢谢楼主分享
作者: tianxia126000    时间: 2017-11-16 22:09
向版主致敬
作者: zch315    时间: 2017-12-6 14:46
非常感謝樓主無私分享




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