找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

【分享源代碼】复位Assembly Refdes 到零件中心

[复制链接]

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
跳转到指定楼层
1#
发表于 2016-1-22 11:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
【分享源代碼】复位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或文字
;                或是加入只處理選擇的文字.
;                或是其他功能,自己想像.



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



本帖子中包含更多资源

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

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

102

主题

377

帖子

1158

积分

四级会员(40)

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

积分
1158
推荐
发表于 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

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
推荐
 楼主| 发表于 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")
是我說明裡面寫錯.

70

主题

571

帖子

3998

积分

五级会员(50)

Rank: 5

积分
3998
推荐
发表于 2016-3-1 09:30 | 只看该作者
我把fMAR.il文件放在pcbenv路径下,然后在allegro.ilinit里加上load(fMAR.il)
为什么我在PCB中执行mar 提示:E- Command not found: mar
是哪里搞错了吗?

点评

應該是在allegro.ilinit裡面加入 load("fMAR.il") 是我說明裡面寫錯.  详情 回复 发表于 2016-3-3 08:00

0

主题

63

帖子

157

积分

二级会员(20)

Rank: 2Rank: 2

积分
157
37#
发表于 2017-12-6 14:46 | 只看该作者
非常感謝樓主無私分享

13

主题

198

帖子

4646

积分

五级会员(50)

Rank: 5

积分
4646
36#
发表于 2017-11-16 22:09 | 只看该作者
向版主致敬

40

主题

572

帖子

1306

积分

四级会员(40)

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

积分
1306
35#
发表于 2017-11-2 13:43 | 只看该作者
谢谢楼主分享

40

主题

572

帖子

1306

积分

四级会员(40)

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

积分
1306
34#
发表于 2017-11-2 13:43 | 只看该作者
谢谢楼主分享

40

主题

572

帖子

1306

积分

四级会员(40)

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

积分
1306
33#
发表于 2017-11-2 13:43 | 只看该作者
谢谢楼主分享

0

主题

13

帖子

324

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
324
32#
发表于 2017-11-2 11:55 | 只看该作者
谢谢分享!

1

主题

93

帖子

511

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
511
31#
发表于 2017-10-15 10:52 | 只看该作者
感谢分享

1

主题

115

帖子

555

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
555
30#
发表于 2017-5-31 17:16 | 只看该作者
感謝樓主分享!!
A

28

主题

307

帖子

1073

积分

四级会员(40)

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

积分
1073
29#
发表于 2017-2-20 10:58 | 只看该作者
謝謝分享

0

主题

198

帖子

384

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
384
28#
发表于 2017-2-6 19:06 | 只看该作者
谢谢楼主分享

73

主题

688

帖子

2499

积分

四级会员(40)

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

积分
2499
27#
发表于 2017-2-6 16:50 | 只看该作者
测量发现,place_bound_top与ref的中线点没有重合呢,会有偏移

0

主题

86

帖子

275

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
275
26#
发表于 2016-7-7 14:56 | 只看该作者
Thanks

0

主题

84

帖子

5512

积分

五级会员(50)

Rank: 5

积分
5512
25#
发表于 2016-7-3 18:55 | 只看该作者
非常感謝樓主無私分享 ,感謝

20

主题

53

帖子

357

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
357
24#
发表于 2016-5-5 09:35 | 只看该作者
非常感謝樓主無私分享 太感謝了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-22 21:55 , Processed in 0.071199 second(s), 37 queries , Gzip On.

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

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

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