home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l048 / 1.ddi / HATCH.HGH < prev    next >
Encoding:
Text File  |  1986-03-20  |  2.6 KB  |  89 lines

  1. (***********************************************************)
  2. (*                                                         *)
  3. (*                TURBO GRAPHIX version 1.06A              *)
  4. (*                                                         *)
  5. (*                    Crosshatch module                    *)
  6. (*                  Module version  1.06A                  *)
  7. (*                                                         *)
  8. (*                  Copyright (C) 1985 by                  *)
  9. (*                  BORLAND International                  *)
  10. (*                                                         *)
  11. (***********************************************************)
  12.  
  13. procedure Hatch(X_1, Y_1, X_2, Y_2, Delta : real);
  14. var
  15.   X1, Y1, X2, Y2 : integer;
  16.   DirectModeLoc, Dummy : boolean;
  17.  
  18. procedure HatchDirect(X1, Y1, X2, Y2, Delta : integer);
  19. var
  20.   I, Yst, Yen, Count : integer;
  21.   X1RefLoc, X2RefLoc, Y1RefLoc, Y2RefLoc : integer;
  22.   DirectModeLoc, ClippingLoc : boolean;
  23.   X1D, Y1D, X2D, Y2D : integer;
  24.  
  25. begin { HatchDirect }
  26.   if Delta <> 0 then
  27.   begin
  28.     HatchGlb := true;
  29.     DirectModeLoc := DirectModeGlb;
  30.     DirectModeGlb := true;
  31.     ClippingLoc := ClippingGlb;
  32.     ClippingGlb := true;
  33.     X1RefLoc := X1RefGlb;
  34.     X1RefGlb := X1;
  35.     X2RefLoc := X2RefGlb;
  36.     X2RefGlb := X2;
  37.     Y1RefLoc := Y1RefGlb;
  38.     Y1RefGlb := Y1;
  39.     Y2RefLoc := Y2RefGlb;
  40.     Y2RefGlb := Y2;
  41.     Yst := Y1 + Delta;
  42.     Yen := Y1 - X2 + X1 + Delta;
  43.     if Delta < 0 then
  44.     begin
  45.       Delta := -Delta;
  46.       I := Yst;
  47.       Yst := Yen;
  48.       Yen := I;
  49.     end;
  50.     Count := (Y2 - Y1 + X2 - X1 + X2 - X1) div Delta;
  51.     for I := 1 to Count-1 do
  52.     begin
  53.       X1D := X1;
  54.       Y1D := Yst;
  55.       X2D := X2;
  56.       Y2D := Yen;
  57.       if Clip(X1D, Y1D, X2D, Y2D) then
  58.         DrawLine(X1D, Y1D, X2D, Y2D);
  59.       Yst := Yst + Delta;
  60.       Yen := Yen + Delta;
  61.     end;
  62.     ClippingGlb := ClippingLoc;
  63.     HatchGlb := false;
  64.     X1RefGlb := X1RefLoc;
  65.     X2RefGlb := X2RefLoc;
  66.     Y1RefGlb := Y1RefLoc;
  67.     Y2RefGlb := Y2RefLoc;
  68.     DirectModeGlb := DirectModeLoc;
  69.   end;
  70. end; { HatchDirect }
  71.  
  72. begin { Hatch }
  73.   if DirectModeGlb then
  74.     HatchDirect(trunc(X_1), trunc(Y_1), trunc(X_2), trunc(Y_2), trunc(Delta))
  75.   else
  76.     begin
  77.       DirectModeLoc := DirectModeGlb;
  78.       DirectModeGlb := true;
  79.       X1 := WindowX(X_1);
  80.       Y1 := WindowY(Y_1);
  81.       X2 := WindowX(X_2);
  82.       Y2 := WindowY(Y_2);
  83.       Dummy := Clip(X1, Y1, X2, Y1);
  84.       Dummy := Clip(X1, Y1, X1, Y2);
  85.       HatchDirect(X1, Y1, X2, Y2, trunc(Delta));
  86.       DirectModeGlb := DirectModeLoc;
  87.     end;
  88. end; { Hatch }
  89.