home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / sampler / 03 / filling / flood.inc < prev    next >
Encoding:
Text File  |  1987-10-07  |  1.5 KB  |  67 lines

  1. PROCEDURE Flood_Fill (X, Y:  Real);
  2.  
  3. {  Example of a flood-fill algorithm  }
  4.  
  5. { By Fred Robinson
  6.      Monotreme Software     Copyright (c) 1987 Monotreme Software
  7.      29766 Everett
  8.      Southfield, MI  48076
  9.      USA  }
  10.  
  11. VAR
  12.    Start_X, Start_Y, X1Loc, X2Loc:  Integer;
  13.  
  14.    (*****************************************************************)
  15.  
  16.    PROCEDURE Do_The_Flood_Fill (X, Y:  Integer);
  17.  
  18.    {  The actual filling routine.  Taken from Fundamentals of Inter-
  19.    active Computer Graphics, Foley & Van Dam 1982, p. 448.  }
  20.  
  21.    BEGIN
  22.    IF (X>=X1Loc) AND (X<=X2Loc) AND (Y>=Y1RefGlb) AND
  23.       (Y<=Y2RefGlb) THEN
  24.       IF NOT PD (X, Y) THEN
  25.          BEGIN
  26.          DP (X, Y);
  27.          Do_The_Flood_Fill (X+1, Y);
  28.          Do_The_Flood_Fill (X-1, Y);
  29.          Do_The_Flood_Fill (X, Y+1);
  30.          Do_The_Flood_Fill (X, Y-1)
  31.          END (* THEN *)
  32.    END (* Do_The_Flood_Fill *);
  33.  
  34.    (*****************************************************************)
  35.  
  36. BEGIN (* Flood_Fill *)
  37. {  Get pixel coordinates of (X, Y)  }
  38.  
  39. IF DirectModeGlb THEN
  40.    BEGIN
  41.    Start_X := Round (X);
  42.    Start_Y := Round (Y)
  43.    END (* THEN *)
  44.  
  45. ELSE
  46.    BEGIN
  47.    Start_X := WindowX (X);
  48.    Start_Y := WindowY (Y)
  49.    END (* ELSE *);
  50.  
  51. {  Set the proper X-bounds  }
  52.  
  53. IF HatchGlb THEN
  54.    BEGIN
  55.    X1Loc := X1RefGlb;
  56.    X2Loc := X2Refglb;
  57.    END (* THEN *)
  58.  
  59. ELSE
  60.    BEGIN
  61.    X1Loc := X1RefGlb SHL 3;
  62.    X2Loc := X2RefGlb SHL 3 + 7
  63.    END (* ELSE *);
  64.  
  65. Do_The_Flood_Fill (Start_X, Start_Y)
  66. END (* Flood_Fill *);
  67.