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