EDA365电子工程师网

标题: Voidadd for silk [打印本页]

作者: 1392431396    时间: 2016-12-19 21:53
标题: Voidadd for silk
axlCmdRegister("Voidadd" 'void_C)

procedure(void_C()

(prog ()


axlSetFindFilter(?enabled list("noall" "shapes")
                  ?onButtons list("noall" "shapes"))
                  
  _shape=axlGetSelSet(axlSelect(?prompt "Select shape ."))               
     shapeID = car(_shape)
when( _shape
     axlSetFindFilter(?enabled list("noall" "pins")
                  ?onButtons list("noall" "pins"))
  
     pinSlect = axlGetSelSet(axlSelect())
   
;axlClearSelSet()
foreach(pin pinSlect

            when( car(pinSlect)->objType="pin"
                s=5.0
                polydbid = axlPolyFromDB(car(pinSlect), ?layer car(car(pinSlect)->startEnd) ?padType 'REGULAR)
                exp_poly = (axlPolyExpand polydbid s 'ALL_ARC)
                a=car(exp_poly)->bBox
               

   
    if(axlGeoPointInShape(car(a) shapeID) && axlGeoPointInShape(cadr(a) shapeID)
       then  axlHighlightObject(pin)
       a=car(exp_poly)->bBox
                 ll  = car(a)
                ur  = cadr(a)
                llx = caar(a)
                lly = cadar(a)
                urx = caadr(a)
                ury = cadadr(a)
                path = axlPathStart(list(ll (urx:lly) ur (llx:ury) ))
                voidpath = axlPathLine(path, 0.0, ll)
               
               
                axlDBCreateVoid(shapeID voidpath)
          return(voidpath)
       )
)      
)      
)

axlDBCreateVoid(shapeID voidpath)

)
)   
目前只能是点中shape后再点击pin做出一块void,如何实现当选择shape时,程式自己判断shape上面的pin是否在上面,并自动全部做出void @[url=][url=mailto:void@@deargds]@deargds[/url][/url]

作者: GSO_library    时间: 2016-12-20 09:48
Good idea
作者: chrysalis    时间: 2016-12-20 10:41
这个代码的功能是选择被shape覆盖的pin,然后以pin边缘扩展5mil在shape上面开窗吧?
有没有考虑到shape和pin都是异形时候的情况?
作者: 1392431396    时间: 2016-12-20 11:56
chrysalis 发表于 2016-12-20 10:41
这个代码的功能是选择被shape覆盖的pin,然后以pin边缘扩展5mil在shape上面开窗吧?
有没有考虑到shape和p ...

从简单的开始
作者: chrysalis    时间: 2016-12-20 13:43
1392431396 发表于 2016-12-20 11:56
从简单的开始

那就把findfilter设置为pins,以shape的bbox框选一次,就可以得到一堆pin,再一个个判断筛选处理

作者: 1392431396    时间: 2016-12-20 23:12
chrysalis 发表于 2016-12-20 13:43
那就把findfilter设置为pins,以shape的bbox框选一次,就可以得到一堆pin,再一个个判断筛选处理

可以写代码出来吗,我写的有问题,执行不出来啊

作者: lovesweet33    时间: 2016-12-22 22:11
谢谢分享。。。
作者: deargds    时间: 2016-12-23 17:34
本帖最后由 deargds 于 2016-12-24 11:39 编辑

仅供参考
  1. procedure(void_C()

  2. (prog ()


  3. axlSetFindFilter(?enabled list("noall" "shapes")
  4.                   ?onButtons list("noall" "shapes"))
  5.                   
  6.   _shape=axlGetSelSet(axlSelect(?prompt "Select shape ."))               
  7.      shapeID = car(_shape)
  8. when( _shape
  9.      axlSetFindFilter(?enabled list("noall" "pins")
  10.                   ?onButtons list("noall" "pins"))
  11.   
  12.     axlVisibleLayer("PIN/TOP" t);此处可以根据SHAPE进行判断
  13.         axlClearSelSet()
  14.         pinSlect = axlGetSelSet(axlSingleSelectBox(shapeID->bBox))
  15.         axlClearSelSet()
  16.    
  17. ;axlClearSelSet()
  18. foreach(pin pinSlect
  19.         when( pin->objType="pin"
  20.                
  21.                 s=5.0
  22.                 polydbid = axlPolyFromDB(pin, ?layer car(pin->startEnd) ?padType 'REGULAR)
  23.                 println(polydbid)
  24.                 exp_poly = (axlPolyExpand polydbid s 'ALL_ARC)
  25.                 a=car(exp_poly)->bBox
  26.            
  27.                 axlHighlightObject(pin)
  28.                 a=car(exp_poly)->bBox
  29.                  ll  = car(a)
  30.                 ur  = cadr(a)
  31.                 llx = caar(a)
  32.                 lly = cadar(a)
  33.                 urx = caadr(a)
  34.                 ury = cadadr(a)
  35.                 voidpath = axlPathStart(list(ll (urx:lly) ur (llx:ury) ))
  36.                 voidpath = axlPathLine(voidpath, 0.0, ll)               
  37.                 axlDBCreateVoid(shapeID voidpath)
  38.                 shapeID = car(axlDBCreateCloseShape( shapeID))
  39. )      
  40. )      
  41. )
  42. )
  43. )
复制代码



作者: 1392431396    时间: 2016-12-23 18:07
deargds 发表于 2016-12-23 17:34

感谢deargds

作者: shenjing845250    时间: 2016-12-26 12:34
谢谢分享
作者: lovesweet33    时间: 2016-12-27 22:56
谢谢分享
作者: gdm0121    时间: 2017-1-3 12:00
请问这个skill调用的指令是什么?

作者: 1392431396    时间: 2017-1-3 14:03
gdm0121 发表于 2017-1-3 12:00
请问这个skill调用的指令是什么?

axlCmdRegister("Voidadd" 'void_C)
作者: 1392431396    时间: 2017-1-9 11:13
deargds 发表于 2016-12-23 17:34
仅供参考
  1. axlCmdRegister("voidcreate" 'create_void)

  2. procedure(create_void()
  3. create_void_form()
  4. axlSetFindFilter(?enabled `("NOALL" "shapes") ?onButtons `("shapes"))
  5. axlClearSelSet()

  6. cline_list=nil
  7. while( axlSelect()
  8. ls=axlGetSelSet()
  9. a=car(ls)
  10. if( a->objType=="poly" then
  11. a=nthelem(2 parseString(a->layer "/"))
  12. else
  13. a=nthelem(2 parseString(car(a->startEnd) "/"))
  14. )
  15. if( a=="Silkscreen_Top" then
  16. layer=nthelem(2 layer_list)
  17. axlFormListSelect(fs "layer_name" layer)
  18. else
  19. if( a=="Silkscreen_Bottom" then
  20. layer=nthelem(length(layer_list)-1 layer_list)
  21. axlFormListSelect(fs "layer_name" layer)
  22. )
  23. )
  24. )
  25. axlFinishEnterFun()

  26. )



  27. defun( create_void_form ()
  28. create_void_file="./create_void_form.form"
  29. voidport=outfile(create_void_file "w")
  30. if( car(axlDBGetDesignUnits())=="mils" then
  31. s="mil"
  32. else
  33. s="mm"
  34. )
  35. if(voidport != nil then
  36. fprintf(voidport "FILE_TYPE=FORM_DEFN VERSION=2\n")
  37. fprintf(voidport "FORM\n")
  38. fprintf(voidport "FIXED\n")
  39. fprintf(voidport "PORT 40 60\n")
  40. fprintf(voidport "HEADER \"fanout BBvia\"\n")
  41. fprintf(voidport "TILE\n")
  42. fprintf(voidport "\n")

  43. fprintf(voidport "TEXT \"Select Layer\"\n")
  44. fprintf(voidport "TLOC 1 1\n")
  45. fprintf(voidport "ENDTEXT\n")
  46. fprintf(voidport "\n")

  47. fprintf(voidport "FIELD layer_name\n")
  48. fprintf(voidport "FLOC 10 1\n")
  49. fprintf(voidport "LIST \"\" 18 5\n")
  50. fprintf(voidport "ENDFIELD\n")
  51. fprintf(voidport "\n")


  52. fprintf(voidport "GROUP \"Select One Model\"\n")
  53. fprintf(voidport "GLOC 1 11\n")
  54. fprintf(voidport "GSIZE 20 7\n")
  55. fprintf(voidport "ENDGROUP\n")
  56. fprintf(voidport "\n")
  57. fprintf(voidport "FIELD ByPin\n")
  58. fprintf(voidport "FLOC 2 13\n")
  59. fprintf(voidport "CHECKLIST \" ByPin\" \"model\"\n")
  60. fprintf(voidport "ENDFIELD\n")
  61. fprintf(voidport "\n")
  62. fprintf(voidport "FIELD BySymbol\n")
  63. fprintf(voidport "FLOC 10 13\n")
  64. fprintf(voidport "CHECKLIST \" BySymbol\" \"model\"\n")
  65. fprintf(voidport "ENDFIELD\n")
  66. fprintf(voidport "\n")

  67. /* fprintf(voidport "FIELD xw\n")
  68. fprintf(voidport "FLOC 5 13\n")
  69. fprintf(voidport "REALFILLIN 6 3\n")
  70. fprintf(voidport "ENDFIELD\n")
  71. fprintf(voidport "\n")
  72. */
  73. fprintf(voidport "FIELD um\n")
  74. fprintf(voidport "FLOC 2 15\n")
  75. fprintf(voidport "REALFILLIN 6 6\n")
  76. fprintf(voidport "ENDFIELD\n")
  77. fprintf(voidport "\n")
  78. /*
  79. fprintf(voidport "TEXT \"W\"\n")
  80. fprintf(voidport "TLOC 13 13\n")
  81. fprintf(voidport "ENDTEXT\n")
  82. fprintf(voidport "\n")
  83. */
  84. fprintf(voidport "TEXT \"%s\"\n" s)
  85. fprintf(voidport "TLOC 13 15\n")
  86. fprintf(voidport "ENDTEXT\n")
  87. fprintf(voidport "\n")

  88. fprintf(voidport "FIELD add_void\n")
  89. fprintf(voidport "FLOC 1 19\n")
  90. fprintf(voidport "MENUBUTTON \"add void\" 15 3\n")
  91. fprintf(voidport "ENDFIELD\n")
  92. fprintf(voidport "\n")

  93. /* fprintf(voidport "FIELD add_L\n")
  94. fprintf(voidport "FLOC 1 22\n")
  95. fprintf(voidport "MENUBUTTON \"add line keepout\" 15 3\n")
  96. fprintf(voidport "ENDFIELD\n")
  97. fprintf(voidport "\n")
  98. */
  99. fprintf(voidport "ENDTILE\n")
  100. fprintf(voidport "ENDFORM\n")
  101. else
  102. printf("ERROR,can't create form file!")
  103. )
  104. close(voidport)
  105. ;axlFormCreate('fs clear_RF_file '("msgLines" 0) 'do_clear_RF nil nil )
  106. axlMiniStatusLoad( 'fs create_void_file 'do_create_void t )

  107. a=axlLayerGet("Board Geometry/Silkscreen_Top")
  108. s=""
  109. layer_list=nil
  110. while( s!=nil
  111. s=a->name
  112. layer_list=append1(layer_list s)
  113. s=a->nextLayer
  114. if( s!=nil then
  115. nextlayer=strcat("Board Geometry" "/" s)
  116. a=axlLayerGet(nextlayer)
  117. )
  118. )


  119. layer=nthelem(2 layer_list)
  120. axlFormListDeleteAll(fs "layer_name")
  121. axlFormSetField(fs "layer_name" layer_list)
  122. axlFormListSelect(fs "layer_name" layer)
  123. axlFormSetField(fs "xws" t)
  124. if( boundp('xs)==nil then
  125. xs="2.0"
  126. xum="5"
  127. )
  128. axlFormSetField(fs "xw" xs)
  129. axlFormSetField(fs "um" xum)
  130. axlFormDisplay(fs)
  131. if(isFile( create_void_file) then
  132. deleteFile(create_void_file)
  133. )
  134. )

  135. defun( do_create_void (voidport)
  136. case( voidport->curField
  137. ("layer_name"
  138. layer=voidport->curValue
  139. )
  140. ("xw"
  141. xs=voidport->curValue
  142. )
  143. ("um"
  144. xum=voidport->curValue
  145. )
  146. ("BySymbol"

  147. (prog ()


  148. axlSetFindFilter(?enabled list("noall" "shapes")
  149. ?onButtons list("noall" "shapes"))

  150. _shape=axlGetSelSet(axlSelect(?prompt "Select shape ."))
  151. shapeID = car(_shape)
  152. when( _shape
  153. axlSetFindFilter(?enabled list("noall" "symbols")
  154. ?onButtons list("noall" "symbols"))

  155. axlVisibleLayer("PIN/TOP" t)
  156. axlClearSelSet()
  157. symbolSelect = axlGetSelSet(axlSingleSelectBox(shapeID->bBox))
  158. ;symbolID = car(symbolSelect)
  159. axlClearSelSet()

  160. ;axlClearSelSet()
  161. foreach(symbol symbolSelect
  162. when( symbol->objType="symbol"
  163. sym_bBox = axlDBGetSymbolBodyExtent(symbol)
  164. mypath = axlPathStart( list(car(sym_bBox) caadr(sym_bBox):cadar(sym_bBox) cadr(sym_bBox) caar(sym_bBox):cadadr(sym_bBox)))
  165. mypath = axlPathLine(mypath, 0.0, car(sym_bBox))
  166. ss=0
  167. polydbid = axlPolyFromDB(mypath )
  168. println(polydbid)
  169. exp_poly = (axlPolyExpand polydbid ss 'ALL_ARC)
  170. a=car(exp_poly)->bBox

  171. ;axlHighlightObject(pin)
  172. ;a=car(exp_poly)->bBox
  173. ll = car(a)
  174. ur = cadr(a)
  175. llx = caar(a)
  176. lly = cadar(a)
  177. urx = caadr(a)
  178. ury = cadadr(a)



  179. voidpath = axlPathStart(list(ll (urx:lly) ur (llx:ury) ))
  180. voidpath = axlPathLine(voidpath, 0.0, ll)
  181. axlDBCreateVoid(shapeID voidpath)
  182. shapeID = car(axlDBCreateCloseShape( shapeID))
  183. )
  184. )
  185. )
  186. )
  187. )
  188. )
  189. )
复制代码
我想新增模式选择进行操作,请帮忙看看怎么修改,@deargds@XYX365
1.选择一个丝印层进行挖空
2.选择模式等待挖空
3.按钮执行








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