找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1705|回复: 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

10

主题

126

帖子

1636

积分

四级会员(40)

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

积分
1636
2#
发表于 2016-1-22 12:20 | 只看该作者
楼主又分享好代码,谢谢!

57

主题

1181

帖子

1807

积分

四级会员(40)

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

积分
1807
3#
发表于 2016-1-22 12:42 | 只看该作者
大师的作品,必属精品!谢谢分享!

8

主题

80

帖子

860

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
860
4#
发表于 2016-1-23 17:16 | 只看该作者
非常感謝樓主無私分享 太感謝了

1

主题

60

帖子

631

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
631
5#
发表于 2016-1-23 20:22 | 只看该作者
谢谢楼主分享

10

主题

301

帖子

737

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
737
6#
发表于 2016-1-24 08:28 | 只看该作者

29

主题

2646

帖子

2805

积分

四级会员(40)

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

积分
2805
7#
发表于 2016-1-25 08:41 | 只看该作者
非常感謝樓主無私分享 太感謝了

0

主题

5

帖子

62

积分

二级会员(20)

Rank: 2Rank: 2

积分
62
8#
发表于 2016-1-25 14:01 | 只看该作者
非常感謝

3

主题

102

帖子

1298

积分

四级会员(40)

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

积分
1298
9#
发表于 2016-1-25 16:29 | 只看该作者
很好的东东

6

主题

122

帖子

2554

积分

四级会员(40)

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

积分
2554
10#
发表于 2016-1-25 17:06 | 只看该作者
谢谢 楼主

0

主题

27

帖子

45

积分

二级会员(20)

Rank: 2Rank: 2

积分
45
11#
发表于 2016-2-1 15:04 | 只看该作者
来看看,学习下

14

主题

143

帖子

-1万

积分

未知游客(0)

积分
-11958
12#
发表于 2016-2-16 08:49 | 只看该作者
谢谢楼主的分享!

26

主题

318

帖子

971

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
971
13#
发表于 2016-2-16 14:24 | 只看该作者
看看

12

主题

116

帖子

814

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
814
14#
发表于 2016-2-19 15:24 | 只看该作者
谢谢分享

65

主题

297

帖子

904

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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


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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-22 08:51 , Processed in 0.100276 second(s), 39 queries , Gzip On.

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

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

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