找回密码
 注册
关于网站域名变更的通知
查看: 602|回复: 25
打印 上一主题 下一主题

请教一个skill问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
各位大神,下面是我的代码段,主要是想切除板框外的PACKAGE GEOMETRY/DISPLAY_TOP,不知道这个遍历问题出在哪里,感觉逻辑没有问题啊。代码如下:
    foreach(eachComp topCompList
            symChildrenList = eachComp->symbol->definition->children
          foreach(each symChildrenList if(each->layer == "PACKAGE GEOMETRY/DISPLAY_TOP" then DisplayTopID=axlDBGetShapes("PACKAGE GEOMETRY/DISPLAY_TOP")
                  Poly1=axlPolyFromDB(car(DisplayTopID))
                  outlineID=axlDBGetShapes("BOARD GEOMETRY/DESIGN_OUTLINE")
                  Poly2=axlPolyFromDB(car(outlineID))
                  Poly3=axlPolyOperation(Poly1 Poly2 'ANDNOT)
                  Poly4=axlPolyOperation(Poly1 car(Poly3) 'ANDNOT)
                  axlDeleteObject(DisplayTopID)
                  axlDBCreateShape(car(Poly4) t "PACKAGE GEOMETRY/DISPLAY_TOP" nil nil))))

另外,我还想把新生成的PACKAGE GEOMETRY/DISPLAY_TOP赋给这个器件!
请大家不吝赐教,谢谢
  • TA的每日心情
    奋斗
    2025-7-7 15:38
  • 签到天数: 83 天

    [LV.6]常住居民II

    推荐
    发表于 2025-1-23 10:27 | 只看该作者
    long83 发表于 2025-1-22 18:00
    我尝试换成each也是不行,请大神帮忙修正下?非常感谢

    我拿我的placebound试了一下,发现你这代码问题多多。

    1、eachComp->symbol->definition->children
    这里你修改的symbol实体(只有超出outline的实体才需要修改),所以不需要修改symbol定义,把definition去掉。

    2、if(each->layer == "PACKAGE GEOMETRY/PLACE_BOUND_TOP"
    这后面建议加上objType为shape的判断,如果有人用line画的,那么后续处理会出错。

    3、DisplayTopID=axlDBGetShapes("PACKAGE GEOMETRY/DISPLAY_TOP")
    这里肯定不对了,改成DisplayTopID=each,each此时就已经是专属于eachComp这个器件的DISPLAY_TOP层的shape了,不需要再去get,如上文所说,你get的是所有comp的shape,逻辑不对。

    4、Poly2=axlPolyFromDB(car(outlineID))
    这里如果你的outline只有一个shape,就没什么大问题,如果有多个,必须进行额外处理。

    5、Poly3=axlPolyOperation(Poly1 Poly2 'ANDNOT)和Poly4=axlPolyOperation(Poly1 car(Poly3) 'ANDNOT)
    这里操作有点复杂了,1 andnot (1 andnot 2) 直接就等于 1 and 2,所以写成一行poly1和poly2的and的操作就行。

    6、axlDeleteObject(DisplayTopID)
    这里也有问题,不是所有的shape都需要删除,咱们只需要删除有交集,and后结果不为(nil)的即可,为什么是(nil)不是nil呢,你自己思考思考。所以可以加个if或者when判断一下。

    7、axlDBCreateShape(car(Poly4) t "PACKAGE GEOMETRY/DISPLAY_TOP" nil nil))))
    如上面的大佬说的,这里的最后一个参数可以填上each->parent,这样的话,生成的shape不是独立的,是和symbol绑定的。移动、删除器件时,这个你刚创建的shape也会同样一起移动、删除。但是这里有个坑,和axlDeleteObject有关系,你可能会遇到。

    题外话
    1、从代码看,作者的思路大方向上是没有问题的,但是不擅长在skill中调试的手段。可以加上printf进行调试。比如我自己调试,就加上了以下内容,可以很方便的看到shape有没有交际,每个shape的父元素是不是symbol类型。
    printf("Poly1 = %L\n" Poly1)
    printf("Poly2 = %L\n" Poly2)
    printf("Poly4 = %L\n\n" Poly4~>??)
    printf("test = %L\n\n" each->parent->objType)


    2、代码还有很多可以优化的地方,比如加上axlDBTransactionStart等系列函数以及右键菜单,这样不用每次误删后重新打开pcb进行还原。比如可以将shape的原有prop复制到新的shape上。

    3、其实直接贴出修改完的代码给你更简单,1秒就贴完了,但真心希望每个学习skill的朋友能在水平上更上一层楼。多多思考,共同进步。

    4、另外,真心希望某些大佬不要天天阴阳怪气的,实力是有的,但这样真的容易没!朋!友!

    点评

    这才是大师风范。 三观正文风好。  发表于 2025-1-25 16:17
    其實只要選 SHAPE 就可以, 其他 選擇是假象.  发表于 2025-1-23 11:16
    大神可以把其他联系方式私信我不?就不在这里打扰大家了  详情 回复 发表于 2025-1-23 10:51
    能留个邮箱吗 有个代码想让您帮忙看下  详情 回复 发表于 2025-1-23 10:38
    真心感谢您,对于新手小白来说太重要,谢谢谢谢  详情 回复 发表于 2025-1-23 10:36

    评分

    参与人数 1威望 +1 收起 理由
    PANSHER + 1 赞一个!

    查看全部评分

  • TA的每日心情
    奋斗
    2025-7-7 15:38
  • 签到天数: 83 天

    [LV.6]常住居民II

    3#
    发表于 2025-1-22 17:33 | 只看该作者
    你是想遍历每个component的的DISPLAY_TOP吧,但是
    DisplayTopID=axlDBGetShapes("PACKAGE GEOMETRY/DISPLAY_TOP")
    这一行和component(上文的each变量)没有任何关系,这行是获取DISPLAY_TOP所有的shape。

    点评

    我尝试换成each也是不行,请大神帮忙修正下?非常感谢  详情 回复 发表于 2025-1-22 18:00

    该用户从未签到

    4#
     楼主| 发表于 2025-1-22 18:00 | 只看该作者
    db-_- 发表于 2025-1-22 17:33
    你是想遍历每个component的的DISPLAY_TOP吧,但是
    DisplayTopID=axlDBGetShapes("PACKAGE GEOMETRY/DISPLA ...

    我尝试换成each也是不行,请大神帮忙修正下?非常感谢

    点评

    我拿我的placebound试了一下,发现你这代码问题多多。 1、eachComp->symbol->definition->children 这里你修改的symbol实体(只有超出outline的实体才需要修改),所以不需要修改symbol定义,把definition去掉。  详情 回复 发表于 2025-1-23 10:27
  • TA的每日心情
    奋斗
    2020-12-18 15:41
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    5#
    发表于 2025-1-22 18:24 | 只看该作者
    本帖最后由 zhualuo2 于 2025-1-22 18:26 编辑

    如果想将新建的铜皮赋予这个器件,下面新建铜皮的最后一个参数,不应该是nil,而是dbid of the object
    axlDBCreateShape(car(Poly4) t "PACKAGE GEOMETRY/DISPLAY_TOP" nil dbid)
    头像被屏蔽
  • TA的每日心情
    开心
    2025-1-23 15:05
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    6#
    发表于 2025-1-22 20:45 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽

    该用户从未签到

    7#
     楼主| 发表于 2025-1-23 10:36 | 只看该作者
    db-_- 发表于 2025-1-23 10:27
    我拿我的placebound试了一下,发现你这代码问题多多。

    1、eachComp->symbol->definition->children

    真心感谢您,对于新手小白来说太重要,谢谢谢谢
  • TA的每日心情
    无聊
    2025-6-12 15:00
  • 签到天数: 120 天

    [LV.7]常住居民III

    8#
    发表于 2025-1-23 10:38 | 只看该作者
    db-_- 发表于 2025-1-23 10:27
    我拿我的placebound试了一下,发现你这代码问题多多。

    1、eachComp->symbol->definition->children

    能留个邮箱吗  有个代码想让您帮忙看下

    点评

    谢谢分享!: 1.0 支持!: 5.0
    谢谢分享!: 1 支持!: 5
    恭喜找對大師了, 祝事業有成!  发表于 2025-1-23 11:25
  • TA的每日心情
    奋斗
    2025-7-7 15:38
  • 签到天数: 83 天

    [LV.6]常住居民II

    9#
    发表于 2025-1-23 10:42 | 只看该作者
    PANSHER 发表于 2025-1-23 10:38
    能留个邮箱吗  有个代码想让您帮忙看下

    kittledeng@126.com

    点评

    谢谢分享!: 5.0 支持!: 5.0
    谢谢分享!: 5 支持!: 5
    大師助人為快樂之本!  发表于 2025-1-23 11:27

    该用户从未签到

    10#
     楼主| 发表于 2025-1-23 10:51 | 只看该作者
    db-_- 发表于 2025-1-23 10:27
    我拿我的placebound试了一下,发现你这代码问题多多。

    1、eachComp->symbol->definition->children

    大神可以把其他联系方式私信我不?就不在这里打扰大家了

    点评

    支持!: 5.0
    支持!: 5
    恭喜找對大師了, 祝事業有成!  发表于 2025-1-23 11:26
    上楼有邮箱,可以邮箱沟通  发表于 2025-1-23 11:12
    头像被屏蔽
  • TA的每日心情
    开心
    2025-1-23 15:05
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    11#
    发表于 2025-1-23 11:41 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽
  • TA的每日心情
    奋斗
    2025-7-7 15:38
  • 签到天数: 83 天

    [LV.6]常住居民II

    12#
    发表于 2025-1-23 14:46 | 只看该作者
    aarom 发表于 2025-1-23 11:41
    提醒各位"世界級專業大師" :

    ANDNOT 是切除方的shape. (是"偵測條件"代表切除成立, 也能是另一個SHAPE修 ...

    大佬说的对,确实需要andnot的结果作为条件,先来判断是否已经在outline外了。
    否则每个器件都会生成一个新的shape,虽然生成的和以前一样,但是器件多的话运行速度就慢下来了。

    点评

    有種東西叫"反相選擇", 有種選擇視窗, 會依方向辨別, 碰到就算選到 或 必須完整選到物件才算選到, 就可排除大部份內部物件. (其實全部用 ANDNOT 篩選也非常快, 因為常拿來辨識物件是否重疊"AND"一樣, 如VIA.   发表于 2025-1-23 15:02
    头像被屏蔽
  • TA的每日心情
    开心
    2025-1-23 15:05
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    14#
    发表于 2025-2-3 15:36 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-31 04:53 , Processed in 0.125000 second(s), 25 queries , Gzip On.

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

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

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