| ||
别人的脚本,备份一下。
procedure(trimWire2Via(@optional (align2Edge nil))
let((id overlaps stretchDelta overlap stretchID seledPt selSet id1)
selSet=geGetSelSet()
foreach(id selSet
if(remove(nil geGetSelSetFigPoint(id)) == '(t) then
overlaps=dbGetTrueOverlaps(geGetEditCellView() id->bBox id->lpp 1)
if(length(overlaps) ==2 && car(overlaps)->objType == "pathSeg" && cadr(overlaps)->objType == "pathSeg" then
case(geGetSelSetFigPoint(id)
('(nil t)
seledPt=id->endPt
geDeselectFigPoint(id list(nil nil))
)
('(t nil)
seledPt=id->beginPt
geDeselectFigPoint(id list(nil nil))
)
)
id=car(leMergeShapes(overlaps))
if(id->endPt == seledPt then
geSelectFigPoint(id list(nil t))
else
geSelectFigPoint(id list(t nil))
)
overlaps=dbGetTrueOverlaps(geGetEditCellView() id->bBox id->lpp 1)
)
if(length(overlaps) >=2 then
stretchDelta=1000000
stretchID=nil
seledPt1=nil
foreach(overlap overlaps
if(listp(overlap) then
if(car(overlap)->objType == "stdVia" || car(overlap)->objType == "customVia" then
if(id->objType == "path" then
seledPt=nth(lindex(geGetSelSetFigPoint(id) t)-1 id->points)
else if(id->objType == "pathSeg" then
case(geGetSelSetFigPoint(id)
('(nil t)
seledPt=id->endPt
)
('(t nil)
seledPt=id->beginPt
)
)
))
if(sqrt(pow(-(xCoord(seledPt)-xCoord(car(overlap)->xy)) 2)+pow(-(yCoord(seledPt)-yCoord(car(overlap)->xy)) 2)) <= stretchDelta then
stretchDelta=sqrt(pow(-(xCoord(seledPt)-xCoord(car(overlap)->xy)) 2)+pow(-(yCoord(seledPt)-yCoord(car(overlap)->xy)) 2))
stretchID=overlap
seledPt1=seledPt
)
)
)
)
if(stretchID && align2Edge == nil then
leStretchShape(id-(xCoord(seledPt1)-xCoord(car(stretchID)-xy)):-(yCoord(seledPt1)-yCoord(car(stretchID)->xy)) geGetSelSetFigPoint(id))
else if(stretchID && align2Edge then
if(abs(-(xCoord(seledPt1)-xCoord(car(stretchID)->xy))) > abs(-(yCoord(seledPt1)-yCoord(car(stretchID)->xy))) then
if(xCoord(seledPt1) > xCoord(car(stretchID)->xy) then
leStretchShape(id -(xCoord(seledPt1)-xCoord(upperRight(car(stretchID)->bBox))):-(yCoord(seledPt1)-yCoord(car(stretchID)->xy)) geGetSelSetFigPoint(id))
else
leStretchShape(id -(xCoord(seledPt1)-xCoord(lowerLeft(car(stretchID)->bBox))):-(yCoord(seledPt1)-yCoord(car(stretchID)->xy)) geGetSelSetFigPoint(id))
)
else
if(yCoord(seledPt1) > yCoord(car(stretchID)->xy) then
leStretchShape(id -(xCoord(seledPt1)-xCoord(car(stretchID)->xy)):-(yCoord(seledPt1)-yCoord(upperRight(car(stretchID)->bBox))) geGetSelSetFigPoint(id))
else
leStretchShape(id -(xCoord(seledPt1)-xCoord(car(stretchID)->xy)):-(yCoord(seledPt1)-yCoord(lowerLeft(car(stretchID)->bBox))) geGetSelSetFigPoint(id))
)
)
))
);if
)
)
nil
)
)