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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: Visen_Chiang

[原创] virtuoso Layout切线打孔脚本

[复制链接]
发表于 2024-6-27 15:44:04 | 显示全部楼层


Visen_Chiang 发表于 2024-6-27 10:37
请问还是和之前一样的提示吗,脚本改了之后可以放一张图来看看吗

不清楚是不是virtuoso版本的问题?


试了试其它所有情况 有一个group用不了 其它是可以用的 问题解决了。但还有个小建议 这里划线的逻辑是不是没必要和select by line的逻辑做成一样 划线点一下就好 没必要点两下。
发表于 2024-6-27 15:56:32 | 显示全部楼层
楼主我的可以运行了,但是只能一根线自动连上,一捆线还是不能,一捆线的中间会微微倾斜一个角度,也不会延长然后打孔
 楼主| 发表于 2024-6-27 16:31:22 | 显示全部楼层


zcwolf 发表于 2024-6-27 15:44
试了试其它所有情况 有一个group用不了 其它是可以用的 问题解决了。但还有个小建议 这里划线的逻辑是不 ...


这个确实是用的select by line的函数,我是一边学习一边写的,现在不知道有什么方法可以少点击一下。我想,要快速点击两下是因为中间有需要转弯的情况吧。
 楼主| 发表于 2024-6-27 16:33:44 | 显示全部楼层


Skadoodle7 发表于 2024-6-27 15:56
楼主我的可以运行了,但是只能一根线自动连上,一捆线还是不能,一捆线的中间会微微倾斜一个角度,也不会延 ...


Alt+S/W/2是要先选择两条线,这是一对线的连接对应的快捷键
Alt+D/E/3是要先按下快捷键,然后通过两次select by line,分别选择两把线,这是多组线连接对应的快捷键。
你是进行的哪个操作呢?
发表于 2024-6-27 16:34:40 | 显示全部楼层


Visen_Chiang 发表于 2024-6-27 16:31
这个确实是用的select by line的函数,我是一边学习一边写的,现在不知道有什么方法可以少点击一下。我想 ...


对 因为感觉这个脚本不需要拐弯 都是直线 可以参考一下这个脚本 是点击一下的。

