home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
SECTNOTE.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
4KB
|
237 lines
Procedure SectionNote;
{
⌐1996, Diehl Graphsoft, Inc.
Developed by Tom Urie
This prcedure places a section note and, optionally, a scale note anywhere on a drawing.
}
LABEL 20,30,90,99;
CONST
f1C=0.75;
f2C=0.2;
f3C=0.2;
f4C=0.313;
f5C=1.05;
f6C=0.04;
f7C=0.06;
TSize1R=10; {Reference text size}
TSize2F=1.4; {Factor for 'Section' string}
TSize3F=0.8; {Factor for scale note}
VAR
L,x,y,x1,x2,xt,yt,LScale,TxtC : REAL;
f1,f2,f3,f4,f5,f6,f7 : REAL;
TxtSize1,TxtSize2,TxtSize3 : INTEGER;
Scale,Section : STRING;
Abort : BOOLEAN;
LayerH, TextH : HANDLE;
UPI,SF : REAL;
Fmt : INTEGER;
UM,UM2 : STRING;
UName,DA : LONGINT;
Procedure CustomDialog;
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;
CONST
y1=100;
scnw = 250;
scnh = 120;
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('Section name:',5,1,20,45+h,170,60+h);
AddField('A-A',6,2,155,45+h,225,60+h);
AddField('Scale (optional):',7,1,20,70+h,170,85+h);
AddField('',8,2,155,70+h,225,85+h);
EndDialog;
END;
BEGIN
MakeDialog;
END;
Procedure GetInfo;
VAR
Done:Boolean;
Item:Integer;
BEGIN
Done:=FALSE;
Abort:=FALSE;
GetDialog(1);
SetTitle('Section Note');
SelField(6);
REPEAT
DialogEvent(Item);
IF Item=1 THEN
Done:=TRUE;
IF Item=2 THEN
BEGIN
Done:=TRUE;
Abort:=TRUE;
END;
UNTIL Done;
Section:=GetField(6);
Scale:=GetField(8);
ClrDialog;
END;
BEGIN
CustomDialog;
SetCursor(ArrowC);
GetInfo;
IF (Abort) OR (Section='') THEN GOTO 99;
{
Get units per inch and layer scale.
}
GetUnits(UName,DA,Fmt,UPI,UM,UM2);
LayerH:=ActLayer;
LScale:=GetLScale(LayerH);
{
Get text size.
}
DSelectAll;
TextOrigin(0,0);
BeginText;
' '
EndText;
TextH:=FSActLayer;
TxtSize1:=GetSize(TextH);
DelObject(TextH);
TxtC:=TxtSize1/TSize1R;
TxtSize2:=TSize2F*TxtSize1;
TxtSize3:=TSize3F*TxtSize1;
{
Adjust constants for units and scale
}
f1:=f1C*LScale*UPI*TxtC;
f2:=f2C*LScale*UPI*TxtC;
f3:=f3C*LScale*UPI*TxtC;
f4:=f4C*LScale*UPI*TxtC;
f5:=f5C*LScale*UPI*TxtC;
f6:=f6C*LScale*UPI*TxtC;
f7:=f7C*LScale*UPI*TxtC;
PushAttrs;
TextJust(1);
L:=f1+f2*Len(Section);
GetPt(x,y);
xt:=x-f3;
yt:=y+f3;
Absolute;
TextOrigin(xt-L/2+f4,yt);
BeginGroup;
BeginText;
'SECTION '
EndText;
TextSize(TxtSize2);
TextOrigin(xt-L/2+f5,yt+f6);
BeginText;
Section
EndText;
Absolute;
MoveTo(x-L/2,y);
Relative;
LineTo(L,0);
IF Scale = '' THEN GOTO 90;
Scale:=Concat('SCALE - ',Scale);
Absolute;
TextOrigin(x,y-f7);
TextSize(TxtSize3);
TextJust(2);
BeginText;
Scale
EndText;
90:EndGroup;
PopAttrs;
99:END;
Run(SectionNote);