home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 March / Chip_1998-03_cd.bin / tema / MINICAD / MC7DEMO / MINICAD.1 / SECTNOTE.MPC < prev    next >
Text File  |  1997-04-30  |  4KB  |  237 lines

  1. Procedure SectionNote;
  2. {
  3. ⌐1996, Diehl Graphsoft, Inc.
  4. Developed by Tom Urie
  5.  
  6. This prcedure places a section note and, optionally, a scale note anywhere on a drawing.
  7. }
  8. LABEL 20,30,90,99;
  9.  
  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,py3,py4 : 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 LocateButtons(DialogType,scnh,scnw : INTEGER);
  48. {
  49. This procedure locates the 'OK' and 'Cancel' buttons.
  50. }
  51. VAR
  52.     v1,v2,v3,v4 : INTEGER;
  53.     Mac : BOOLEAN;
  54.  
  55. Procedure Swap(VAR  m1,m2,m3,m4 : INTEGER);
  56. VAR
  57.     Temp : INTEGER;
  58. BEGIN
  59.     Temp:=m1;
  60.     m1:=m3;
  61.     m3:=Temp;
  62.     Temp:=m2;
  63.     m2:=m4;
  64.     m4:=Temp;
  65. END;        {of Swap}
  66.  
  67. BEGIN
  68.     Mac:=FALSE;
  69.     GetVersion(v1,v2,v3,v4);
  70.     IF v4 = 1 THEN Mac:=TRUE;
  71.  
  72.     IF DialogType = 1 THEN
  73.     BEGIN
  74.         px1:=(scnw DIV 2) - 80;
  75.         px2:=(scnw DIV 2) - 10;
  76.         px3:=(scnw DIV 2) + 10;
  77.         px4:=(scnw DIV 2) + 80;
  78.         IF Mac THEN SWAP(px1,px2,px3,px4);
  79.  
  80.         py1:=scnh-40;
  81.         py2:=scnh-20;
  82.         py3:=py1;
  83.         py4:=py2;
  84.     END ELSE IF DialogType = 2 THEN
  85.     BEGIN
  86.         px1:=scnw - 180;
  87.         px2:=scnw - 110;
  88.         px3:=scnw - 90;
  89.         px4:=scnw - 20;
  90.         IF Mac THEN SWAP(px1,px2,px3,px4);
  91.  
  92.         py1:=scnh-40;
  93.         py2:=scnh-20;
  94.         py3:=py1;
  95.         py4:=py2;
  96.     END ELSE
  97.     BEGIN
  98.         px1:=scnw - 90;
  99.         px2:=scnw - 20;
  100.         px3:=px1;
  101.         px4:=px2;
  102.  
  103.         py1:=scnh -70;
  104.         py2:=scnh - 50;
  105.         py3:=scnh - 40;
  106.         py4:=scnh - 20;
  107.         IF Mac THEN SWAP(py1,py2,py3,py4);
  108.     END;
  109. END;        {of Locate Buttons}
  110.  
  111. Procedure MakeDialog;
  112.  
  113. CONST
  114.     y1=100;
  115.     scnw = 250;
  116.     scnh = 120;
  117.     DialogType = 1;
  118.  
  119. VAR
  120.     h : INTEGER;
  121.  
  122. BEGIN
  123.     AlignScr(scnw,x1,x2);
  124.     y2:=y1+scnh;
  125.     LocateButtons(DialogType,scnh,scnw );
  126.     
  127.     BeginDialog(1,1,x1,y1,x2,y2);
  128.         AddButton('OK',1,1,px1,py1,px2,py2);
  129.         AddButton('Cancel',2,1,px3,py3,px4,py4);
  130.  
  131.         h:=-30;
  132.         AddField('Section name:',5,1,20,45+h,170,60+h);
  133.         AddField('A-A',6,2,155,45+h,225,60+h);
  134.         AddField('Scale (optional):',7,1,20,70+h,170,85+h);
  135.         AddField('',8,2,155,70+h,225,85+h);
  136.     EndDialog;
  137. END;
  138.  
  139. BEGIN
  140.     MakeDialog;
  141. END;
  142.  
  143. Procedure GetInfo;
  144. VAR
  145.     Done:Boolean;
  146.     Item:Integer;
  147. BEGIN
  148.     Done:=FALSE;
  149.     Abort:=FALSE;
  150.     GetDialog(1);
  151.     SetTitle('Section Note');
  152.     SelField(6);
  153.     REPEAT
  154.         DialogEvent(Item);
  155.         IF Item=1 THEN
  156.             Done:=TRUE;
  157.         IF Item=2 THEN
  158.         BEGIN
  159.             Done:=TRUE;
  160.             Abort:=TRUE;
  161.         END;         
  162.     UNTIL Done;
  163.     Section:=GetField(6);
  164.     Scale:=GetField(8);
  165.     ClrDialog;
  166. END;
  167.  
  168. BEGIN
  169.     CustomDialog;
  170.     SetCursor(ArrowC);
  171.     GetInfo;
  172.     IF (Abort) OR (Section='') THEN GOTO 99;
  173. {
  174. Get units per inch and layer scale.
  175. }
  176.     GetUnits(UName,DA,Fmt,UPI,UM,UM2);
  177.     LayerH:=ActLayer;
  178.     LScale:=GetLScale(LayerH);
  179. {
  180. Get text size.
  181. }
  182.     DSelectAll;
  183.     TextOrigin(0,0);
  184.     BeginText;
  185.         ' '
  186.     EndText;
  187.     TextH:=FSActLayer;
  188.     TxtSize1:=GetSize(TextH);
  189.     DelObject(TextH);
  190.     TxtC:=TxtSize1/TSize1R;
  191.     TxtSize2:=TSize2F*TxtSize1;
  192.     TxtSize3:=TSize3F*TxtSize1;
  193. {
  194. Adjust constants for units and scale
  195. }
  196.     f1:=f1C*LScale*UPI*TxtC;
  197.     f2:=f2C*LScale*UPI*TxtC;
  198.     f3:=f3C*LScale*UPI*TxtC;
  199.     f4:=f4C*LScale*UPI*TxtC;
  200.     f5:=f5C*LScale*UPI*TxtC;
  201.     f6:=f6C*LScale*UPI*TxtC;
  202.     f7:=f7C*LScale*UPI*TxtC;
  203.     PushAttrs;
  204.     TextJust(1);
  205.     L:=f1+f2*Len(Section);
  206.     GetPt(x,y);
  207.     xt:=x-f3;
  208.     yt:=y+f3;
  209.     Absolute;
  210.     TextOrigin(xt-L/2+f4,yt);
  211.     BeginGroup;
  212.         BeginText;
  213.             'SECTION '
  214.         EndText;
  215.         TextSize(TxtSize2);
  216.         TextOrigin(xt-L/2+f5,yt+f6);
  217.         BeginText;
  218.             Section
  219.         EndText;
  220.         Absolute;
  221.         MoveTo(x-L/2,y);
  222.         Relative;
  223.         LineTo(L,0);
  224.         IF Scale = '' THEN GOTO 90;
  225.         Scale:=Concat('SCALE - ',Scale);
  226.         Absolute;
  227.         TextOrigin(x,y-f7);
  228.         TextSize(TxtSize3);
  229.         TextJust(2);
  230.         BeginText;
  231.             Scale
  232.         EndText;
  233.     90:EndGroup;
  234.     PopAttrs;
  235. 99:END;
  236.  
  237. Run(SectionNote);