home *** CD-ROM | disk | FTP | other *** search
- Procedure CreateCircle;
- {
- (Windows version)
- @1996, Diehl Graphsoft, Inc.
- Developed by Tom Urie
-
- This procedure allows the user to place an unlimited number of circles of the same size on a drawing.
- }
- LABEL 10,99;
- CONST
- k1=0.25;
- k2=0.125;
- k3=0.0625;
- VAR
- x,y,x1,y1,xm,ym,Dia : REAL;
- cCode : INTEGER;
- Abort,OK,NextClick,CenterMark : BOOLEAN;
-
- Procedure CircleDialog;
- {
- This procedure creates the dialog box.
- }
- VAR
- Width,x1,y1,x2,y2,px1,px2,px3,px4,py1,py2 : INTEGER;
-
- Procedure AlignScr(Width:INTEGER; VAR x1,x2:INTEGER);
- VAR
- scrx1,scry1,scrx2,scry2:INTEGER;
- BEGIN
- GetScreen(scrx1,scry1,scrx2,scry2);
- x1:=((scrx1+scrx2) div 2)-(Width div 2);
- x2:=x1+Width;
- END;
-
- Procedure MakeDialog;
- {
- This procedure defines the dialog box.
- }
- CONST
- y1=100;
- scnh=225; scnw=230;
- h=30;
- BEGIN
- AlignScr(scnw,x1,x2);
- y2:=y1+scnh;
- px3:=(scnw div 2) - 70;
- px4:=(scnw div 2) - 10;
- px1:=(scnw div 2) + 10;
- px2:=(scnw div 2) + 70;
- py1:=scnh-40;
- py2:=scnh-20;
-
- BeginDialog(1,1,x1,y1,x2,y2);
- AddButton('OK',1,1,px3,py1,px4,py2);
- AddButton('Cancel',2,1,px1,py1,px2,py2);
- AddField('Diameter:',5,1,20,45-h,100,60-h);
- AddField('',6,2,105,45-h,205,60-h);
- AddField('Location:',7,1,20,75-h,130,90-h);
- AddField('X:',8,1,20,100-h,50,115-h);
- AddField('',9,2,55,100-h,155,115-h);
- AddField('Y:',10,1,20,125-h,50,140-h);
- AddField('',11,2,55,125-h,155,140-h);
- AddButton('Next Click(s)',12,3,20,155-h,120,170-h);
- AddButton('Show Center Mark',13,2,20,180-h,170,195-h);
- EndDialog;
- END;
-
- BEGIN
- MakeDialog;
- END;
-
- Procedure GetInfo;
- {
- This procedure displays the dialog box and retrieves the information.
- }
- LABEL 10,20,30,99;
- VAR
- Item : INTEGER;
- Done : BOOLEAN;
-
- BEGIN
- Done:=FALSE;
- Abort:=FALSE;
- NextClick:=TRUE;
- CenterMark:=FALSE;
- GetDialog(1);
- SetTitle('Create Circle');
- SetItem(12,NextClick);
- SetField(6,Num2Str(4,Dia));
- SelField(6);
- REPEAT
- DialogEvent(Item);
- IF Item = 1 THEN
- Done:=TRUE;
- IF Item = 2 THEN BEGIN
- Done:=TRUE;
- Abort:=TRUE;
- END;
- IF Item = 9 THEN BEGIN
- IF NextClick THEN BEGIN
- NextClick:=FALSE;
- SetItem(12,FALSE);
- SetField(9,Num2StrF(x));
- SetField(11,Num2StrF(y));
- SelField(9);
- END;
- END;
- IF Item = 11 THEN BEGIN
- IF NextClick THEN BEGIN
- NextClick:=FALSE;
- SetItem(12,FALSE);
- SetField(9,Num2StrF(x));
- SetField(11,Num2StrF(y));
- SelField(9);
- END;
- END;
- IF Item = 12 THEN BEGIN
- IF NOT NextClick THEN BEGIN
- NextClick:=TRUE;
- SetItem(12,TRUE);
- SetField(9,'');
- SetField(11,'');
- SelField(6);
- END
- ELSE BEGIN
- NextClick:=FALSE;
- SetItem(12,FALSE);
- SetField(9,Num2StrF(x));
- SetField(11,Num2StrF(y));
- SelField(9);
- END;
- END;
- IF Item = 13 THEN BEGIN
- CenterMark:=NOT CenterMark;
- SetItem(13,CenterMark);
- END;
- UNTIL Done;
- IF Abort THEN GOTO 99;
- OK:=ValidNumStr(GetField(6),Dia);
- IF Dia <= 0 THEN BEGIN
- Sysbeep;
- GOTO 10;
- END;
- OK:=ValidNumStr(GetField(9),x);
- OK:=ValidNumStr(GetField(11),y);
- 99:ClrDialog;
- END;
-
- Procedure CMark(Dia,x,y : REAL);
- VAR
- L1,L2 : REAL;
- BEGIN
- PushAttrs;
- PenPat(2);
- PenSize(5);
- L1:=k1;
- IF L1 > Dia/2 THEN L1:=0.5*Dia;
- L2:=Dia/2 + k2 - k3 - L1/2;
- Absolute;
- MoveTo(x,y);
- Relative;
- Move(-(Dia/2+k2),0);
- Line(L2,0);
- Move(k3,0);
- Line(L1,0);
- Move(k3,0);
- Line(L2,0);
- Absolute;
- MoveTo(x,y);
- Relative;
- Move(0,-(Dia/2+k2));
- Line(0,L2);
- Move(0,k3);
- Line(0,L1);
- Move(0,k3);
- Line(0,L2);
- PopAttrs;
- END;
-
- {
- Main Program.
- }
- BEGIN
- DSelectAll;
- {
- Display dialog box.
- }
- CircleDialog;
- SetCursor(ArrowC);
- {
- Get information from the dialog box.
- }
- GetInfo;
- IF Abort THEN GOTO 99;
- SetCursor(SmCrossC);
- x1:=9999;
- y1:=9999;
- {
- If next click was chosen, get center. If same as previous center, terminate program.
- }
- 10:IF NextClick THEN BEGIN
- GetPt(x,y);
- IF (x=x1) AND (y=y1) THEN GOTO 99;
- END;
- Absolute;
- {
- Draw circles.
- }
- MoveTo(x,y);
- Relative;
- Arc(-Dia/2,Dia/2,Dia/2,-Dia/2,0,360);
- IF CenterMark THEN BEGIN
- CMark(Dia,x,y);
- Group;
- DSelectAll;
- END;
- Redraw;
- x1:=x;
- y1:=y;
- IF NextClick THEN GOTO 10;
- 99:END;
-
- RUN(CreateCircle);
-