procedure( ConnectNetByName()
let(
       (Obj1sObj2s  Obj1  Obj2 Ob1Name  
        Point1 Point2 Point3 Point4 PX1 PX2  PX3 PX4
        PY1 PY2 PY3 PY4 Space1 Space2 Space3Space4  TechFile CGroupId MyViaOptions
       point_LD_xpoint_LU_x point_RD_x point_RU_x point_LD_y point_LU_y point_RD_y point_RU_y
        Window Ob2W Ob1W LeftDown LeftUp RightUp RightDown  
)
geSelectBy2PointsLine()
Obj1s=geGetSelSet()
geSelectBy2PointsLine()
Obj2s=geGetSelSet()
procedure(FlipPathSeg(pSeg)
dbSetPathSegPoints(pSeg pSeg~>endPtpSeg~>beginPt)
pSeg
;
);
point_LD_x = nil
point_LU_x = nil
point_RD_x = nil
point_RU_x = nil
point_LD_y = nil
point_LU_y = nil
point_RD_y = nil
point_RU_y = nil
foreach(OBJ1x Obj1s
cond(
(OBJ1x~>objType!="pathSeg"
Obj1= car(leConvertShapeToPathSeg(OBJ1x)));
(OBJ1x~>objType=="pathSeg"
if((xCoord(OBJ1x~>beginPt)==xCoord(OBJ1x~>endPt) &&yCoord(OBJ1x~>beginPt)>yCoord(OBJ1x~>endPt))
  ||(yCoord(OBJ1x~>beginPt)==yCoord(OBJ1x~>endPt) &&xCoord(OBJ1x~>beginPt)>xCoord(OBJ1x~>endPt))
thenprintln("Flip") Obj1 = FlipPathSeg(OBJ1x)
elseObj1 = OBJ1x
  );if
);
);cond
Ob1Name = Obj1~>net~>name
Ob1W = Obj1~>width/2
;printf("Mark0:%L \n" Ob1Name)
foreach(OBJ2x Obj2s
if(OBJ2x~>net~>name==Ob1Name
then
;printf("Mark1:%L \n"OBJ2x~>net~>name)
cond(
(OBJ2x~>objType!="pathSeg"
Obj2= car(leConvertShapeToPathSeg(OBJ2x)));
(OBJ2x~>objType=="pathSeg"
if((xCoord(OBJ2x~>beginPt)==xCoord(OBJ2x~>endPt)&&yCoord(OBJ2x~>beginPt)>yCoord(OBJ2x~>endPt))
  ||(yCoord(OBJ2x~>beginPt)==yCoord(OBJ2x~>endPt) &&xCoord(OBJ2x~>beginPt)>xCoord(OBJ2x~>endPt))
thenObj2 = FlipPathSeg(OBJ2x)
elseObj2 = OBJ2x
  );if
);
);cond
Ob2W = Obj2~>width/2
Point1 = Obj1~>beginPt Point2 =Obj1~>endPt
Point3 = Obj2~>beginPt Point4 =Obj2~>endPt
PX1 = xCoord(Point1)  PY1 = yCoord(Point1)
PX2 = xCoord(Point2)  PY2 = yCoord(Point2)
PX3 = xCoord(Point3)  PY3 = yCoord(Point3)
PX4 = xCoord(Point4)  PY4 = yCoord(Point4)
Space1 = expt((PX1-PX3) 2) + expt((PY1 -PY3) 2)
Space2 = expt((PX1-PX4) 2) + expt((PY1 -PY4) 2)
Space3 = expt((PX2-PX3) 2) + expt((PY2 -PY3) 2)
Space4 = expt((PX2-PX4) 2) + expt((PY2 -PY4) 2)
if((PX1==PX2)&& (PY3==PY4)
then ;NearPt = list(PX1 PY3)
    LeftDown = list(PX1-Ob1W PY3-Ob2W) LeftUp = list(PX1-Ob1W PY3+Ob2W)
    RightDown = list(PX1+Ob1W PY3-Ob2W) RightUp= list(PX1+Ob1W PY3+Ob2W)
if(min(Space1 Space2 Space3 Space4) ==Space1
then dbSetPathSegPoints(Obj1  list(PX1 PY3-Ob2W) Point2)
    dbSetPathSegPoints(Obj2 list(PX1-Ob1W PY3) Point4)
);if
if(min(Space1 Space2 Space3 Space4) ==Space2
then dbSetPathSegPoints(Obj1 list(PX1PY3-Ob2W) Point2)
    dbSetPathSegPoints(Obj2 Point3 list(PX1+Ob1W PY3))
);if
if(min(Space1 Space2 Space3 Space4) ==Space3
then dbSetPathSegPoints(Obj1  Point1 list(PX1 PY3+Ob2W))
    dbSetPathSegPoints(Obj2 list(PX1-Ob1W PY3) Point4)
);if
if(min(Space1 Space2 Space3 Space4) ==Space4
then dbSetPathSegPoints(Obj1  Point1 list(PX1 PY3+Ob2W))
    dbSetPathSegPoints(Obj2  Point3list(PX1+Ob1W PY3))
)
)
if((PY1==PY2) && (PX3==PX4)
then ;NearPt = list(PX3 PY1)
    LeftDown = list(PX3-Ob2W PY1-Ob1W) LeftUp = list(PX3-Ob2W PY1+Ob1W)
    RightDown= list(PX3+Ob2W PY1-Ob1W) RightUp= list(PX3+Ob2W PY1+Ob1W)
if(min(Space1 Space2 Space3 Space4) ==Space1
then dbSetPathSegPoints(Obj1  list(PX3-Ob2W PY1) Point2)
    dbSetPathSegPoints(Obj2  list(PX3PY1-Ob1W) Point4)
);if
if(min(Space1 Space2 Space3 Space4) ==Space2
then ;dbSetPathSegStyle(Obj1 car(OS1)"truncate" caddr(OS1) cdddr(OS1))
    dbSetPathSegPoints(Obj1 list(PX3-Ob2W PY1) Point2)
    dbSetPathSegPoints(Obj2 Point3 list(PX3 PY1+Ob1W))
);if
if(min(Space1 Space2 Space3 Space4) ==Space3
then ;dbSetPathSegStyle(Obj1 car(OS1) cadr(OS1)"truncate"  cdddr(OS1))
    dbSetPathSegPoints(Obj1  Point1list(PX3+Ob2W PY1))
    dbSetPathSegPoints(Obj2  list(PX3PY1-Ob1W) Point4)
);if
if(min(Space1 Space2 Space3 Space4) ==Space4
then ;dbSetPathSegStyle(Obj1 car(OS1)cadr(OS1) "truncate" cdddr(OS1))
    dbSetPathSegPoints(Obj1  Point1list(PX3+Ob2W PY1))
    dbSetPathSegPoints(Obj2  Point3list(PX3 PY1+Ob1W))
))
)
)
point_LD_x = cons( xCoord(LeftDown) point_LD_x)
point_LU_x = cons(xCoord(LeftUp) point_LU_x)
point_RD_x = cons(xCoord(RightDown) point_RD_x)
point_RU_x = cons(xCoord(RightUp) point_RU_x)
point_LD_y = cons(yCoord(LeftDown) point_LD_y)
point_LU_y = cons(yCoord(LeftUp) point_LU_y)
point_RD_y = cons(yCoord(RightDown) point_RD_y)
point_RU_y = cons(yCoord(RightUp) point_RU_y)
)
LeftDown = list(apply('min point_LD_x)apply('min point_LD_y))
LeftUp = list(apply('min point_LD_x)apply('max point_LU_y))
RightUp = list(apply('max point_RU_x)apply('max point_LU_y))
RightDown = list(apply('max point_RU_x)apply('min point_RD_y))
println(RightDown)
    /******************************************************************************/
TechFile = techGetTechFile(geGetEditRep())
CGroupId =cstFindConstraintGroupIn(TechFile "virtuosoDefaultSetup")
MyViaOptions = viaGetViaOptions(CGroupId)
MyViaOptions~>automatic~>minNumCuts=2
MyViaOptions~>automatic~>preventDRCWithNeighbors= t
MyViaOptions~>automatic~>cutBBoxOrientation= "auto"
MyViaOptions~>automatic~>viaAlignment= "auto"
MyViaOptions~>automatic~>connectShapesOnSameNet=t
Window = deGetCellView()
viaGenerateViasInArea(Window list(LeftDownLeftUp RightUp RightDown)  MyViaOptions)
       TechFile = techGetTechFile(geGetEditRep())
       CGroupId = cstFindConstraintGroupIn(TechFile"virtuosoDefaultSetup")
       MyViaOptions = viaGetViaOptions(CGroupId)
       MyViaOptions~>automatic~>minNumCuts= 2
       MyViaOptions~>automatic~>preventDRCWithNeighbors = t
       MyViaOptions~>automatic~>connectShapesOnSameNet=t
       MyViaOptions~>automatic~>cutBBoxOrientation= "horizontal"
       MyViaOptions~>automatic~>viaAlignment = "centerLeft" ||"centerRight"
       viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown)MyViaOptions)
       TechFile = techGetTechFile(geGetEditRep())
       CGroupId = cstFindConstraintGroupIn(TechFile"virtuosoDefaultSetup")
       MyViaOptions = viaGetViaOptions(CGroupId)
       MyViaOptions~>automatic~>minNumCuts= 2
       MyViaOptions~>automatic~>preventDRCWithNeighbors = t
        MyViaOptions~>automatic~>connectShapesOnSameNet=t
       MyViaOptions~>automatic~>cutBBoxOrientation= "vertical"
       MyViaOptions~>automatic~>viaAlignment = "lowerCenter" ||"upperCenter"
       viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown)MyViaOptions)
       TechFile= techGetTechFile(geGetEditRep())
       CGroupId = cstFindConstraintGroupIn(TechFile"virtuosoDefaultSetup")
       MyViaOptions = viaGetViaOptions(CGroupId)
       MyViaOptions~>automatic~>minNumCuts= 2
       MyViaOptions~>automatic~>preventDRCWithNeighbors = t
       MyViaOptions~>automatic~>connectShapesOnSameNet=t
       MyViaOptions~>automatic~>cutBBoxOrientation ="horizontal"
       MyViaOptions~>automatic~>viaAlignment = "centerRight" ||"centerLeft"
       viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown)MyViaOptions)
       TechFile = techGetTechFile(geGetEditRep())
       CGroupId = cstFindConstraintGroupIn(TechFile"virtuosoDefaultSetup")
       MyViaOptions = viaGetViaOptions(CGroupId)
       MyViaOptions~>automatic~>minNumCuts= 2
       MyViaOptions~>automatic~>connectShapesOnSameNet=t
       MyViaOptions~>automatic~>preventDRCWithNeighbors = t
       MyViaOptions~>automatic~>cutBBoxOrientation = "vertical"
       MyViaOptions~>automatic~>viaAlignment = "centerCenter"
       viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown)MyViaOptions)
      
       TechFile= techGetTechFile(geGetEditRep())
       CGroupId = cstFindConstraintGroupIn(TechFile "virtuosoDefaultSetup")
       MyViaOptions = viaGetViaOptions(CGroupId)
       MyViaOptions~>automatic~>minNumCuts= 2
       MyViaOptions~>automatic~>connectShapesOnSameNet=t
       MyViaOptions~>automatic~>preventDRCWithNeighbors = t
       MyViaOptions~>automatic~>cutBBoxOrientation ="horizontal"
       MyViaOptions~>automatic~>viaAlignment = "centerCenter"
       viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown)MyViaOptions)
       TechFile= techGetTechFile(geGetEditRep())
       CGroupId = cstFindConstraintGroupIn(TechFile"virtuosoDefaultSetup")
       MyViaOptions = viaGetViaOptions(CGroupId)
       MyViaOptions~>automatic~>minNumCuts= 1
       MyViaOptions~>automatic~>connectShapesOnSameNet=t
       MyViaOptions~>automatic~>preventDRCWithNeighbors = t
       MyViaOptions~>automatic~>cutBBoxOrientation = "vertical"
       MyViaOptions~>automatic~>viaAlignment = "centerCenter"
       viaGenerateViasInArea(Window list(LeftDown LeftUp RightUp RightDown)MyViaOptions)
)
;let
);pro
/*procedure(MetalLayerNumber(MetalLayerName )
let(( MetalList MetalNum)
MetalList=list("ME1""VI1" "ME2" "VI2" "ME3" "VI3""ME4" "VI4" "ME5" "VI5" "ME6""VI6" "ME7" "VI7" )
for(i 1 length(MetalList)
if(nth(i-1 MetalList)== MetalLayerName
then
MetalNum=i);if
);for
MetalNum
);let
);proc
*/
hiSetBindKey("Layout""Shift<Key>8" "ConnectNetByName()")
;partial select two parts lines, one partis horizontal, another part is vertical,
;then runswCreateVias("horizontal" )/swCreateVias ("vertical"),
;hozizontal/vertical vias will be createdand related nets will shorten.
;Orientation is a member of list("auto" "horizontal" "vertical")
procedure(swCreateVias(Orientation)
let((cv objs tf nets Hnets Vnets firHselDirfirVselDir len HnetId Hw HselDir HselPtCoord
selFigPt HnetLayerName VnetId Vw VselDirVselPtCoord VselFigPt VnetL ayerName
Hstretch Vstretch viaLoca autoViaL cstGrpIdviaOpt ions  HnetGrp  HselFigPt VnetGrp VnetLayerName viaOptions)
       cv=geGetEditCellView()
       objs=geGetSelSet()
       tf=ciGetTechFile()
       nets=setof(iobjs i~>objType=="path"||i~>objType=="pathSeg")
       Hnets=setof(inets swNetInfo(i)~>netDir=="Horizontal")
       Hnets=sort(Hnetslambda((a b)
                            yCoord(swNetInfo(a)~>selPtCoord)>yCoord(swNetInfo(b)~>selPtCoord)))
       Vnets=setof(inets swNetInfo(i)~>netDir=="Vertical")
       Vnets=sort(Vnetslambda((a b)
                            xCoord(swNetInfo(a)~>selPtCoord)<xCoord(swNetInfo(b)~>selPtCoord)))
       if(!Hnets||!Vnetsthen ;only select Hnets or Vnets, output error message
              error("\nPleasepartial select at least one vertical net and one horizontal net!!!"));if
       firHselDir=swNetInfo(car(Hnets))~>selDir
       firVselDir=swNetInfo(car(Vnets))~>selDir
       cond(    (firHselDir=="Right"&&firVselDir=="Up"          Hnets=reverse(Hnets))
              (firHselDir=="Left"&&firVselDir=="Down"       Vnets=reverse(Vnets))
              (firHselDir=="Left"&&firVselDir=="Up"            Hnets=reverse(Hnets)Vnets=reverse(Vnets))   );cond
              ;makesure create vias from inside to outside
       len=min(length(Hnets)length(Vnets))
       for(i1 len
       HnetId=nth(i-1Hnets)
       Hw=HnetId~>width
       HselDir=swNetInfo(HnetId)~>selDir
       HselPtCoord=swNetInfo(HnetId)~>selPtCoord
       HselFigPt=swNetInfo(HnetId)~>selFigPt
       HnetLayerName=HnetId~>layerName
       HnetGrp=HnetId~>figGroup
       VnetId=nth(i-1Vnets)
       Vw=VnetId~>width
       VselDir=swNetInfo(VnetId)~>selDir
       VselPtCoord=swNetInfo(VnetId)~>selPtCoord
       VselFigPt=swNetInfo(VnetId)~>selFigPt
       VnetLayerName=VnetId~>layerName
       VnetGrp=VnetId~>figGroup
              case(HselDir
                     ("Right"   Hstretch=list(xCoord(VselPtCoord)-xCoord(HselPtCoord)+Vw/20)      )
                     ("Left"            Hstretch=list(xCoord(VselPtCoord)-xCoord(HselPtCoord)-Vw/20)       )      );case
              leStretchFig(HnetIdHstretch HselFigPt)
              case(VselDir
                     ("Down"         Vstretch=list(0yCoord(HselPtCoord)-yCoord(VselPtCoord)-Hw/2)      )
                     ("Up"             Vstretch=list(0yCoord(HselPtCoord)-yCoord(VselPtCoord)+Hw/2)     )      );case
              leStretchFig(VnetIdVstretch VselFigPt)
       viaLoca=list(xCoord(swNetInfo(VnetId)~>selPtCoord)yCoord(swNetInfo(HnetId)~>selPtCoord))
       cstGrpId=cstFindConstraintGroupIn(tf"virtuosoDefaultExtractorSetup" )
       viaOptions=viaGetViaOptions(cstGrpId)
       viaOptions~>automatic~>minNumCuts=2
       viaOptions~>automatic~>cutBBoxOrientation=Orientation
       autoViaL=viaGenerateViasAtPoint(cvviaLoca viaOptions
              ?topAndBottomLayerslist(HnetLayerName VnetLayerName))
       cond(
              (HnetGrp mapcar(lambda((x) dbAddFigToFigGroup(HnetGrpx)) autoViaL)   )
              (VnetGrp mapcar(lambda((x) dbAddFigToFigGroup(VnetGrpx)) autoViaL)   )      );cond
              /*foreach(autoViaautoViaL ;change vias enclosure, and align vias to nets edge
              autoVia~>layer1Enc=mapcar(lambda((x)if(plusp(0.05-x) then 0.05 else x)) autoVia~>layer1Enc)
              autoVia~>layer2Enc=mapcar(lambda((x)if(plusp(0.05-x) then 0.05 else x)) autoVia~>layer2Enc)
              autoVia~>originOffset=mapcar(lambda((x)cond( (zerop(x) 0.0)
                     (plusp(x)case(Orientation("vertical" 0.38-Hw/2 ) ("horizontal"0.38-Vw/2) ) )
                     (minusp(x)case(Orientation("vertical" -(0.38-Hw/2)) ("horizontal"-(0.38-Vw/2))))))
                     autoVia~>origin0ffset);mapcar
              );foreach*/
       geSelectFigs(autoViaL)
       );for
);let
);proc
hiSetBindKey("Layout""Shift<Key>(" "swCreateVias(\"horizontal\")")
hiSetBindKey("Layout""Shift<Key>)" "swCreateVias(\"vertical\")")
;SwNetInfo(netId) can return net'sinformation excluding netId~>??
;partial select a net, only select onepoint of a pathseg or path, put its dbId in swNetInfo(netId) ,
;then use swNetInfo(netId)~>?? toretrieve its net informations which not include in netId~>??
procedure(swNetInfo(netId)
let((netInfo selFigPt xBeg yBeg xEnd yEndnetDir netRoute selDir selPt selPtCoord
nextPtCoord xFir yFir xSec ySec xLast yLastxSeLa ySeLa netPts)
       netInfo=makeTable('net)
       selFigPt=geGetSelSetFigPoint(netId)
       if(netId~>objType=="pathSeg"   then
       xBeg=xCoord(netId~>beginPt)   yBeg=yCoord(netId~>beginPt)
       xEnd=xCoord(netId~>endPt)      yEnd=yCoord(netId~>endPt)
              if(car(selFigPt)&&!car(last(selFigPt))           then
              selPt="beginPt"
              selPtCoord=netId~>beginPt
              nextPtCoord=netId~>endPt
                     when(xBeg==xEnd&&yBeg!=yEnd
                     netDir="Vertical"
                            if(yBeg>yEnd
                            then netRoute="UpToDown"       selDir="Up"   
                            else netRoute="DownToUp"       selDir="Down"     );if
                     );when
                     when(xBeg!=xEnd&&yBeg==yEnd
                     netDir="Horizontal"
                            if(xBeg>xEnd
                            then netRoute="RightToLeft"       selDir="Right"
                            else netRoute="LeftToRight"       selDir="Left"  );if
                     );when
              );if
              if(!car(selFigPt)&&car(last(selFigPt))           then
              selPt="endPt"
              selPtCoord=netId~>endPt
              nextPtCoord=netId->beginPt
                     when(xBeg==xEnd&&yBeg!=yEnd
                     netDir="Vertical"
                            if(yBeg>yEnd
                            then netRoute="UpToDown"       selDir="Down"
                            else netRoute="DownToUp"       selDir="Up"    );if
                     );when
                     when(xBeg!=xEnd&&yBeg==yEnd
                     netDir="Horizontal"
                            if(xBeg>xEnd
                            then netRoute="RightToLeft"       selDir="Left"
                            else netRoute="LeftToRight"       selDir="Right"       );if
                     );when
              );if
       );if
       if(netId~>objType=="path"  then
       netPts=netId~>points
       xFir=xCoord(nth(0netPts))          yFir=yCoord(nth(0netPts))
       xSec=xCoord(nth(1netPts))        ySec=yCoord(nth(1 netPts))
       xLast=xCoord(nth(0reverse(netPts))) yLast=yCoord(nth(0reverse(netPts)))
       xSeLa=xCoord(nth(1reverse(netPts))) ySeLa=yCoord(nth(1reverse(netPts)))
              if(car(selFigPt)&&!car(last(selFigPt))           then
              selPt="firstPt"
              selPtCoord=nth(0netPts)
              nextPtCoord=nth(1netPts)
                     when(xFir==xSec&&yFir!=ySec
                     netDir="Vertical"
                            if(yFir>ySec
                            then       netRoute="UpToDown"       selDir="Up"
                            else        netRoute="DownToUp"       selDir="Down"      );if
                     );when
                     when(xFir!=xSec&&yFir==ySec
                     netDir="Horizontal"
                     if(xFir>xSec
                     then       netRoute="RightToleft"        selDir="Right"
                     else        netRoute="LeftToRight"       selDir="Left"  );if
                     );when
              );if
              if(!car(selFigPt)&&car(last(selFigPt))           then
              selPt="lastPt"
              selPtCoord=nth(0reverse(netPts))
              nextPtCoord=nth(1reverse(netPts))
                     when(xLast==xSeLa&&yLast!=ySeLa
                     netDir="Vertical"
                            if(yLast<ySeLa
                            then       netRoute="UpToDown"              selDir="Down"
                            else        netRoute="DownToUp"              selDir="Up"           );if
                     );when
                     when(xLast!=xSeLa&&yLast==ySeLa
                     netDir="Horizontal"
                            if(xLast<xSeLa
                            then       netRoute="RightToLeft"              selDir="Left"
                            else        netRoute="LeftToRight"              selDir="Right"              );if
                     );when
              );if
       );if
       netInfo['net]=netId
       netInfo['selFigPt]=selFigPt
       netInfo['netDir]=netDir
       netInfo['netRoute]=netRoute
       netInfo['selDir]=selDir
       netInfo['selPt]=selPt
       netInfo['selPtCoord]=selPtCoord
       netInfo['nextPtCoord]=nextPtCoord
       netInfo
);let
);proc


 楼主| 发表于 2024-6-27 16:49:48 | 显示全部楼层
本帖最后由 Visen_Chiang 于 2024-6-27 16:57 编辑


zcwolf 发表于 2024-6-27 16:34
对 因为感觉这个脚本不需要拐弯 都是直线 可以参考一下这个脚本 是点击一下的。

procedure( ConnectNetB ...


感谢感谢,我load来看看。

————————————————

学习了,又是不一样的思路。
发表于 2024-7-1 17:24:57 | 显示全部楼层


Visen_Chiang 发表于 2024-6-27 16:49
感谢感谢,我load来看看。

————————————————


可以在select by line下面加上这两个函数leHiConvertShapeToPolygon()和leHiConvertPolygonToPath()这两个函数, 这样不管碰到什么类型的线段都可以连接了(实际用下来会碰到一些pathseg属性的线连不上)
发表于 2024-7-1 17:26:30 | 显示全部楼层


Visen_Chiang 发表于 2024-6-27 16:49
感谢感谢,我load来看看。

————————————————


我直接把select by line函数替换为为geSelectBy2PointsLine() 能运行 但还是有bug 线段连接顺序就变成随机的了
发表于 2024-9-24 15:33:00 | 显示全部楼层
本帖最后由 yucer 于 2024-9-24 16:54 编辑

佬,在左边的话有问题啊
我知道了这个是在第一象限可以用


微信截图_20240924153146.png
微信截图_20240924153331.png
微信截图_20240924153343.png

这样选中才能打出孔

这样选中才能打出孔
发表于 2024-9-29 16:57:33 | 显示全部楼层


zcwolf 发表于 2024-6-27 16:34
对 因为感觉这个脚本不需要拐弯 都是直线 可以参考一下这个脚本 是点击一下的。

procedure( ConnectNetB ...


这个脚本里面包含了多个解释有点不太理解,方便加一下联系方式吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-16 21:34 , Processed in 0.031852 second(s), 7 queries , Gzip On, Redis On.

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