home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / HISPEED2.LZH / GEMDEMO / RASTERS.PAS < prev    next >
Pascal/Delphi Source File  |  1991-07-02  |  5KB  |  129 lines

  1. {-------------------------------------------------------------------------
  2.                 HighSpeed Pascal GEM-interface demo program
  3.  
  4.                                 RASTER DEMO
  5.  
  6.                       Copyright (c) 1990 by D-House I
  7.                             All rights reserved
  8.  
  9.                       Programmed by Martin Eskildsen
  10. -------------------------------------------------------------------------}
  11. {$R-,S-,D+}
  12.  
  13. program Rasters;
  14.  
  15. uses GemAES, GemVDI, GemDecl, GemInterface, Bios;
  16.  
  17. const
  18.   Nsteps        = 16;           { number of steps, the circle is divided into }
  19.   mode          = S_ONLY;       { vro_cpyfm copy mode - toy around with it    }
  20.  
  21. var
  22.   sourceMFDB    : MFDB;         { source MFDB - where to get image from }
  23.   destMFDB      : MFDB;         { destination - where to put image      }
  24.   Rectangles    : Array_8;      { source and destination rectangles     }
  25.   BoxRect       : GRect;        { image coordinates                     }
  26.   i             : Integer;      { FOR index                             }
  27.   x, y          : LongInt;      { destination x and y coordinates       }
  28.   angle         : real;         { current angle in circle               }
  29.   stepsize      : real;         { stepsize for circle                   }
  30.   radius        : Integer;      { circle's radius                       }
  31.   colors        : Array_2;      { colors used for vrt_cpyfm             }
  32.  
  33. { Draw a line from (x,y) to (x1, y1) }
  34. procedure Line(x, y, x1, y1 : Integer);
  35. var p : ptsin_array;  { coordinate sets }
  36. begin
  37.   p[0] := x;  p[1] := y;  p[2] := x1;  p[3] := y1;
  38.   v_pline(VDI_handle, 2, p)   { 2 = number of coordinate sets }
  39. end;
  40.  
  41. { Draw a box with the coordinates given by BoxRect and draw a polymarker
  42.   in it }
  43. procedure Box;
  44. var p : ptsin_array;
  45. begin
  46.   vsm_type(VDI_handle, 3);              { star shape            }
  47.   vsm_color(VDI_handle, BLACK);         { black                 }
  48.   vsm_height(VDI_handle, BoxRect.h);    { height = box's height }
  49.   with BoxRect do begin
  50.     Line(x, y, x + w - 1, y);           { draw the borders      }
  51.     Line(x+w-1, y, x+w-1, y+h-1);
  52.     Line(x+w-1, y+h-1, x, y+h-1);
  53.     Line(x, y+h-1, x, y);
  54.     p[0] := x + w div 2;                { set up polymarker     }
  55.     p[1] := y + h div 2;
  56.     v_pmarker(VDI_handle, 1, p)         { set the marker        }
  57.   end
  58. end;
  59.  
  60. begin
  61.   if Init_Gem then begin
  62.     Message('Welcome to the raster demonstration!');
  63.     OpenOutputWindow;
  64.  
  65.     Message('First, we''ll draw a rectangle...');
  66.     with OutputWindow, Boxrect do begin
  67.       x := midX - 30;
  68.       y := midY - 30;
  69.       w := 2*30;
  70.       h := 2*30;
  71.       Box
  72.     end;
  73.  
  74.     Inform('By the way, this is a contour fill...');
  75.     vsf_color(VDI_handle, BLACK);       { set points are black }
  76.     vsf_interior(VDI_handle, HATCH);    { use cross-hatch...   }
  77.     vsf_style(VDI_handle, 3);           { ... type 3           }
  78.     with OutputWindow
  79.       do v_contourfill(VDI_handle, wX, wY, BLACK);
  80.     { fill the area containing the point (wX, wY) until the color black }
  81.     { is met (the border color) }
  82.  
  83.     Message('Now we''ll make some opaque copies of that rect...');
  84.     with sourceMFDB do begin
  85.       mptr       := NIL;                { use screen memory             }
  86.       formwidth  := BoxRect.w;          { width of image                }
  87.       formheight := BoxRect.h;          { height of image               }
  88.       widthword  := BoxRect.w div 16;   { number of entire words        }
  89.       formatflag := 0;                  { device specific form          }
  90.       memplanes  := 1                   { two colors (monochrome)       }
  91.     end;
  92.     destMFDB := sourceMFDB;             { destination = source          }
  93.  
  94.     Rectangles[0] := BoxRect.x;         { source rectangle =            }
  95.     Rectangles[1] := BoxRect.y;         { two diagonally opposite corner}
  96.     Rectangles[2] := BoxRect.x + BoxRect.w - 1;         { points        }
  97.     Rectangles[3] := BoxRect.y + BoxRect.h - 1;
  98.  
  99.     { we''ll form a circle with the help of vro_cpyfm, so we need a bit }
  100.     { of geometry in order to calculate where to put the images :       }
  101.     angle := 0.0;                               { circle angle = 0.0    }
  102.     stepsize := (2*pi) / Nsteps;                { circle step size      }
  103.     radius := BoxRect.w + BoxRect.w div 2;      { circle radius         }
  104.     for i := 0 to Nsteps do begin
  105.       x := OutputWindow.midX + round(cos(angle) * radius) - BoxRect.w div 2;
  106.       y := OutputWindow.midY + round(sin(angle) * radius) - BoxRect.h div 2;
  107.       angle := angle + stepsize;
  108.       Rectangles[4] := x;               { destination rectangle         }
  109.       Rectangles[5] := y;
  110.       Rectangles[6] := x + BoxRect.w - 1;
  111.       Rectangles[7] := y + BoxRect.h - 1;
  112.       vro_cpyfm(VDI_handle, mode, Rectangles, sourceMFDB, destMFDB)
  113.     end;
  114.  
  115.     Message('Now we''ll reverse the rectangle...');
  116.     for i := 0 to 3 do Rectangles[i+4] := Rectangles[i];  { dest rect = source }
  117.     colors[0] := WHITE;  { set points shall turn into white   }
  118.     colors[1] := BLACK;  { clear points shall turn into black }
  119.     vrt_cpyfm(VDI_handle, MD_REPLACE, Rectangles, sourceMFDB, destMFDB, colors);
  120.  
  121.     Message('... and reverse again, but with another method...');
  122.     vro_cpyfm(VDI_handle, NOT_D, Rectangles, sourceMFDB, destMFDB);
  123.  
  124.     Message('That''s all folks!');
  125.     CloseOutputWindow;     
  126.     Exit_Gem
  127.   end
  128. end.
  129.