找回密码
 注册
关于网站域名变更的通知
123
返回列表 发新帖
楼主: Pkron
打印 上一主题 下一主题

請各位大神幫幫忙寫CHECK裸銅SKILL

[复制链接]
  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    31#
    发表于 2022-2-10 09:27 | 只看该作者

    4楼。不知道为啥下载附件这么贵噢。
  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    32#
    发表于 2022-2-11 19:19 | 只看该作者
    我还以为你们两是同事呢
  • TA的每日心情
    开心
    2023-1-16 15:50
  • 签到天数: 43 天

    [LV.5]常住居民I

    33#
    发表于 2022-9-29 11:25 | 只看该作者
    非常感謝DB大大,剛好也遇到相同問題,很實用的SKILL!

    该用户从未签到

    34#
    发表于 2022-10-29 18:59 | 只看该作者
    請問也下載來學習 謝謝樓主與db大大

    “来自电巢APP”

    该用户从未签到

    35#
    发表于 2022-11-2 20:39 | 只看该作者
    db大大您好
    我下載了您這skill覺得非常實用

    但是我想請您幫忙在增加check via的部分

    這樣一來就更完善了 謝謝您的熱情幫忙

    感謝

    “来自电巢APP”

  • TA的每日心情
    开心
    2025-5-8 15:34
  • 签到天数: 81 天

    [LV.6]常住居民II

    36#
    发表于 2023-9-22 15:56 | 只看该作者
    謝謝分享謝謝
  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    37#
    发表于 2023-10-12 16:52 | 只看该作者
    很久以前写的了,效率有点低,但是多等会儿还是能检查出来的,有能力的可以自己优化一下。

    v1.4.1 显示via层,修增length计数问题
    v1.4 增加via
    check_solder_of_mul_net.rar (1.62 KB, 下载次数: 8)

    1. ;;v1.4.1 显示via层,修增length计数问题
    2. ;;v1.4 增加via
    3. ;;v1.3 修正net网络名显示
    4. ;;v1.2 显示所有重叠的元素
    5. ;;v1.1 增加shape比对,增加net名/当前层显示
    6. ;;v1.0 初稿
    7. ;;check_solder_of_mul_net.il
    8. ;;指令: chksmn
    9. ;;功能:检测一个solder是否覆盖多个net(cline、shape、via)
    10. ;;描述:v1.4.1
    11. ;;  

    12. axlCmdRegister("chksmn" 'dbCheckSolderOfMulNet)

    13. procedure(dbCheckSolderOfMulNet()
    14. (let (visList tmpFile res1 res2)

    15.         visList = axlVisibleGet()        ;保存视图
    16.         tmpFile = axlTempFile()
    17.         res1 = _dbCheckSolderOfMulNet("TOP" tmpFile)
    18.         res2 = _dbCheckSolderOfMulNet("BOTTOM" tmpFile)
    19.         if(res1 || res2 then
    20.                 axlVisibleDesign(nil)                ;关闭全部层
    21.                 axlVisibleLayer("ETCH/TOP" t)        ;开启这层
    22.                 axlVisibleLayer("VIA CLASS/TOP" t)        ;开启这层
    23.                 axlVisibleLayer("BOARD GEOMETRY/SOLDERMASK_TOP" t)                ;开启这层
    24.                 axlVisibleLayer("PACKAGE GEOMETRY/SOLDERMASK_TOP" t)        ;开启这层
    25.                 axlVisibleLayer("ETCH/BOTTOM" t)        ;开启这层
    26.                 axlVisibleLayer("VIA CLASS/BOTTOM" t)        ;开启这层
    27.                 axlVisibleLayer("BOARD GEOMETRY/SOLDERMASK_BOTTOM" t)                ;开启这层
    28.                 axlVisibleLayer("PACKAGE GEOMETRY/SOLDERMASK_BOTTOM" t)        ;开启这层
    29.                 axlUIWExpose(axlUIViewFileCreate(tmpFile "Solder of multi net CHECK" t))        ;显示文件
    30.                 axlTempFileRemove(tmpFile)        ;删除临时文件
    31.         else
    32.                 axlVisibleSet(visList)        ;还原视图
    33.                 printf("No intersectional shapes, vias or lines.")
    34.         )
    35.         axlVisibleUpdate(nil)                ;显示生效
    36. ))

    37. procedure(_dbCheckSolderOfMulNet(layer tmpFile)
    38. (let (i j clinePoly clinePolys shapePoly intersectionPoly pf pt1 pt2 etchLayer viaLayer boardLayer packageLayer res pointList netCnt)
    39.        
    40.         pf = outfile(tmpFile "a")                ;创建临时文件,并打开       

    41.         ;;获取所有cline,shape,via
    42.         etchLayer = strcat("ETCH/" layer)
    43.         viaLayer = strcat("VIA CLASS/" layer)
    44.        
    45.         axlVisibleDesign(nil)                ;关闭全部层
    46.         axlVisibleLayer(etchLayer t)        ;开启这层
    47.         axlVisibleLayer(viaLayer t)        ;开启这层
    48.         axlClearSelSet()                ;清空选择
    49.         axlSetFindFilter(?enabled `("noall" "CLINES" "SHAPES" "VIAS") ?onButtons `("noall" "CLINES" "SHAPES" "VIAS"))        ;设置find过滤器
    50.         axlAddSelectAll()        ;添加所有元素       
    51.         foreach(i axlGetSelSet()        ;所有cline/shapes转成多边形
    52.                 clinePoly = axlPolyFromDB(i)
    53.                 foreach(j clinePoly
    54.                         clinePolys = cons(j clinePolys)        ;存储cline的所有poly
    55.                 )
    56.         )
    57.        
    58.         ;;获取所有shape
    59.         boardLayer = strcat("BOARD GEOMETRY/SOLDERMASK_" layer)
    60.         packageLayer = strcat("PACKAGE GEOMETRY/SOLDERMASK_" layer)
    61.         axlVisibleDesign(nil)                ;关闭全部层
    62.         axlVisibleLayer(boardLayer t)        ;开启这层
    63.         axlVisibleLayer(packageLayer t)                ;开启这层
    64.         axlClearSelSet()                ;清空选择
    65.         axlSetFindFilter(?enabled `("noall" "SHAPES") ?onButtons `("noall" "SHAPES"))        ;设置find过滤器
    66.         axlAddSelectAll()        ;添加所有元素
    67.         axlVisibleDesign(nil)                ;关闭全部层
    68.         axlVisibleLayer(etchLayer t)        ;开启这层
    69.         axlVisibleLayer(viaLayer t)        ;开启这层
    70.         axlSetFindFilter(?enabled `("noall" "CLINES" "SHAPES" "VIAS") ?onButtons `("noall" "CLINES" "SHAPES" "VIAS"))        ;设置find过滤器
    71.         fprintf(pf "%s LAYER:\n" layer)
    72.         foreach(i axlGetSelSet()
    73.                 shapePoly = axlPolyFromDB(i)        ;每个shape转成多边形
    74.                 intersectionPoly = axlPolyOperation(shapePoly clinePolys 'AND)        ;shape与cline进行与操作
    75.                 when(length(intersectionPoly) >= 2        ;数量大于2,就检查net名
    76.                         axlClearSelSet()
    77.                         pointList = nil
    78.                         foreach(j intersectionPoly
    79.                                 axlAddSelectPoint(caar(j->vertices))        ;有重叠的地方,通过选择来确定坐标和网络名
    80.                                 pointList = cons(caar(j->vertices) pointList)        ;坐标存起来
    81.                         )
    82.                         pointList = reverse(pointList)
    83.                         when(length(unique(axlGetSelSet()~>net~>name)) != 1        ;如果所有重叠的cline和shape网络名一样就不处理
    84.                                 netCnt = 1
    85.                                 foreach(j axlGetSelSet()
    86.                                         fprintf(pf "net%d: %-20s %-20s " netCnt sprintf(nil "%L" car(pointList))  j->net->name || "nil")        ;打印网络名和坐标
    87.                                         pointList = cdr(pointList)        ;坐标同步
    88.                                         netCnt++
    89.                                         res = t        ;返回值,决定是否找到重叠点
    90.                                 )
    91.                                 fprintf(pf "\n")
    92.                         )
    93.                 )
    94.                
    95.         )
    96.         fprintf(pf "\n")
    97.         axlClearSelSet()                ;清空选择
    98.         close(pf)                ;关闭文件
    99.         res
    100. ))
    复制代码


    该用户从未签到

    38#
    发表于 2023-10-12 17:42 | 只看该作者
    感谢大佬的修改,牛牛牛!!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-11 08:58 , Processed in 0.093750 second(s), 22 queries , Gzip On.

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

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

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