FormatSaveToStream(SourceFormat: TopobaseFormat, Stream: IIOStream);
SourceFormat. Topobase format.
Stream. The stream, to which the topobase is saved.
The FormatSaveToStream method saves the topobase to the stream.
Executing the example requires that the repository contains:
A map with the MAP identifier containing the Regions layer.
A form containing:
Two Button components named Button1 and Button2.
Two UiMap components named UiMap1 and UiMap2 that are data sources for MapBox1 and MapBox2, respectively.
Two MapBox components named MapBox1 and MapBox2. Select the UiMap1 and the UiMap2 data sources for the components in the Source property, respectively.
The IntegerEdit component named IntegerEdit1. Use the Value property to set a value of the format, to which a topobase will be saved, for the component. Use the value of the TopobaseFormat enumeration as a topobase format value.
Add links to the Drawing, Map, MathFin, Metabase, and Topobase system assemblies.
Var
_Count: Integer;
// Get information about dynamic indicators
// in different temporary points on map layer
Class VisualDataAdapter: Object, IMapTimeDynamicDataAdapter
Function Get_PartCount(Attribute: Variant; TimePoint: Integer): Integer;
Begin
Return _Count;
End Function Get_PartCount;
Function Get_TimePointName(TimePoint: Integer): String;
Begin
Return "TimePoint " + TimePoint.ToString;
End Function Get_TimePointName;
Function Get_TimePointsCount: Integer;
Begin
Return 4;
End Function Get_TimePointsCount;
Function Get_Data(Attribute: Variant; PartvIndex: Integer; TimePoint: Integer): Variant;
Var
t: Integer;
i: Integer;
Begin
t := 1;
For i := 0 To TimePoint Do
t := t + 10;
End For;
Return Math.Rand * 10 * t;
End Function Get_Data;
Function Get_CustomFormat: String;
Begin
Return "#0,000";
End Function Get_CustomFormat;
End Class VisualDataAdapter;
Class ITOPOBASE_FORMATSAVETOSTREAMForm: Form
Button1: Button;
Button2: Button;
MapBox1: MapBox;
MapBox2: MapBox;
UiMap1: UiMap;
UiMap2: UiMap;
IntegerEdit1: IntegerEdit;
mb: IMetabase;
Map: IMap;
Top: IMapTopobase;
Itop: ITopobase;
StreamG: IMemoryStream;
Sub CreateLayer(CurrentMap: IMap);
Var
StartC, EndC: IGxColor;
Color: IMapVisualColorProperty;
Scale: IMapColorScale;
AreaVisual: IMapAreaVisual;
Layer: IMapLayer;
Begin
// Get map layer named Regions
Layer := CurrentMap.Layers.FindByName("Regions");
// Set map background color
CurrentMap.Color := New GxColor.CreateARGB(100, 100, 100, 100);
// Refresh map
CurrentMap.Refresh;
// Get map indicator
AreaVisual := Layer.Visuals.AddAreaVisual;
// Create a data source for indicator
AreaVisual.DataAdapter := New VisualDataAdapter.Create As IMapTimeDynamicDataAdapter;
_Count := 5;
// Get indicator fill parameters
Color := AreaVisual.Color;
// Determine a data source for fill
Color.DataAdapter := AreaVisual.DataAdapter;
// Create a color scale
Scale := New DxMapColorScale.Create As IMapColorScale;
// Set start gradient color
StartC := GxColor.FromName("Red");
// Set end gradient color
EndC := GxColor.FromName("Blue");
// Set up color scale
Scale.AutoSetup(Layer, AreaVisual.DataAdapter, StartC, EndC);
// Set color scale for indicator fill
Color.Scale := Scale;
// Refresh map
CurrentMap.Refresh;
End Sub CreateLayer;
Sub ITOPOBASE_FORMATSAVEFROMSTREAMFormOnCreate(Sender: Object; Args: IEventArgs);
Begin
// Get repository
mb := MetabaseClass.Active;
// Get map
Map := UiMap1.Map;
// Get map topobase
Top := mb.FetchItemById("MAP").Edit As IMapTopobase;
// Save topobase
Itop := Top As ITopobase;
// Set topobase
Map.Topobase := Itop As IMapTopobase;
// Display map
CreateLayer(Map);
End Sub ITOPOBASE_FORMATSAVEFROMSTREAMFormOnCreate;
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Begin
// Create a stream
StreamG := New MemoryStream.Create;
// Save topobase to stream
(UiMap1.Map.Topobase As ITopobase).FormatSaveToStream((IntegerEdit1.Value) As TopobaseFormat, StreamG);
End Sub Button1OnClick;
Sub Button2OnClick(Sender: Object; Args: IMouseEventArgs);
Begin
// Set start position in the stream
StreamG.Seek(0, SeekOrigin.Beginning);
// Get map topobase
UiMap2.Map.Topobase := mb.FetchItemById("MAP").Bind As IMapTopobase;
// Load topobase from stream
(UiMap2.Map.Topobase As ITopobase).FormatLoadFromStream((IntegerEdit1.Value)As TopobaseFormat, StreamG);
// Display map
CreateLayer(UiMap2.Map);
End Sub Button2OnClick;
End Class ITOPOBASE_FORMATSAVETOSTREAMForm;
After executing the example:
Clicking the Button1 button will save the topobase to the stream in the specified format.
Clicking the Button2 button will load the topobase from the stream to the form.
See also: