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

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 西瓜土豆

[求助] 通过脚本实现对各个层次cell之间的快速跳转

[复制链接]
发表于 2023-5-5 17:47:22 | 显示全部楼层


jobkong 发表于 2023-4-26 17:02
dbFindAnyInstByName第二个参数应该是name不是cellName,


正解。列出来的name 不是这个api所要用的参数
发表于 2023-5-5 18:15:17 | 显示全部楼层


西瓜土豆 发表于 2023-4-18 18:45
我看到Cadence有内置(快捷键B)的返回层级的跳转,但是没有指定层次的跳转,这个感觉挺实用的 ...


指定退回有啊,shift b
发表于 2023-5-5 18:19:14 | 显示全部楼层
你这个脚本怎么用?
发表于 2023-5-5 19:40:48 | 显示全部楼层
cellname 需处理下,改一下
代码是否完整第二个let里很多参数并没有用到
发表于 2023-5-5 20:45:56 | 显示全部楼层
试了下,我skill不熟 ,改起来比较费劲,想先实现单纯先实现进inst ,1.如果要进下层多层cell leEditInPlace 是需要给全上面依次层的list,这个直接hierarchyseach后的instid里如何得到,2.感觉不需要去重,我删了3.findinstancebyname 应该不用,直接从search的list里得到了id
发表于 2023-5-12 17:10:00 | 显示全部楼层


西瓜土豆 发表于 2023-5-4 10:43
不行,错误提示

*Error* hiCreateListBoxField: choices must only contain strings or (string icon) p ...


自带的X和B不不就可以实现,只是X没有tree弹出来
 楼主| 发表于 2023-5-15 11:06:12 | 显示全部楼层


ljh065216 发表于 2023-5-5 20:45
试了下,我skill不熟 ,改起来比较费劲,想先实现单纯先实现进inst ,1.如果要进下层多层cell leEditInPlac ...


回答了我的问题,又好像没有回复
发表于 2023-5-15 14:44:35 | 显示全部楼层


西瓜土豆 发表于 2023-4-25 16:27
这个脚本是我在cad论讨搬运过来的,目前有个leEditInPlace()的问题,希望有大佬可以指点一下
leEditInPla ...





  1. procedure(findInstances()
  2.         enterPoints(?addPointProc "inst_Add" ?cmdName "FindInstance")
  3. );end proc findInstances

  4. procedure(inst_Add(win points)
  5.         let((cv instdb point InstQuery lengthMax
  6.                         rootTree rootIterm indexTree indexIterm subTree indexTree1 indexIterm1 indexItermlist
  7.                         hierarchyNum HierarchyInst HierarchyInstpre paracv para treeField form
  8.                         )

  9.             cv = win->cellView
  10.             when(and(windowp(win) dbobjectp(cv))
  11.                 if(or(cv->cellViewType == "maskLayout" cv->cellViewType == "maskLayoutXL")
  12.                 then
  13.                     when(point = car(last(points))
  14.                         when(deGetEIP(win)
  15.                                 point = geWindowToEditPoint(win point)
  16.                         )
  17.                         if(point=hiGetPoint(hiGetCurrentWindow())
  18.                         then   
  19.                                 ;InstQuery=leSearchHierarchy(cv list(point point) 32 "inst" nil)
  20.                             InstQuery=dbInstQuery(cv list(point point))                        
  21.                                                         subTree=makeTable("table1" nil)
  22.                                                         indexIterm=makeTable("table2" nil)
  23.                                             instdb=makeTable("table3" nil)   
  24.                                                         ;create root tree
  25.                                                         paracv=list(0 cv->name cv->libName cv->cellName cv->viewName)
  26.                                                         rootTree=hiCreateTree('rootTree)
  27.                                                         rootIterm=hiCreateTreeItem('rootIterm paracv)
  28.                                                         hiTreeAppendItem(rootTree rootIterm)
  29.                                                         indexTree=hiCreateTree('indexTree)
  30.                                                         hiItemInsertTree(rootIterm indexTree)

  31.                                                         if(listp(InstQuery) then
  32.                                                                 for(i 1 length(InstQuery)
  33.                                                                         if(listp(nthelem(i InstQuery)) then
  34.                                                                                 hierarchyNum=length(nthelem(i InstQuery))
  35.                                                                                 HierarchyInst=car(last(nthelem(i InstQuery)))
  36.                                                                                 HierarchyInstpre=nthelem(hierarchyNum-1 nthelem(i InstQuery))
  37.                                                                                 para=list(hierarchyNum HierarchyInst->name HierarchyInst->libName HierarchyInst->cellName HierarchyInst->viewName)
  38.                                                                                 indexTree1=stringToSymbol(strcat("indexTree" "_" artMakeString(hierarchyNum-1) "_" artMakeString(i)))
  39.                                                                                 indexIterm1=stringToSymbol(strcat("indexIterm" "_" artMakeString(hierarchyNum-1) "_" artMakeString(i)))
  40.                                                                                 indexItermlist=cons(indexIterm1 indexItermlist)
  41.                                                                                 ; create sub-trees items and append them to the sub-trees
  42.                                                                                 indexIterm[HierarchyInst->name]=hiCreateTreeItem(indexIterm1 para)
  43.                                                                                 hiTreeAppendItem(subTree[HierarchyInstpre->name] indexIterm[HierarchyInst->name])
  44.                                                                                 ;if(hierarchyNum != lengthMax then
  45.                                                                                 if(i!=length(InstQuery) && listp(nthelem(i+1 InstQuery)) && member(HierarchyInst nthelem(i+1 InstQuery)) then
  46.                                                                                         ; create sub-trees
  47.                                                                                         subTree[HierarchyInst->name]=hiCreateTree(indexTree1)
  48.                                                                                         ; put the sub-trees into the items that created earlier
  49.                                                                                         hiItemInsertTree(indexIterm[HierarchyInst->name] subTree[HierarchyInst->name])
  50.                                                                                 );end if
  51.                                                                                 foreach(j nthelem(i InstQuery)
  52.                                                                                         instdb[para]=append1(instdb[para] list(j 0 0 0))
  53.                                                                                 );end foreach
  54.                                                                         else
  55.                                                                                 hierarchyNum=1
  56.                                                                                 indexTree1=stringToSymbol(strcat("indexTree" "_" "1" "_" artMakeString(i)))
  57.                                                                                 indexIterm1=stringToSymbol(strcat("indexIterm" "_" "1" "_" artMakeString(i)))
  58.                                                                                 indexItermlist=cons(indexIterm1 indexItermlist)
  59.                                                                                 HierarchyInst = nthelem(i InstQuery)
  60.                                                                                 para=list(hierarchyNum HierarchyInst->name HierarchyInst->libName HierarchyInst->cellName HierarchyInst->viewName)
  61.                                                                                 ;create tree items and append them to the root tree
  62.                                                                                 indexIterm[HierarchyInst->name]=hiCreateTreeItem(indexIterm1 para)
  63.                                                                                 hiTreeAppendItem(indexTree indexIterm[HierarchyInst->name])
  64.                                                                                 if(i!=length(InstQuery) && listp(nthelem(i+1 InstQuery)) && member(HierarchyInst nthelem(i+1 InstQuery)) then
  65.                                                                                         subTree[HierarchyInst->name]=hiCreateTree(indexTree1)
  66.                                                                                         ; put the sub-trees into the items created earlier
  67.                                                                                         hiItemInsertTree(indexIterm[HierarchyInst->name] subTree[HierarchyInst->name])
  68.                                                                                 );end if
  69.                                                                                 instdb[para]=list(list(HierarchyInst 0 0 0))
  70.                                                                         );end if
  71.                                                                        
  72.                                                                 );end for
  73.                                                         else
  74.                                                                 indexIterm[InstQuery->name]=hiCreateTreeItem('indexIterm list(1 InstQuery->name InstQuery->libName InstQuery->cellName InstQuery->viewName))
  75.                                                                 hiTreeAppendItem(indexTree indexIterm[InstQuery->name])
  76.                                                         );end if
  77.                                                                        
  78.                                                         ; create tree table and use indexTree as the value for ?choice
  79.                                                         treeField = hiCreateTreeTable(
  80.                                                                     ?name `treeField
  81.                                                                     ;?title "Hierarchy Tree for the point"
  82.                                                                     ?titleAlignment `center
  83.                                                                     ?headers list(list("hierarchy"                 100    'left    `int t) ;t means can be sort
  84.                                                                                    list("Name"           60     'left    `string t)
  85.                                                                                    list("libName"           80     'left    `string)
  86.                                                                                    list("cellName"          120     'center  `string t)
  87.                                                                                    list("viewName"                  80    'right        `string)
  88.                                                                                   )
  89.                                                                      ?choice rootTree
  90.                                                                      ;?callback "myTreeCB"
  91.                                                                      )
  92.                                                        
  93.                                                         ; create a form
  94.                                                         form = hiCreateAppForm(
  95.                                                                     ?name 'form
  96.                                                                     ?formTitle "Hierarchy Tree for the point"
  97.                                                                     ?fields list(
  98.                                                                                   list(treeField 5:5 450:200 55)
  99.                                                                                 )
  100.                                                                     ?initialSize 500:250)
  101.                                                        
  102.                                                         hiInstantiateForm(form)
  103.                                                         hiExpandTreeItem('rootIterm nil)
  104.                                                         foreach(i indexItermlist
  105.                                                                 hiExpandTreeItem(i nil)
  106.                                                         );end foreach
  107.                                                         ;To specify the double-click callback for the treeField
  108.                                                         form->treeField->hiDoubleClickCallback='myTreedoubleclickCB
  109.                                                         hiDisplayForm(form)

  110.                         else
  111.                                 printf("*INFO* No valid instance at point.")
  112.                         );end if
  113.                     );end when
  114.                 else
  115.                         printf("*INFO* CellView is not a layout - %s : %s" cv->cellName cv->cellViewType)
  116.                 );end if(or(cv->cellViewType == "maskLayout" cv->cellViewType == "maskLayoutXL")
  117.             );end when(and(windowp(win) dbobjectp(cv))
  118.         );end let
  119. );end proc inst_Add

  120. ;for double-click callback
  121. procedure( myTreedoubleclickCB(g_formOrRegion s_field itemSym)
  122. let((Instid)
  123.         Instid=hiGetTreeItemDescription(eval(itemSym))
  124.         if(Instid==paracv then
  125.                 leReturnToTop(getCurrentWindow())
  126.         else
  127.                 leEditInPlace(hiGetCurrentWindow()  instdb[Instid])
  128.     );end if
  129. )
  130. );end proc myTreedoubleclickCB

  131. ;for tree callback
  132. procedure( myTreeCB(name itemSymList)
  133. let((Instid)
  134.      while(itemSymList
  135.                 Instid=hiGetTreeItemDescription(eval(car(itemSymList)))
  136.                 if(Instid==paracv then
  137.                         leReturnToTop(getCurrentWindow())
  138.                 else
  139.                         leEditInPlace(hiGetCurrentWindow()  instdb[Instid])
  140.         );end if
  141.         itemSymList=cdr(itemSymList)
  142.         )
  143. )
  144. );end proc myTreeCB


复制代码
我改了一下,是不是你需要的
 楼主| 发表于 2023-5-16 15:12:37 | 显示全部楼层


jobkong 发表于 2023-5-15 14:44
我改了一下,是不是你需要的


非常感谢,非常感谢,非常感谢,很好用,再次感谢

 楼主| 发表于 2023-5-16 15:13:31 | 显示全部楼层


ljh065216 发表于 2023-5-5 20:45
试了下,我skill不熟 ,改起来比较费劲,想先实现单纯先实现进inst ,1.如果要进下层多层cell leEditInPlac ...


快点来撸代码,有大神把功能撸出来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-8 08:37 , Processed in 0.027279 second(s), 5 queries , Gzip On, Redis On.

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