Sun 发表于 2013-6-27 07:53:27

route keep out skill,请帮忙提供

在布RF模块时,trace下面的铜皮也要挖掉,很麻烦,请帮忙提供

moping 发表于 2013-6-27 12:38:34

同求,同求了~~~

vivienluo 发表于 2013-6-27 21:35:37

你是想根据走线来创建一个route keep out 吗????如果是的话,这个SKILL应该很好写的。

chuankay 发表于 2013-6-27 23:55:55

是不是还要有挖孔隔离的啊

Sun 发表于 2013-6-28 08:28:14

是呀,还没写过,帮忙啦

XYX365 发表于 2013-6-28 08:33:18

本帖最后由 XYX365 于 2013-6-28 08:36 编辑

4RF线次层挖空
skill操作步聚:
1) 快捷键ctrl+R,在option页选择挖空层及设定间距。其中间距有两种设置方式:按线宽倍数及直接设定间距,任选一种。
   
2) 在板中选择次层要挖空的pin、via或chines,可单选、框选也可使用右键菜单的Temp Group命令多选(多选后必须再次右键选取complete完成;
3)点击add keepout,在选定层产生route keepout(如2)中选择不包含clines,无法判定线宽,间距设定自动跟从第二种方式)
4)选择两个pin,点击add line keepout,在两pin之间产生route keepout ,其他设置与上同。axlCmdRegister("clear_RF" `clear_RF)
axlSetAlias( "~R" "clear_RF")

defun( clear_RF ()
    clear_RF_form()
    axlSetFindFilter(?enabled `("NOALL" "CLINES" "pins" "vias" )      ?onButtons `("CLINES"))
    axlClearSelSet()
   
    cline_list=nil
    while( axlSelect()
      ls=axlGetSelSet()
      a=car(ls)
      if( a->objType=="path" then
            a=nthelem(2 parseString(a->layer "/"))
      else
            a=nthelem(2 parseString(car(a->startEnd) "/"))
      )
      if( a=="TOP" then
            layer=nthelem(2 layer_list)
            axlFormListSelect(fs "layer_name" layer)      
      else
            if( a=="BOTTOM" then
                layer=nthelem(length(layer_list)-1 layer_list)
                axlFormListSelect(fs "layer_name" layer)      
            )
      )
    )
    axlFinishEnterFun()
)

defun( clear_RF_form ()
   clear_RF_file="./clesr_RF_file.form"
   p=outfile(clear_RF_file "w")
    if( car(axlDBGetDesignUnits())=="mils" then
      s="mil"
    else
      s="mm"
    )
    if(p != nil then
      fprintf(p "FILE_TYPE=FORM_DEFN VERSION=2\n")
      fprintf(p "FORM\n")
      fprintf(p "FIXED\n")
      fprintf(p "PORT 40 60\n")
      fprintf(p "HEADER \"fanout BBvia\"\n")
      fprintf(p "TILE\n")
      fprintf(p "\n")
      
      fprintf(p "TEXT \"clear layer\"\n")
      fprintf(p "TLOC 1 1\n")
      fprintf(p "ENDTEXT\n")
      fprintf(p "\n")

      fprintf(p "FIELD layer_name\n")
      fprintf(p "FLOC 9 1\n")
      fprintf(p "LIST \"\" 12 5\n")
      fprintf(p "ENDFIELD\n")
      fprintf(p "\n")


            fprintf(p "GROUP \"clear space\"\n")
      fprintf(p "GLOC 1 11\n")
      fprintf(p "GSIZE 20 7\n")
      fprintf(p "ENDGROUP\n")
      fprintf(p "\n")
      fprintf(p "FIELD xws\n")
      fprintf(p "FLOC 2 13\n")
      fprintf(p "CHECKLIST \" \" \"1\"\n")
      fprintf(p "ENDFIELD\n")
      fprintf(p "\n")
      fprintf(p "FIELD width\n")
      fprintf(p "FLOC 2 15\n")
      fprintf(p "CHECKLIST \" \" \"1\"\n")
      fprintf(p "ENDFIELD\n")
      fprintf(p "\n")
      
      fprintf(p "FIELD xw\n")
      fprintf(p "FLOC 5 13\n")
      fprintf(p "REALFILLIN 6 3\n")
      fprintf(p "ENDFIELD\n")
      fprintf(p "\n")
      
      fprintf(p "FIELD um\n")
      fprintf(p "FLOC 5 15\n")
      fprintf(p "REALFILLIN 6 6\n")
      fprintf(p "ENDFIELD\n")
      fprintf(p "\n")

      fprintf(p "TEXT \"W\"\n")
      fprintf(p "TLOC 13 13\n")
      fprintf(p "ENDTEXT\n")
      fprintf(p "\n")
      
      fprintf(p "TEXT \"%s\"\n" s)
      fprintf(p "TLOC 13 15\n")
      fprintf(p "ENDTEXT\n")
      fprintf(p "\n")

      fprintf(p "FIELD add_s\n")
      fprintf(p "FLOC 1 19\n")
      fprintf(p "MENUBUTTON \"add keepout\" 15 3\n")
      fprintf(p "ENDFIELD\n")
      fprintf(p "\n")
      
      fprintf(p "FIELD add_L\n")
      fprintf(p "FLOC 1 22\n")
      fprintf(p "MENUBUTTON \"add line keepout\" 15 3\n")
      fprintf(p "ENDFIELD\n")
      fprintf(p "\n")
      
      fprintf(p "ENDTILE\n")
      fprintf(p "ENDFORM\n")
    else
      printf("ERROR,can't create form file!")
)
    close(p)
    ;axlFormCreate('fs clear_RF_file '("msgLines" 0) 'do_clear_RF nil nil )
    axlMiniStatusLoad( 'fs clear_RF_file'do_clear_RF t )
   
   a=axlLayerGet("ETCH/TOP")
    s=""
    layer_list=nil
    while( s!=nil
      s=a->name
      layer_list=append1(layer_list s)
      s=a->nextLayer
      if( s!=nil then
            nextlayer=strcat("ETCH" "/" s)
         a=axlLayerGet(nextlayer)
      )
    )

   
    layer=nthelem(2 layer_list)
    axlFormListDeleteAll(fs "layer_name")
    axlFormSetField(fs "layer_name" layer_list)
    axlFormListSelect(fs "layer_name" layer)      
    axlFormSetField(fs "xws" t)
    if( boundp('xs)==nil then
      xs="2.0"
      xum="0.6"
    )
    axlFormSetField(fs "xw" xs)
    axlFormSetField(fs "um" xum)
    axlFormDisplay(fs)
   if(isFile( clear_RF_file) then
      deleteFile(clear_RF_file)
    )
)
defun( do_clear_RF (fs)
    case( fs->curField
    ("layer_name"
      layer=fs->curValue
    )
    ("xw"
      xs=fs->curValue
    )
    ("um"
      xum=fs->curValue
    )
    ("add_s"
      if( ls!=nil then
            foreach(a ls
                polydbid = axlPolyFromDB(a, ?layer car(a->startEnd) ?padType 'REGULAR)
                if( axlFormGetField( fs "xws")=="1" then
                  i=1
                  while( nthelem(i ls)->objType!="path" && i<length(ls)
                        i=i+1
                  )
                  b=nthelem(i ls)
                  if( b->objType=="path" then
                        if( b->isSameWidth==t then
                            s=car(b->segments)->width*atof(xs)
                        else
                            s=0
                            foreach(c b->segments
                              if( c->width>s then s=c->width)
                            )
                            s=s*atof(xs)
                        )
                  else
                        s=atof(xum)
                        axlFormSetField(fs "width" t)
                  )
                  
                else
                  s=atof(xum)
                )
                exp_poly = (axlPolyExpand polydbid s 'ACU_ARC)
                axlDBCreateShape(car(exp_poly) t strcat("ROUTE KEEPOUT/" layer))
                sprintf(xum "%f" s)
                axlFormSetField(fs "um" xum)
            )
      )
    )
    ("add_L"
      if( length(ls)==2 then
            if( car(ls)->objType="pin" && cadr(ls)->objType=="pin" then
                s=atof(xum)
                polydbid = axlPolyFromDB(car(ls), ?layer car(car(ls)->startEnd) ?padType 'REGULAR)
                exp_poly = (axlPolyExpand polydbid s 'NONE)
                a=car(exp_poly)->bBox
                w1=abs(caar(a)-caadr(a))/2
                h1=abs(cadar(a)-cadadr(a))/2
               
                polydbid = axlPolyFromDB(cadr(ls), ?layer car(cadr(ls)->startEnd) ?padType 'REGULAR)
                exp_poly = (axlPolyExpand polydbid s 'NONE)
                a=car(exp_poly)->bBox
                w2=abs(caar(a)-caadr(a))/2
                h2=abs(cadar(a)-cadadr(a))/2

                s=atof(xum)
                a=car(ls)->xy
                b=cadr(ls)->xy
                if( abs(car(a)-car(b))>abs(cadr(a)-cadr(b)) then
                  path = axlPathStart( list(car(a):cadr(a)-h1 car(a):cadr(a)+h1 car(b):cadr(b)+h2 car(b):cadr(b)-h2 car(a):cadr(a)-h1 ))
                else
                  path = axlPathStart( list(car(a)-w1:cadr(a) car(a)+w1:cadr(a) car(b)+w2:cadr(b) car(b)-w2:cadr(b) car(a)-w1:cadr(a)))
                )
                axlDBCreateShape(path t strcat("ROUTE KEEPOUT/" layer))
            else
                print("Select two pins.")
            )
      else
            print("Select two pins.")
      )
    )
    )
   
)

Sun 发表于 2013-6-29 09:46:24

试一下啦,楼主,多谢

Sun 发表于 2013-6-29 10:06:53

多谢楼主了,试了下,真不错,有没有10度走线的skill,能否再给一个

sisic 发表于 2013-12-31 23:46:59

很好用收藏起來謝謝喔

這侽孓譙悴丶 发表于 2014-8-9 21:27:15

XYX365 发表于 2013-6-28 08:33
4RF线次层挖空
skill操作步聚:
1) 快捷键ctrl+R,在option页选择挖空层及设定间距。其中间距有两种设 ...

赞一个,很不错,由于使用负片层需要添加antietch切割线,楼主可否在这个skill里面增加这个功能,或告知如何修改
页: [1] 2
查看完整版本: route keep out skill,请帮忙提供