home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
CLEV_PIN.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
7KB
|
414 lines
Procedure ClevisPin;
{
⌐1997, Diehl Graphsoft, Inc.
Developed by Tom Urie
This procedure draws a clevis pin using data from the file Clevis Pin data.
}
LABEL 10,20,30,90,99;
CONST
Filename1 = 'ClevPinE.txt';
Filename2 = 'ClevPinM.txt';
PathNameW = 'External\Data\';
PathNameM = 'Externals:External Data:';
HF=1.25;
Lkc=1;
VAR
A,B,C,D,E,F,G,H,HD,HD1,S,L,L2,Lk,CL,x0,y0,SF : REAL;
Type,View : INTEGER;
Sz,Size,Size1,Pathname : STRING;
Abort,FirstTime,StdLgth,SizeNotFound : BOOLEAN;
UPI : REAL;
Fmt : INTEGER;
UM,UM2 : STRING;
UName,DA : LONGINT;
Procedure PinDialog;
{
This procedure defines 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 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
BEGIN
Swap(px1,px2,px3,px4);
PathName:=PathNameM;
END ELSE
PathName:=PathNameW;
END; {of Locate Buttons1}
Procedure MakeDialog1;
CONST
y1=100;
scnh = 235;
scnw = 280;
VAR
h : INTEGER;
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);
h:=30;
AddField('Pin Dia:',5,1,20,89-h,70,105-h);
AddField('',6,2,75,90-h,140,105-h);
AddField('in',17,1,148,89-h,178,105-h);
AddField('Series:',18,1,20,39-h,75,55-h);
AddButton('Inch',13,3,20,60-h,70,75-h);
AddButton('Metric',14,3,80,60-h,140,75-h);
AddField('View:',10,1,190,39-h,245,55-h);
AddButton('Top',11,3,190,80-h,245,95-h);
AddButton('Side',12,3,190,60-h,245,75-h);
h:=100;
AddField('Length:',19,1,20,h-1,100,h+15);
AddButton('Standard',7,3,20,h+20,100,h+35);
AddField('',15,1,105, h+19,145,h+35);
AddButton('Custom:',8,3,20,h+40,100,h+55);
AddField('',9,2,105,h+40,175,h+55);
AddField('in',16,1,183,h+39,213,h+55);
EndDialog;
END;
BEGIN
MakeDialog1;
END;
Procedure GetInfo;
{
This procedure displays the main dialog box and retrieves the information.
}
LABEL 15,20,99;
VAR
Item : INTEGER;
RFlag : ARRAY[1..3] OF INTEGER;
Done,Go : 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 15;
FirstTime:= FALSE;
Type:=1;
View:=2;
StdLgth:=TRUE;
RFlag[1]:=12;
RFlag[2]:=13;
RFlag[3]:=7;
GetDialog(1);
SetTitle('Clevis Pins');
SetField(16,'in');
SetField(17,'in');
SetItem(RFlag[1],TRUE);
SetItem(RFlag[2],TRUE);
SetItem(RFlag[3],TRUE);
15:SelField(6);
REPEAT
DialogEvent(Item);
IF Item=1 THEN
Done:=True;
IF Item=2 THEN
BEGIN
Done:=TRUE;
Abort:=TRUE;
END;
IF Item = 7 THEN
BEGIN
IF StdLgth THEN GOTO 20;
IF Type = 1 THEN
BEGIN
SetRButton(3,Item);
StdLgth:=TRUE;
SetField(9,'');
END ELSE
BEGIN
SysBeep;
SelField(9);
END;
20:END;
IF Item = 8 THEN
BEGIN
IF StdLgth THEN
BEGIN
SetRButton(3,Item);
StdLgth:=FALSE;
SelField(9);
END;
END;
IF Item = 9 THEN
BEGIN
IF StdLgth THEN
BEGIN
StdLgth:=FALSE;
SetRButton(3,8);
SelField(9);
END;
END;
IF (Item = 11) OR (Item = 12) THEN
BEGIN
SetRButton(1,Item);
View:=Item-10;
END;
IF Item = 13 THEN
BEGIN
SetRButton(2,Item);
Type:=Item-12;
SetField(15,'');
SetField(16,'in');
SetField(17,'in');
END;
IF Item = 14 THEN
BEGIN
SetRButton(2,Item);
Type:=Item-12;
StdLgth:=FALSE;
SetRButton(3,8);
SetField(15,'<n/a>');
SetField(16,'mm');
SetField(17,'mm');
END;
UNTIL Done;
IF Abort then GOTO 99;
Size1:=GetField(6);
Size:=Concat('''',Size1,'''');
UprString(Size);
Go:=ValidNumStr(GetField(9),CL);
99:END;
Procedure GetData;
{
This procedure retrieves data from the data file.
}
LABEL 15,20,99;
VAR
File,Filename,WarningStr : STRING;
BEGIN
IF Type = 1 THEN File:=Filename1
ELSE File:=Filename2;
Filename:=Concat(Pathname,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,D,A,B,C,F,G,H,L,HD);
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;
BEGIN
{
Main program.
}
{
Display the main dialog box and get the info.
}
DselectAll;
PinDialog;
SetCursor(ArrowC);
{
Read the data file.
}
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 the dimensions accordingly.
}
GetUnits(UName,DA,Fmt,UPI,UM,UM2);
IF Type = 1 THEN
SF:=UPI
ELSE
SF:=UPI/25.4;
D:=D*SF;
A:=A*SF;
B:=B*SF;
C:=C*SF;
F:=F*SF;
G:=G*SF;
H:=H*SF;
L:=L*SF;
Lk:=Lkc*SF;
HD:=HD*SF;
CL:=CL*SF;
{
Calculate parameters for non-standard length.
}
E:=G-L;
S:=(D-A)/2;
HD1:=HD*HF;
IF StdLgth = FALSE THEN BEGIN
L:=CL;
G:=L+E;
END;
IF Type = 1 THEN
L2:=G-F
ELSE
L2:=L+HD1/2+Lk;
{
Get pin location.
}
GetPt(x0,y0);
{
Draw Top View.
}
IF View = 1 THEN BEGIN
Absolute;
MoveTo(x0,y0);
Relative;
Arc(-B/2,B/2,B/2,-B/2,0,360);
B:=B-2*H;
Arc(-B/2,B/2,B/2,-B/2,0,360);
GOTO 90;
END;
{
Draw Side View.
}
Absolute;
MoveTo(x0,y0+D/2);
Relative;
ClosePoly;
{
Draw head.
}
Move(-(C-H),(B-D)/2);
Rect(0,0,(C-H),-B);
Poly(0,0, -H,-H, 0,-(B-2*H), H,-H);
IF L <= 0 THEN GOTO 90;
{
Draw body.
}
Move((C-H+L2),(B-D)/2);
OpenPoly;
Poly(F,S,0,D-2*S,-F,S);
Rect(0,0,-L2,-D);
Absolute;
MoveTo(x0+L,y0);
Relative;
{
Draw hole.
}
Arc(-HD1/2,HD1/2,HD1/2,-HD1/2,0,360);
Arc(-HD/2,HD/2,HD/2,-HD/2,0,360);
90:Group;
99:END;
RUN(ClevisPin);