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

📄 ezlinedraw.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
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 + -