📄 ezlinedraw.pas
字号:
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 + -