home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
TAPR_PIN.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
5KB
|
293 lines
Procedure TaperPin;
{
⌐1997, Diehl Graphsoft, Inc.
Developed by Tom Urie
This procedure draws a taper pin.
}
LABEL 10,20,30,90,99;
CONST
Filename1= 'TaprPinE.txt';
PathnameW = 'External\Data\';
Theta=0.59681; {Angle of taper in degrees (1/4" per foot).}
VAR
D1,D2,L,Lmin,Lmax,x0,y0 : REAL;
Phi1,Phi2,RH1,RH2,Y1,Y2 : REAL;
View : INTEGER;
FileName,Sz,Size,Size1 : STRING;
Abort ,FirstTime,SizeNotFound : BOOLEAN;
UPI : REAL;
Fmt : INTEGER;
UM,UM2 : STRING;
UName,DA : LONGINT;
Procedure PinDialog;
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 LocateButtons1(scnh,scnw : INTEGER);
{
This procedure locates the 'OK' and 'Cancel' buttons centered at the bottom of the dialog box.
}
VAR
v1,v2,v3,v4 : INTEGER;
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
px1:=(scnw DIV 2) - 80;
px2:=(scnw DIV 2) - 10;
px3:=(scnw DIV 2) + 10;
px4:=(scnw DIV 2) + 80;
py1:=scnh-40;
py2:=scnh-20;
py3:=py1;
py4:=py2;
GetVersion(v1,v2,v3,v4);
IF v4 = 1 THEN
Swap(px1,px2,px3,px4);
END; {of Locate Buttons1}
Procedure MakeDialog1;
{
This procedure defines the main dialog box.
}
CONST
y1=100;
scnh=135;
scnw=280;
h=30;
BEGIN
AlignScr(scnw,x1,x2);
y2:=y1+scnh;
LocateButtons1(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);
AddField('Pin Size#:',4,1,20,44-h,95,60-h);
AddField('2/0',5,2,100,45-h,160,60-h);
AddField('Length:',6,1,20,79-h,85,95-h);
AddField('',7,2,100,80-h,160,95-h);
AddField('View:',8,1,190,39-h,245,55-h);
AddButton('Top',9,3,190,80-h,245,95-h);
AddButton('Side',10,3,190,60-h,245,75-h);
EndDialog;
END;
BEGIN
MakeDialog1;
END;
Procedure GetInfo;
{
This procedure displays the main dialog box and retrieves the information.
}
LABEL 10,99;
VAR
Item : INTEGER;
RFlag : ARRAY[1..2] OF INTEGER;
Done : BOOLEAN;
Procedure SetRButton(i,Item : INTEGER);
BEGIN
IF RFlag[i] <> Item THEN BEGIN
SetItem(RFlag[i],FALSE);
SetItem(Item,TRUE);
RFlag[i]:=Item;
END;
END;
BEGIN
Done:=FALSE;
Abort:=FALSE;
IF NOT FirstTime THEN GOTO 10;
FirstTime:=FALSE;
View:=2;
Size1:='2/0';
L:=1.000;
RFlag[1]:=10;
GetDialog(1);
SetTitle('Taper Pins');
SetItem(RFlag[1],TRUE);
SetField(5,Size1);
SetField(7,Num2Str(3,L));
10:SelField(5);
REPEAT
DialogEvent(Item);
IF Item=1 THEN
Done:=True;
IF Item=2 THEN
BEGIN
Done:=TRUE;
Abort:=TRUE;
END;
IF (Item = 9) OR (Item = 10) THEN
BEGIN
SetRButton(1,Item);
View:=Item-8;
END;
UNTIL Done;
IF Abort THEN GOTO 99;
Size1:=GetField(5);
Size:=Concat('''',Size1,'''');
L:=Str2Num(GetField(7));
99:END;
Procedure GetData;
{
This procedure reads the data file.
}
LABEL 15,20,99;
VAR
File,Filename,WarningStr : STRING;
BEGIN
File:=FileName1;
Filename:=Concat(PathnameW,File);
Open(Filename);
IF FndError THEN BEGIN
ClrDialog;
Sysbeep;
WarningStr:=Concat('The data file <',File,'> cannot be found. Check your Toolkit Manual for further explanation.');
AlrtDialog(WarningStr);
Abort:=TRUE;
GoTo 99;
END;
SizeNotFound:=FALSE;
WHILE NOT Eoln(Filename) DO BEGIN
ReadLn(Sz,D1,Lmin,Lmax);
IF Sz=Size THEN GoTo 20;
END;
Close(Filename);
15:SysBeep;
AlrtDialog('That size is not available! ');
SizeNotFound:=TRUE;
GoTo 99;
20:Close(Filename);
99:END;
{
Main program.
}
BEGIN
DselectAll;
PinDialog;
SetCursor(ArrowC);
{
Display the main dialog box and get the info.
}
FirstTime:=TRUE;
10:GetInfo;
IF Abort THEN GoTo 99;
GetData;
IF Abort THEN GoTo 99;
IF SizeNotFound THEN Goto 10;
ClrDialog;
{
Get units per inch and adjust size accordingly.
}
GetUnits(UName,DA,Fmt,UPI,UM,UM2);
D1:=D1*UPI;
L:=L*UPI;
{
Calculate variables needed to draw the taper pin.
}
D2:=D1-2*L*Tan(Deg2Rad(Theta));
Y1:=0.13397*D1;
RH1:=D1;
Phi1:=Rad2Deg(ArcSin((D1/2)/RH1));
Y2:=0.13397*D2;
RH2:=D2;
Phi2:=Rad2Deg(ArcSin((D2/2)/RH2));
GetPt(x0,y0);
{
Draw Top View.
}
IF View=1 THEN BEGIN
Absolute;
MoveTo(x0,y0);
Relative;
Oval(-D1/2,D1/2,D1/2,-D1/2);
GOTO 99;
END;
{
Draw Side View.
}
Absolute;
MoveTo(x0-Y1+RH1,y0);
Relative;
Arc(-RH1,RH1,RH1,-RH1,(180-Phi1),2*Phi1);
Absolute;
MoveTo(x0+L+Y2-RH2,y0);
Relative;
Arc(-RH2,RH2,RH2,-RH2,-Phi2,2*Phi2);
Absolute;
MoveTo(x0,y0-D1/2);
Relative;
ClosePoly;
BeginPoly;
LineTo(L,(D1-D2)/2);
LineTo(0,D2);
LineTo(-L,(D1-D2)/2);
LineTo(0,-D1);
EndPoly;
90:Group;
99:END;
RUN(TaperPin);