home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
CIRCLES.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
5KB
|
297 lines
Procedure CreateCircle;
{
@1997, 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 5,10,99;
CONST
k1=0.25;
k2=0.125;
k3=0.0625;
VAR
x,y,x1,y1,xm,ym,Dia : REAL;
KeyCode : 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,py3,py4 : 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 LocateButtons(DialogType,scnh,scnw : INTEGER);
{
This procedure locates the 'OK' and 'Cancel' buttons.
}
VAR
v1,v2,v3,v4 : INTEGER;
Mac : BOOLEAN;
Procedure Swap(VAR m1,m2,m3,m4 : INTEGER);
VAR
Temp : INTEGER;
BEGIN
Temp:=m1;
m1:=m3;
m3:=Temp;
Temp:=m2;
m2:=m4;
m4:=Temp;
END; {of Swap}
BEGIN
Mac:=FALSE;
GetVersion(v1,v2,v3,v4);
IF v4 = 1 THEN Mac:=TRUE;
IF DialogType = 1 THEN
BEGIN
px1:=(scnw DIV 2) - 80;
px2:=(scnw DIV 2) - 10;
px3:=(scnw DIV 2) + 10;
px4:=(scnw DIV 2) + 80;
IF Mac THEN SWAP(px1,px2,px3,px4);
py1:=scnh-40;
py2:=scnh-20;
py3:=py1;
py4:=py2;
END ELSE IF DialogType = 2 THEN
BEGIN
px1:=scnw - 180;
px2:=scnw - 110;
px3:=scnw - 90;
px4:=scnw - 20;
IF Mac THEN SWAP(px1,px2,px3,px4);
py1:=scnh-40;
py2:=scnh-20;
py3:=py1;
py4:=py2;
END ELSE
BEGIN
px1:=scnw - 90;
px2:=scnw - 20;
px3:=px1;
px4:=px2;
py1:=scnh -70;
py2:=scnh - 50;
py3:=scnh - 40;
py4:=scnh - 20;
IF Mac THEN SWAP(py1,py2,py3,py4);
END;
END; {of Locate Buttons}
Procedure MakeDialog;
{
This procedure defines the dialog box.
}
CONST
y1=100;
scnw = 230; scnh = 225;
DialogType = 1;
VAR
h : INTEGER;
BEGIN
AlignScr(scnw,x1,x2);
y2:=y1+scnh;
LocateButtons(DialogType,scnh,scnw );
BeginDialog(1,1,x1,y1,x2,y2);
AddButton('OK',1,1,px1,py1,px2,py2);
AddButton('Cancel',2,1,px3,py3,px4,py4);
h:=-30; 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) AND (NextClick) THEN
BEGIN
NextClick:=FALSE;
SetItem(12,FALSE);
SetField(9,Num2StrF(x));
SetField(11,Num2StrF(y));
SelField(9);
END;
IF (Item=11) AND (NextClick) THEN
BEGIN
NextClick:=FALSE;
SetItem(12,FALSE);
SetField(9,Num2StrF(x));
SetField(11,Num2StrF(y));
SelField(9);
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;
IF NextClick THEN
BEGIN
Message('Click location of circles(s). Hit any key to quit.');
SetCursor(LgCrossC);
END;
WHILE NOT KeyDown(KeyCode) DO
BEGIN
IF NOT NextClick THEN GOTO 5;
10:IF MouseDown(x,y) THEN
BEGIN
5:Absolute;
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;
IF NOT NextClick THEN GOTO 99;
END;
END;
ClrMessage;
99:END;
RUN(CreateCircle);