📄 ezlinedraw.pas
字号:
Unit EzLineDraw;
{***********************************************************}
{ EzGIS/CAD Components }
{ (c) 2003 EzSoft Engineering }
{ All Rights Reserved }
{***********************************************************}
{$I EZ_FLAG.PAS}
Interface
Uses
Windows, SysUtils, Graphics, EzLib;
Const
MAX_LINETYPES = 62;
// remark next line to use standard LineDDA WIndows API ( WARNING: it is slower )
Procedure PolyDDA( Const PointArray: Array Of TPoint;
Const Parts: Array Of Integer; PartCount: Integer; pCanvas: TCanvas;
Grapher: TEzGrapher; PLineType: Integer; PLineColor: TColor; PLineWidth: Integer );
Implementation
Var
PixelCount, iFactor: integer;
Type
PDDAInfo = ^TDDAInfo;
TDDAInfo = Record
LineColor: TColor; // line color
DC: THandle; // to avoid calling Canvas.Handle many times
End;
Procedure PixelDraw1( 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 PixelDraw2( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 4 ) In [0..1] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw3( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 6 ) In [0..3] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw4( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 10 ) In [0..7] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw5( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 20 ) In [0..15] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw6( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 40 ) In [0..31] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw7( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 10 ) In [0..4] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw8( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 8 ) = 0 Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw9( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 12 ) In [0..3] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw10( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 16 ) In [0..7] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw11( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 15 ) In [0..6] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw12( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 22 ) In [0..10, 16] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw15( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 62 ) In [0..31, 44..49] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw17( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 68 ) In [0..31, 38..41, 48..51, 58..61] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw18( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 28 ) In [0..10, 16, 22] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw19( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 34 ) In [0..19, 24, 29] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw21( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 11 ) In [0..5, 8] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw22( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 14 ) In [0..5, 8, 11] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw23( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 24 ) In [0..9, 12, 15..18, 21] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw24( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 9 ) = 0 Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw25( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 15 ) = 0 Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw26( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 23 ) = 0 Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw27_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 20 ) = 0 Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw27_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) + 10 ) Mod 20 ) = 0 Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw28_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 24 ) In [21, 23] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw28_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) + 12 ) Mod 24 ) In [21, 23] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw29( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 22 ) In [19, 21] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw30_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 22 ) In [0..17] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw30_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 22 ) = 9 Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw31_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 22 ) In [8, 10] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw32_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( ( PixelCount Div iFactor ) Div 22 ) Mod 2 ) <> 0 ) And ( ( ( PixelCount Div iFactor ) Mod 22 ) = 9 ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw32_3( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( ( PixelCount Div iFactor ) Div 22 ) Mod 2 ) = 0 ) And ( ( ( PixelCount Div iFactor ) Mod 22 ) = 9 ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw33_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( ( PixelCount Div iFactor ) Div 22 ) Mod 2 ) <> 0 ) And ( ( ( PixelCount Div iFactor ) Mod 22 ) In [8, 10] ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw33_3( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( ( PixelCount Div iFactor ) Div 22 ) Mod 2 ) = 0 ) And ( ( ( PixelCount Div iFactor ) Mod 22 ) In [8, 10] ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw34_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) Mod 12 ) In [0..8] ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw34_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) Mod 12 ) In [0, 8] ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw35_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) Mod 22 ) In [0..16] ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw35_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) Mod 22 ) In [0, 16] ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw36_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) Mod 34 ) In [24, 26] ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw36_3( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) Mod 34 ) = 27 ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw36_4( X, Y: Integer; lpData: lParam );
Begin
If ( ( ( PixelCount Div iFactor ) Mod 34 ) = 23 ) Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw39_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 12 ) In [0..3] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw39_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 12 ) In [0..3, 6..9] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw40_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 20 ) In [0..3, 6..9, 13..17] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw40_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 20 ) In [0..3] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw41_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 27 ) In [0..3, 6..9, 13..16, 20..23] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw41_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 27 ) In [0..3] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw42_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 34 ) In [0..3, 6..9, 13..16, 20..23, 27..30] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw42_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 34 ) In [0..3] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw43_2( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 26 ) In [0..3] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw44_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 4 ) = 0 Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw45_1( X, Y: Integer; lpData: lParam );
Begin
If ( ( PixelCount Div iFactor ) Mod 12 ) In [0..3] Then
With PDDAInfo( lpData )^ Do
SetPixelV( DC, X, Y, lineColor );
Inc( PixelCount );
End;
Procedure PixelDraw45_2( X, Y: Integer; lpData: lParam );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -