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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 442|回复: 5

[原创] align vertical/horizonta 分别设置快捷键l

[复制链接]
发表于 2025-7-12 15:12:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
align vertical / horizonta 分别设置快捷键l,保持 vertical 或 horizonta 尺寸最大的位置不变。



   

        

                
  1. hiSetBindKeys( "Layout" list(list("<Key>[" "AlignXY(1)")))
  2. hiSetBindKeys( "Layout" list(list("<Key>]" "AlignXY(2)")))


  3. procedure(AlignXY(num)
  4. let((cv objs MaxbBox Maxobj NewMaxbBox dxy)
  5. cv = geGetEditCellView()
  6. cw =hiGetCurrentWindow()
  7. scw=hiGetSessionWindow(cw)
  8. println(scw)
  9. scw1=printself(scw)
  10. scw2=parseString(scw1 ":")
  11. i1=cadr(scw2)
  12. Tgt1=strcat("swindow(" i1 ")" "->hiToolbars->leAlignToolbar_" i1 "->lebEnableAlignLayer->checked=nil")
  13. Tgt2=strcat("swindow(" i1 ")" "->hiToolbars->leAlignToolbar_" i1 "->leAlignToolbarAlignSpacing->checked=nil")
  14. hiEnqueueCmd(Tgt1)
  15. hiEnqueueCmd(Tgt2)


  16. objs=geGetSelSet()
  17. MaxbBox=car(objs)~>bBox
  18. Maxobj=car(objs)
  19. if(num==1 then
  20.         foreach(obj objs
  21.                 objbBox=obj~>bBox
  22.                 when((rightEdge(objbBox)-leftEdge(objbBox)) > (rightEdge(MaxbBox)-leftEdge(MaxbBox))       
  23.                         MaxbBox=obj~>bBox
  24.                         Maxobj=obj
  25.                         );when
  26.                 ); foreach
  27.         leAlign("vertical" )
  28.         NewMaxbBox=Maxobj~>bBox
  29.         dxy=list(leftEdge(MaxbBox)-leftEdge(NewMaxbBox):0 "R0")
  30.         foreach(obj objs       
  31.                 when(obj~>parent == nil
  32.                         dbMoveFig(obj nil dxy)       
  33.                         );when
  34.                 );foreach
  35. else
  36.         foreach(obj objs
  37.                 objbBox=obj~>bBox
  38.                 when((topEdge(objbBox)-bottomEdge(objbBox)) > (topEdge(MaxbBox)-bottomEdge(MaxbBox))
  39.                         MaxbBox=obj~>bBox
  40.                         Maxobj=obj
  41.                         );when
  42.                 );foreach
  43.         leAlign("horizontal")
  44.         NewMaxbBox=Maxobj~>bBox
  45.         dxy=list(0:topEdge(MaxbBox)-topEdge(NewMaxbBox) "R0")
  46.         foreach(obj objs
  47.                 when(obj~>parent == nil
  48.                 dbMoveFig(obj nil dxy)       
  49.                         );when
  50.                 );foreach
  51.         );if
  52. );let
  53. );pro

  54.         

   

    复制代码


 楼主| 发表于 2025-7-13 18:44:08 | 显示全部楼层
学习 https://bbs.eetop.cn/thread-878287-1-1.html  中的AddMosM1,写的脚本。

   

        

                
  1. hiSetBindKeys("Layout" list(list("<Key>F11" "AddMosM1()")))
  2. procedure(AddMosM1()
  3. let((cv layerA X)
  4. M1_width = 0.16
  5. layerA=list("METAL1" "drawing")
  6. cv=geGetEditCellView()       
  7. objs = geGetSelSet()       
  8. foreach(obj objs
  9.         when(obj~>master != nil
  10.                 foreach(objshapes obj~>master~>shapes
  11.                         when(objshapes~>lpp == layerA
  12.                                 transList=dbGetInstTransform(obj)
  13.                                 if(obj~>objType == "mosaic" then
  14.                                         rowA =         obj~>rows
  15.                                         columnA = obj~>columns
  16.                                         uxA = obj~>uX
  17.                                         uyA = obj~>uY
  18.                                 else
  19.                                         rowA = 1
  20.                                         columnA = 1
  21.                                         uxA = 0
  22.                                         uyA = 0
  23.                                         );if       
  24.                                 for(a 0 rowA-1
  25.                                 for(b 0 columnA-1
  26.                                 XxA = nth(0 car(transList))
  27.                                 YyA = nth(1 car(transList))
  28.                                 case(nth(1 transList)
  29.                                 ("R0" xyA=list(XxA+b*uxA YyA+a*uyA))
  30.                                 ("R180" xyA=list(XxA-b*uxA YyA-a*uyA))
  31.                                 ("MX" xyA=list(XxA+b*uxA YyA-a*uyA))
  32.                                 ("MY" xyA=list(XxA-b*uxA YyA+a*uyA))
  33.                                 ("R90" xyA=list(XxA-a*uyA YyA+b*uxA))
  34.                                 ("R270" xyA=list(XxA+a*uyA YyA-b*uxA))
  35.                                 ("MXR90" xyA=list(XxA+a*uyA YyA+b*uxA))
  36.                                 ("MYR90" xyA=list(XxA-a*uyA YyA-b*uxA))
  37.                                 );case                               
  38.                                 transListA=list(xyA nth(1 transList) nth(2 transList))       
  39.                                 metal1A=leConvertPolygonToPath(dbCopyFig(objshapes cv transListA))
  40.                                 metal1A~>width = M1_width
  41.                                 leAttachFig(metal1A obj)
  42.                                         );for
  43.                                         );for
  44.                                 );when
  45.        
  46.                 );foreach
  47.         );when
  48. );foreach
  49. );let
  50. );pro

  51.         

   

    复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-20 11:52:38 | 显示全部楼层
AddGateCon

   

        

                
  1. hiSetBindKeys("Layout" list(list("<Key>F12" "AddGateCon(1)")))
  2. hiSetBindKeys("Layout" list(list("<Key>F11" "AddGateCon(2)")))
  3. procedure(AddGateCon(num)
  4. let((cv layerA X)
  5. cv=geGetEditCellView()
  6. techFile = techGetTechFile(cv)
  7. cGroupId = cstFindConstraintGroupIn(techFile "virtuosoDefaultSetup")
  8. myViaOptions = viaGetViaOptions(cGroupId)
  9. ;myViaOptions~>automatic~>minNumCuts = 2

  10. shiftA = 0.42        ;poly stretch
  11. shiftB = 0.22        ;metal stretch
  12. shiftC = 0.1                ;mosL>? metal stretch
  13. mosL=1                        ;mosL
  14. layerA=list("POLY1" "drawing")
  15. layerB=list("METAL1" "drawing")
  16.        
  17. objs = geGetSelSet()       
  18. foreach(obj objs
  19.         when(obj~>master != nil
  20.                 foreach(objshapes obj~>master~>shapes
  21.                         when(objshapes~>lpp == layerA         &&         objshapes~>net != nil               
  22.                                 transList=dbGetInstTransform(obj)
  23.                                 if(obj~>objType == "mosaic" then
  24.                                         rowA =         obj~>rows
  25.                                         columnA = obj~>columns
  26.                                         uxA = obj~>uX
  27.                                         uyA = obj~>uY
  28.                                 else
  29.                                         rowA = 1
  30.                                         columnA = 1
  31.                                         uxA = 0
  32.                                         uyA = 0
  33.                                         );if       
  34.                                
  35.                                 objshapesBox=objshapes~>bBox
  36.                                 println(objshapesBox)
  37.                                 if(nth(1 car(objshapesBox)) < 0 then
  38.                                         objshapesT = "B"
  39.                                 else
  40.                                         objshapesT = "T"
  41.                                         );if
  42.                                
  43.                                 when(num == 1 && objshapesT == "B"
  44.                                 for(a 0 rowA-1
  45.                                 for(b 0 columnA-1
  46.                                         XxA = nth(0 car(transList))
  47.                                         YyA = nth(1 car(transList))
  48.                                         when(nth(1 transList) == "R0" || nth(1 transList) == "MY"
  49.                                                 if(nth(1 transList) == "R0" then
  50.                                                         xyA=list(XxA+b*uxA YyA+a*uyA)
  51.                                                 else
  52.                                                         xyA=list(XxA-b*uxA YyA+a*uyA)
  53.                                                 );if

  54.                                                 transListA=list(xyA nth(1 transList) nth(2 transList))
  55.                                                 polyA=dbCopyFig(objshapes cv transListA)
  56.                                                 polyA_left=nth(0 nth(0 (polyA~>bBox)))
  57.                                                 polyA_bottom=nth(1 nth(0 (polyA~>bBox))) - shiftA
  58.                                                 polyA_right=nth(0 nth(1 (polyA~>bBox)))
  59.                                                 polyA_top=nth(1 nth(1 (polyA~>bBox)))                                       
  60.                                                 polyA~>bBox=list(list(polyA_left polyA_bottom) list(polyA_right polyA_top))
  61.                                                 leAttachFig(polyA obj) ;poly end
  62.        
  63.                                                 metalA=dbCopyFig(polyA cv )
  64.                                                 metalA~>lpp=layerB
  65.                                                 if(polyA_right-polyA_left < mosL then
  66.                                                         metalA_left=polyA_left
  67.                                                         metalA_bottom=polyA_bottom
  68.                                                         metalA_right=polyA_right
  69.                                                         metalA_top=polyA_top - shiftB       
  70.                                                 else
  71.                                                         metalA_left=polyA_left + shiftC
  72.                                                         metalA_bottom=polyA_bottom
  73.                                                         metalA_right=polyA_right - shiftC
  74.                                                         metalA_top=polyA_top - shiftB       
  75.                                                         );if                               
  76.                                                 metalA~>bBox=list(list(metalA_left metalA_bottom) list(metalA_right metalA_top))
  77.                                                 leAttachFig(metalA obj) ;metal end
  78.        
  79.                                                 viaA=viaGenerateViasAtPoint(cv list(metalA_left metalA_bottom) myViaOptions)
  80.                                                 leAttachFig(car(viaA) obj)
  81.                                         ); R0,MY


  82.                                         when(nth(1 transList) == "R180" || nth(1 transList) == "MX"
  83.                                                 if(nth(1 transList) == "R180" then
  84.                                                         xyA=list(XxA-b*uxA YyA-a*uyA)
  85.                                                 else
  86.                                                         xyA=list(XxA+b*uxA YyA-a*uyA)
  87.                                                 );if

  88.                                                 transListA=list(xyA nth(1 transList) nth(2 transList))
  89.                                                 polyA=dbCopyFig(objshapes cv transListA)
  90.                                                 polyA_left=nth(0 nth(0 (polyA~>bBox)))
  91.                                                 polyA_bottom=nth(1 nth(0 (polyA~>bBox)))
  92.                                                 polyA_right=nth(0 nth(1 (polyA~>bBox)))
  93.                                                 polyA_top=nth(1 nth(1 (polyA~>bBox)))        + shiftA                       
  94.                                                 polyA~>bBox=list(list(polyA_left polyA_bottom) list(polyA_right polyA_top))
  95.                                                 leAttachFig(polyA obj) ;poly end
  96.        
  97.                                                 metalA=dbCopyFig(polyA cv )
  98.                                                 metalA~>lpp=layerB
  99.                                                 if(polyA_right-polyA_left < mosL then
  100.                                                         metalA_left=polyA_left
  101.                                                         metalA_bottom=polyA_bottom + shiftB
  102.                                                         metalA_right=polyA_right
  103.                                                         metalA_top=polyA_top
  104.                                                 else
  105.                                                         metalA_left=polyA_left + shiftC
  106.                                                         metalA_bottom=polyA_bottom + shiftB
  107.                                                         metalA_right=polyA_right - shiftC
  108.                                                         metalA_top=polyA_top
  109.                                                         );if                               
  110.                                                 metalA~>bBox=list(list(metalA_left metalA_bottom) list(metalA_right metalA_top))
  111.                                                 leAttachFig(metalA obj) ;metal end
  112.        
  113.                                                 viaA=viaGenerateViasAtPoint(cv list(metalA_left metalA_bottom) myViaOptions)
  114.                                                 leAttachFig(car(viaA) obj)
  115.                                         ); R180,MX


  116.                                         when(nth(1 transList) == "R90" || nth(1 transList) == "MYR90"
  117.                                                 if(nth(1 transList) == "R90" then
  118.                                                         xyA=list(XxA-a*uyA YyA+b*uxA)
  119.                                                 else
  120.                                                         xyA=list(XxA-a*uyA YyA-b*uxA)
  121.                                                 );if

  122.                                                 transListA=list(xyA nth(1 transList) nth(2 transList))
  123.                                                 polyA=dbCopyFig(objshapes cv transListA)
  124.                                                 polyA_left=nth(0 nth(0 (polyA~>bBox)))
  125.                                                 polyA_bottom=nth(1 nth(0 (polyA~>bBox)))
  126.                                                 polyA_right=nth(0 nth(1 (polyA~>bBox))) + shiftA       
  127.                                                 polyA_top=nth(1 nth(1 (polyA~>bBox)))               
  128.                                                 polyA~>bBox=list(list(polyA_left polyA_bottom) list(polyA_right polyA_top))
  129.                                                 leAttachFig(polyA obj) ;poly end
  130.        
  131.                                                 metalA=dbCopyFig(polyA cv )
  132.                                                 metalA~>lpp=layerB
  133.                                                 if(polyA_right-polyA_left < mosL then
  134.                                                         metalA_left=polyA_left + shiftB
  135.                                                         metalA_bottom=polyA_bottom
  136.                                                         metalA_right=polyA_right
  137.                                                         metalA_top=polyA_top
  138.                                                 else
  139.                                                         metalA_left=polyA_left + shiftB
  140.                                                         metalA_bottom=polyA_bottom + shiftC
  141.                                                         metalA_right=polyA_right
  142.                                                         metalA_top=polyA_top - shiftC
  143.                                                         );if                               
  144.                                                 metalA~>bBox=list(list(metalA_left metalA_bottom) list(metalA_right metalA_top))
  145.                                                 leAttachFig(metalA obj) ;metal end
  146.        
  147.                                                 viaA=viaGenerateViasAtPoint(cv list(metalA_left metalA_bottom) myViaOptions)
  148.                                                 leAttachFig(car(viaA) obj)
  149.                                         ); R90,MYR90


  150.                                         when(nth(1 transList) == "R270" || nth(1 transList) == "MXR90"
  151.                                                 if(nth(1 transList) == "R270" then
  152.                                                         xyA=list(XxA+a*uyA YyA-b*uxA)
  153.                                                 else
  154.                                                         xyA=list(XxA+a*uyA YyA+b*uxA)
  155.                                                 );if

  156.                                                 transListA=list(xyA nth(1 transList) nth(2 transList))
  157.                                                 polyA=dbCopyFig(objshapes cv transListA)
  158.                                                 polyA_left=nth(0 nth(0 (polyA~>bBox))) - shiftA
  159.                                                 polyA_bottom=nth(1 nth(0 (polyA~>bBox)))
  160.                                                 polyA_right=nth(0 nth(1 (polyA~>bBox)))       
  161.                                                 polyA_top=nth(1 nth(1 (polyA~>bBox)))               
  162.                                                 polyA~>bBox=list(list(polyA_left polyA_bottom) list(polyA_right polyA_top))
  163.                                                 leAttachFig(polyA obj) ;poly end
  164.        
  165.                                                 metalA=dbCopyFig(polyA cv )
  166.                                                 metalA~>lpp=layerB
  167.                                                 if(polyA_right-polyA_left < mosL then
  168.                                                         metalA_left=polyA_left
  169.                                                         metalA_bottom=polyA_bottom
  170.                                                         metalA_right=polyA_right - shiftB
  171.                                                         metalA_top=polyA_top
  172.                                                 else
  173.                                                         metalA_left=polyA_left
  174.                                                         metalA_bottom=polyA_bottom + shiftC
  175.                                                         metalA_right=polyA_right - shiftB
  176.                                                         metalA_top=polyA_top - shiftC
  177.                                                         );if                               
  178.                                                 metalA~>bBox=list(list(metalA_left metalA_bottom) list(metalA_right metalA_top))
  179.                                                 leAttachFig(metalA obj) ;metal end
  180.        
  181.                                                 viaA=viaGenerateViasAtPoint(cv list(metalA_left metalA_bottom) myViaOptions)
  182.                                                 leAttachFig(car(viaA) obj)
  183.                                         ); R270,MXR90

  184.                                         );for
  185.                                         );for
  186.                                 );when
  187.                        
  188.                                 when(num == 2 && objshapesT == "T"
  189.                                 for(a 0 rowA-1
  190.                                 for(b 0 columnA-1
  191.                                         XxA = nth(0 car(transList))
  192.                                         YyA = nth(1 car(transList))
  193.                                         when(nth(1 transList) == "R0" || nth(1 transList) == "MY"
  194.                                                 if(nth(1 transList) == "R0" then
  195.                                                         xyA=list(XxA+b*uxA YyA+a*uyA)
  196.                                                 else
  197.                                                         xyA=list(XxA-b*uxA YyA+a*uyA)
  198.                                                 );if

  199.                                                 transListA=list(xyA nth(1 transList) nth(2 transList))
  200.                                                 polyA=dbCopyFig(objshapes cv transListA)
  201.                                                 polyA_left=nth(0 nth(0 (polyA~>bBox)))
  202.                                                 polyA_bottom=nth(1 nth(0 (polyA~>bBox)))
  203.                                                 polyA_right=nth(0 nth(1 (polyA~>bBox)))
  204.                                                 polyA_top=nth(1 nth(1 (polyA~>bBox)))        + shiftA                       
  205.                                                 polyA~>bBox=list(list(polyA_left polyA_bottom) list(polyA_right polyA_top))
  206.                                                 leAttachFig(polyA obj) ;poly end
  207.        
  208.                                                 metalA=dbCopyFig(polyA cv )
  209.                                                 metalA~>lpp=layerB
  210.                                                 if(polyA_right-polyA_left < mosL then
  211.                                                         metalA_left=polyA_left
  212.                                                         metalA_bottom=polyA_bottom + shiftB       
  213.                                                         metalA_right=polyA_right
  214.                                                         metalA_top=polyA_top
  215.                                                 else
  216.                                                         metalA_left=polyA_left + shiftC
  217.                                                         metalA_bottom=polyA_bottom + shiftB       
  218.                                                         metalA_right=polyA_right - shiftC
  219.                                                         metalA_top=polyA_top
  220.                                                         );if                               
  221.                                                 metalA~>bBox=list(list(metalA_left metalA_bottom) list(metalA_right metalA_top))
  222.                                                 leAttachFig(metalA obj) ;metal end
  223.        
  224.                                                 viaA=viaGenerateViasAtPoint(cv list(metalA_left metalA_bottom) myViaOptions)
  225.                                                 leAttachFig(car(viaA) obj)
  226.                                         ); R0,MY


  227.                                         when(nth(1 transList) == "R180" || nth(1 transList) == "MX"
  228.                                                 if(nth(1 transList) == "R180" then
  229.                                                         xyA=list(XxA-b*uxA YyA-a*uyA)
  230.                                                 else
  231.                                                         xyA=list(XxA+b*uxA YyA-a*uyA)
  232.                                                 );if

  233.                                                 transListA=list(xyA nth(1 transList) nth(2 transList))
  234.                                                 polyA=dbCopyFig(objshapes cv transListA)
  235.                                                 polyA_left=nth(0 nth(0 (polyA~>bBox)))
  236.                                                 polyA_bottom=nth(1 nth(0 (polyA~>bBox))) - shiftA       
  237.                                                 polyA_right=nth(0 nth(1 (polyA~>bBox)))
  238.                                                 polyA_top=nth(1 nth(1 (polyA~>bBox)))               
  239.                                                 polyA~>bBox=list(list(polyA_left polyA_bottom) list(polyA_right polyA_top))
  240.                                                 leAttachFig(polyA obj) ;poly end
  241.        
  242.                                                 metalA=dbCopyFig(polyA cv )
  243.                                                 metalA~>lpp=layerB
  244.                                                 if(polyA_right-polyA_left < mosL then
  245.                                                         metalA_left=polyA_left
  246.                                                         metalA_bottom=polyA_bottom
  247.                                                         metalA_right=polyA_right
  248.                                                         metalA_top=polyA_top - shiftB
  249.                                                 else
  250.                                                         metalA_left=polyA_left + shiftC
  251.                                                         metalA_bottom=polyA_bottom
  252.                                                         metalA_right=polyA_right - shiftC
  253.                                                         metalA_top=polyA_top - shiftB
  254.                                                         );if                               
  255.                                                 metalA~>bBox=list(list(metalA_left metalA_bottom) list(metalA_right metalA_top))
  256.                                                 leAttachFig(metalA obj) ;metal end
  257.        
  258.                                                 viaA=viaGenerateViasAtPoint(cv list(metalA_left metalA_bottom) myViaOptions)
  259.                                                 leAttachFig(car(viaA) obj)
  260.                                         ); R180,MX


  261.                                         when(nth(1 transList) == "R90" || nth(1 transList) == "MYR90"
  262.                                                 if(nth(1 transList) == "R90" then
  263.                                                         xyA=list(XxA-a*uyA YyA+b*uxA)
  264.                                                 else
  265.                                                         xyA=list(XxA-a*uyA YyA-b*uxA)
  266.                                                 );if

  267.                                                 transListA=list(xyA nth(1 transList) nth(2 transList))
  268.                                                 polyA=dbCopyFig(objshapes cv transListA)
  269.                                                 polyA_left=nth(0 nth(0 (polyA~>bBox))) - shiftA
  270.                                                 polyA_bottom=nth(1 nth(0 (polyA~>bBox)))
  271.                                                 polyA_right=nth(0 nth(1 (polyA~>bBox)))
  272.                                                 polyA_top=nth(1 nth(1 (polyA~>bBox)))               
  273.                                                 polyA~>bBox=list(list(polyA_left polyA_bottom) list(polyA_right polyA_top))
  274.                                                 leAttachFig(polyA obj) ;poly end
  275.        
  276.                                                 metalA=dbCopyFig(polyA cv )
  277.                                                 metalA~>lpp=layerB
  278.                                                 if(polyA_right-polyA_left < mosL then
  279.                                                         metalA_left=polyA_left
  280.                                                         metalA_bottom=polyA_bottom
  281.                                                         metalA_right=polyA_right - shiftB
  282.                                                         metalA_top=polyA_top
  283.                                                 else
  284.                                                         metalA_left=polyA_left
  285.                                                         metalA_bottom=polyA_bottom + shiftC
  286.                                                         metalA_right=polyA_right - shiftB
  287.                                                         metalA_top=polyA_top - shiftC
  288.                                                         );if                               
  289.                                                 metalA~>bBox=list(list(metalA_left metalA_bottom) list(metalA_right metalA_top))
  290.                                                 leAttachFig(metalA obj) ;metal end
  291.        
  292.                                                 viaA=viaGenerateViasAtPoint(cv list(metalA_left metalA_bottom) myViaOptions)
  293.                                                 leAttachFig(car(viaA) obj)
  294.                                         ); R90,MYR90


  295.                                         when(nth(1 transList) == "R270" || nth(1 transList) == "MXR90"
  296.                                                 if(nth(1 transList) == "R270" then
  297.                                                         xyA=list(XxA+a*uyA YyA-b*uxA)
  298.                                                 else
  299.                                                         xyA=list(XxA+a*uyA YyA+b*uxA)
  300.                                                 );if

  301.                                                 transListA=list(xyA nth(1 transList) nth(2 transList))
  302.                                                 polyA=dbCopyFig(objshapes cv transListA)
  303.                                                 polyA_left=nth(0 nth(0 (polyA~>bBox)))
  304.                                                 polyA_bottom=nth(1 nth(0 (polyA~>bBox)))
  305.                                                 polyA_right=nth(0 nth(1 (polyA~>bBox))) + shiftA
  306.                                                 polyA_top=nth(1 nth(1 (polyA~>bBox)))               
  307.                                                 polyA~>bBox=list(list(polyA_left polyA_bottom) list(polyA_right polyA_top))
  308.                                                 leAttachFig(polyA obj) ;poly end
  309.        
  310.                                                 metalA=dbCopyFig(polyA cv )
  311.                                                 metalA~>lpp=layerB
  312.                                                 if(polyA_right-polyA_left < mosL then
  313.                                                         metalA_left=polyA_left + shiftB
  314.                                                         metalA_bottom=polyA_bottom
  315.                                                         metalA_right=polyA_right
  316.                                                         metalA_top=polyA_top
  317.                                                 else
  318.                                                         metalA_left=polyA_left + shiftB
  319.                                                         metalA_bottom=polyA_bottom + shiftC
  320.                                                         metalA_right=polyA_right
  321.                                                         metalA_top=polyA_top - shiftC
  322.                                                         );if                               
  323.                                                 metalA~>bBox=list(list(metalA_left metalA_bottom) list(metalA_right metalA_top))
  324.                                                 leAttachFig(metalA obj) ;metal end
  325.        
  326.                                                 viaA=viaGenerateViasAtPoint(cv list(metalA_left metalA_bottom) myViaOptions)
  327.                                                 leAttachFig(car(viaA) obj)
  328.                                         ); R270,MXR90
  329.                                 );for
  330.                                 );for
  331.                         );when
  332.                 );when       
  333.                 );foreach
  334.         );when
  335. );foreach
  336. );let
  337. );pro
            

   

    复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-24 23:35:54 | 显示全部楼层
