在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 唐亮

[原创] 分享一个自动打孔和连线的脚本

[复制链接]
发表于 2024-8-27 15:05:53 | 显示全部楼层


唐亮 发表于 2024-8-27 14:55
hiSetBindKey("Layout" "5" "LineAndVia()")
procedure(findx()
prog((obj obj1)


大佬 按照你的操作方法 试了 脚本正常load 进去了 没有反应啊 可以正常选中线 没有via
 楼主| 发表于 2024-8-27 15:10:09 | 显示全部楼层


yeshaoxiangshen 发表于 2024-8-27 15:05
大佬 按照你的操作方法 试了 脚本正常load 进去了 没有反应啊 可以正常选中线 没有via ...


线也没有变化吗?

运行之后的CIW窗口我看一下呢
发表于 2024-8-27 15:14:37 | 显示全部楼层


唐亮 发表于 2024-8-27 15:10
线也没有变化吗?

运行之后的CIW窗口我看一下呢


就是这样的线也不动
微信截图_20240827151313.png
发表于 2024-8-27 15:14:42 | 显示全部楼层


唐亮 发表于 2024-8-27 14:55
hiSetBindKey("Layout" "5" "LineAndVia()")
procedure(findx()
prog((obj obj1)


佬,改完之后报了这个错
06496e4e839b38b32cb6e178bb0ce33.png
 楼主| 发表于 2024-8-27 15:26:36 | 显示全部楼层
hiSetBindKey("Layout" "<Key>5" "LineAndVia()")
procedure(findx()
prog((obj obj1)
obj = geGetSortedSelectByLine()
obj1 = geGetSortedSelectByLine()
return(list(obj obj1))   ;已修改
)
)
procedure(conline(list1 list2 dir)
let((s1 s2 w1 w2 a b c d s1b s1e s2b s2e tt tt2 area)   ;已修改,删掉了dir
        x = length(list1)
        while(x>0
                s1 = car(nth(x-1 list1))
                s2 = car(nth(x-1 list2))
                w1 = s1~>width/2
                w2 = s1~>width/2
                a = caar(nth(0 list1)~>beginPt)
                b = caar(nth(x-1 list1)~>beginPt)
                c = cadar(nth(0 list2)~>beginPt)
                d = cadar(nth(x-1 list2)~>beginPt)
        cond(
                ((b-a)*(d-c)>0 tt = 1)
                ((b-a)*(d-c)<0 tt = 0)
        )
        s1b = s1~>beginPt s1e = s1~>endPt
        s2b = s1~>beginPt s2e = s1~>endPt
        cond(
                (dir == "7"
                        when(cadr(s1b) - cadr(s1e) < 0
                                dbSetPathSegPoints(s1 s1e s1b)
                        )
                        when(car(s2b) - car(s2e) < 0
                                dbSetPathSegPoints(s2 s2e s2b)
                        )
                        s1~>beginPt = list(car(s1~>beginPt) cadr(s2~>beginPt) + w2)
                        s2~>beginPt = list(car(s1~>beginPt) + w1 cadr(s2~>beginPt))
                        area = list(
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) - w2)
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) - w2)
                        )
                        tt = abs(tt-1)
                        CreatVia(area tt2)
                )
                (dir == "F"
                        when(cadr(s1b) - cadr(s1e) < 0
                                dbSetPathSegPoints(s1 s1e s1b)
                        )
                        when(car(s2b) - car(s2e) > 0
                                dbSetPathSegPoints(s2 s2e s2b)
                        )
                        s1~>beginPt = list(car(s1~>beginPt) cadr(s2~>beginPt) + w2)
                        s2~>beginPt = list(car(s1~>beginPt) - w1 cadr(s2~>beginPt))
                        area = list(
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) - w2)
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) - w2)
                        )
                        tt2 = abs(tt-1)
                        CreatVia(area tt2)
                )
                (dir == "J"
                        when(cadr(s1b) - cadr(s1e) > 0
                                dbSetPathSegPoints(s1 s1e s1b)
                        )
                        when(car(s2b) - car(s2e) < 0
                                dbSetPathSegPoints(s2 s2e s2b)
                        )
                        s1~>beginPt = list(car(s1~>beginPt) cadr(s2~>beginPt) - w2)
                        s2~>beginPt = list(car(s1~>beginPt) + w1 cadr(s2~>beginPt))
                        area = list(
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) - w2)
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) - w2)
                        )
                        CreatVia(area tt)
                )
                (dir == "L"
                        when(cadr(s1b) - cadr(s1e) > 0
                                dbSetPathSegPoints(s1 s1e s1b)
                                )
                        when(car(s2b) - car(s2e)
                                dbSetPathSegPoints(s2 s2e s2b)
                                )
                        s1~>beginPt = list(car(s1~>beginPt) cadr(s2~>beginPt) - w2)  ;已修改
                        s2~>beginPt = list(car(s1~>beginPt) - w1 cadr(s2~>beginPt))
                        area = list(
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) - w2)
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) - w2)
                        )
                        CreatVia(area tt)
                        )
        )
        x = x - 1
)
)
)  ;这里加了一个括号
procedure(CreatVia(listin t1)
       let((techFile constraintGroupId myViaOptions)  ;已修改,删掉了t1
                cond(
                        (t1 == 0 t2 = "centerRight")
                        (t1 == 1 t2 = "centerLeft")
                        )
                techFile = techGetTechFile(geGetEditRep())
                constraintGroupId = cstFindCondtraintGroupIn(techFile "virtuosoDefaultSetup")
                myViaOptions = viaGetViaOptions(constraintGroupId)
                myViaOptions~>automatic~>viaAlignment = t2
                myViaOptions~>automatic~>minNumCuts = 2
                myViaOptions~>createInRoute = nil
                myViaOptions~>automatic~>preventDRCWithNeighbors = nil
                myViaOptions~>automatic~>cutBBoxOrientation = "horizontal"
                viaGenerateViasInArea(deGetCellView() listin myViaOptions)
                )
        )
