home *** CD-ROM | disk | FTP | other *** search
/ PC & Mediji 1997 January / PCM_9701.iso / programi / minicad / minicad.1 / SEC_NOTE.MPC < prev    next >
Encoding:
Text File  |  1996-04-30  |  3.6 KB  |  169 lines

  1. Procedure SectionNote;
  2. {
  3. (Windows version)
  4. ⌐1996, Diehl Graphsoft, Inc.
  5. Developed by Tom Urie
  6.  
  7. This prcedure places a section note and, optionally, a scale note anywhere on a drawing.
  8. }
  9. LABEL 20,30,90,99;
  10. CONST
  11.     f1C=0.75;
  12.     f2C=0.2;
  13.     f3C=0.2;
  14.     f4C=0.313;
  15.     f5C=1.05;
  16.     f6C=0.04;
  17.     f7C=0.06;
  18.     TSize1R=10;     {Reference text size}
  19.     TSize2F=1.4;    {Factor for 'Section' string}
  20.     TSize3F=0.8;    {Factor for scale note}
  21.  
  22. VAR
  23.     L, x, y, x1, x2, xt, yt, LScale, TxtC : REAL;
  24.     f1, f2, f3, f4, f5, f6, f7 : REAL;
  25.     TxtSize1, TxtSize2, TxtSize3 : INTEGER;
  26.     Scale,Section : STRING;
  27.     Abort : BOOLEAN;
  28.     LayerH, TextH : HANDLE;
  29.     UPI,SF : REAL;
  30.     Fmt : INTEGER;
  31.     UM,UM2 : STRING;
  32.     UName,DA : LONGINT;
  33.  
  34. Procedure CustomDialog;
  35. VAR
  36.     Width,x1,y1,x2,y2,px1,px2,px3,px4,py1,py2 : INTEGER;
  37.  
  38. Procedure AlignScr(Width:INTEGER; VAR x1,x2:INTEGER);
  39. VAR
  40.     scrx1,scry1,scrx2,scry2:INTEGER;
  41. BEGIN
  42.     GetScreen(scrx1,scry1,scrx2,scry2);
  43.     x1:=((scrx1+scrx2) div 2)-(Width div 2);
  44.     x2:=x1+Width; 
  45. END;
  46.  
  47. Procedure MakeDialog;
  48. CONST
  49.     y1=100;
  50.     scnh=120; scnw=250;
  51.     h=30;
  52. BEGIN
  53.     AlignScr(scnw,x1,x2);
  54.     y2:=y1+scnh;
  55.     px3:=(scnw div 2) - 70;
  56.     px4:=(scnw div 2) - 10;
  57.     px1:=(scnw div 2) + 10;
  58.     px2:=(scnw div 2) + 70;
  59.     py1:=scnh-40;
  60.     py2:=scnh-20;
  61.     BeginDialog(1,1,x1,y1,x2,y2);
  62.         AddButton('OK',1,1,px3,py1,px4,py2);
  63.         AddButton('Cancel',2,1,px1,py1,px2,py2);
  64.         AddField('Section name:',5,1,20,45-h,170,60-h);
  65.         AddField('A-A',6,2,155,45-h,225,60-h);
  66.         AddField('Scale (optional):',7,1,20,70-h,170,85-h);
  67.         AddField('',8,2,155,70-h,225,85-h);
  68.     EndDialog;
  69. END;
  70.  
  71. BEGIN
  72.     MakeDialog;
  73. END;
  74.  
  75. Procedure GetInfo;
  76. VAR
  77.     Done:Boolean;
  78.     Item:Integer;
  79. BEGIN
  80.     Done:=FALSE;
  81.     Abort:=FALSE;
  82.     GetDialog(1);
  83.     SetTitle('Section Note');
  84.     SelField(6);
  85.     REPEAT
  86.         DialogEvent(Item);
  87.         IF Item=1 THEN
  88.             Done:=TRUE;
  89.         IF Item=2 THEN BEGIN
  90.             Done:=TRUE;
  91.             Abort:=TRUE;
  92.         END;         
  93.     UNTIL Done;
  94.     Section:=GetField(6);
  95.     Scale:=GetField(8);
  96.     ClrDialog;
  97. END;
  98.  
  99. BEGIN
  100.     CustomDialog;
  101.     SetCursor(ArrowC);
  102.     GetInfo;
  103.     IF (Abort) OR (Section='') THEN GOTO 99;
  104. {
  105. Get units per inch and layer scale
  106. }
  107.     GetUnits(UName,DA,Fmt,UPI,UM,UM2);
  108.     LayerH:=ActLayer;
  109.     LScale:=GetLScale(LayerH);
  110. {
  111. Get text size.
  112. }
  113.     DSelectAll;
  114.     TextOrigin(0,0);
  115.     BeginText;
  116.         ' '
  117.     EndText;
  118.     TextH:=FSActLayer;
  119.     TxtSize1:=GetSize(TextH);
  120.     DelObject(TextH);
  121.     TxtC:=TxtSize1/TSize1R;
  122.     TxtSize2:=TSize2F*TxtSize1;
  123.     TxtSize3:=TSize3F*TxtSize1;
  124. {
  125. Adjust constants for units and scale
  126. }
  127.     f1:=f1C*LScale*UPI*TxtC;
  128.     f2:=f2C*LScale*UPI*TxtC;
  129.     f3:=f3C*LScale*UPI*TxtC;
  130.     f4:=f4C*LScale*UPI*TxtC;
  131.     f5:=f5C*LScale*UPI*TxtC;
  132.     f6:=f6C*LScale*UPI*TxtC;
  133.     f7:=f7C*LScale*UPI*TxtC;
  134.     PushAttrs;
  135.     TextJust(1);
  136.     L:=f1+f2*Len(Section);
  137.     GetPt(x,y);
  138.     xt:=x-f3;
  139.     yt:=y+f3;
  140.     Absolute;
  141.     TextOrigin(xt-L/2+f4,yt);
  142.     BeginGroup;
  143.     BeginText;
  144.         'SECTION '
  145.     EndText;
  146.     TextSize(TxtSize2);
  147.     TextOrigin(xt-L/2+f5,yt+f6);
  148.     BeginText;
  149.         Section
  150.     EndText;
  151.     Absolute;
  152.     MoveTo(x-L/2,y);
  153.     Relative;
  154.     LineTo(L,0);
  155.     IF Scale = '' THEN GOTO 90;
  156.     Scale:=Concat('SCALE - ',Scale);
  157.     Absolute;
  158.     TextOrigin(x,y-f7);
  159.     TextSize(TxtSize3);
  160.     TextJust(2);
  161.     BeginText;
  162.         Scale
  163.     EndText;
  164.     90:EndGroup;
  165.     PopAttrs;
  166. 99:END;
  167.  
  168. Run(SectionNote);
  169.