AlignNetsToLayer (path,pathseg,rect,polygon)

   

        

                
  1. procedure(AlignNetsToLayer()
  2. let((cv nets part_s bbox figList w pt1 pt2 x_list1 y_list1 pt3 pt4 x_list2 y_list2 newobj_bbox_x newobj_bbox_y max_x min_x max_y min_y)
  3.         cv = geGetEditCellView()
  4.         nets = geGetSelSet()

  5. foreach(x nets
  6. newobj_bbox_x = nil
  7. newobj_bbox_y = nil
  8. figList = nil
  9. bbox = nil
  10. part_s = geGetSelSetFigPoint(x)

  11. when(x~>objType =="rect" || x~>objType == "polygon" || length(setof(y part_s y==t))==2
  12.         bbox=x~>bBox
  13. );
  14. when(x~>objType == "pathSeg"
  15.         bbox=x~>bBox
  16. );
  17. when(x~>objType == "path"
  18.         w = x~>width
  19.         pt1 = car(x~>points)
  20.         pt2 = cadr(x~>points)
  21.         x_list1 = list(car(pt1) car(pt2))
  22.         y_list1 = list(cadr(pt1) cadr(pt2))
  23.         pt3 = cadr(reverse(x~>points))
  24.         pt4 = car(reverse(x~>points))
  25.         x_list2 = list(car(pt3) car(pt4))
  26.         y_list2 = list(cadr(pt3) cadr(pt4))
  27.         when(car(part_s) && !car(reverse(part_s))
  28.                 when(car(pt1) == car(pt2)
  29.                 bbox = list(car(pt1)-w/2:apply('min y_list1) car(pt2)+w/2:apply('max y_list1))
  30.                 );
  31.                 when(cadr(pt1) == cadr(pt2)
  32.                 bbox = list(apply('min x_list1):cadr(pt1)-w/2 apply('max x_list1):cadr(pt2)+w/2)
  33.                 );
  34.         );
  35.         when(car(reverse(part_s)) && !car(part_s)
  36.                 when(car(pt3) == car(pt4)
  37.                 bbox = list(car(pt3)-w/2:apply('min y_list2) car(pt4)+w/2:apply('max y_list2))
  38.                 );
  39.                 when(cadr(pt3) == cadr(pt4)
  40.                 bbox = list(apply('min x_list2):cadr(pt3)-w/2 apply('max x_list2):cadr(pt4)+w/2)
  41.                 );
  42.         );
  43. );

  44. when(bbox != nil
  45.         objHier=nil       
  46.         transList=nil       
  47.         objList=nil       
  48.         objTransList=nil       
  49.         listNew=nil       
  50.         newobj=nil       
  51.         objHier=dbShapeQuery(cv x~>lpp bbox)
  52.         foreach(obja objHier       
  53.         transList=nconc(transList list(dbGetHierPathTransform(obja)))       
  54.         );foreach
  55.         foreach(objb objHier       
  56.         if(listp(objb) then       
  57.         objList=nconc(objList last(objb))
  58.         else       
  59.         objList=nconc(objList list(objb))
  60.         );if
  61.         );foreach
  62.         objTransList=mapcar('list objList transList)
  63.         figList=foreach(mapcar xxx objTransList
  64.         when(car(xxx) != x
  65.         dbCopyShape(car(xxx) cv cadr(xxx))
  66.                 );when
  67.         );foreach
  68.         figList=remd(nil figList)
  69. );when               

  70. foreach(newobj figList
  71.         newobj_bbox_x = cons(caar(newobj~>bBox) newobj_bbox_x)
  72.         newobj_bbox_x = cons(caadr(newobj~>bBox) newobj_bbox_x)
  73.         newobj_bbox_y = cons(cadar(newobj~>bBox) newobj_bbox_y)
  74.         newobj_bbox_y = cons(cadadr(newobj~>bBox) newobj_bbox_y)
  75. );foreach
  76. if(figList != nil
  77. then
  78. max_x = apply('max newobj_bbox_x)
  79. min_x = apply('min newobj_bbox_x)
  80. max_y = apply('max newobj_bbox_y)
  81. min_y = apply('min newobj_bbox_y)
  82. );

  83. foreach(objc figList
  84. dbDeleteObject(objc)
  85.         );foreach

  86. ;pathSeg
  87. when(x~>objType == "pathSeg" && figList != nil && car(part_s) && !cadr(part_s)
  88.         when(cadr(x~>beginPt) == cadr(x~>endPt)        && car(x~>beginPt) < car(x~>endPt)        ;horizontal wire, left to right
  89.                 x~>beginPt = list(min_x cadr(x~>beginPt))
  90.         )
  91.         when(cadr(x~>beginPt) == cadr(x~>endPt)        && car(x~>beginPt) > car(x~>endPt)        ;horizontal wire, right to left
  92.                 x~>beginPt = list(max_x cadr(x~>beginPt))
  93.         )
  94.         when(car(x~>beginPt) == car(x~>endPt) && cadr(x~>beginPt) < cadr(x~>endPt)                ;vertical wire, bottom to top
  95.                 x~>beginPt = list(car(x~>beginPt) min_y)
  96.         )
  97.         when(car(x~>beginPt) == car(x~>endPt) && cadr(x~>beginPt) > cadr(x~>endPt)                ;vertical wire, top to bottom
  98.                 x~>beginPt = list(car(x~>beginPt) max_y)
  99.         )
  100. );when
  101. when(x~>objType == "pathSeg" && figList != nil && cadr(part_s) && !car(part_s)
  102.         when(cadr(x~>beginPt) == cadr(x~>endPt)        && car(x~>beginPt) < car(x~>endPt)        ;horizontal wire, left to right
  103.                 x~>endPt = list(max_x cadr(x~>endPt))
  104.         )
  105.         when(cadr(x~>beginPt) == cadr(x~>endPt)        && car(x~>beginPt) > car(x~>endPt)        ;horizontal wire, right to left
  106.                 x~>endPt = list(min_x cadr(x~>endPt))       
  107.         )
  108.         when(car(x~>beginPt) == car(x~>endPt) && cadr(x~>beginPt) < cadr(x~>endPt)                ;vertical wire, bottom to top
  109.                 x~>endPt = list(car(x~>endPt) max_y)
  110.         )
  111.         when(car(x~>beginPt) == car(x~>endPt) && cadr(x~>beginPt) > cadr(x~>endPt)                ;vertical wire, top to bottom
  112.                 x~>endPt = list(car(x~>endPt) min_y)
  113.         )
  114. );when

  115. ;path
  116. when(x~>objType == "path" && figList != nil && car(part_s) && !car(reverse(part_s))
  117.         when(cadar(x~>points) == cadadr(x~>points) && caar(x~>points) < caadr(x~>points)        ;horizontal path, left to right
  118.                 x~>points = rplaca(x~>points list(min_x cadar(x~>points)))
  119.         )
  120.         when(cadar(x~>points) == cadadr(x~>points) && caar(x~>points) > caadr(x~>points)        ;horizontal path, right to left
  121.                 x~>points = rplaca(x~>points list(max_x cadar(x~>points)))
  122.         )
  123.         when(caar(x~>points) == caadr(x~>points) && cadar(x~>points) < cadadr(x~>points)        ;vertical path, bottom to top
  124.                 x~>points = rplaca(x~>points list(caar(x~>points) min_y))
  125.         )
  126.         when(caar(x~>points) == caadr(x~>points) && cadar(x~>points) > cadadr(x~>points)        ;vertical path, top to bottom
  127.                 x~>points = rplaca(x~>points list(caar(x~>points) max_y))
  128.         )
  129. );when
  130. when(x~>objType == "path" && figList != nil && car(reverse(part_s)) && !car(part_s)
  131.         when(cadar(reverse(x~>points)) == cadadr(reverse(x~>points)) && caar(reverse(x~>points)) > caadr(reverse(x~>points))        ;horizontal path, left to right
  132.                 x~>points = reverse(rplaca(reverse(x~>points) list(max_x cadar(reverse(x~>points)))))
  133.         )
  134.         when(cadar(reverse(x~>points)) == cadadr(reverse(x~>points)) && caar(reverse(x~>points)) < caadr(reverse(x~>points))        ;horizontal path, right to left
  135.                 x~>points = reverse(rplaca(reverse(x~>points) list(min_x cadar(reverse(x~>points)))))
  136.         )
  137.         when(caar(reverse(x~>points)) == caadr(reverse(x~>points)) && cadar(reverse(x~>points)) > cadadr(reverse(x~>points))        ;vertical path, bottom to top
  138.                 x~>points = reverse(rplaca(reverse(x~>points) list(caar(reverse(x~>points)) max_y)))
  139.         )
  140.         when(caar(reverse(x~>points)) == caadr(reverse(x~>points)) && cadar(reverse(x~>points)) < cadadr(reverse(x~>points))        ;vertical path, top to bottom
  141.                 x~>points = reverse(rplaca(reverse(x~>points) list(caar(reverse(x~>points)) min_y)))
  142.         )
  143. );when

  144. ;rect
  145. when(x~>objType == "rect" && length(setof(y part_s y==t))==2
  146.         when(part_s==list(t t nil nil)
  147.         x~>bBox=list(list(min_x cadar(x~>bBox)) cadr(x~>bBox))
  148.         )
  149.         when(part_s==list(nil t t nil)
  150.         x~>bBox=list(car(x~>bBox) list(caadr(x~>bBox) max_y))
  151.         )
  152.         when(part_s==list(nil nil t t)
  153.         x~>bBox=list(car(x~>bBox) list(max_x cadadr(x~>bBox)))
  154.         )
  155.         when(part_s==list(t nil nil t)
  156.         x~>bBox=list(list(caar(x~>bBox) min_y) cadr(x~>bBox))
  157.         )
  158. );

  159. ;polygon
  160. when(x~>objType =="polygon" && length(setof(y part_s y==t))==2
  161.         pointA=nil
  162.         for(i 0 x~>nPoints-1
  163.                 when(nth(i part_s)==t
  164.                 pointA=nconc(pointA nth(i x~>points))
  165.                 )
  166.         );for
  167.         Pax=nth(0 pointA)
  168.         Pay=nth(1 pointA)
  169.         Pbx=nth(2 pointA)
  170.         Pby=nth(3 pointA)
  171.         when(Pax!=Pbx && Pay==Pby
  172.                 newrectA=dbCreateRect(cv x~>lpp list(Pax:Pay Pbx:Pby+0.005))
  173.                 Tinside=abeShapesInside(cv list(newrectA) list(x))
  174.                 dbDeleteObject(newrectA)
  175.                 if(Tinside!=nil then
  176.                         Stxy=0:min_y-Pay
  177.                 else
  178.                         Stxy=0:max_y-Pay
  179.                 );if
  180.         );when
  181.         when(Pax==Pbx && Pay!=Pby
  182.                 newrectA=dbCreateRect(cv x~>lpp list(Pax:Pay Pbx+0.005:Pby))
  183.                 Tinside=abeShapesInside(cv list(newrectA) list(x))
  184.                 dbDeleteObject(newrectA)
  185.                 if(Tinside!=nil then
  186.                         Stxy=min_x-Pax:0
  187.                 else
  188.                         Stxy=max_x-Pax:0
  189.                 );if
  190.         );when
  191.         leStretchShape(x Stxy part_s)
  192.         );

  193. );foreach
  194. );let
  195. );procedure

  196.         

   

    复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-27 21:57:04 | 显示全部楼层
本帖最后由 yangwgtop 于 2025-8-3 00:16 编辑

ReArray


   

        

                
  1. hiSetBindKeys("Layout" list(list("<Key>F12" "setArrayForm()")))

  2. procedure(setArrayForm()
  3. let(()

  4. if(boundp('setcolumns) == nil then
  5.         ;setrows=2
  6.         setcolumns=2
  7.         setSetDeltaY=2.5
  8.         setSetDeltaX=2.5
  9. else
  10.         ;setrows=ArrayForm~>rows~>lastValue
  11.         setcolumns=ArrayForm~>columns~>lastValue
  12.         setSetDeltaY=ArrayForm~>SetDeltaY~>lastValue
  13.         setSetDeltaX=ArrayForm~>SetDeltaX~>lastValue
  14. );if
  15. ;rows =hiCreateIntField(
  16. ;?name 'rows
  17. ;?prompt "Rows"
  18. ;?value setrows
  19. ;?defValue 1
  20. ;?range '(1 nil)
  21. ;)

  22. columns =hiCreateIntField(
  23. ?name 'columns
  24. ?prompt "Columns"
  25. ?value setcolumns
  26. ?defValue 1
  27. ?range '(1 nil)
  28. )

  29. SetDeltaY=hiCreateFloatField(
  30. ?name 'SetDeltaY
  31. ?prompt "delta Y"
  32. ?value setSetDeltaY
  33. ?defValue 1.0
  34. )

  35. SetDeltaX=hiCreateFloatField(
  36. ?name 'SetDeltaX
  37. ?prompt "delta X"
  38. ?value setSetDeltaX
  39. ?defValue 1.0
  40. )

  41. hiCreateAppForm(
  42. ?name 'ArrayForm
  43. ?formTitle "Array Form"
  44. ?callback "ReArray()"
  45. ?fields list(columns SetDeltaY SetDeltaX)
  46. ;?help "cream"
  47. )
  48. hiDisplayForm('ArrayForm)
  49. ))

  50. procedure(ReArray()
  51. let(()
  52. cv=geGetEditCellView()
  53. objs=geGetSelSet()
  54. listx=nil
  55. listy=nil
  56. objsA=nil
  57. foreach(obj objs
  58.         when(obj~>xy != nil
  59.                 objsA=cons(obj objsA)
  60.                 listx=cons(car(obj~>xy) listx)
  61.                 listy=cons(cadr(obj~>xy) listy)
  62.                 );
  63.         );
  64. objsA=reverse(objsA)
  65. min_x=apply('min listx)
  66. min_y=apply('min listy)
  67. setDx=SetDeltaX~>value
  68. setDy=SetDeltaY~>value
  69. setDc=columns~>value
  70. xyone=list(min_x min_y)

  71. rows=length(objsA)/setDc
  72. newobj=objsA
  73. for(r 0 rows
  74.         for(c 0 setDc-1
  75.         newxy=list(min_x+c*setDx min_y+r*setDy)
  76.         println(newxy)
  77.         print(car(newobj))
  78.         car(newobj)~>xy=newxy
  79.         newobj=cdr(newobj)
  80.         );for
  81. );for

  82. );let
  83. );pro
            

   

    复制代码


回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-10 17:36:05 | 显示全部楼层


via 重新计算

cv=geGetEditCellView()
techFile=techGetTechFile(ddGetObj("PDK_lib"))
constraintGroupId=cstFindConstraintGroupIn(techFile "virtuosoDefaultSetup")
myviaOptions=viaGetViaOptions(constraintGroupId)



foreach(via cv~>vias
viapoint = via~>origin
via_Transform=dbGetInstTransform(via)
dbCopyShape(car(nth(1 via~>viaHeader~>master~>lpps)~>shapes) cv via_Transform)
dbCopyShape(car(nth(2 via~>viaHeader~>master~>lpps)~>shapes) cv via_Transform)
viaRecomputeViasAtPoint(cv viapoint myViaOptions)
);foreach


回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

X

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

GMT+8, 2025-8-22 14:18 , Processed in 0.019604 second(s), 3 queries , Gzip On, Redis On.

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