procedure(LineAndVia()
        let((selid sel1 sel2 sel1lx sel1ly sel1rx sel1ry sel2lx sel2ly sel2rx sel2ry dir)
                selid = findx()
                sel1 = car(selid)
                sel2 = cadr(selid)
                if(length(sel1) != length(sel2)
                        then
                                printf("chong xin xuan ze !")
                        else
                                when(caar(car(sel1)~>beginPt) != caar(car(sel1)~>endPt)
                                        sel1 = cadr(selid)
                                        sel2 = car(selid)
                                        )
                                sel1lx = caar(car(car(sel1)~>bBox)) sel1ly = cadar(car(car(sel1)~>bBox))
                                sel1rx = caadr(car(car(sel1)~>bBox)) sel1ry = cadadr(car(car(sel1)~>bBox))
                                sel2lx = caar(car(car(sel2)~>bBox)) sel2ly = cadar(car(car(sel2)~>bBox))
                                sel2rx = caadr(car(car(sel2)~>bBox)) sel2ry = cadadr(car(car(sel2)~>bBox))
                                cond(
                                        ((sel2rx + sel2lx)/2 < sel1lx && sel2ly > (sel1ry + sel1ly)/2
                                                dir = "7"
                                                conline(sel1 sel2 dir)
                                                )
                                        ((sel2rx + sel2lx)/2 > sel1rx && sel2ly > (sel1ry + sel1ly)/2
                                                dir = "F"
                                                conline(sel1 sel2 dir)
                                                )
                                        ((sel2rx + sel2lx)/2 < sel1lx && sel2ry < (sel1ry + sel1ly)/2
                                                dir = "J"
                                                conline(sel1 sel2 dir)
                                                )
                                        ((sel2rx + sel2lx)/2 > sel1rx && sel2ry < (sel1ry + sel1ly)/2
                                                dir = "L"
                                                conline(sel1 sel2 dir)

                                                )
                                        )
                        )
                )
        )

 楼主| 发表于 2024-8-27 15:29:17 | 显示全部楼层


yucer 发表于 2024-8-27 15:14
佬,改完之后报了这个错


这个线是要求panthSeg,你是用path画的线吗?

发表于 2024-8-27 15:31:45 | 显示全部楼层


唐亮 发表于 2024-8-27 15:29
这个线是要求panthSeg,你是用path画的线吗?


大佬能搞个Wire线的吗
 楼主| 发表于 2024-8-27 15:42:28 | 显示全部楼层


2998224923 发表于 2024-8-27 15:31
大佬能搞个Wire线的吗


wire线画出来的就是pathSeg
发表于 2024-8-27 15:43:25 | 显示全部楼层


唐亮 发表于 2024-8-27 15:29
这个线是要求panthSeg,你是用path画的线吗?


我是wire线,不过还是谢谢佬了
发表于 2024-8-27 15:47:27 | 显示全部楼层


唐亮 发表于 2024-8-27 15:29
这个线是要求panthSeg,你是用path画的线吗?


那好像我没反应
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-18 04:26 , Processed in 0.024929 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表