[Export(typeof(IStartupAction))]
public class BmsciStartupAction : IStartupAction
{
private GraphicsManager _bridgeGraphicsManager;
private GraphicsManager _militaryGraphicsManager;
private GraphicsManager _roadsGraphicsManager;
private static int _count = 3;
private static object _lockObj = new object();
#region IStartupAction Members
public void Initialize(IDictionary<string, string> customSettings)
{
_militaryGraphicsManager = GraphicManagerFactory.CreateGraphicsManager();
_roadsGraphicsManager = GraphicManagerFactory.CreateGraphicsManager();
_bridgeGraphicsManager = GraphicManagerFactory.CreateGraphicsManager();
}
public void ExecuteStartupAction()
{
MapHandler.DynamicLayers.First().Visible = false;
GetMilitary();
GetRoads();
BridgeManager.BridgesLoaded += BridgeManager_BridgesLoaded;
BridgeManager.LoadBridges();
}
public bool IsInitialized { get; set; }
public string StartupActionText
{
get { return "Loading Bridges, Military Facilities, and Strahnet"; }
}
public event EventHandler Complete;
#endregion
private void CallbackComplete()
{
lock (_lockObj)
{
_count--;
if (_count == 0)
Complete(this, new EventArgs());
}
}
private void BridgeManager_BridgesLoaded(object sender, EventArgs e)
{
List<SolidColorBrush> colors = new List<string>
{
"#FFFF00",
"#FF00FF",
"#808080"
}.Select(c => new SolidColorBrush(ColorConverter.HexColor(c)
)).ToList();
_bridgeGraphicsManager.AddFilteredGeometry(BridgeManager.AllBridges, colors.Select(b => b.Color).ToList(),
"VCLRCD");
CallbackComplete();
}
private void GetMilitary()
{
QueryServiceClient querySvs = ServiceClients.GetQueryServiceClient();
querySvs.QueryCompleted += MilitaryComplete;
var parameters = new SpatialQueryOptions
{
Layer = new Layer {Id = 6},
ReturnAllFields = true,
ReturnGeometry = true,
OutputSpatialReference = MapHandler.MapSpatialReference,
InputSpatialReference = MapHandler.MapSpatialReference,
Criteria = new Criteria
{
ComparisonType = ComparisonType.NotEqual,
Field = new LayerField {Name = "OBJECTID"},
Value = "-1"
}
};
querySvs.QueryAsync(parameters, MapHandler.DynamicLayers.First().Url);
}
private void MilitaryComplete(object sender, QueryCompletedEventArgs e)
{
foreach (Feature f in e.Result.ConvertToFeatures())
{
_militaryGraphicsManager.AddGraphic(f, new SimpleFillSymbol
{
Fill =
new SolidColorBrush(
ColorConverter.
HexColor("#336633"))
}, null);
}
CallbackComplete();
}
private void GetRoads()
{
QueryServiceClient querySvs = ServiceClients.GetQueryServiceClient();
querySvs.QueryCompleted += RoadsComplete;
var parameters = new SpatialQueryOptions
{
Layer = new Layer {Id = 1},
ReturnAllFields = true,
ReturnGeometry = true,
OutputSpatialReference = MapHandler.MapSpatialReference,
InputSpatialReference = MapHandler.MapSpatialReference,
Criteria = new Criteria
{
ComparisonType = ComparisonType.NotEqual,
Field = new LayerField {Name = "OBJECTID"},
Value = "-1"
}
};
querySvs.QueryAsync(parameters, MapHandler.DynamicLayers.First().Url);
}
private void RoadsComplete(object sender, QueryCompletedEventArgs e)
{
List<SolidColorBrush> colors = new List<string>
{
"#FF0000",
"#0000FF",
"#0000FF"
}.Select(c => new SolidColorBrush(ColorConverter.HexColor(c)
)).ToList();
_roadsGraphicsManager.AddFilteredGeometry(e.Result.ConvertToFeatures(), colors.Select(b => b.Color).ToList(),
"COLOR_CODE");
CallbackComplete();
}
}