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

【Skill分享】快速生成差分孔反焊盘skill-改

[复制链接]
  • TA的每日心情
    郁闷
    2024-7-25 15:18
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    跳转到指定楼层
    1#
     楼主| 发表于 2025-5-16 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    本帖最后由 ashnoer 于 2025-5-16 17:58 编辑

    由@ChinaLian分享的skill源码改的

    改动:现在可以单选、框选2个过孔或者Pin创建反焊盘


    1. ; --------------------------------------------------
    2. ; allegro version: 16.6
    3. ; Written by: Lianora
    4. ; date: 2021.09.11
    5. ; --------------------------------------------------
    6. ; 功能说明:单击选择两个差分信号过孔,生成过孔反焊盘
    7. ;           有助于减小差分阻抗在过孔处的突变程度
    8. ; --------------------------------------------------

    9. axlCmdRegister(
    10.   "DVAP"
    11.   'lnDiffViaAntiPad
    12.   ?cmdType "interactive"
    13.   ?doneCmd 'lnDone
    14.   ?cancelCmd 'lnCancel
    15. )

    16. ; --------------------------------------------------
    17. ; 主程序入口函数
    18. ; --------------------------------------------------
    19. procedure(lnDiffViaAntiPad(@optional (expandValue_via 0))
    20.   let(()
    21.   ; 设置 find 栏参数,仅勾选 "vias"
    22.     axlSetFindFilter(
    23.       ?enabled list("noall" "Pins" "vias")
    24.       ?onButtons list("noall" "Pins" "vias")
    25.     )
    26.   ; 设置右键弹出功能项
    27.     ln_popup = axlUIPopupDefine(nil (list
    28.             (list "Done" 'lnDone)
    29.             (list "Oops" 'lnOops)
    30.             (list "Cancel" 'lnCancel))
    31.           )
    32.     axlUIPopupSet(ln_popup)
    33.   
    34.   ; 创建一个表单,在 options 栏中显示需要设置的参数
    35.     lnCreateParamForm()
    36.    
    37.   ; 定义一个循环标记
    38.     notdone = t
    39.   
    40.   ;获取 class/subclass 信息
    41.     t_activelayer = axlGetActiveLayer()
    42.   
    43.     ln_mark = axlDBTransactionStart()
    44.    
    45.     while(notdone

    46.       l_via1 = nil
    47.       l_via2 = nil

    48.       P = axlGetSelSet(axlSelect(?prompt "Please select the first via...\n"))
    49.       (case length(P)
    50.         (1 ;继续选择第二个过孔
    51.           l_via1 = car(P)
    52.           printf("Please select the second via...\n")
    53.           l_via2 = car(axlGetSelSet(axlSingleSelectPoint()))
    54.           CreateShape(l_via1 l_via2)
    55.         )
    56.         (2 ;直接创建
    57.           CreateShape(car(P) cadr(P))
    58.         )
    59.       )
    60.     )
    61.   )
    62. )

    63. (procedure CreateShape(l_via1 l_via2)
    64.       if(l_via2 then
    65.         axlDBTransactionMark(ln_mark)
    66.         pad1 = axlDBGetPad(l_via1 "ETCH/TOP" "REGULAR")
    67.         pad2 = axlDBGetPad(l_via2 "ETCH/TOP" "REGULAR")
    68.   ; 计算出外扩相应尺寸后的线宽     
    69.         cline_width = caadr(pad1->bBox) - caar(pad1->bBox) + expandValue_via
    70.         
    71.         printf("cline_width is %-.2f \n" cline_width)
    72.   ; 在TOP层创建一根线段     
    73.         l_cline = axlDBCreateLine(
    74.                 list(l_via1->xy l_via2->xy)
    75.                 cline_width
    76.                 "ANTI ETCH/TOP"
    77.                 nil
    78.                 nil
    79.               )
    80.   ; 通过 cline2shape 将 cline 转换成相应层面的 shape
    81.         if(l_cline then
    82.           l_poly = axlPolyFromDB(caar(l_cline) ?endCapType "ROUND")
    83.           l_shape = axlDBCreateShape(car(l_poly) t t_activelayer)
    84.   ; 如果所在层面是 ROUTE KEEPOUT , 需给 shpae 增加如下两个属性,可以消除走线和过孔的DRC
    85.   ; 并保留避让铜皮属性
    86.           if(car(parseString(t_activelayer "/")) == "ROUTE KEEPOUT" then
    87.             axlDBAddProp(car(l_shape) list("vias_allowed" t))
    88.             axlDBAddProp(car(l_shape) list("routes_allowed" t))
    89.           )
    90.   ; 删除辅助 cline
    91.           axlDeleteObject(caar(l_cline))
    92.         )
    93.       )
    94. )

    95. ; --------------------------------------------------
    96. ; 创建参数设置 form 函数
    97. ; --------------------------------------------------
    98. procedure(lnCreateParamForm()
    99.   let((FileName FilePort)
    100.     FileName = "create_pARM_form.form"
    101.     FilePort = outfile(FileName "w")
    102.    
    103.     fprintf(FilePort "FILE_TYPE=FORM_DEFN VERSION=2\n")
    104.     fprintf(FilePort "FORM\n")
    105.     fprintf(FilePort "FIXED\n")
    106.     fprintf(FilePort "PORT 24 50\n")
    107.     fprintf(FilePort "HEADER \"Diff Via Anti Pad\"\n\n")
    108.    
    109.     fprintf(FilePort "POPUP <class>\"class\"\n")
    110.     fprintf(FilePort "POPUP <subclass>\"subclass\"\n")
    111.    
    112.     fprintf(FilePort "TILE\n\n")
    113.    
    114.     fprintf(FilePort "TEXT \"Active Class and Subclass:\"\n\n")
    115.     fprintf(FilePort "TLOC 1 1\n")
    116.     fprintf(FilePort "ENDTEXT\n\n")
    117.   ; class enumeration drop-dowm box
    118.     fprintf(FilePort "FIELD class\n")
    119.     fprintf(FilePort "FLOC 5 4\n")
    120.     fprintf(FilePort "ENUMSET 19\n")
    121.     fprintf(FilePort "OPTIONS prettyprint\n")   
    122.     fprintf(FilePort "POP \"class\"\n")
    123.     fprintf(FilePort "ENDFIELD\n\n")
    124.   ; subclass color check box  
    125.     fprintf(FilePort "FIELD subcolor\n")
    126.     fprintf(FilePort "FLOC 2 7\n")
    127.     fprintf(FilePort "COLOR 2 1\n")
    128.     fprintf(FilePort "OPTIONS colcrchooser\n")
    129.     fprintf(FilePort "ENDFIELD\n\n")
    130.   ; subclass enumeration drop-dowm box  
    131.     fprintf(FilePort "FIELD subclass\n")
    132.     fprintf(FilePort "FLOC 5 7\n")
    133.     fprintf(FilePort "ENUMSET 19\n")
    134.     fprintf(FilePort "OPTIONS prettyprint ownerdrawn\n")
    135.     fprintf(FilePort "POP \"subclass\"\n")
    136.     fprintf(FilePort "ENDFIELD\n\n")
    137.   ; enter the expand size of via
    138.     fprintf(FilePort "TEXT \"Expand size of vias (mils):\"\n\n")
    139.     fprintf(FilePort "TLOC 1 11\n")
    140.     fprintf(FilePort "ENDTEXT\n\n")
    141.    
    142.     fprintf(FilePort "FIELD expandValue_via\n\n")
    143.     fprintf(FilePort "FLOC 19 11\n\n")
    144.     fprintf(FilePort "REALFILLIN 6 6\n\n")
    145.     fprintf(FilePort "MIN 0\n\n")
    146.     fprintf(FilePort "ENDFIELD\n\n")
    147.    
    148.     fprintf(FilePort "ENDTILE\n\n")
    149.     fprintf(FilePort "ENDFORM\n")
    150.    
    151.     close(FilePort)
    152.    
    153.     createparmform = axlMiniStatusLoad(gensym() FileName 'lnCreateParmFormCB nil "NONE")
    154.   )
    155. )
    156. ; --------------------------------------------------
    157. ; 参数设置 form 回调函数
    158. ; --------------------------------------------------
    159. procedure(lnCreateParmFormCB(form)
    160.   case(form->cuRField
    161.     ("class"
    162.       t_activelayer = axlGetActiveLayer()
    163.     )
    164.     ("subclass"
    165.       t_activelayer = axlGetActiveLayer()
    166.     )
    167.     ("subcolor"
    168.       if(axlFormGetField(form "subcolor") then
    169.         axlVisibleLayer(axlGetActiveLayer() t)
    170.       else
    171.         axlVisibleLayer(axlGetActiveLayer() t)
    172.       )
    173.     )
    174.     ("expandValue_via"
    175.       expandValue_via= axlFormGetField(form "expandValue_via")
    176.       printf("expandValue_via is %-.2f" expandValue_via)  
    177.         
    178.     )
    179.   )
    180. )

    181. ; --------------------------------------------------
    182. ; 结束命令回调函数
    183. ; --------------------------------------------------
    184. procedure(lnDone()
    185.   let(()
    186.     axlDBTransactionCommit(ln_mark)
    187.     notdone = nil
    188.     axlCancelEnterFun()
    189.   )
    190. )

    191. ; --------------------------------------------------
    192. ; 回撤命令回调函数
    193. ; --------------------------------------------------
    194. procedure(lnOops()
    195.   let(()
    196.     axlDBTransactionOops(ln_mark)
    197.     axlCancelEnterFun()
    198.   )
    199. )

    200. ; --------------------------------------------------
    201. ; 取消命令回调函数
    202. ; --------------------------------------------------
    203. procedure(lnCancel()
    204.   let(()
    205.     axlDBTransactionCommit(ln_mark)
    206.     notdone = nil
    207.     axlCancelEnterFun()
    208.   )
    209. )
    复制代码



    评分

    参与人数 1威望 +2 收起 理由
    db-_- + 2 赞一个!

    查看全部评分

    该用户从未签到

    2#
    发表于 2025-5-16 16:06 | 只看该作者
    看起来不错,谢谢分享

    该用户从未签到

    3#
    发表于 2025-5-16 17:11 | 只看该作者
    谢谢分享666
  • TA的每日心情
    开心
    2021-1-19 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2025-5-16 22:19 | 只看该作者
    谢谢分享呀

    “来自电巢APP”

    该用户从未签到

    6#
    发表于 2025-5-19 09:02 | 只看该作者
    感谢了,学习一下,有注释..

    该用户从未签到

    7#
    发表于 2025-5-19 17:55 | 只看该作者
    expandValue_via这个参数值没有回传到procedure CreateShape(l_via1 l_via2)这个函数,麻烦楼主再查看一下。
  • TA的每日心情
    开心
    2024-3-26 15:26
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    8#
    发表于 2025-5-21 11:40 | 只看该作者
    可以一键创建所有差分线反焊盘?

    点评

    不行,只是在原skill上小改了一下  详情 回复 发表于 2025-5-21 18:42
  • TA的每日心情
    郁闷
    2024-7-25 15:18
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    9#
     楼主| 发表于 2025-5-21 18:42 | 只看该作者
    Cadence_skill 发表于 2025-5-21 11:40
    可以一键创建所有差分线反焊盘?

    不行,只是在原skill上小改了一下
  • TA的每日心情
    开心
    2020-7-12 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    10#
    发表于 2025-5-31 07:32 | 只看该作者
    谢谢分享。

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-2 15:50 , Processed in 0.093750 second(s), 24 queries , Gzip On.

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

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

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