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

📄 ezentities.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
Unit EzEntities;

{***********************************************************}
{     EzGIS/CAD Components                                  }
{   (c) 2003 EzSoft Engineering                             }
{         All Rights Reserved                               }
{***********************************************************}

{$I EZ_FLAG.PAS}
Interface

Uses
  Controls, SysUtils, Classes, Windows, Graphics, Math, dialogs,
  EzLib, EzBase, EzBaseGIS, EzStrArru;

Const
  TwoPi = 2 * System.Pi;

Type

  TEzSymbols = Class;

  {-------------------------------------------------------------------------------}
  {                  TEzSymbols                                                   }
  {-------------------------------------------------------------------------------}

  { The symbols used in the system }
  TEzSymbol = Class
  Private
    FEntities: TList;
    FSymbols: TEzSymbols; { belongs to }
    FExtension: TEzRect;
    FCentroid: TEzPoint;
    FInsertionPoint: TEzPoint; { used when inserting as a block }
    FName: String;
    FDestroying: Boolean;

    Function Get( Index: Integer ): TEzEntity;
    Procedure ConfigureSpecialItems( Item: TEzEntity );
    procedure SetName(const Value: String);
  Public

    Constructor Create( Symbols: TEzSymbols );
    Constructor CreateFromStream( Symbols: TEzSymbols; Stream: TStream );
    Destructor Destroy; Override;

    Procedure LoadFromStream( Stream: TStream );
    Procedure SaveToStream( Stream: TStream );
    Procedure Assign( Symbol: TEzSymbol );
    Procedure Clear;
    Function Count: Integer;

    Function Add( Item: TEzEntity ): Integer;
    Procedure Insert( Index: Integer; Item: TEzEntity );
    Procedure Delete( Index: Integer );
    Function IndexOf( Item: TEzEntity ): Integer;

    Procedure Exchange( Index1, Index2: Integer );
    Procedure UpdateExtension;

    Procedure Draw( Grapher: TEzGrapher; Canvas: TCanvas; Const Clip: TEzRect;
      Const Matrix: TEzMatrix; DrawMode: TEzDrawMode; Data: Pointer = Nil );
{$IFDEF BCB}
    Procedure DrawDefault( Grapher: TEzGrapher; Canvas: TCanvas; Const Clip: TEzRect;
      DrawMode: TEzDrawMode );
{$ENDIF}
    Procedure DrawVector( V: TEzVector; Const PenStyle: TEzPenStyle; Grapher: TEzGrapher;
      Canvas: TCanvas; Const Clip: TEzRect; Const Matrix: TEzMatrix;
      DrawMode: TEzDrawMode );
{$IFDEF BCB}
    Procedure DrawVectorDefault( V: TEzVector; Const PenStyle: TEzPenStyle; Grapher: TEzGrapher;
      Canvas: TCanvas; Const Clip: TEzRect; DrawMode: TEzDrawMode );
{$ENDIF}

    Property Name: String Read FName Write SetName;
    Property Extension: TEzRect Read FExtension;
    Property Centroid: TEzPoint Read FCentroid;
    Property InsertionPoint: TEzPoint Read FInsertionPoint Write FInsertionPoint;

    Property Entities[Index: Integer]: TEzEntity Read Get;
  End;

  TEzSymbols = Class
  Private
    FActive: Boolean;
    FFileName: String;
    FList: TList;
    FIsLineType: Boolean;

    FOnChange: TNotifyEvent;

    Function Get( Index: Integer ): TEzSymbol;
    Procedure SetActive( Value: Boolean );
    Procedure SetIsLineType( Value: Boolean );
  Public
    Constructor Create;
    Destructor Destroy; Override;

    Procedure Assign( Symbols: TEzSymbols );
    Procedure Open;
    Procedure Close;

    Procedure LoadFromFile( const FileName: string );
    Procedure SaveToFile( const FileName: string );
    Procedure Save;
    Procedure SaveAs( Const FileName: String );
    Procedure LoadFromStream( Stream: TStream );
    Procedure SaveToStream( Stream: TStream );

    Procedure Clear;
    Function Add( Item: TEzSymbol ): Integer;
    Procedure Delete( Index: Integer );
    Function Count: Integer;
    Procedure ExChange( Index1, Index2: Integer );
    Procedure Up( Index : Integer );
    procedure Down( Index : Integer );
    Procedure BringToTop( Index: Integer );
    Procedure SendToBack( Index: Integer );

    Function IndexOfName( Const Name: String ): Integer;
    Procedure AtLeastOne;

    Property Items[Index: Integer]: TEzSymbol Read Get; Default;
    Property FileName: String Read FFileName Write FFileName;
    Property Active: Boolean Read FActive Write SetActive;
    Property IsLineType: Boolean Read FIsLineType Write SetIsLineType;

    Property OnChange: TNotifyEvent Read FOnChange Write FOnChange;
  End;


  {-------------------------------------------------------------------------------}
  {                  TEzNone - this just have database information                }
  {-------------------------------------------------------------------------------}

  TEzNone = Class( TEzEntity )
  Protected
    Function GetEntityID: TEzEntityID; Override;
    Function BasicInfoAsString: string; Override;
  Public
    Constructor CreateEntity;
    Procedure LoadFromStream( Stream: TStream ); Override;
    Procedure SaveToStream( Stream: TStream ); Override;
    Procedure Draw( Grapher: TEzGrapher; Canvas: TCanvas; Const Clip: TEzRect;
      DrawMode: TEzDrawMode; Data: Pointer = Nil ); Override;
    Function IsEqualTo( Entity: TEzEntity; IncludeAttribs: Boolean = false): Boolean; Override;
  End;

  {-------------------------------------------------------------------------------}
  {                  TPoinTEzEntity                                               }
  {-------------------------------------------------------------------------------}

  TEzPointShape = ( psEllipse, psPoint );

  TEzPointEntity = Class( TEzEntity )
  Private
    FColor: TColor;
    FSymbolIndex: Integer;
    FPointShape: TEzPointShape;
  {$IFDEF BCB}
    function GetColor: TColor;
    function GetPointShape: TEzPointShape;
    function GetSymbolIndex: Integer;
    procedure SetColor(const Value: TColor);
    procedure SetPointShape(const Value: TEzPointShape);
    procedure SetSymbolIndex(const Value: Integer);
  {$ENDIF}
  Protected
    Function GetEntityID: TEzEntityID; Override;
    Function BasicInfoAsString: string; Override;
    Function AttribsAsString: string; Override;
  Public
    Constructor CreateEntity( Const P: TEzPoint; Clr: TColor );
    Procedure LoadFromStream( Stream: TStream ); Override;
    Procedure SaveToStream( Stream: TStream ); Override;
    Procedure Draw( Grapher: TEzGrapher; Canvas: TCanvas; Const Clip: TEzRect;
      DrawMode: TEzDrawMode; Data: Pointer = Nil ); Override;
    Function IsEqualTo( Entity: TEzEntity; IncludeAttribs: Boolean  = false): Boolean; Override;

    Property Color: TColor {$IFDEF BCB} Read GetColor Write SetColor {$ELSE} Read FColor Write FColor {$ENDIF};
    Property SymbolIndex: Integer {$IFDEF BCB} Read GetSymbolIndex Write SetSymbolIndex {$ELSE} Read FSymbolIndex Write FSymbolIndex {$ENDIF};
    Property PointShape: TEzPointShape {$IFDEF BCB} Read GetPointShape Write SetPointShape {$ELSE} Read FPointShape Write FPointShape {$ENDIF};
  End;

  {-------------------------------------------------------------------------------}
  {                  TEzPlace - symbols on the map                                }
  {-------------------------------------------------------------------------------}

  TEzPlace = Class( TEzEntity )
  Private
    FSymbolTool: TEzSymbolTool;
    FText: String;
    Procedure SetSymbolTool( Value: TEzSymbolTool );
    Function GetSymbolTool: TEzSymbolTool;
    function CalcBoundingBox: TEzRect;
    procedure MoveAndRotateControlPts(var MovePt, RotatePt: TEzPoint; Grapher: TEzGrapher);
    {$IFDEF BCB}
    function GetText: String;
    procedure SetText(const Value: String);
    {$ENDIF}
  Protected
    Function GetEntityID: TEzEntityID; Override;
    Function BasicInfoAsString: string; Override;
    Function AttribsAsString: string; Override;
  Public
    { methods }
    Constructor CreateEntity( Const Pt: TEzPoint );
    Destructor Destroy; Override;
    procedure Initialize; Override;
    Procedure LoadFromStream( Stream: TStream ); Override;
    Procedure SaveToStream( Stream: TStream ); Override;
    Procedure Draw( Grapher: TEzGrapher; Canvas: TCanvas; Const Clip: TEzRect;
      DrawMode: TEzDrawMode; Data: Pointer = Nil ); Override;
    Function PointCode( Const Pt: TEzPoint; Const Aperture: Double;
      Var Distance: Double; SelectPickingInside: Boolean; UseDrawPoints: Boolean = True ): Integer; Override;
    Procedure UpdateExtension; Override;
    Function StorageSize: Integer; Override;
    function GetControlPoints(TransfPts: Boolean; Grapher: TEzGrapher=Nil): TEzVector; Override;
    function GetControlPointType(Index: Integer): TEzControlPointType; Override;
    procedure UpdateControlPoint(Index: Integer; const Value: TEzPoint; Grapher: TEzGrapher=Nil); Override;
    Function IsEqualTo( Entity: TEzEntity; IncludeAttribs: Boolean = False ): Boolean; Override;

    Property SymbolTool: TEzSymbolTool Read GetSymbolTool Write SetSymbolTool;
    { if this property is <> '' then the first entity that is text
      in the list of entities for the symbol, will be replaced with this text }
    Property Text: String {$IFDEF BCB} Read GetText Write SetText {$ELSE} Read FText Write FText{$ENDIF};
  End;

  {-------------------------------------------------------------------------------}
  {                  TEzPolyLine                                                  }
  {-------------------------------------------------------------------------------}

  TEzPolyLine = Class( TEzOpenedEntity )
  Protected
    Function GetEntityID: TEzEntityID; Override;
    Function BasicInfoAsString: string; Override;
  Public
    Procedure LoadFromStream( Stream: TStream ); Override;
    Procedure UpdateControlPoint( Index: Integer; Const Value: TEzPoint; Grapher: TEzGrapher=Nil ); Override;
  End;

  {-------------------------------------------------------------------------------}
  {                  TEzPolygon                                                   }
  {-------------------------------------------------------------------------------}

  TEzPolygon = Class( TEzClosedEntity )
  Protected
    Function GetEntityID: TEzEntityID; Override;
    Function BasicInfoAsString: string; Override;
  Public
    Procedure LoadFromStream( Stream: TStream ); Override;
    Function IsClosed: Boolean; Override;
    Procedure UpdateControlPoint( Index: Integer; Const Value: TEzPoint; Grapher: TEzGrapher=Nil ); Override;
  End;

  {-------------------------------------------------------------------------------}
  {                  TEz                                                 }
  {-------------------------------------------------------------------------------}

  TEzRectangle = Class( TEzClosedEntity )
  private
    {$IFDEF BCB}
    function GetRotangle: Double;
    {$ENDIF}
  Protected
    FRotangle: Double;
    FPolyPoints: TEzVector;
    Procedure MakePolyPoints;
    Function GetDrawPoints: TEzVector; Override;
    Procedure MoveAndRotateControlPts( Var MovePt, RotatePt: TEzPoint; Grapher: TEzGrapher );
    Procedure SetRotangle( Value: Double );
    Function GetEntityID: TEzEntityID; Override;
    Function BasicInfoAsString: string; Override;
  Public
    Constructor CreateEntity( Const P1, P2: TEzPoint );
    Destructor Destroy; Override;
    Procedure Draw( Grapher: TEzGrapher; Canvas: TCanvas; Const Clip: TEzRect;
      DrawMode: TEzDrawMode; Data: Pointer = Nil ); Override;
    Procedure LoadFromStream( Stream: TStream ); Override;
    Procedure SaveToStream( Stream: TStream ); Override;
    Procedure UpdateExtension; Override;
    Procedure UpdateControlPoint( Index: Integer; Const Value: TEzPoint; Grapher: TEzGrapher=Nil ); Override;
    Function GetControlPoints(TransfPts: Boolean; Grapher: TEzGrapher=Nil): TEzVector; Override;
    Function GetControlPointType( Index: Integer ): TEzControlPointType; Override;
    Procedure ApplyTransform; Override;
    Function IsEqualTo( Entity: TEzEntity; IncludeAttribs: Boolean  = false): Boolean; Override;


    Property Rotangle: Double {$IFDEF BCB} Read GetRotangle {$ELSE} Read FRotangle {$ENDIF} Write SetRotangle;
  End;

  {-------------------------------------------------------------------------------}
  {                  TEzArc                                                       }
  {-------------------------------------------------------------------------------}

  TEzArc = Class( TEzOpenedEntity )
  Private
    FCenterX, FCenterY, FRadius: Double;
{$IFDEF BCB}
    function GetCenterX: Double;
    function GetCenterY: Double;
    function GetPointsInCurve: Word;
    function GetRadius: Double;
    procedure SetCenterX(const Value: Double);
    procedure SetCenterY(const Value: Double);
    procedure SetRadius(const Value: Double);
{$ENDIF}
    Procedure MoveAndRotateControlPts( Var MovePt, RotatePt: TEzPoint; Grapher: TEzGrapher=Nil );
  Protected
    FPointsInCurve: Word;
    FCurvePoints: TEzVector;
    Function GetDrawPoints: TEzVector; Override;
    Procedure SetPointsInCurve( N: Word );
    Function NormalizeAngle( Const Angle: Double ): Double;
    Function GetEntityID: TEzEntityID; Override;
    Function BasicInfoAsString: string; Override;
  Public
    { P1, P2, P3 are 3 points where the arc passes }
    Constructor CreateEntity( Const P1, P2, P3: TEzPoint );
    Destructor Destroy; Override;
    procedure Initialize; Override;
    Procedure LoadFromStream( Stream: TStream ); Override;
    Procedure SaveToStream( Stream: TStream ); Override;
    Procedure MakeCurvePoints;
    Procedure UpdateExtension; Override;
    Procedure SetArc( Const CX, CY, R, StartAng, NumRadians: Double;
      IsCounterClockWise: Boolean );
    Procedure Draw( Grapher: TEzGrapher; Canvas: TCanvas; Const Clip: TEzRect;
      DrawMode: TEzDrawMode; Data: Pointer = Nil ); Override;
    Procedure Centroid( Var CX, CY: Double ); Override;
    Procedure CalcCenterRadius;
    Function IsColinear: Boolean;
    Function StartAngle: Double;
    Function EndAngle: Double;
    Function SweepAngle: Double;
    Function GetControlPoints(TransfPts: Boolean; Grapher: TEzGrapher=Nil): TEzVector; Override;
    Procedure UpdateControlPoint( Index: Integer; Const Value: TEzPoint; Grapher: TEzGrapher=Nil ); Override;
    Function IsEqualTo( Entity: TEzEntity; IncludeAttribs: Boolean  = false): Boolean; Override;

⌨️ 快捷键说明

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