EDA365电子工程师网
标题:
【分享源代碼】自动创建板边的Anti Etch
[打印本页]
作者:
XYX365
时间:
2016-1-13 12:30
标题:
【分享源代碼】自动创建板边的Anti Etch
本帖最后由 XYX365 于 2016-1-13 12:43 编辑
自动创建板边的Anti Etch
该SKILL用于自动创建板边的Anti Etch。
主要功能如下:
1.可选择内缩方式和外扩方式。外扩一般用于板内的开窗部分。
2.可自行设置Anti Etch线宽。
3.可选择创建的层面。(主要用于创建Anit Etch,如有其它需要可以在其它层面创建)
加載: load("fCreateAntiLine.il")
命令执行:cal
适用版本:allegro 16.3 以上
注:Anti Etch主要用于负片层的分割,当灌铜时,有Anti Etch的部分将会将铜皮隔断。
只能选择outline来创建,且outline必须为shape(铜皮)或line形式,如果为line形式,必须为单一且闭合的line
[attach]107238[/attach]
[hide=d160]
;
;FileName: fCreateAntiLine.il
;Load: load("fCreateAntiLine.il")
;Command: cal
;
axlCmdRegister("cal" 'fnCreateAntiLine ?cmdType "interactive" ?doneCmd 'fnCALPopupDone ?cancelCmd 'fnCALPopupCancel)
procedure(fnCreateAntiLine() ;主程式
let((frmCAL)
frmCAL = fnCALBuildForm()
fnCALSetVariables(frmCAL)
fnCALSetFormField(frmCAL)
fnCALStart(frmCAL)
)
)
procedure(fnCALBuildForm()
let((tFile pPort frmCAL)
drain()
tFile = axlTempFile()
pPort = outfile(tFile)
fprintf(pPort "FILE_TYPE=FORM_DEFN VERSION=2\nFORM\nFIXED\nPORT 1 1\n\n")
fprintf(pPort "HEADER \"\"\n")
fprintf(pPort "POPUP <class> \"class\"\n")
fprintf(pPort "POPUP <subclass> \"subclass\"\n")
fprintf(pPort "TILE\n\n")
fprintf(pPort "GROUP \"Create Anti Etch Layer\"\n")
fprintf(pPort "GLOC 1 1\n")
fprintf(pPort "GSIZE 25 10\n")
fprintf(pPort "ENDGROUP\n")
fprintf(pPort "FIELD class\n")
fprintf(pPort "FLOC 5 4\n")
fprintf(pPort "ENUMSET 18\n")
fprintf(pPort "OPTIONS prettyprint\n")
fprintf(pPort "POP \"class\"\n")
fprintf(pPort "ENDFIELD\n")
fprintf(pPort "FIELD subcolor\n")
fprintf(pPort "FLOC 2 7\n")
fprintf(pPort "COLOR 2 1\n")
fprintf(pPort "OPTIONS colorchooser\n")
fprintf(pPort "ENDFIELD\n")
fprintf(pPort "FIELD subclass\n")
fprintf(pPort "FLOC 5 7\n")
fprintf(pPort "ENUMSET 18\n")
fprintf(pPort "OPTIONS prettyprint ownerdrawn\n")
fprintf(pPort "POP \"subclass\"\n")
fprintf(pPort "ENDFIELD\n")
fprintf(pPort "GROUP \"Line Options\"\n")
fprintf(pPort "GLOC 1 11\n")
fprintf(pPort "GSIZE 25 10\n")
fprintf(pPort "ENDGROUP\n")
fprintf(pPort "TEXT \"Size:\"\n")
fprintf(pPort "TLOC 2 13\n")
fprintf(pPort "ENDTEXT\n\n")
fprintf(pPort "FIELD contract\n")
fprintf(pPort "FLOC 7 14\n")
fprintf(pPort "CHECKLIST \"Contract\" \"ExpandOrContract\"\n")
fprintf(pPort "ENDFIELD\n\n")
fprintf(pPort "FIELD expand\n")
fprintf(pPort "FLOC 7 16\n")
fprintf(pPort "CHECKLIST \"Expand\" \"ExpandOrContract\"\n")
fprintf(pPort "ENDFIELD\n\n")
fprintf(pPort "TEXT \"Line Width: \"\n")
fprintf(pPort "TLOC 2 18\n")
fprintf(pPort "ENDTEXT\n\n")
fprintf(pPort "FIELD lineWidth\n")
fprintf(pPort "FLOC 11 18\n")
fprintf(pPort "REALFILLIN 8 12\n")
fprintf(pPort "REALMIN 0.0\n")
fprintf(pPort "DECIMAL %d\n" cadr(axlDBGetDesignUnits()))
fprintf(pPort "ENDFIELD\n\n")
fprintf(pPort "ENDTILE\n")
fprintf(pPort "ENDFORM\n")
close(pPort)
axlControlRaise('options)
frmCAL = axlMiniStatusLoad(gensym() tFile nil t)
frmCAL
)
)
procedure(fnCALCreateAntiEtch(dObj nExpand tLayer @optional (bIsShape t))
prog((lStartPoint lEndPoint rPath dTmpShape dPolygon dPoly dShape)
axlVisibleLayer(tLayer t)
unless(bIsShape
lStartPoint = car(car(dObj->segments)->startEnd)
lEndPoint = cadr(nthelem(dObj->nSegs dObj->segments)->startEnd)
if(lStartPoint == lEndPoint then
rPath = axlDB2Path(dObj)
dTmpShape = car(axlDBCreateShape(rPath t tLayer))
dObj = dTmpShape
else
printf("E-Not a closed polygon or Line.\n")
return(nil)
)
)
dPolygon = car(axlPolyFromDB(dObj))
when(dTmpShape
axlDeleteObject(dTmpShape)
)
dPoly = car(axlPolyExpand(dPolygon (nExpand / 2.0) 'NONE))
dShape = car(axlDBCreateShape(dPoly t tLayer))
rPath = axlDB2Path(dShape)
axlDeleteObject(dShape)
axlDehighlightObject(axlChangeWidth(car(axlDBCreatePath(rPath tLayer 'line)) abs(nExpand)))
return(t)
)
)
procedure(fnCALPopupCancel()
when(frmCAL->xTransMark
axlDBTransactionRollback(frmCAL->xTransMark)
)
axlClearSelSet()
axlCancelEnterFun()
axlUICmdPopupSet(nil)
axlUIPopupSet(nil)
)
procedure(fnCALPopupCallback(rEvent)
fnCATPopupCheck(frmCAL)
)
procedure(fnCATPopupCheck(frmCAL)
;解決執行Oops後Popup變成灰色的
axlUICmdPopupSet(frmCAL->rPopupOrign)
if(frmCAL->xMarkCount >= 1 then
axlUIPopupSet(frmCAL->rPopupOrign)
else
axlUIPopupSet(frmCAL->rPopupGray)
)
)
procedure(fnCALPopupDone()
when(frmCAL->xTransMark
axlDBTransactionCommit(frmCAL->xTransMark)
)
axlClearSelSet()
axlFinishEnterFun()
axlUICmdPopupSet(nil)
axlUIPopupSet(nil)
)
procedure(fnCALPopupInit()
;定義Popup
frmCAL->rPopupOrign = axlUIPopupDefine(nil
list(list("Done" 'fnCALPopupDone)
list("Oops" 'fnCALPopupOops)
list("Cancel" 'fnCALPopupCancel)
)
)
frmCAL->rPopupGray = axlUIPopupDefine(nil
list(list("Done" 'fnCALPopupDone)
;list("Oops" 'fnCALPopupOops) ;沒有任何選擇時會變成灰色
list("Cancel" 'fnCALPopupCancel)
)
)
)
procedure(fnCALPopupOops()
if(!axlDBTransactionOops(frmCAL->xTransMark) then
frmCAL->xMarkCount = 0
else
axlUIWPrint(nil "Oops")
frmCAL->xMarkCount = sub1(frmCAL->xMarkCount)
axlClearSelSet()
)
fnCATPopupCheck(frmCAL)
)
procedure(fnCALSetFormField(frmCAL)
axlFormSetField(frmCAL "Contract" t)
axlFormSetField(frmCAL "lineWidth" frmCAL->nLineWidth)
axlFormSetActiveField(frmCAL "lineWidth")
axlSetActiveLayer("ANTI ETCH/ALL")
)
procedure(fnCALSetVariables(frmCAL)
frmCAL->tProgName = "CreateAntiLine"
;設定線寬值
case(car(axlDBGetDesignUnits())
("millimeters"
frmCAL->nLineWidth = 0.6
)
("mils"
frmCAL->nLineWidth = 20.0
)
)
;設定滑鼠右鍵選單相關變數
frmCAL->xTransMark = nil
frmCAL->xMarkCount = 0
frmCAL->rPopupOrign = nil
frmCAL->rPopupGray = nil
)
procedure(fnCALStart(frmCAL)
let(((bDoFlag t) lEventMask rEventID lSelObj nLineWidth tActivelayer)
fnCALPopupInit()
axlEventSetStartPopup('fnCALPopupCallback)
frmCAL->xTransMark = axlDBTransactionStart()
lEventMask = list('PICK)
axlSetFindFilter(?enabled list("noall" "shapes" "lines") ?onButtons list("noall" "shapes" "lines"))
axlClearSelSet()
while(bDoFlag
printf("M-Please select a outline...\n")
rEventID = axlEnterEvent(lEventMask nil nil)
caseq(rEventID->type
(PICK ;滑鼠按下左鍵一次
axlDBTransactionMark(frmCAL->xTransMark)
frmCAL->xMarkCount = add1(frmCAL->xMarkCount)
axlSingleSelectPoint(rEventID->xy)
dSelObj = car(setof(x axlGetSelSet() (x->layer == "BOARD GEOMETRY/OUTLINE"))) ;過濾Object必須是outline層面
axlClearSelSet()
if(dSelObj then
nLineWidth = atof(axlFormGetField(frmCAL "lineWidth"))
tActivelayer = axlGetActiveLayer()
when(axlFormGetField(frmCAL "Contract") == "1"
nLineWidth = -nLineWidth
)
case(dSelObj->objType
("polygon"
fnCALCreateAntiEtch(dSelObj nLineWidth tActivelayer t)
)
("path"
fnCALCreateAntiEtch(dSelObj nLineWidth tActivelayer nil)
)
)
else
;恢復沒有選到任一object
if(!axlDBTransactionOops(frmCAL->xTransMark) then
frmCAL->xMarkCount = 0
else
frmCAL->xMarkCount = sub1(frmCAL->xMarkCount)
)
)
fnCATPopupCheck(frmCAL)
)
(DONE ;滑鼠按下右鍵,選擇done
bDoFlag = nil
)
(CANCEL ;滑鼠按下右鍵,選擇cancel
bDoFlag = nil
)
)
)
axlEventSetStartPopup()
)
)
复制代码
[/hide]
作者:
JIMDENG
时间:
2016-1-13 13:14
本帖最后由 JIMDENG 于 2016-1-13 13:50 编辑
谢谢大师的分享!点个赞!
作者:
huzf
时间:
2016-1-13 14:54
看看
作者:
zhangjunxuan21
时间:
2016-1-13 16:50
感谢大师无私的分享
作者:
86232648
时间:
2016-1-13 20:54
自动创建板边的Anti Etch [
修改
]
作者:
mistletoe
时间:
2016-1-14 09:12
感谢分享,非常不错
作者:
mmyutian
时间:
2016-1-19 11:37
謝謝大神 終於看到源碼了,謝謝啦 再多來點源碼 可以慢慢學習
作者:
蠵龜
时间:
2016-1-19 14:43
感謝大大分享
作者:
nanosoc
时间:
2016-1-20 10:34
感谢楼主的分享,非常好的skill!
作者:
XYX365
时间:
2016-1-20 14:08
補充圖片
[attach]107655[/attach]
作者:
huangkai0814hk
时间:
2016-1-22 15:58
路过看下
作者:
feixiang1210
时间:
2016-1-25 13:55
谢谢奉献
作者:
huangkai0814hk
时间:
2016-1-25 17:24
附件下不了啊
作者:
XYX365
时间:
2016-1-25 17:34
huangkai0814hk 发表于 2016-1-25 17:24
附件下不了啊
附件必須是三級會員以上,才可以下載,
你回覆後應該有看到隱藏內容,就是源碼,直接拷貝.
作者:
huangkai0814hk
时间:
2016-2-1 16:30
好吧,我现在还是2级
作者:
koncc
时间:
2016-2-2 11:42
很實用的工具
感謝
XYX365 分享
作者:
361553894
时间:
2016-2-3 17:16
支持开放源代码
作者:
wendao_liu
时间:
2016-2-3 20:58
感谢分享
作者:
defir
时间:
2016-2-6 11:16
很赞!!
作者:
kuaihai485
时间:
2016-2-6 12:58
谢谢楼主分享
作者:
卫冬冬
时间:
2016-2-9 11:24
学习学习 了解了解
作者:
henry201
时间:
2016-2-14 17:24
ganxiewusifenxiang
作者:
yaoshasha
时间:
2016-2-19 15:36
谢谢分享
作者:
zqy610710
时间:
2016-2-26 12:12
谢谢分享
作者:
snow6333
时间:
2016-4-12 14:27
這個功能很常用到,終於有原始碼可以學習了
謝謝
作者:
dengbaba
时间:
2016-4-20 10:39
謝謝大神 終於看到源碼了,謝謝啦 再多來點源碼 可以慢慢學習
作者:
bcyj
时间:
2016-5-31 11:50
感谢分享
作者:
michaell
时间:
2016-6-1 13:46
下载不了
作者:
hy20060614
时间:
2016-6-5 10:23
谢谢分享
作者:
hayatokoc
时间:
2016-6-5 22:11
非常實用的工具
感謝 XYX365大分享
作者:
cx032302
时间:
2016-6-16 00:03
感谢分享,非常不错
作者:
361553894
时间:
2016-10-28 14:04
请教大神,15.5版本怎么内缩?
axlPolyExpand在15.5版本不允许expand值为负数
作者:
hy20060614
时间:
2016-11-2 10:56
谢谢分享
作者:
hy20060614
时间:
2016-11-3 09:10
谢谢分享
作者:
hy20060614
时间:
2016-11-4 09:31
谢谢分享
作者:
hy20060614
时间:
2016-11-5 13:28
谢谢分享
作者:
挑战极限
时间:
2016-12-19 12:32
搂住真系高银啊!
作者:
rasytc
时间:
2016-12-22 11:37
下来看一下
作者:
2000
时间:
2016-12-22 17:06
分享!点个赞!
作者:
hy20060614
时间:
2016-12-26 09:52
谢谢分享
作者:
lovesweet33
时间:
2016-12-27 22:59
谢谢分享
作者:
vivian0802
时间:
2017-3-15 11:03
谢谢分享^^
作者:
wcjcn
时间:
2017-6-5 16:30
学习中。。。。。。
作者:
startlin
时间:
2017-6-17 15:49
感謝大大分享,謝謝囉!
作者:
夕阳下_g7oc6
时间:
2017-6-19 11:49
:):):)
作者:
夕阳下_g7oc6
时间:
2017-6-19 11:50
:victory::victory:
作者:
夕阳下_g7oc6
时间:
2017-6-19 11:50
:victory:
作者:
weigz
时间:
2017-6-19 12:27
谢谢分享
作者:
mentorkk
时间:
2017-6-20 00:19
谢谢分享!
作者:
jet2001
时间:
2017-6-20 07:27
謝謝分享!
作者:
rainner777
时间:
2017-6-21 02:13
謝謝分享
欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/)
Powered by Discuz! X3.2