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

DBID是什么?

[复制链接]
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-12-30 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    本帖最后由 mycoal 于 2021-12-30 15:54 编辑

         零基础学习skill有段时间了,没找到什么好的学习资料,就在论坛上找了个“十天学会Skill”的笔记,还别说挺有用,至少能学会如何加载运行skill,更重要的是教你搭载一个编译运行代码的环境来验证所学。这正是像我这样的新手开始的第一步,在此之前有种无从下手的感觉。
         接下来就是听话的抱着cadence自带的3本天书啃了,好歹也有一点点C++基础,但是过程还是比较“瞌睡”。这里呢,建议能带着需求去看书,这样开始能有个侧重点,结合里面的一些例子,能更快有所悟有所得,否则几百上千页的英文PDF也是要不少时间的,而且要通篇看下来我是觉得比登天还难。
         我的需求比较简单,skill的思路已经确定好了,就是细节上还走不通。
         所以开贴求助,记录一下,也好给有需要的兄弟们作个参考,请大神们不吝赐教。
    Q1:什么是DBID?
         字面意思database ID,我理解(欢饮纠正)为设计中的“元素”,狭义一点,就是软件Find栏里的框选条目:Groups、Comps、Symbols、Nets、Pins、Vias、Clines……等等。
         在软件中用show element命令可以得到对应的属性,比如Pins的pin name,坐标,net等,又比如Shape的一些属性参数。那么在skill中如何获取DBID的属性呢?
         比如:
                axlVisibleDesign(nil)            
                axlUIWUpdate(t)                           
                axlVisibleLayer("Component Geometry/Assembly_Top" t)     
                axlVisibleUpdate(t)

                axlClearSelSet()            
                axlSetFindFilter(?enabled '("noall" "shapes") ?onButtons "shapes")
                axlSingleSelectPoint()
                originshape=axlGetSelSet()  
           接下来怎么获取originshape的属性信息呢?比如我想得到lowleft和upright的坐标?

  • TA的每日心情
    开心
    2019-11-19 15:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    推荐
    发表于 2021-12-30 17:28 | 只看该作者
    1. 在allegro command 輸入 set telskill 會跑出 skill 視窗
    2. 自己隨意畫一個長方型的 shape (我是在unit :mm 時 5:5左下  75:75右上畫一個長方型的 shape)

    3. Skill > originshape=axlGetSelSet()
    (dbid:133666048)
    4. Skill > sh1=nth(0 originshape)
    dbid:133666048
    5. Skill > sh1->? 看shape的參數
    (parentGroups isRect nSegs objType parent
        net segments readOnly bBox layer
        prop
    )
    5a. Skill > sh1->??  看shape參數內的值
    (prop propList:164130840 bBox
        ((5.0 5.0)
            (75.0 75.0)
        ) readOnly
        t net nil objType "polygon"
        segments
        (dbid:164122668 dbid:164122688 dbid:164122708 dbid:164122728) nSegs 4 isRect
        t layer "BOARD GEOMETRY/BOTH_ROOMS" parent nil
        parentGroups nil
    )

    6. Skill > sh_segs=sh1->segments 劃shape的線段在segments內
    (dbid:164122668 dbid:164122688 dbid:164122708 dbid:164122728)

    7. Skill > seg1=nth(0 sh_segs) 先找第1段線
    dbid:164122668

    8. Skill > seg1->?  第1段線的參數
    (objType parent net startEnd width
        bBox isEtch readOnly layer prop
        lineType
    )
    8a. Skill > seg1->?? 第1段線參數數值
    (readOnly t net nil objType
        "line" layer "BOARD GEOMETRY/BOTH_ROOMS" bBox
        ((5.0 5.0)
            (5.0 75.0)
        )
        width 0.0 startEnd
        ((5.0 5.0)
            (5.0 75.0)
        ) parent
        dbid:133666048
    )

    9. Skill > seg1->startEnd 讀出第1段線起點和終點的值
    ((5.0 5.0)
        (5.0 75.0)
    )

    10. seg1_startend=seg1->startEnd  抓出第1段線起點和終點 放在變數seg1_startend上 你可以自己利用
         _start=nth(0 seg1_startend)
        _end=nth(1 seg1_startend)

    ===============================
    以下是allegro 內 show shape

    < RECTANGLE >           

           class         BOARD GEOMETRY
           subclass      BOTH_ROOMS

      Rectangle Top:    (5.0000 75.0000) (75.0000 75.0000)
      Rectangle Bottom: (5.0000 5.0000) (75.0000 5.0000)

    点评

    大佬,学习的榜样,点赞  详情 回复 发表于 2024-11-5 20:28
    多谢多谢~学到了!  详情 回复 发表于 2021-12-30 22:18
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
     楼主| 发表于 2021-12-30 22:18 | 只看该作者
    jet2001 发表于 2021-12-30 17:28
    1. 在allegro command 輸入 set telskill 會跑出 skill 視窗
    2. 自己隨意畫一個長方型的 shape (我是在uni ...

    多谢多谢~学到了!
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
     楼主| 发表于 2022-1-5 14:14 | 只看该作者
    再次感谢二楼兄弟的详细指导,一下子搞懂了许多不清楚的东西。经过几天努力,实现了一个小小的功能,发上来请大神们批改下。因为是第一次写,而且还是过程版本,将就着看下
    功能:判断某cline的转折点是否在一个特定的区域内。(最终目的是要实现所有cline的转折点是否在特定区域内,所以只完成了一部分,发这里也算作个记录)
    代码:1. 简单的显示和选取设置;对选中的“dbid“的所属参数进行获取、操作和条件判断;
              2. 很多输出显示,主要是验证用的
              3. 因为熟悉的函数不多,可能实现某功能时用了最笨的方法,还请指正。
    楼下代码。
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    5#
     楼主| 发表于 2022-1-5 14:16 | 只看该作者
    axlCmdRegister("hello",'hello)
    defun( hello ()
                
               axlVisibleDesign(nil)            
               axlUIWUpdate(t)                           
               axlVisibleLayer("Component Geometry/Assembly_Top" t)     
               axlVisibleUpdate(t)
                
               axlClearSelSet()            
               axlSetFindFilter(?enabled '("noall" "shapes") ?onButtons "shapes")
               axlSingleSelectPoint()
               dieedge=axlGetSelSet()
               dieedge_dbid=nth(0 dieedge)
               bBox_origin=dieedge_dbid->bBox
               bBox_outside=bBoxAdd(bBox_origin '((-50 -50) (50 50)))
               bBox_inside=bBoxAdd(bBox_origin '((50 50) (-50 -50)))
               println(bBox_outside)
               println(bBox_inside)

               axlVisibleDesign(nil)            
               axlUIWUpdate(t)                           
               axlVisibleLayer("Conductor/Rdl1" t)   
                
               axlVisibleUpdate(t)
                
               axlClearSelSet()            
               axlSetFindFilter(?enabled '("noall" "Clines") ?onButtons "Clines")
               axlSingleSelectPoint()  

               cline=axlGetSelSet()           
               println(cline)
            
                      cline_dbid=nth(0 cline)              
                      cline_segs=cline_dbid->segments
                      println(length(cline_segs))

                      num_segs=cline_dbid->nSegs
                      
                      QSpoints=list()

                      i=0
                      while( (i<=(num_segs-1))

                             segn=nth(i cline_segs)

                      i=i+1
                      QSpoint=segn->startEnd                  
                      QSpoints=cons(QSpoint QSpoints)
                      
                      
                      n=0
                      seg_points=list()
                      while( (n<=(length(QSpoints)-1))
                                        
                      seg_points=cons(nth(0 nth(n QSpoints)) seg_points)
                      seg_points=cons(nth(1 nth(n QSpoints)) seg_points)

                      n=n+1                 
                          )
                          )      
                      println(seg_points)

                      
                      Tpoints=list()
                      i=0 num_points=length(seg_points)
                      while(   (i<=(length(seg_points)-1))

                                if(
                                       length(remove(nth(i seg_points) seg_points))==num_points-2
                                then
                                       println("It's a Tpoint!")
                                       Tpoints=cons(nth(i seg_points) Tpoints)
                                else      
                                       println("It's not a Tpoint!")  
                                  )                             
                                i=i+1
                           )
                         println(Tpoints)
                         
                          i=0 qc_Tpoints=list()
                          while( (i<=length(Tpoints)-1)
                              if( nth(0 Tpoints)!=nil
                                then
                                qc_Tpoints=cons(nth(0 Tpoints) qc_Tpoints)
                                Tpoints=remove(nth(0 Tpoints) Tpoints)
                                else println("Stoped")
                                i=i+1
                              )                        
                          )
                          println(Tpoints)                     
                          println(qc_Tpoints)

                         
                         in_points=list()
                         i=0
                         while( (i<=length(qc_Tpoints)-1)
                               
                                if( axlIsPointInsideBox(nth(i qc_Tpoints) bBox_outside)==t
                                then
                                     in_points=cons(nth(i qc_Tpoints) in_points)
                                else println("The point is out of the die zone~")
                                  )
                                i=i+1                     
                         )
                         println(in_points)

                         out_points=list()
                         i=0
                         while( (i<=length(in_points)-1)
                         if( axlIsPointInsideBox(nth(i in_points) bBox_inside)==nil
                         then
                              out_points=cons(nth(i in_points) out_points)
                         else
                              println("The point is in safe zone insiade die~")
                         )
                         i=i+1
                         )
                         println(out_points)  
                                        



    )
  • TA的每日心情
    开心
    2021-1-19 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    6#
    发表于 2024-11-5 20:28 | 只看该作者
    jet2001 发表于 2021-12-30 17:28
    1. 在allegro command 輸入 set telskill 會跑出 skill 視窗
    2. 自己隨意畫一個長方型的 shape (我是在uni ...

    大佬,学习的榜样,点赞
  • TA的每日心情

    2024-12-25 15:33
  • 签到天数: 501 天

    [LV.9]以坛为家II

    9#
    发表于 2024-11-7 16:35 | 只看该作者
    :time::time:
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    EDA365公众号

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

    GMT+8, 2024-12-25 22:10 , Processed in 0.078125 second(s), 24 queries , Gzip On.

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

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

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