📄 ezdgnlayer.pas
字号:
Begin
TDGNLayer( FLayer ).FHeader.UseAttachedDB := Value;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetVisible: boolean;
Begin
result := TDGNLayer( FLayer ).FHeader.Visible;
End;
Procedure TDGNLayerInfo.SetVisible( Value: boolean );
Begin
If TDGNLayer( FLayer ).FHeader.Visible = Value Then Exit;
TDGNLayer( FLayer ).FHeader.Visible := Value;
If Assigned( FLayer.Layers.GIS.OnVisibleLayerChange ) Then
FLayer.Layers.GIS.OnVisibleLayerChange( Self, FLayer.Name );
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetOverlappedTextAction: TEzOverlappedTextAction;
Begin
result := TDGNLayer( FLayer ).FHeader.OverlappedTextAction;
End;
Procedure TDGNLayerInfo.SetOverlappedTextAction( Value: TEzOverlappedTextAction );
Begin
If TDGNLayer( FLayer ).FHeader.OverlappedTextAction = Value Then Exit;
TDGNLayer( FLayer ).FHeader.OverlappedTextAction := Value;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetOverlappedTextColor: TColor;
Begin
result := TDGNLayer( FLayer ).FHeader.OverlappedTextColor;
End;
Procedure TDGNLayerInfo.SetOverlappedTextColor( Value: TColor );
Begin
If TDGNLayer( FLayer ).FHeader.OverlappedTextColor = Value Then Exit;
TDGNLayer( FLayer ).FHeader.OverlappedTextColor := Value;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetTextHasShadow: boolean;
Begin
result := TDGNLayer( FLayer ).FHeader.TextHasShadow;
End;
Procedure TDGNLayerInfo.SetTextHasShadow( Value: boolean );
Begin
If TDGNLayer( FLayer ).FHeader.TextHasShadow = Value Then Exit;
TDGNLayer( FLayer ).FHeader.TextHasShadow := Value;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetTextFixedSize: Byte;
Begin
result := TDGNLayer( FLayer ).FHeader.TextFixedSize;
End;
Procedure TDGNLayerInfo.SetTextFixedSize( Value: Byte );
Begin
If TDGNLayer( FLayer ).FHeader.TextFixedSize = Value Then Exit;
TDGNLayer( FLayer ).FHeader.TextFixedSize := Value;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetSelectable: boolean;
Begin
result := TDGNLayer( FLayer ).FHeader.Selectable;
End;
Procedure TDGNLayerInfo.SetSelectable( Value: boolean );
Begin
If TDGNLayer( FLayer ).FHeader.Selectable = Value Then Exit;
TDGNLayer( FLayer ).FHeader.Selectable := Value;
If Assigned( FLayer.Layers.GIS.OnSelectableLayerChange ) Then
FLayer.Layers.GIS.OnSelectableLayerChange( Self, FLayer.Name );
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetExtension: TEzRect;
Begin
result := TDGNLayer( FLayer ).FHeader.Extension;
End;
Procedure TDGNLayerInfo.SetExtension( Const Value: TEzRect );
Begin
If EqualRect2D( Value, TDGNLayer( FLayer ).FHeader.Extension ) Then Exit;
TDGNLayer( FLayer ).FHeader.Extension := Value;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetIDCounter: integer;
Begin
result := TDGNLayer( FLayer ).FHeader.IDCounter;
End;
Procedure TDGNLayerInfo.SetIDCounter( Value: integer );
Begin
If TDGNLayer( FLayer ).FHeader.IDCounter = Value Then Exit;
TDGNLayer( FLayer ).FHeader.IDCounter := Value;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetIsAnimationLayer: boolean;
Begin
result := TDGNLayer( FLayer ).FHeader.IsAnimationLayer;
End;
Procedure TDGNLayerInfo.SetIsAnimationLayer( Value: boolean );
Begin
If TDGNLayer( FLayer ).FHeader.IsAnimationLayer = Value Then Exit;
TDGNLayer( FLayer ).FHeader.IsAnimationLayer := Value;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetCoordSystem: TEzCoordSystem;
Begin
result := TDGNLayer( FLayer ).FHeader.CoordSystem;
End;
Procedure TDGNLayerInfo.SetCoordSystem( Value: TEzCoordSystem );
Begin
If TDGNLayer( FLayer ).FHeader.CoordSystem = Value Then Exit;
With TDGNLayer( FLayer ) Do
Begin
FHeader.CoordSystem := Value;
If Value = csLatLon Then
Begin
CoordMultiplier := DEG_MULTIPLIER;
FHeader.coordsunits := cuDeg;
End
Else
CoordMultiplier := 1;
End;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetCoordsUnits: TEzCoordsUnits;
Begin
result := TDGNLayer( FLayer ).FHeader.CoordsUnits;
End;
Procedure TDGNLayerInfo.SetCoordsUnits( Value: TEzCoordsUnits );
Begin
With TDGNLayer( FLayer ) Do
Begin
If FHeader.coordsunits = value Then Exit;
If FHeader.CoordSystem = csLatLon Then
FHeader.CoordsUnits := cuDeg
Else
FHeader.CoordsUnits := Value;
End;
SetModifiedStatus( FLayer );
End;
Function TDGNLayerInfo.GetIsIndexed: boolean;
Begin
With TDGNLayer( FLayer ) Do
result := FHeader.IsIndexed And ( Frt <> Nil );
End;
Procedure TDGNLayerInfo.SetIsIndexed( Value: boolean );
Begin
If TDGNLayer( FLayer ).FHeader.IsIndexed = Value Then Exit;
TDGNLayer( FLayer ).FHeader.IsIndexed := Value;
SetModifiedStatus( FLayer );
End;
{-------------------------------------------------------------------------------}
{ TDGNLayer - class implementation }
{-------------------------------------------------------------------------------}
Constructor TDGNLayer.Create( Layers: TEzBaseLayers; Const AFileName: String );
Begin
Inherited Create( Layers, AFileName );
FLayerInfo := TDGNLayerInfo.Create( Self );
FUpdateRtree := True;
Self.FileName := ChangeFileExt( AFileName, '' );
Self.Name := ExtractFileName( AFileName );
With FHeader Do
Begin
HeaderID := 8003;
VersionNumber := LAYER_VERSION_NUMBER;
IDCounter := 0;
Extension := INVALID_EXTENSION;
Visible := True;
Selectable := True;
FillChar( Reserved, SizeOf( Reserved ), 0 );
End;
CoordMultiplier := 1;
End;
Destructor TDGNLayer.Destroy;
Begin
Close;
If ol <> Nil Then ol.free;
// FLayerInfo is destroyed in the inherited class
If Assigned( FDGNFile ) then
FreeAndNil( FDGNFile );
Inherited Destroy;
End;
Function TDGNLayer.GetDGNFile: TEzDGNFile;
Begin
If FDGNFile = Nil then FDGNFile := TEzDGNFile.Create;
Result:= FDGNFile ;
End;
Procedure TDGNLayer.InitializeOnCreate( Const FileName: String;
AttachedDB, IsAnimation: Boolean; CoordSystem: TEzCoordSystem;
CoordsUnits: TEzCoordsUnits; FieldList: TStrings );
Begin
// for now, .shp files will not be created with this method
End;
function TDGNLayer.GetBookmark: Pointer;
var
I: Integer;
bmrk: TEzDGNBookmark;
begin
bmrk:= TEzDGNBookmark.Create;
bmrk.FRecno:= FRecno;
bmrk.FFiltered:= FFiltered;
bmrk.FEofCrack:= FEofCrack;
bmrk.FFilterRecno:= FFilterRecno;
if (ol <> nil) and (ol.Count > 0) then
begin
bmrk.Fol.Capacity:= ol.Count;
for I:= 0 to ol.Count-1 do
bmrk.Fol.Add( ol[I] );
end;
Result:= bmrk;
end;
procedure TDGNLayer.GotoBookmark(Bookmark: Pointer);
var
I: Integer;
bmrk: TEzDGNBookmark;
begin
bmrk:= TEzDGNBookmark(Bookmark);
FRecno:= bmrk.FRecno;
FFiltered:= bmrk.FFiltered;
FEofCrack:= bmrk.FEofCrack;
FFilterRecno:= bmrk.FFilterRecno;
if bmrk.Fol.Count > 0 then
begin
if ol = nil then ol := TIntegerList.Create;
ol.Clear;
ol.Capacity:= bmrk.Fol.Count;
for I:= 0 to bmrk.Fol.Count-1 do
ol.Add( bmrk.Fol[I] );
end else if ol <> nil then
ol.Clear;
end;
procedure TDGNLayer.FreeBookmark(Bookmark: Pointer);
begin
TEzDGNBookmark(Bookmark).Free;
end;
Procedure TDGNLayer.GetFieldList( Strings: TStrings );
Var
i: Integer;
Begin
If DBTable <> Nil Then
For i := 1 To DBTable.FieldCount Do
Strings.Add( Format( '%s;%s;%d;%d', [DBTable.Field( I ), DBTable.FieldType( I ),
DBTable.FieldLen( I ), DBTable.FieldDec( I )] ) );
End;
Procedure TDGNLayer.StartBatchInsert;
Begin
FUpdateRtree := False;
End;
Procedure TDGNLayer.FinishBatchInsert;
Begin
FUpdateRtree := True;
RebuildTree;
End;
Procedure TDGNLayer.Zap;
Begin
// nothing to do here
End;
Function TDGNLayer.GetDBTable: TEzBaseTable;
Begin
Result := FDBTable;
End;
Function TDGNLayer.GetRecno: Integer;
Begin
If FFiltered Then
Result := Longint( ol[FFilterRecno] )
Else
Result := FRecno;
End;
Procedure TDGNLayer.SetRecno( Value: Integer );
Begin
If ( Value < 1 ) Or ( Value > FHeader.RecordCount ) Then
EzGISError( SRecnoInvalid );
FRecno := Value;
End;
Function TDGNLayer.SendEntityToBack( ARecno: Integer ): Integer;
Begin
Result := 0;
// nothing to do here
End;
Function TDGNLayer.BringEntityToFront( ARecno: Integer ): Integer;
Begin
Result := 0;
// nothing to do here
End;
Procedure TDGNLayer.SetGraphicFilter( s: TSearchType; Const VisualWindow: TEzRect );
Var
treeBBox, viewBBox: TRect_rt;
Begin
FFiltered := False;
If Not FHeader.IsIndexed Then Exit;
If ol = Nil Then
ol := TIntegerList.Create
Else
ol.clear;
treeBBox := Frt.RootExtent;
viewBBox := FloatRect2Rect( VisualWindow );
If Contains_rect( viewBBox, treeBBox ) Then
Begin
FreeAndNil( ol );
Exit;
End;
Frt.Search( S, viewBBox, ol, DGNFile.RecordCount );
//SortList(ol);
FFiltered := True;
FFilterRecno := -1;
End;
Procedure TDGNLayer.CancelFilter;
Begin
If ol <> Nil Then FreeAndNil( ol );
FFiltered := False;
End;
Function TDGNLayer.Eof: Boolean;
Begin
result := FEofCrack;
End;
Procedure TDGNLayer.First;
Begin
If FFiltered Then
Begin
If ol.Count > 0 Then
Begin
FFilterRecno := 0;
FEofCrack := False;
End
Else
Begin
FEofCrack := True;
End
End
Else If DGNFile.RecordCount > 0 Then
Begin
FRecno := 1;
FEofCrack := False;
End
Else
Begin
FEofCrack := True;
End;
End;
Procedure TDGNLayer.Next;
Var
N: Integer;
Begin
If FFiltered Then
Begin
N := ol.count;
If N > 0 Then
Begin
If FFilterRecno < N - 1 Then
Begin
Inc( FFilterRecno );
FEofCrack := False;
End
Else
Begin
FFilterRecno := N - 1;
FEofCrack := True;
End;
End
Else
Begin
FEofCrack := True;
End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -