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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 2178|回复: 2

[资料] 一键给schematic里选择的所有symbol自动创建pin

[复制链接]
发表于 2023-2-13 16:04:55 | 显示全部楼层 |阅读模式

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

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

×
一键给电路里选择的所有symbol自动创建pin的skill程序。程序里定义的快捷键是"Ctrl<key>p",你可以根据自己的习惯改成自己的想定义的快捷键。

Create_pin_4schematic.txt

11.26 KB, 下载次数: 38 , 下载积分: 资产 -2 信元, 下载支出 2 信元

售价: 3 信元资产  [记录]

一键给电路里选择的所有symbol自动创建pin

发表于 2024-7-15 10:22:16 | 显示全部楼层
为什么 我自己建的symbol无法自动打pin啊,试了一下analog库的可以
回复 支持 反对

使用道具 举报

发表于 2025-7-8 13:00:09 | 显示全部楼层
楼主给的代码里判断连接到symbol的pin位置的代码里有些bug,如果器件连接到的器件有select box外的nlp label或其他text,也会计算在器件的bbox里,所以导致schematic里看到的器件范围和实际获得的不一样,导致pin_loc_detection_for_symbol返回的结果是nil,我在楼主的代码上进行了修改,用下面的代码替换原来的pin_loc_detection_for_symbol函数就可以正常生成pin了



   

        

                
  1. procedure(pin_loc_detection_for_symbol(pin_direction wire_points xleft ybottom xright ytop);detect pin location
  2.     let(
  3.         (
  4.             xleft_wire_poins
  5.             ybottom_wire_poins
  6.             xright_wire_poins
  7.             ytop_wire_poins
  8.             pin_loc_info
  9.             xcenter
  10.             ycenter
  11.         )

  12.         xleft_wire_poins = min(xCoord(lowerLeft( wire_points )) xCoord(upperRight( wire_points )))
  13.         ybottom_wire_poins = min(yCoord(lowerLeft( wire_points )) yCoord(upperRight( wire_points )))
  14.         xright_wire_poins = max(xCoord(lowerLeft( wire_points )) xCoord(upperRight( wire_points )))
  15.         ytop_wire_poins = max(yCoord(lowerLeft( wire_points )) yCoord(upperRight( wire_points )))

  16.         xcenter = (xleft+xright)/2
  17.         ycenter = (ybottom+ytop)/2

  18.         case(pin_direction
  19.             ("input"
  20.                 if( (ybottom_wire_poins == ytop_wire_poins) && (xleft_wire_poins <= xcenter) then
  21.                     pin_loc_info = list("input" xleft_wire_poins:ybottom_wire_poins "R0" )
  22.                 );the pin should be placed at the left
  23.                 if( (ybottom_wire_poins == ytop_wire_poins) && (xright_wire_poins > xcenter) then
  24.                     pin_loc_info = list("input" xright_wire_poins:ybottom_wire_poins "R180" )
  25.                 );;the pin should be placed at the right
  26.                 if( (xleft_wire_poins == xright_wire_poins) && (ytop_wire_poins >= ycenter) then
  27.                     pin_loc_info = list("input" xleft_wire_poins:ytop_wire_poins "R270" )
  28.                 );;the pin should be placed at the top
  29.                 if( (xleft_wire_poins == xright_wire_poins) && (ybottom_wire_poins < ycenter) then
  30.                     pin_loc_info = list("input" xleft_wire_poins:ybottom_wire_poins "R90" )
  31.                 );;the pin should be placed at the bottom
  32.             )
  33.             ("output"
  34.                 if( (ybottom_wire_poins == ytop_wire_poins) && (xleft_wire_poins <= xcenter) then
  35.                     pin_loc_info = list("output" xleft_wire_poins:ybottom_wire_poins "R180" )
  36.                 );if
  37.                 if( (ybottom_wire_poins == ytop_wire_poins) && (xright_wire_poins > xcenter) then
  38.                     pin_loc_info = list("output" xright_wire_poins:ybottom_wire_poins "R0" )
  39.                 );if
  40.                 if( (xleft_wire_poins == xright_wire_poins) && (ytop_wire_poins >= ycenter) then
  41.                     pin_loc_info = list("output" xleft_wire_poins:ytop_wire_poins "R90" )
  42.                 );if
  43.                 if( (xleft_wire_poins == xright_wire_poins) && (ybottom_wire_poins < ycenter) then
  44.                     pin_loc_info = list("output" xleft_wire_poins:ybottom_wire_poins "R270" )
  45.                );if
  46.             )
  47.             ("inputOutput"
  48.                 if( (ybottom_wire_poins == ytop_wire_poins) && (xleft_wire_poins <= xcenter) then
  49.                     pin_loc_info = list("inputOutput" xleft_wire_poins:ybottom_wire_poins "R0" )
  50.                 );if
  51.                 if( (ybottom_wire_poins == ytop_wire_poins) && (xright_wire_poins > xcenter) then
  52.                     pin_loc_info = list("inputOutput" xright_wire_poins:ybottom_wire_poins "R180" )
  53.                 );if
  54.                 if( (xleft_wire_poins == xright_wire_poins) && (ytop_wire_poins >= ycenter) then
  55.                     pin_loc_info = list("inputOutput" xleft_wire_poins:ytop_wire_poins "R270" )
  56.                 );if
  57.                 if( (xleft_wire_poins == xright_wire_poins) && (ybottom_wire_poins < ycenter) then
  58.                     pin_loc_info = list("inputOutput" xleft_wire_poins:ybottom_wire_poins "R90" )
  59.                 );if
  60.             )
  61.         );case
  62.      pin_loc_info
  63.     );let
  64. );procedure
            

   

    复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-8-25 16:07 , Processed in 0.014035 second(s), 5 queries , Gzip On, Redis On.

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