找回密码
 注册
关于网站域名变更的通知
查看: 864|回复: 13
打印 上一主题 下一主题

Voidadd for silk

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-12-19 21:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
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]

void.JPG (37.54 KB, 下载次数: 0)

void on silk

void on silk

该用户从未签到

推荐
发表于 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. )
复制代码


点评

我想新增模式选择进行操作,请帮忙看看怎么修改,@deargds@XYX365 1.选择一个丝印层进行挖空 2.选择模式等待挖空 3.按钮执行  详情 回复 发表于 2017-1-9 11:13
感谢deargds  详情 回复 发表于 2016-12-23 18:07

该用户从未签到

3#
发表于 2016-12-20 10:41 | 只看该作者
这个代码的功能是选择被shape覆盖的pin,然后以pin边缘扩展5mil在shape上面开窗吧?
有没有考虑到shape和pin都是异形时候的情况?

点评

从简单的开始  详情 回复 发表于 2016-12-20 11:56

该用户从未签到

4#
 楼主| 发表于 2016-12-20 11:56 | 只看该作者
chrysalis 发表于 2016-12-20 10:41
这个代码的功能是选择被shape覆盖的pin,然后以pin边缘扩展5mil在shape上面开窗吧?
有没有考虑到shape和p ...

从简单的开始

点评

那就把findfilter设置为pins,以shape的bbox框选一次,就可以得到一堆pin,再一个个判断筛选处理  详情 回复 发表于 2016-12-20 13:43

该用户从未签到

5#
发表于 2016-12-20 13:43 | 只看该作者

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

点评

可以写代码出来吗,我写的有问题,执行不出来啊  详情 回复 发表于 2016-12-20 23:12

该用户从未签到

6#
 楼主| 发表于 2016-12-20 23:12 | 只看该作者
chrysalis 发表于 2016-12-20 13:43
那就把findfilter设置为pins,以shape的bbox框选一次,就可以得到一堆pin,再一个个判断筛选处理

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

该用户从未签到

9#
 楼主| 发表于 2016-12-23 18:07 | 只看该作者

该用户从未签到

12#
发表于 2017-1-3 12:00 | 只看该作者
请问这个skill调用的指令是什么?

点评

axlCmdRegister("Voidadd" 'void_C)  详情 回复 发表于 2017-1-3 14:03

该用户从未签到

13#
 楼主| 发表于 2017-1-3 14:03 | 只看该作者
gdm0121 发表于 2017-1-3 12:00
请问这个skill调用的指令是什么?

axlCmdRegister("Voidadd" 'void_C)

该用户从未签到

14#
 楼主| 发表于 2017-1-9 11:13 | 只看该作者
  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.按钮执行



void.jpg (54.67 KB, 下载次数: 0)

void for one silkscreen shape

void for one silkscreen shape
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-16 20:15 , Processed in 0.109375 second(s), 36 queries , Gzip On.

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

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

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