|
【分享源代碼】复位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或文字
; 或是加入只處理選擇的文字.
; 或是其他功能,自己想像.
- ;
- ; 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或文字
- ; 或是加入只處理選擇的文字.
- ; 或是其他功能,自己想像.
- axlCmdRegister("mar" 'fnMoveAssemblyRefdes)
- procedure(fnMoveAssemblyRefdes()
- prog((dSymbol lSymBox nSymLeftX nSymLeftY nSymRightX nSymRightY nCompCenterX nCompCenterY
- lTextBbox nTxtLeftX nTxtLeftY nTxtRightX nTxtRightY nTextCenterX nTextCenterY)
- unless(axlOKToProceed()
- axlUIConfirm("Please Finish current command!")
- return(nil)
- )
- unless(axlUIYesNo("Do you want reset all assembly refdes location?" nil 'no)
- return(nil)
- )
- ;只顯示Outline,Assembly的refdes和外框
- axlVisibleDesign(nil)
- axlVisibleLayer("BOARD GEOMETRY/OUTLINE" t)
- axlVisibleLayer("REF DES/ASSEMBLY_TOP" t)
- axlVisibleLayer("REF DES/ASSEMBLY_BOTTOM" t)
- axlVisibleLayer("PACKAGE GEOMETRY/ASSEMBLY_TOP" t)
- axlVisibleLayer("PACKAGE GEOMETRY/ASSEMBLY_BOTTOM" t)
- axlVisibleUpdate(t)
-
- foreach(dComp axlDBGetDesign()->components
- dSymbol = dComp->symbol
- when(dSymbol
- foreach(dRefdes axlDBGetAttachedText(dSymbol)
- ;判斷refdes的層面
- when((dRefdes->layer == "REF DES/ASSEMBLY_TOP") || (dRefdes->layer == "REF DES/ASSEMBLY_BOTTOM")
- when(dRefdes->text == dComp->name
- lSymBox = fnGetSymbolBbox(dComp->symbol)
- when(lSymBox
- nSymLeftX = xCoord(lowerLeft(lSymBox))
- nSymLeftY = yCoord(lowerLeft(lSymBox))
- nSymRightX = xCoord(upperRight(lSymBox))
- nSymRightY = yCoord(upperRight(lSymBox))
- nCompCenterX = (nSymRightX + nSymLeftX) / 2.0
- nCompCenterY = (nSymRightY + nSymLeftY) / 2.0
- lTextBbox = dRefdes->bBox
- nTxtLeftX = xCoord(lowerLeft(lTextBbox))
- nTxtLeftY = yCoord(lowerLeft(lTextBbox))
- nTxtRightX = xCoord(upperRight(lTextBbox))
- nTxtRightY = yCoord(upperRight(lTextBbox))
- nTextCenterX = (nTxtRightX + nTxtLeftX) / 2.0
- nTextCenterY = (nTxtRightY + nTxtLeftY) / 2.0
- axlTransformObject(dRefdes ?move list((nCompCenterX - nTextCenterX) (nCompCenterY - nTextCenterY)))
- )
- )
- )
- )
- )
- )
- return(t)
- )
- )
- procedure(fnGetSymbolBbox(dSymbol) ;取得Symbol裡面 PLACE_BOUND_TOP or BOTTOM 的 bbox的大小
- prog((lLayers)
- unless(dSymbol->objType == "symbol"
- return(nil)
- )
- lLayers = setof(x dSymbol->children ((x->layer == "PACKAGE GEOMETRY/PLACE_BOUND_TOP") || (x->layer == "PACKAGE GEOMETRY/PLACE_BOUND_BOTTOM")))
- foreach(dOne lLayers
- if(dOne->isMirrored then
- when((dOne->objType == "shape")
- return(dOne->bBox)
- )
- else
- when((dOne->objType == "shape")
- return(dOne->bBox)
- )
- )
- )
- axlMsgPut(sprintf(nil "E-%L:%L can not find Place_Bound!" dSymbol->refdes dSymbol->name))
- return(nil)
- )
- )
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|