{Select By Poly Marquee ©1997 Julian Carr} Procedure SelectByPolyMarquee; VAR x,y,x1,y1,x2,y2 : REAL; i,j : INTEGER; h,h1 : HANDLE; Procedure Lines; BEGIN MoveTo(x,y); LineTo(x1,y1); SetDSelect(LNewObj); ReDraw; END; BEGIN DSelectAll; Message('Draw closed polygon to enclose objects for selection.'); GetLine(x,y,x1,y1); Lines; x2:=x; y2:=y; i:=0; REPEAT {creates visible lines for marquee} x:=x1; y:=y1; GetPtL(x,y,x1,y1); Lines; i:=i+1; UNTIL EqualPt(x1,y1,x2,y2)|((x=x1)&(y=y1)); h:=LActLayer; BeginPoly; FOR j:=0 TO i DO BEGIN {turns lines into a polygon} IF j=0 THEN BEGIN GetSegPt2(h,x,y); AddPoint(x,y); END; GetSegPt1(h,x,y); AddPoint(x,y); SetSelect(h); h:=PrevObj(h); END; EndPoly; h:=LNewObj; SetDSelect(h); DeleteObjs; h1:=FActLayer; REPEAT {selects objects that are within polygon} GetBBox(h1,x,y,x1,y1); HCenter(h1,x2,y2); IF PtInPoly(x2-(Abs(x)-Abs(x1))/2,y2+(Abs(y)-Abs(y1))/2,h)& PtInPoly(x2+(Abs(x)-Abs(x1))/2,y2-(Abs(y)-Abs(y1))/2,h) THEN SetSelect(h1); h1:=NextObj(h1); UNTIL h1=Nil; DelObject(h); ClrMessage; END; RUN(SelectByPolyMarquee);