找回密码
 注册
查看: 1633|回复: 7
打印 上一主题 下一主题

RF线次层挖空 route keep out skill

[复制链接]
  • TA的每日心情
    郁闷
    2024-11-4 15:41
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    跳转到指定楼层
    1#
    发表于 2020-4-18 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    RF线次层挖空
    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 ,其他设置与上同。
    网上搜索的代码,skill会报错,有没有大佬指点一下,跪谢

    以下是原代码:

    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.")
            )
        )
        )

    )



  • TA的每日心情
    开心
    2020-1-6 15:29
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2020-4-21 00:52 | 只看该作者
    定义Form文件时,有些地方应该是\",不是单个"

    点评

    多谢大佬指点  详情 回复 发表于 2020-4-29 15:53
  • TA的每日心情
    开心
    2020-9-29 15:43
  • 签到天数: 71 天

    [LV.6]常住居民II

    4#
    发表于 2020-4-21 09:32 | 只看该作者
    我怎么看这个有点熟悉

    点评

    这个程序有问题,报错  详情 回复 发表于 2020-4-29 15:51
  • TA的每日心情
    郁闷
    2024-11-4 15:41
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    5#
     楼主| 发表于 2020-4-29 15:51 | 只看该作者
    王者和马 发表于 2020-4-21 09:32
    我怎么看这个有点熟悉

    这个程序有问题,报错
  • TA的每日心情
    郁闷
    2024-11-4 15:41
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    6#
     楼主| 发表于 2020-4-29 15:53 | 只看该作者
    jason_hsu 发表于 2020-4-21 00:52
    定义Form文件时,有些地方应该是\",不是单个"

    多谢大佬指点

    该用户从未签到

    7#
    发表于 2020-5-16 23:04 | 只看该作者
    学习到了

    “来自电巢APP”

  • TA的每日心情
    开心
    2021-3-3 15:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    8#
    发表于 2022-7-14 15:38 | 只看该作者
    这个skill可以发个可以用的么,tks
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-5-29 20:22 , Processed in 0.093750 second(s), 24 queries , Gzip On.

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

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

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