home *** CD-ROM | disk | FTP | other *** search
- Procedure SectionNote;
- {
- (Windows version)
- ⌐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 : 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;
- CONST
- y1=100;
- scnh=120; scnw=250;
- 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('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);
-