⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ezlinedraw.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
Begin
  If ( ( PixelCount Div iFactor ) Mod 12 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw46_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 3 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw48_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 6 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw50_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 19 ) In [0..14] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw50_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 19 ) In [5, 10] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw52_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( ( PixelCount Div iFactor ) - 3 ) Mod 10 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw52_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( ( PixelCount Div iFactor ) - 2 ) Mod 10 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw52_3( X, Y: Integer; lpData: lParam );
Begin
  If ( ( ( PixelCount Div iFactor ) - 1 ) Mod 10 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw52_4( X, Y: Integer; lpData: lParam );
Begin
  If ( ( ( PixelCount Div iFactor ) - 0 ) Mod 10 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw53_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( ( PixelCount Div iFactor ) + 3 ) Mod 10 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw53_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( ( PixelCount Div iFactor ) + 2 ) Mod 10 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw53_3( X, Y: Integer; lpData: lParam );
Begin
  If ( ( ( PixelCount Div iFactor ) + 1 ) Mod 10 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw53_4( X, Y: Integer; lpData: lParam );
Begin
  If ( ( ( PixelCount Div iFactor ) + 0 ) Mod 10 ) = 0 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw54_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 26 ) In [0..15, 19, 23] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw54_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 26 ) In [18, 20, 23] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw54_3( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 26 ) In [17, 21, 23] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw55_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 23 ) In [0..15, 19, 23] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw55_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 23 ) In [18, 20] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw55_3( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 23 ) In [17, 21] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw56_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 25 ) In [0..6, 9..15, 18..22] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw56_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 25 ) = 20 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw57_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 40 ) In [0..14, 17..31, 34..37] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw58_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 24 ) In [0..11, 14..16, 19..21] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw59_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 27 ) In [0..15, 18..22, 24] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw59_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 27 ) In [20, 24] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw60_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 25 ) In [0..15, 18..22] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw60_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 25 ) = 20 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw61_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 23 ) In [0..17, 20] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw61_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 23 ) = 20 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw62_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 25 ) In [0..17, 20..22] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw63_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 14 ) In [10, 12] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw63_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 14 ) In [9, 13] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw64_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 15 ) = 13 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw64_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 15 ) = 14 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw64_3( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 15 ) = 11 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw64_4( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 15 ) = 10 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw65_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 23 ) In [0..10, 13..14, 16..17, 19..20] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw66_0( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 20 ) In [0..9, 13..14, 16..17] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw66_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 20 ) = 6 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw66_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 20 ) = 7 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw66_3( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 20 ) = 4 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw66_4( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 20 ) = 3 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw67_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 20 ) In [0..10, 13..17] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw68_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 21 ) In [0..14, 17..18] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw68_2( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 21 ) = 8 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw68_3( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 21 ) = 9 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw68_4( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 21 ) = 6 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw68_5( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 21 ) = 5 Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Procedure PixelDraw69_1( X, Y: Integer; lpData: lParam );
Begin
  If ( ( PixelCount Div iFactor ) Mod 21 ) In [0..14, 17..18] Then
    With PDDAInfo( lpData )^ Do
      SetPixelV( DC, X, Y, lineColor );
  Inc( PixelCount );
End;

Type
  TDrawPixelProc = Procedure( X, Y: Integer; lpData: lParam );

  {Bresenham's Line Algorithm.  Byte, March 1988, pp. 249-253.}

Procedure DrawLine( xStart, yStart, xEnd, yEnd: INTEGER;
  DrawPixel: TFarProc; lpData: lParam );
Var
  a, b: INTEGER; {displacements in x and y}
  d: INTEGER; {decision variable}
  diag_inc: INTEGER; {d's increment for diagonal steps}
  dx_diag: INTEGER; {diagonal x step for next pixel}
  dx_nondiag: INTEGER; {nondiagonal x step for next pixel}
  dy_diag: INTEGER; {diagonal y step for next pixel}
  dy_nondiag: INTEGER; {nondiagonal y step for next pixel}
  i: INTEGER; {loop index}
  nondiag_inc: INTEGER; {d's increment for nondiagonal steps}
  swap: INTEGER; {temporary variable for swap}
  x, y: INTEGER; {current x and y coordinates}
Begin {DrawLine}
  x := xStart; {line starting point}
  y := yStart;
  {Determine drawing direction and step to the next pixel.}
  a := xEnd - xStart; {difference in x dimension}
  b := yEnd - yStart; {difference in y dimension}
  {Determine whether end point lies to right or left of start point.}
  If a < 0 Then {drawing towards smaller x values?}
  Begin
    a := -a; {make 'a' positive}
    dx_diag := -1
  End
  Else
    dx_diag := 1;
  {Determine whether end point lies above or below start point.}
  If b < 0 Then {drawing towards smaller x values?}
  Begin
    b := -b; {make 'a' positive}
    dy_diag := -1
  End
  Else
    dy_diag := 1;
  {Identify octant containing end point.}
  If a < b Then
  Begin
    swap := a;
    a := b;
    b := swap;
    dx_nondiag := 0;
    dy_nondiag := dy_diag
  End
  Else
  Begin
    dx_nondiag := dx_diag;
    dy_nondiag := 0
  End;
  d := b + b - a; {initial value for d is 2*b - a}
  nondiag_inc := b + b; {set initial d increment values}
  diag_inc := b + b - a - a;
  For i := 0 To a Do
  Begin {draw the a+1 pixels}
    TDrawPixelProc( DrawPixel )( x, y, lpData );
    If d < 0 Then {is midpoint above the line?}
    Begin {step nondiagonally}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -