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

  1. Procedure Material;
  2. {
  3. ⌐1996, Diehl Graphsoft, Inc.
  4. Developed by Tom Urie
  5.  
  6. This procedure places a material and drawing scale note anywhere on a drawing.
  7. }
  8. LABEL 20,30,90,99;
  9.  
  10. CONST
  11.     f1C=1.25;  {Initial length of underline}
  12.     f2C=0.12;  {Used to calculate length of underline}
  13.     f3C=0.25;  {Used to position underline below scale note}
  14.     f4C=0.0625;  {Used to position scale note below centerline}
  15.     TSize1=12;  {Reference text point size}
  16.     TSize2F=0.8;  {Text point size % of scale note}
  17.  
  18. VAR
  19.     L,x,y,x1,x2,f1,f2,f3,f4,LScale,TxtC : REAL;
  20.     TxtSize1, TxtSize2 : INTEGER;
  21.     Matl, Scale : STRING;
  22.     Abort : BOOLEAN;
  23.     LayerH,TextH : HANDLE;
  24.     UPI,SF : REAL;
  25.     Fmt : INTEGER;
  26.     UM,UM2 : STRING;
  27.     UName,DA : LONGINT;
  28.  
  29. Procedure MaterialDialog;
  30. VAR
  31.     Width,x1,y1,x2,y2,px1,px2,px3,px4,py1,py2,py3,py4 : INTEGER;
  32.  
  33. Procedure AlignScr(Width:INTEGER; VAR x1,x2:INTEGER);
  34. VAR
  35.     scrx1,scry1,scrx2,scry2:INTEGER;
  36. BEGIN
  37.     GetScreen(scrx1,scry1,scrx2,scry2);
  38.     x1:=((scrx1+scrx2) div 2)-(Width div 2);
  39.     x2:=x1+Width; 
  40. END;
  41.  
  42. Procedure LocateButtons(DialogType,scnh,scnw : INTEGER);
  43. {
  44. This procedure locates the 'OK' and 'Cancel' buttons.
  45. }
  46. VAR
  47.     v1,v2,v3,v4 : INTEGER;
  48.     Mac : BOOLEAN;
  49.  
  50. Procedure Swap(VAR  m1,m2,m3,m4 : INTEGER);
  51. VAR
  52.     Temp : INTEGER;
  53. BEGIN
  54.     Temp:=m1;
  55.     m1:=m3;
  56.     m3:=Temp;
  57.     Temp:=m2;
  58.     m2:=m4;
  59.     m4:=Temp;
  60. END;        {of Swap}
  61.  
  62. BEGIN
  63.     Mac:=FALSE;
  64.     GetVersion(v1,v2,v3,v4);
  65.     IF v4 = 1 THEN Mac:=TRUE;
  66.  
  67.     IF DialogType = 1 THEN
  68.     BEGIN
  69.         px1:=(scnw DIV 2) - 80;
  70.         px2:=(scnw DIV 2) - 10;
  71.         px3:=(scnw DIV 2) + 10;
  72.         px4:=(scnw DIV 2) + 80;
  73.         IF Mac THEN SWAP(px1,px2,px3,px4);
  74.  
  75.         py1:=scnh-40;
  76.         py2:=scnh-20;
  77.         py3:=py1;
  78.         py4:=py2;
  79.     END ELSE IF DialogType = 2 THEN
  80.     BEGIN
  81.         px1:=scnw - 180;
  82.         px2:=scnw - 110;
  83.         px3:=scnw - 90;
  84.         px4:=scnw - 20;
  85.         IF Mac THEN SWAP(px1,px2,px3,px4);
  86.  
  87.         py1:=scnh-40;
  88.         py2:=scnh-20;
  89.         py3:=py1;
  90.         py4:=py2;
  91.     END ELSE
  92.     BEGIN
  93.         px1:=scnw - 90;
  94.         px2:=scnw - 20;
  95.         px3:=px1;
  96.         px4:=px2;
  97.  
  98.         py1:=scnh -70;
  99.         py2:=scnh - 50;
  100.         py3:=scnh - 40;
  101.         py4:=scnh - 20;
  102.         IF Mac THEN SWAP(py1,py2,py3,py4);
  103.     END;
  104. END;        {of Locate Buttons}
  105.  
  106. Procedure MakeDialog1;
  107.  
  108. CONST
  109.     y1=100;
  110.     scnw=340;
  111.     scnh = 145;
  112.     DialogType = 1;
  113.  
  114. VAR
  115.     h : INTEGER;
  116.  
  117. BEGIN
  118.     AlignScr(scnw,x1,x2);
  119.     y2:=y1+scnh;
  120.     LocateButtons(DialogType,scnh,scnw );
  121.     
  122.     BeginDialog(1,1,x1,y1,x2,y2);
  123.         AddButton('OK',1,1,px1,py1,px2,py2);
  124.         AddButton('Cancel',2,1,px3,py3,px4,py4);
  125.  
  126.         h:=-30;
  127.         AddField('Material:',5,1,20,50+h,90,65+h);
  128.         AddField('1040 CRS',6,2,100,50+h,310,65+h);
  129.         AddField('Scale (optional):',7,1,20,80+h,140,95+h);
  130.         AddField('1:1',8,2,145,80+h,245,95+h);
  131.     EndDialog;
  132. END;
  133.  
  134. BEGIN
  135.     MakeDialog1;
  136. END;
  137.  
  138. Procedure GetInfo;
  139. VAR
  140.     Done : Boolean;
  141.     Item : Integer;
  142.  
  143. BEGIN
  144.     Done:=FALSE;
  145.     Abort:=FALSE;
  146.     GetDialog(1);
  147.     SetTitle('Material & Scale Notes');
  148.     SelField(6);
  149.     REPEAT
  150.         DialogEvent(Item);
  151.         IF Item=1 THEN
  152.             Done:=True;
  153.         IF Item=2 THEN
  154.         BEGIN
  155.             Done:=TRUE;
  156.             Abort:=TRUE;
  157.         END;
  158.         Matl:=GetField(6);
  159.         Scale:=GetField(8); 
  160.     UNTIL Done;
  161.     ClrDialog;
  162. END;
  163. {
  164. Main Program.
  165. }
  166. BEGIN
  167.     MaterialDialog;
  168.     SetCursor(ArrowC);
  169.     GetInfo;
  170.     IF Abort THEN GoTo 99;
  171.     PushAttrs;
  172. {
  173. Get text size.
  174. }
  175.     DSelectAll;
  176.     TextOrigin(0,0);
  177.     BeginText;
  178.         ' '
  179.     EndText;
  180.     TextH:=FSActLayer;
  181.     TxtSize1:=GetSize(TextH);
  182.     DelObject(TextH);
  183.     TxtC:=TxtSize1/TSize1;
  184.     TxtSize2:=TSize2F*TxtSize1;
  185. {
  186. Get units per inch and layer scale.
  187. }
  188.     GetUnits(UName,DA,Fmt,UPI,UM,UM2);
  189.     LayerH:=ActLayer;
  190.     LScale:=GetLScale(LayerH);
  191. {
  192. Adjust constants for units, scale, and text size.
  193. }
  194.     f1:=f1C*LScale*UPI*TxtC;
  195.     f2:=f2C*LScale*UPI*TxtC;
  196.     f3:=f3C*LScale*UPI*TxtC;
  197.     f4:=f4C*LScale*UPI*TxtC;
  198.     TextJust(2);
  199.     L:=f1+f2*Len(Matl)*TSize1/12;
  200.     Matl:=Concat('MATERIAL - ', Matl);
  201.     GetPt(x,y);
  202.     TextOrigin(x,y);
  203.     BeginGroup;
  204.     BeginText;
  205.         Matl
  206.     EndText;
  207.     y:=y-f3*TSize1/12;
  208.     Absolute;
  209.     MoveTo(x-L/2, y);
  210.     Relative;
  211.     LineTo(L,0);
  212.     IF Scale = '' THEN GOTO 90;
  213.     Scale:=Concat('SCALE - ',Scale);
  214.     y:=y-f4;
  215.     Absolute;
  216.     TextOrigin(x,y);
  217.     TextSize(TxtSize2);
  218.     BeginText;
  219.         Scale
  220.     EndText;
  221.     90:EndGroup;
  222.     PopAttrs;
  223. 99:END;
  224.  
  225. Run(Material);