|
楼主 |
发表于 2025-7-24 23:35:54
|
显示全部楼层
AlignNetsToLayer (path,pathseg,rect,polygon)
- procedure(AlignNetsToLayer()
- 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)
- cv = geGetEditCellView()
- nets = geGetSelSet()
- foreach(x nets
- newobj_bbox_x = nil
- newobj_bbox_y = nil
- figList = nil
- bbox = nil
- part_s = geGetSelSetFigPoint(x)
- when(x~>objType =="rect" || x~>objType == "polygon" || length(setof(y part_s y==t))==2
- bbox=x~>bBox
- );
- when(x~>objType == "pathSeg"
- bbox=x~>bBox
- );
- when(x~>objType == "path"
- w = x~>width
- pt1 = car(x~>points)
- pt2 = cadr(x~>points)
- x_list1 = list(car(pt1) car(pt2))
- y_list1 = list(cadr(pt1) cadr(pt2))
- pt3 = cadr(reverse(x~>points))
- pt4 = car(reverse(x~>points))
- x_list2 = list(car(pt3) car(pt4))
- y_list2 = list(cadr(pt3) cadr(pt4))
- when(car(part_s) && !car(reverse(part_s))
- when(car(pt1) == car(pt2)
- bbox = list(car(pt1)-w/2:apply('min y_list1) car(pt2)+w/2:apply('max y_list1))
- );
- when(cadr(pt1) == cadr(pt2)
- bbox = list(apply('min x_list1):cadr(pt1)-w/2 apply('max x_list1):cadr(pt2)+w/2)
- );
- );
- when(car(reverse(part_s)) && !car(part_s)
- when(car(pt3) == car(pt4)
- bbox = list(car(pt3)-w/2:apply('min y_list2) car(pt4)+w/2:apply('max y_list2))
- );
- when(cadr(pt3) == cadr(pt4)
- bbox = list(apply('min x_list2):cadr(pt3)-w/2 apply('max x_list2):cadr(pt4)+w/2)
- );
- );
- );
- when(bbox != nil
- objHier=nil
- transList=nil
- objList=nil
- objTransList=nil
- listNew=nil
- newobj=nil
- objHier=dbShapeQuery(cv x~>lpp bbox)
- foreach(obja objHier
- transList=nconc(transList list(dbGetHierPathTransform(obja)))
- );foreach
- foreach(objb objHier
- if(listp(objb) then
- objList=nconc(objList last(objb))
- else
- objList=nconc(objList list(objb))
- );if
- );foreach
- objTransList=mapcar('list objList transList)
- figList=foreach(mapcar xxx objTransList
- when(car(xxx) != x
- dbCopyShape(car(xxx) cv cadr(xxx))
- );when
- );foreach
- figList=remd(nil figList)
- );when
- foreach(newobj figList
- newobj_bbox_x = cons(caar(newobj~>bBox) newobj_bbox_x)
- newobj_bbox_x = cons(caadr(newobj~>bBox) newobj_bbox_x)
- newobj_bbox_y = cons(cadar(newobj~>bBox) newobj_bbox_y)
- newobj_bbox_y = cons(cadadr(newobj~>bBox) newobj_bbox_y)
- );foreach
- if(figList != nil
- then
- max_x = apply('max newobj_bbox_x)
- min_x = apply('min newobj_bbox_x)
- max_y = apply('max newobj_bbox_y)
- min_y = apply('min newobj_bbox_y)
- );
- foreach(objc figList
- dbDeleteObject(objc)
- );foreach
- ;pathSeg
- when(x~>objType == "pathSeg" && figList != nil && car(part_s) && !cadr(part_s)
- when(cadr(x~>beginPt) == cadr(x~>endPt) && car(x~>beginPt) < car(x~>endPt) ;horizontal wire, left to right
- x~>beginPt = list(min_x cadr(x~>beginPt))
- )
- when(cadr(x~>beginPt) == cadr(x~>endPt) && car(x~>beginPt) > car(x~>endPt) ;horizontal wire, right to left
- x~>beginPt = list(max_x cadr(x~>beginPt))
- )
- when(car(x~>beginPt) == car(x~>endPt) && cadr(x~>beginPt) < cadr(x~>endPt) ;vertical wire, bottom to top
- x~>beginPt = list(car(x~>beginPt) min_y)
- )
- when(car(x~>beginPt) == car(x~>endPt) && cadr(x~>beginPt) > cadr(x~>endPt) ;vertical wire, top to bottom
- x~>beginPt = list(car(x~>beginPt) max_y)
- )
- );when
- when(x~>objType == "pathSeg" && figList != nil && cadr(part_s) && !car(part_s)
- when(cadr(x~>beginPt) == cadr(x~>endPt) && car(x~>beginPt) < car(x~>endPt) ;horizontal wire, left to right
- x~>endPt = list(max_x cadr(x~>endPt))
- )
- when(cadr(x~>beginPt) == cadr(x~>endPt) && car(x~>beginPt) > car(x~>endPt) ;horizontal wire, right to left
- x~>endPt = list(min_x cadr(x~>endPt))
- )
- when(car(x~>beginPt) == car(x~>endPt) && cadr(x~>beginPt) < cadr(x~>endPt) ;vertical wire, bottom to top
- x~>endPt = list(car(x~>endPt) max_y)
- )
- when(car(x~>beginPt) == car(x~>endPt) && cadr(x~>beginPt) > cadr(x~>endPt) ;vertical wire, top to bottom
- x~>endPt = list(car(x~>endPt) min_y)
- )
- );when
- ;path
- when(x~>objType == "path" && figList != nil && car(part_s) && !car(reverse(part_s))
- when(cadar(x~>points) == cadadr(x~>points) && caar(x~>points) < caadr(x~>points) ;horizontal path, left to right
- x~>points = rplaca(x~>points list(min_x cadar(x~>points)))
- )
- when(cadar(x~>points) == cadadr(x~>points) && caar(x~>points) > caadr(x~>points) ;horizontal path, right to left
- x~>points = rplaca(x~>points list(max_x cadar(x~>points)))
- )
- when(caar(x~>points) == caadr(x~>points) && cadar(x~>points) < cadadr(x~>points) ;vertical path, bottom to top
- x~>points = rplaca(x~>points list(caar(x~>points) min_y))
- )
- when(caar(x~>points) == caadr(x~>points) && cadar(x~>points) > cadadr(x~>points) ;vertical path, top to bottom
- x~>points = rplaca(x~>points list(caar(x~>points) max_y))
- )
- );when
- when(x~>objType == "path" && figList != nil && car(reverse(part_s)) && !car(part_s)
- when(cadar(reverse(x~>points)) == cadadr(reverse(x~>points)) && caar(reverse(x~>points)) > caadr(reverse(x~>points)) ;horizontal path, left to right
- x~>points = reverse(rplaca(reverse(x~>points) list(max_x cadar(reverse(x~>points)))))
- )
- when(cadar(reverse(x~>points)) == cadadr(reverse(x~>points)) && caar(reverse(x~>points)) < caadr(reverse(x~>points)) ;horizontal path, right to left
- x~>points = reverse(rplaca(reverse(x~>points) list(min_x cadar(reverse(x~>points)))))
- )
- when(caar(reverse(x~>points)) == caadr(reverse(x~>points)) && cadar(reverse(x~>points)) > cadadr(reverse(x~>points)) ;vertical path, bottom to top
- x~>points = reverse(rplaca(reverse(x~>points) list(caar(reverse(x~>points)) max_y)))
- )
- when(caar(reverse(x~>points)) == caadr(reverse(x~>points)) && cadar(reverse(x~>points)) < cadadr(reverse(x~>points)) ;vertical path, top to bottom
- x~>points = reverse(rplaca(reverse(x~>points) list(caar(reverse(x~>points)) min_y)))
- )
- );when
- ;rect
- when(x~>objType == "rect" && length(setof(y part_s y==t))==2
- when(part_s==list(t t nil nil)
- x~>bBox=list(list(min_x cadar(x~>bBox)) cadr(x~>bBox))
- )
- when(part_s==list(nil t t nil)
- x~>bBox=list(car(x~>bBox) list(caadr(x~>bBox) max_y))
- )
- when(part_s==list(nil nil t t)
- x~>bBox=list(car(x~>bBox) list(max_x cadadr(x~>bBox)))
- )
- when(part_s==list(t nil nil t)
- x~>bBox=list(list(caar(x~>bBox) min_y) cadr(x~>bBox))
- )
- );
- ;polygon
- when(x~>objType =="polygon" && length(setof(y part_s y==t))==2
- pointA=nil
- for(i 0 x~>nPoints-1
- when(nth(i part_s)==t
- pointA=nconc(pointA nth(i x~>points))
- )
- );for
- Pax=nth(0 pointA)
- Pay=nth(1 pointA)
- Pbx=nth(2 pointA)
- Pby=nth(3 pointA)
- when(Pax!=Pbx && Pay==Pby
- newrectA=dbCreateRect(cv x~>lpp list(Pax:Pay Pbx:Pby+0.005))
- Tinside=abeShapesInside(cv list(newrectA) list(x))
- dbDeleteObject(newrectA)
- if(Tinside!=nil then
- Stxy=0:min_y-Pay
- else
- Stxy=0:max_y-Pay
- );if
- );when
- when(Pax==Pbx && Pay!=Pby
- newrectA=dbCreateRect(cv x~>lpp list(Pax:Pay Pbx+0.005:Pby))
- Tinside=abeShapesInside(cv list(newrectA) list(x))
- dbDeleteObject(newrectA)
- if(Tinside!=nil then
- Stxy=min_x-Pax:0
- else
- Stxy=max_x-Pax:0
- );if
- );when
- leStretchShape(x Stxy part_s)
- );
- );foreach
- );let
- );procedure
复制代码 |
|