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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1497|回复: 6

[原创] layout选中path线或via孔,使用快捷键框选相同width/layer长度的path及相同尺寸的孔

[复制链接]
发表于 2024-1-28 20:13:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
layout选中path线或via孔,使用快捷键框选相同width/layer长度的path及相同尺寸的孔,但是好像有时候会有bug,可以讨论代码有无问题
有信元就随缘下载,源码也贴出来了





procedure(selectobj()
let((select_objs cv BOX objs)
select_objs = geGetSelSet()
cv = geGetEditCellView()
BOX=enterBox()
BOX=list(geWindowToEditPoint(hiGetCurrentWindow() xCoord(BOX))
         geWindowToEditPoint(hiGetCurrentWindow() yCoord(BOX)))
objs=dbGetOverlaps(cv BOX)
foreach(obj_sl select_objs
   case(obj_sl~>objType
   ("path"
       foreach(newobj objs
        if((obj_sl ~> lpp == newobj ~> lpp) &&
           (obj_sl ~> width == newobj ~> width) &&
           sizebox(obj_sl ~> bBox) == sizebox(newobj ~> bBox)
        then       
        geSelectObject(newobj)       
           );if       
               );foreach
   );case_path
   ("stdVia"
       foreach(newobj objs
        if((newobj ~> viaHeader ~> viaDefName == obj_sl ~> viaHeader ~> viaDefName) &&
            sizebox(obj_sl ~> bBox) == sizebox(newobj ~> bBox)
        then       
        geSelectObject(newobj)
           );if
   );foreach_newobj
   );case_via
   (t println("This obj_sl isn't I need"))
);case
);foreach
);let
);pre

procedure(sizebox(bBox)
prog((x1 x2 y1 y2 box_list)
x1=leftEdge(bBox)
x2=rightEdge(bBox)
y1=bottomEdge(bBox)
y2=topEdge(bBox)
box_list=list(x2-x1 y2-y1)
return(box_list)
);prog
);procedure
hiSetBindKey("Layout" "<Key>`" "selectobj()")




selectobj.zip

663 Bytes, 下载次数: 13 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2024-1-31 21:22:34 | 显示全部楼层
解决了,问题出在了浮点数的判断上,将其转换为字符串再对比就ok了
 楼主| 发表于 2024-1-31 21:29:19 | 显示全部楼层
改进之后的源码,有信元就下载支持下,没有就直接copy吧
procedure(selectobj()
let((select_objs cv BOX objs)
select_objs = geGetSelSet()
cv = geGetEditCellView()
BOX=enterBox()
BOX=list(geWindowToEditPoint(hiGetCurrentWindow() xCoord(BOX))
         geWindowToEditPoint(hiGetCurrentWindow() yCoord(BOX)))
objs=dbGetOverlaps(cv BOX)
foreach(obj_sl select_objs
   case(obj_sl~>objType
   ("path"
       objs_path=setof(x objs x~>objType=="path")
       foreach(obj_path objs_path
        if((obj_sl ~> lpp == obj_path ~> lpp) &&
           (obj_sl ~> width == obj_path ~> width) &&
           (sizebox(obj_sl ~> bBox) == sizebox(obj_path ~> bBox))
        then       
        geSelectObject(obj_path)       
           );if       
               );foreach
   );case_path
   ("stdVia"
       objs_via=setof(x objs x~>objType=="stdVia")
       foreach(obj_via objs_via
        if((obj_via ~> viaHeader ~> viaDefName == obj_sl ~> viaHeader ~> viaDefName) &&
            (sizebox(obj_sl ~> bBox) == sizebox(obj_via ~> bBox))
        then       
        geSelectObject(obj_via)
           );if
   );foreach_obj_via
   );case_via
   (t println("This obj_sl isn't I need"))
);case
);foreach
);let
);pre

procedure(sizebox(bBox)
prog((x1 x2 y1 y2 z1 z2 zx zy box_list )
x1=leftEdge(bBox)
x2=rightEdge(bBox)
y1=bottomEdge(bBox)
y2=topEdge(bBox)
z1=x2-x1
z2=y2-y1
sprintf(zx "%f" z1)
sprintf(zy "%f" z2)
box_list=list(zx zy)
return(box_list)
);prog
);procedure
hiSetBindKey("Layout" "<Key>`" "selectobj()")

selectobj.zip

735 Bytes, 下载次数: 15 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2024-2-1 13:35:48 | 显示全部楼层
请问是哪些场景应用?
 楼主| 发表于 2024-2-1 20:45:11 | 显示全部楼层


zsen 发表于 2024-2-1 13:35
请问是哪些场景应用?


万花丛中只取一点红,懂吗
发表于 2024-3-19 11:04:23 | 显示全部楼层
感谢分享
发表于 2024-3-19 13:04:09 | 显示全部楼层
感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-26 12:31 , Processed in 0.020107 second(s), 7 queries , Gzip On, Redis On.

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