====== Source Code iOSEditionSample GeometricFunctions.zip ======
====AppDelegate.cs====
using Foundation;
using UIKit;
namespace GeometricFunctions
{
// The UIApplicationDelegate for the application. This class is responsible for launching the
// User Interface of the application, as well as listening (and optionally responding) to
// application events from iOS.
[Register("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
// class-level declarations
public override UIWindow Window
{
get;
set;
}
// This method is invoked when the application is about to move from active to inactive state.
// OpenGL applications should use this method to pause.
public override void OnResignActivation(UIApplication application)
{
}
// This method should be used to release shared resources and it should store the application state.
// If your application supports background exection this method is called instead of WillTerminate
// when the user quits.
public override void DidEnterBackground(UIApplication application)
{
}
// This method is called as part of the transiton from background to active state.
public override void WillEnterForeground(UIApplication application)
{
}
// This method is called when the application is about to terminate. Save data, if needed.
public override void WillTerminate(UIApplication application)
{
}
}
}
====Main.cs====
using UIKit;
namespace GeometricFunctions
{
public class Application
{
// This is the main entry point of the application.
static void Main(string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main(args, null, "AppDelegate");
}
}
}
====MainViewController.cs====
using MonoTouch.Dialog;
using UIKit;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reflection;
using System.Xml.Linq;
using ThinkGeo.MapSuite.Core;
namespace GeometricFunctions
{
public partial class MainViewController : UIViewController
{
private SliderViewController navigation;
public MainViewController(IntPtr handle)
: base(handle)
{ }
public override void ViewDidLoad()
{
base.ViewDidLoad();
navigation = new SliderViewController();
navigation.Position = FlyOutPosition.Left;
navigation.View.Frame = UIScreen.MainScreen.Bounds;
View.AddSubview(navigation.View);
AddChildViewController(navigation);
XDocument xDoc = XDocument.Load("AppData/GeometricFunctions.xml");
Section section = new Section("Style List");
if (xDoc.Root != null)
{
Collection styleList = new Collection();
Assembly currentAssembly = Assembly.GetExecutingAssembly();
foreach (var element in xDoc.Root.Elements())
{
string name = element.Attribute("Name").Value;
string image = element.Attribute("Image").Value;
string className = element.Attribute("Class").Value;
UIImage icon = UIImage.FromBundle(image);
BadgeElement iconItem = new BadgeElement(icon, name);
section.Add(iconItem);
Type sampleType = currentAssembly.GetType("GeometricFunctions." + className);
DetailViewController rootController = (DetailViewController)Activator.CreateInstance(sampleType);
XElement geometrySourceElement = element.Element("GeometrySource");
foreach (var featureWktElement in geometrySourceElement.Elements())
{
if (!string.IsNullOrEmpty(featureWktElement.Value))
{
rootController.GeometrySource.Add(new Feature(featureWktElement.Value));
}
}
rootController.DetailButtonClick = navigation.ToggleMenu;
rootController.Title = name;
UINavigationController mainController = new UINavigationController(rootController);
styleList.Add(mainController);
}
navigation.ViewControllers = styleList.ToArray();
}
navigation.NavigationRoot = new RootElement("Style List") { section };
}
}
}
====MainViewController.designer.cs====
// WARNING
//
// This file has been generated automatically by Xamarin Studio from the outlets and
// actions declared in your storyboard file.
// Manual changes to this file will not be maintained.
//
using System;
using Foundation;
using UIKit;
using System.CodeDom.Compiler;
namespace GeometricFunctions
{
[Register|("MainViewController")]
partial class MainViewController
{
void ReleaseDesignerOutlets ()
{
}
}
}
====BufferViewController.cs====
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class BufferViewController : DetailViewController
{
private int bufferSize;
public BufferViewController()
{ }
protected override void InitializeMap()
{
bufferSize = 0;
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer bufferedLayer = new InMemoryFeatureLayer();
bufferedLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(GeoColor.FromArgb(140, 255, 155, 13)));
bufferedLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.InternalFeatures.Add(GeometrySource.FirstOrDefault());
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("BufferedLayer", bufferedLayer);
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
InMemoryFeatureLayer bufferedLayer = (InMemoryFeatureLayer)layerOverlay.Layers["BufferedLayer"];
bufferSize += 15;
Feature bufferSourceFeature = sourceLayer.InternalFeatures[0].CloneDeep();
Feature bufferedFeature = bufferSourceFeature.Buffer(bufferSize, 8, BufferCapType.Butt, GeographyUnit.Meter, DistanceUnit.Meter);
bufferedLayer.InternalFeatures.Clear();
bufferedLayer.InternalFeatures.Add(bufferedFeature);
layerOverlay.Refresh();
}
}
}
====CenterPointViewController.cs====
using System.Globalization;
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class CenterPointViewController : DetailViewController
{
private ManagedProj4Projection projection;
public CenterPointViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
RectangleShape mapExtent = (RectangleShape)ExtentHelper.GetBoundingBoxOfItems(GeometrySource).CloneDeep();
mapExtent.ScaleUp(20);
MapView.CurrentExtent = mapExtent;
projection = new ManagedProj4Projection();
projection.InternalProjectionParametersString = ManagedProj4Projection.GetSphericalMercatorParametersString();
projection.ExternalProjectionParametersString = ManagedProj4Projection.GetLatLongParametersString();
projection.Open();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.InternalFeatures.Add(GeometrySource.FirstOrDefault());
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
InMemoryFeatureLayer pointLayer = new InMemoryFeatureLayer();
pointLayer.Open();
pointLayer.Columns.Add(new FeatureSourceColumn("Type"));
pointLayer.Close();
pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.SymbolSize = 12;
pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.SymbolPen = new GeoPen(GeoColor.FromArgb(255, 255, 155, 13), 2);
pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.SymbolSolidBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 255, 248, 172));
pointLayer.DrawingMarginPercentage = 100;
TextStyle textStyle = new TextStyle();
textStyle.TextColumnName = "Type";
textStyle.Font = new GeoFont("Arial", 15);
textStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels;
textStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping;
textStyle.TextSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);
textStyle.HaloPen = new GeoPen(new GeoSolidBrush(GeoColor.StandardColors.White), 1);
textStyle.PointPlacement = PointPlacement.LowerCenter;
textStyle.YOffsetInPixel = -8;
pointLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = textStyle;
pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
layerOverlay.Layers.Add("PointLayer", pointLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer pointLayer = (InMemoryFeatureLayer)layerOverlay.Layers["PointLayer"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
pointLayer.Clear();
Feature feature = sourceLayer.InternalFeatures.FirstOrDefault();
Feature centerFeature = new Feature(feature.GetBoundingBox().GetCenterPoint());
PointShape centerPoint = (PointShape)projection.ConvertToExternalProjection(centerFeature.CloneDeep()).GetShape();
centerFeature.ColumnValues["Type"] = string.Format(CultureInfo.InvariantCulture, "Center at Lon: {0:N4}, Lat: {1:N4}", centerPoint.X, centerPoint.Y);
pointLayer.InternalFeatures.Add(centerFeature);
Feature centroidFeature = new Feature(feature.GetShape().GetCenterPoint());
PointShape centroidPoint = (PointShape)projection.ConvertToExternalProjection(centroidFeature.CloneDeep()).GetShape();
centroidFeature.ColumnValues["Type"] = string.Format(CultureInfo.InvariantCulture, "Centroid at Lon: {0:N4}, Lat: {1:N4}", centroidPoint.X, centroidPoint.Y);
pointLayer.InternalFeatures.Add(centroidFeature);
layerOverlay.Refresh();
}
}
}
====ClipViewController.cs====
using System.Collections.ObjectModel;
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class ClipViewController : DetailViewController
{
public ClipViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(new GeoColor(160, 255, 248, 172)));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 1;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
foreach (Feature feature in GeometrySource.Skip(1))
{
sourceLayer.InternalFeatures.Add(feature);
}
InMemoryFeatureLayer clippingLayer = new InMemoryFeatureLayer();
clippingLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
clippingLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
clippingLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.FromArgb(255, 255, 155, 13);
clippingLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
clippingLayer.InternalFeatures.Add(GeometrySource.FirstOrDefault());
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
layerOverlay.Layers.Add("ClippingLayer", clippingLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
InMemoryFeatureLayer clipLayer = (InMemoryFeatureLayer)layerOverlay.Layers["ClippingLayer"];
Feature clippingFeature = clipLayer.InternalFeatures.FirstOrDefault();
if (clippingFeature != null)
{
sourceLayer.Open();
Collection features = sourceLayer.QueryTools.GetFeaturesIntersecting(clippingFeature.GetShape(), ReturningColumnsType.AllColumns);
sourceLayer.InternalFeatures.Clear();
clipLayer.InternalFeatures.Clear();
foreach (Feature feature in features)
{
sourceLayer.InternalFeatures.Add(feature.GetIntersection(clippingFeature));
}
}
layerOverlay.Refresh();
}
}
}
====ConvexHullViewController.cs====
using System.Collections.ObjectModel;
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class ConvexHullViewController : DetailViewController
{
public ConvexHullViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.PointType = PointType.Bitmap;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle.Image = new GeoImage(@"AppData/fire.png");
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
foreach (Feature feature in GeometrySource)
{
sourceLayer.InternalFeatures.Add(feature);
}
InMemoryFeatureLayer convexHullLayer = new InMemoryFeatureLayer();
convexHullLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
convexHullLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
convexHullLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
convexHullLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
layerOverlay.Layers.Add("ConvexHullLayer", convexHullLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
InMemoryFeatureLayer convexHullLayer = (InMemoryFeatureLayer)layerOverlay.Layers["ConvexHullLayer"];
sourceLayer.Open();
Collection features = sourceLayer.FeatureSource.GetAllFeatures(ReturningColumnsType.NoColumns);
convexHullLayer.Clear();
MultipointShape multipointShape = new MultipointShape();
foreach (PointShape pointShape in features.Skip(1).Select(feature => (PointShape)feature.GetShape()))
{
multipointShape.Points.Add(pointShape);
}
RingShape convexHull = multipointShape.ConvexHull();
PolygonShape polygonShape = new PolygonShape(convexHull);
convexHullLayer.InternalFeatures.Add(new Feature(polygonShape));
convexHullLayer.InternalFeatures.Add(features.FirstOrDefault().GetConvexHull());
layerOverlay.Refresh();
}
}
}
====DifferenceViewController.cs====
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class DifferenceViewController : DetailViewController
{
public DifferenceViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
sourceLayer.InternalFeatures.Add("AreaShape1", GeometrySource[0]);
sourceLayer.InternalFeatures.Add("AreaShape2", GeometrySource[1]);
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
if (sourceLayer.InternalFeatures.Count > 1)
{
AreaBaseShape sourceShape = (AreaBaseShape)sourceLayer.InternalFeatures["AreaShape2"].GetShape();
AreaBaseShape targetShape = (AreaBaseShape)sourceLayer.InternalFeatures["AreaShape1"].GetShape();
AreaBaseShape resultShape = sourceShape.GetDifference(targetShape);
sourceLayer.InternalFeatures.Clear();
sourceLayer.InternalFeatures.Add(new Feature(resultShape.GetWellKnownBinary()));
layerOverlay.Refresh();
}
}
}
}
====EnvelopViewController.cs====
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class EnvelopViewController : DetailViewController
{
public EnvelopViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
sourceLayer.InternalFeatures.Add(GeometrySource.First());
InMemoryFeatureLayer boundingboxLayer = new InMemoryFeatureLayer();
boundingboxLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(new GeoColor(160, 255, 248, 172)));
boundingboxLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
boundingboxLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.FromArgb(255, 255, 155, 13);
boundingboxLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
layerOverlay.Layers.Add("BoundingboxLayer", boundingboxLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer boundingboxLayer = (InMemoryFeatureLayer)layerOverlay.Layers["BoundingboxLayer"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
Feature sourceFeature = sourceLayer.InternalFeatures.First();
boundingboxLayer.InternalFeatures.Clear();
boundingboxLayer.InternalFeatures.Add(new Feature(sourceFeature.GetBoundingBox()));
layerOverlay.Refresh();
}
}
}
====GetAreaViewController.cs====
using System.Globalization;
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
using UIKit;
namespace GeometricFunctions
{
public class GetAreaViewController : DetailViewController
{
public GetAreaViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.Open();
sourceLayer.Columns.Add(new FeatureSourceColumn("Area"));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
TextStyle textStyle = new TextStyle();
textStyle.TextColumnName = "Area";
textStyle.Font = new GeoFont("Arial", 15);
textStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels;
textStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping;
textStyle.TextSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);
textStyle.HaloPen = new GeoPen(new GeoSolidBrush(GeoColor.StandardColors.White), 1);
textStyle.PointPlacement = PointPlacement.LowerCenter;
textStyle.YOffsetInPixel = -8;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = textStyle;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
sourceLayer.InternalFeatures.Add(GeometrySource.First());
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
Feature feature = sourceLayer.InternalFeatures.FirstOrDefault();
if (feature != null)
{
AreaBaseShape areaShape = (AreaBaseShape)feature.GetShape();
double metersArea = areaShape.GetArea(GeographyUnit.Meter, AreaUnit.SquareMeters);
double hectaresArea = areaShape.GetArea(GeographyUnit.Meter, AreaUnit.Hectares);
string areaMessage = string.Format(CultureInfo.InvariantCulture, "{0:N2} Hectares, \r\n {1:N2} Acres", metersArea, hectaresArea);
feature.ColumnValues["Area"] = areaMessage;
UIAlertView alertView = new UIAlertView("Area", areaMessage, null, "OK");
alertView.Show();
layerOverlay.Refresh();
}
}
}
}
====GetLengthViewController.cs====
using System.Globalization;
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
using UIKit;
namespace GeometricFunctions
{
public class GetLengthViewController : DetailViewController
{
public GetLengthViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.Open();
sourceLayer.Columns.Add(new FeatureSourceColumn("Length"));
TextStyle textStyle = new TextStyle();
textStyle.TextColumnName = "Length";
textStyle.Font = new GeoFont("Arial", 15);
textStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels;
textStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping;
textStyle.TextSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);
textStyle.HaloPen = new GeoPen(new GeoSolidBrush(GeoColor.StandardColors.White), 1);
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = textStyle;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad1;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.InnerPen.Brush = new GeoSolidBrush(GeoColor.FromArgb(180, 255, 155, 13));
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
sourceLayer.InternalFeatures.Add(GeometrySource.First());
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
Feature firstFeature = sourceLayer.InternalFeatures.FirstOrDefault();
if (firstFeature != null)
{
Feature feature = firstFeature.CloneDeep();
LineBaseShape lineShape = (LineBaseShape)feature.GetShape();
double length = lineShape.GetLength(GeographyUnit.Meter, DistanceUnit.Mile);
string lengthContent = string.Format(CultureInfo.InvariantCulture, "Length is {0:N2} miles.", length);
feature.ColumnValues["Length"] = lengthContent;
sourceLayer.InternalFeatures.Clear();
sourceLayer.InternalFeatures.Add(feature);
UIAlertView alertView = new UIAlertView("Length", lengthContent, null, "OK");
alertView.Show();
layerOverlay.Refresh();
}
}
}
}
====GetShortestLineViewController.cs====
using System.Globalization;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class GetShortestLineViewController : DetailViewController
{
public GetShortestLineViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
RectangleShape mapExtent = ExtentHelper.GetBoundingBoxOfItems(GeometrySource);
mapExtent.ScaleUp(20);
MapView.CurrentExtent = mapExtent;
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
sourceLayer.InternalFeatures.Add("AreaShape1", GeometrySource[0]);
sourceLayer.InternalFeatures.Add("AreaShape2", GeometrySource[1]);
InMemoryFeatureLayer shortestLineLayer = new InMemoryFeatureLayer();
shortestLineLayer.Open();
shortestLineLayer.Columns.Add(new FeatureSourceColumn("Distance"));
shortestLineLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = GetTextStyle();
shortestLineLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.OuterPen.Width = 5;
shortestLineLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.OuterPen.Color = GeoColor.FromArgb(180, 255, 155, 13);
shortestLineLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
layerOverlay.Layers.Add("ShortestLineLayer", shortestLineLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
InMemoryFeatureLayer shortestLineLayer = (InMemoryFeatureLayer)layerOverlay.Layers["ShortestLineLayer"];
BaseShape areaShape1 = sourceLayer.InternalFeatures["AreaShape1"].GetShape();
BaseShape areaShape2 = sourceLayer.InternalFeatures["AreaShape2"].GetShape();
MultilineShape multiLineShape = areaShape1.GetShortestLineTo(areaShape2, GeographyUnit.Meter);
Feature feature = new Feature(multiLineShape.GetWellKnownBinary());
feature.ColumnValues["Distance"] = string.Format(CultureInfo.InvariantCulture, "Distance is {0:N2} miles.", multiLineShape.GetLength(GeographyUnit.Meter, DistanceUnit.Mile));
shortestLineLayer.InternalFeatures.Clear();
shortestLineLayer.InternalFeatures.Add(feature);
layerOverlay.Refresh();
}
private static TextStyle GetTextStyle()
{
TextStyle textStyle = new TextStyle();
textStyle.TextColumnName = "Distance";
textStyle.Font = new GeoFont("Arial", 15);
textStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels;
textStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping;
textStyle.TextSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);
textStyle.HaloPen = new GeoPen(new GeoSolidBrush(GeoColor.StandardColors.White), 1);
textStyle.PointPlacement = PointPlacement.LowerCenter;
textStyle.YOffsetInPixel = -8;
return textStyle;
}
}
}
====LineOnLineViewController.cs====
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class LineOnLineViewController : DetailViewController
{
public LineOnLineViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad1;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.InnerPen.Brush = new GeoSolidBrush(GeoColor.FromArgb(180, 255, 155, 13));
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.StandardColors.Transparent, GeoColor.StandardColors.Black, 18);
foreach (var feature in GeometrySource)
{
sourceLayer.InternalFeatures.Add(feature);
}
InMemoryFeatureLayer lineOnLineLayer = new InMemoryFeatureLayer();
lineOnLineLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad1;
lineOnLineLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.InnerPen.Brush = new GeoSolidBrush(GeoColor.StandardColors.Blue);
lineOnLineLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle.OuterPen.Brush = new GeoSolidBrush(GeoColor.StandardColors.Red);
lineOnLineLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
layerOverlay.Layers.Add("LineOnLineLayer", lineOnLineLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer lineOnLineLayer = (InMemoryFeatureLayer)layerOverlay.Layers["LineOnLineLayer"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
Feature firstFeature = sourceLayer.InternalFeatures.FirstOrDefault();
if (firstFeature != null)
{
LineShape lineShape = (LineShape)firstFeature.GetShape();
lineOnLineLayer.InternalFeatures.Clear();
LineBaseShape resultLine = lineShape.GetLineOnALine(StartingPoint.FirstPoint, 80, 450, GeographyUnit.Meter, DistanceUnit.Meter);
lineOnLineLayer.InternalFeatures.Add(new Feature(resultLine));
layerOverlay.Refresh();
}
}
}
}
====RotateViewController.cs====
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class RotateViewController : DetailViewController
{
public RotateViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
sourceLayer.InternalFeatures.Add(GeometrySource.FirstOrDefault());
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
Feature sourceFeature = sourceLayer.InternalFeatures.FirstOrDefault();
if (sourceFeature != null && sourceFeature.GetShape().CanRotate)
{
PointShape center = sourceFeature.GetBoundingBox().GetCenterPoint();
BaseShape rotatedShape = BaseShape.Rotate(sourceFeature.GetShape(), center, 22.5f);
sourceLayer.InternalFeatures.Clear();
sourceLayer.InternalFeatures.Add(new Feature(rotatedShape));
layerOverlay.Refresh();
}
}
}
}
====ScaleViewController.cs====
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class ScaleViewController : DetailViewController
{
public ScaleViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
Feature sourceFeature = GeometrySource.First();
sourceLayer.InternalFeatures.Add(sourceFeature.Id, sourceFeature);
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
Feature sourceFeature = sourceLayer.InternalFeatures.First();
sourceLayer.Open();
sourceLayer.EditTools.BeginTransaction();
sourceLayer.EditTools.ScaleUp(sourceFeature.Id, 10);
sourceLayer.EditTools.CommitTransaction();
layerOverlay.Refresh();
}
}
}
====SimplifyViewContoller.cs====
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class SimplifyViewController : DetailViewController
{
private static readonly double simplifyTolerence = 30;
public SimplifyViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
Feature feature = GeometrySource.FirstOrDefault();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
sourceLayer.InternalFeatures.Add(feature);
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
AreaBaseShape sourceShape = (AreaBaseShape)sourceLayer.InternalFeatures.FirstOrDefault().GetShape();
SimplificationType simplificationType = SimplificationType.DouglasPeucker;
MultipolygonShape multipolygonShape = sourceShape.Simplify(GeographyUnit.Meter, simplifyTolerence, DistanceUnit.Meter, simplificationType);
sourceLayer.InternalFeatures.Clear();
sourceLayer.InternalFeatures.Add(new Feature(multipolygonShape));
layerOverlay.Refresh();
}
}
}
====SnapGPSViewController.cs====
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class SnapGPSViewController : DetailViewController
{
private InMemoryFeatureLayer resultLayer;
private InMemoryFeatureLayer inProcessLayer;
public SnapGPSViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InitializeLayers();
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", inProcessLayer);
layerOverlay.Layers.Add("PointLayer", resultLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
resultLayer.InternalFeatures.Clear();
if (resultLayer.InternalFeatures.Count == 0)
{
inProcessLayer.IsVisible = false;
MultilineShape multilineShape = inProcessLayer.InternalFeatures[0].GetShape() as MultilineShape;
Feature[] allFeatures = { inProcessLayer.InternalFeatures[1] };
Collection matchFeatures = new Collection();
double tolerance = 100;
foreach (var item in allFeatures)
{
double tempDistance = multilineShape.GetShortestLineTo(item, GeographyUnit.Meter).GetLength(GeographyUnit.Meter, DistanceUnit.Feet);
if (tempDistance < tolerance)
{
matchFeatures.Add(item);
}
}
resultLayer.InternalFeatures.Add(new Feature(multilineShape));
foreach (var feature in matchFeatures)
{
Collection vertices = new Collection();
PointShape resultShape = multilineShape.GetClosestPointTo(feature, GeographyUnit.Meter);
MultilineShape tempMultilineShape = feature.GetShape() as MultilineShape;
if (tempMultilineShape != null)
{
vertices.Add(new Vertex(resultShape));
double offsetX = resultShape.X - tempMultilineShape.Lines[0].Vertices[0].X;
double offsetY = resultShape.Y - tempMultilineShape.Lines[0].Vertices[0].Y;
double x = offsetX + tempMultilineShape.Lines[0].Vertices[1].X;
double y = offsetY + tempMultilineShape.Lines[0].Vertices[1].Y;
vertices.Add(new Vertex(x, y));
}
resultLayer.InternalFeatures.Add(new Feature(new MultilineShape(new[] { new LineShape(vertices) })));
}
foreach (var feature in allFeatures)
{
if (!matchFeatures.Contains(feature))
{
resultLayer.InternalFeatures.Add(feature);
}
}
CollectVertices(resultLayer.InternalFeatures.Skip(1).ToArray(), resultLayer);
}
layerOverlay.Refresh();
}
private void InitializeLayers()
{
inProcessLayer = new InMemoryFeatureLayer();
inProcessLayer.Open();
inProcessLayer.Columns.Add(new FeatureSourceColumn("Name", "character", 100));
resultLayer = new InMemoryFeatureLayer();
resultLayer.Open();
resultLayer.Columns.Add(new FeatureSourceColumn("Name", "character", 100));
GeoColor semiTransparentOrange = GeoColor.FromArgb(140, 255, 155, 13);
inProcessLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Transparent, GeoColor.StandardColors.Black);
inProcessLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(semiTransparentOrange, 3, false);
inProcessLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("Name", "Arial", 9, DrawingFontStyles.Regular, GeoColor.StandardColors.Black);
inProcessLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
foreach (var feature in GeometrySource)
{
inProcessLayer.InternalFeatures.Add(feature);
}
resultLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = inProcessLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle;
resultLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(semiTransparentOrange, 4, false);
resultLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
CollectVertices(inProcessLayer.InternalFeatures.Skip(1).ToArray(), resultLayer);
}
private static void CollectVertices(IEnumerable features, InMemoryFeatureLayer targetFeatureLayer)
{
foreach (var multilineShape in features.Select(f => f.GetShape()).OfType().Where(s => s != null))
{
foreach (var vertex in multilineShape.Lines.SelectMany(l => l.Vertices))
{
EllipseShape ellipseShape = new EllipseShape(new PointShape(vertex), 30);
targetFeatureLayer.InternalFeatures.Add(new Feature(ellipseShape));
}
}
}
}
}
====SplitViewController.cs====
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class SplitViewController : DetailViewController
{
public SplitViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
WorldMapKitOverlay worldOverlay = new WorldMapKitOverlay();
worldOverlay.Projection = WorldMapKitProjection.SphericalMercator;
MapView.Overlays.Add(worldOverlay);
MapView.Refresh();
}
}
}
====UnionViewController.cs====
using System.Collections.Generic;
using System.Linq;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
namespace GeometricFunctions
{
public class UnionViewController : DetailViewController
{
public UnionViewController()
{ }
protected override void InitializeMap()
{
MapView.MapUnit = GeographyUnit.Meter;
MapView.CurrentExtent = GetBoundingBox();
InMemoryFeatureLayer sourceLayer = new InMemoryFeatureLayer();
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Width = 3;
sourceLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.SimpleColors.Black;
sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
foreach (Feature feature in GeometrySource)
{
sourceLayer.InternalFeatures.Add(feature);
}
LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;
layerOverlay.Layers.Add("SourceLayer", sourceLayer);
MapView.Overlays.Add("LayerOverlay", layerOverlay);
MapView.Refresh();
}
protected override void Execute()
{
LayerOverlay layerOverlay = (LayerOverlay)MapView.Overlays["LayerOverlay"];
InMemoryFeatureLayer sourceLayer = (InMemoryFeatureLayer)layerOverlay.Layers["SourceLayer"];
if (sourceLayer.InternalFeatures.Count > 1)
{
IEnumerable areaBaseShapes = sourceLayer.InternalFeatures.Select(f => f.GetShape()).OfType();
AreaBaseShape unionedAreaBaseShape = AreaBaseShape.Union(areaBaseShapes);
sourceLayer.InternalFeatures.Clear();
sourceLayer.InternalFeatures.Add(new Feature(unionedAreaBaseShape));
layerOverlay.Refresh();
}
}
}
}
====DetailViewController.cs====
using CoreGraphics;
using Foundation;
using System;
using System.Collections.ObjectModel;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.iOSEdition;
using UIKit;
namespace GeometricFunctions
{
[Register("DetailViewController")]
public class DetailViewController : UIViewController
{
private GeoColor brushColor;
private UIBarButtonItem settingButton;
private Collection geometrySource;
protected MapView MapView;
public Action DetailButtonClick;
protected DetailViewController()
{
geometrySource = new Collection();
}
private void InitializeToolbar()
{
brushColor = GeoColor.FromArgb(100, 0, 147, 221);
UIBarButtonItem detailButton = new UIBarButtonItem(UIImage.FromBundle("detail40"), UIBarButtonItemStyle.Plain,
OnDetailItemClick);
detailButton.TintColor = UIColor.Black;
NavigationItem.SetLeftBarButtonItem(detailButton, true);
settingButton = new UIBarButtonItem("GO", UIBarButtonItemStyle.Plain, OnGoItemClick);
settingButton.TintColor = UIColor.Black;
NavigationItem.SetRightBarButtonItems(new[] { settingButton }, true);
}
public Collection GeometrySource
{
get { return geometrySource; }
}
protected GeoColor BrushColor
{
get { return brushColor; }
}
protected RectangleShape GetBoundingBox()
{
RectangleShape mapExtent = (RectangleShape)ExtentHelper.GetBoundingBoxOfItems(GeometrySource).CloneDeep();
mapExtent.ScaleUp(140);
return mapExtent;
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
View.AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth;
MapView = new MapView(View.Frame);
MapView.BackgroundColor = UIColor.FromRGB(244, 242, 238);
MapView.MapTools.ZoomMapTool.Center = new CGPoint(MapView.MapTools.ZoomMapTool.Center.X + 10, MapView.MapTools.ZoomMapTool.Center.Y + 55);
LoadBackgroundLayer();
InitializeMap();
InitializeToolbar();
View.AddSubview(MapView);
}
public override void WillAnimateRotation(UIInterfaceOrientation toInterfaceOrientation, double duration)
{
base.WillAnimateRotation(toInterfaceOrientation, duration);
double resolution = Math.Max(MapView.CurrentExtent.Width / MapView.Frame.Width, MapView.CurrentExtent.Height / MapView.Frame.Height);
MapView.Frame = View.Bounds;
MapView.CurrentExtent = GetExtentRetainScale(MapView.CurrentExtent.GetCenterPoint(), MapView.Frame, resolution);
MapView.Refresh();
}
protected virtual void InitializeMap() { }
protected virtual void Execute() { }
private void LoadBackgroundLayer()
{
WorldMapKitOverlay worldOverlay = new WorldMapKitOverlay();
worldOverlay.TileType = TileType.MultiTile;
worldOverlay.Projection = WorldMapKitProjection.SphericalMercator;
MapView.Overlays.Add("WMK", worldOverlay);
}
private static RectangleShape GetExtentRetainScale(PointShape currentLocationInMecator, CGRect frame, double resolution)
{
double left = currentLocationInMecator.X - resolution * frame.Width * .5;
double right = currentLocationInMecator.X + resolution * frame.Width * .5;
double top = currentLocationInMecator.Y + resolution * frame.Height * .5;
double bottom = currentLocationInMecator.Y - resolution * frame.Height * .5;
return new RectangleShape(left, top, right, bottom);
}
private void OnGoItemClick(object sender, EventArgs e)
{
settingButton.Enabled = false;
Execute();
settingButton.Enabled = true;
}
private void OnDetailItemClick(object sender, EventArgs e)
{
if (DetailButtonClick != null) DetailButtonClick();
}
}
}
====SliderViewController.cs====
using CoreGraphics;
using MonoTouch.Dialog;
using Foundation;
using MediaPlayer;
using ObjCRuntime;
using UIKit;
using System;
using System.Drawing;
namespace GeometricFunctions
{
public enum FlyOutPosition
{
Left = 0, // default
Right
};
[Register("SilderViewController")]
public class SliderViewController : UIViewController
{
private const float sidebarFlickVelocity = 1000.0f;
private const int menuWidth = 240;
private bool hideShadow;
private UIButton closeButton;
private FlyOutPosition position;
private DialogViewController leftNavigation;
private int selectedIndex;
private UIView shadowView;
private nfloat startX;
private UIView statusImage;
private UIViewController[] viewControllers;
private bool isIos7;
private bool isOpen;
public event UITouchEventArgs ShouldReceiveTouch;
public Action SelectedIndexChanged;
public SliderViewController(IntPtr handle)
: base(handle)
{
Initialize();
}
public SliderViewController(UITableViewStyle navigationStyle = UITableViewStyle.Plain)
{
Initialize(navigationStyle);
}
public FlyOutPosition Position
{
get
{
return position;
}
set
{
position = value;
shadowView.Layer.ShadowOffset = new CGSize(Position == FlyOutPosition.Left ? -5 : 5, -1);
}
}
public bool AlwaysShowLandscapeMenu { get; set; }
public bool ForceMenuOpen { get; set; }
public bool HideShadow
{
get { return hideShadow; }
set
{
if (value == hideShadow)
return;
hideShadow = value;
if (hideShadow)
{
if (mainView != null)
View.InsertSubviewBelow(shadowView, mainView);
}
else
{
shadowView.RemoveFromSuperview();
}
}
}
public UIColor ShadowViewColor
{
get { return shadowView.BackgroundColor; }
set { shadowView.BackgroundColor = value; }
}
public UIViewController CurrentViewController { get; set; }
public UIView mainView
{
get
{
if (CurrentViewController == null)
return null;
return CurrentViewController.View;
}
}
public RootElement NavigationRoot
{
get { return leftNavigation.Root; }
set { EnsureInvokedOnMainThread(delegate { leftNavigation.Root = value; }); }
}
public UITableView NavigationTableView
{
get { return leftNavigation.TableView; }
}
public UIViewController[] ViewControllers
{
get { return viewControllers; }
set
{
EnsureInvokedOnMainThread(delegate
{
viewControllers = value;
NavigationItemSelected(GetIndexPath(SelectedIndex));
});
}
}
public bool IsOpen
{
get
{
if (Position == FlyOutPosition.Left)
{
return mainView.Frame.X == menuWidth;
}
else
{
return mainView.Frame.X == -menuWidth;
}
}
set
{
isOpen = value;
if (value)
HideMenu();
else
ShowMenu();
}
}
public bool ShouldStayOpen
{
get
{
if (ForceMenuOpen || (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad &&
AlwaysShowLandscapeMenu && (InterfaceOrientation == UIInterfaceOrientation.LandscapeLeft
|| InterfaceOrientation == UIInterfaceOrientation.LandscapeRight)))
return true;
return false;
}
}
public int SelectedIndex
{
get { return selectedIndex; }
set
{
if (selectedIndex == value)
return;
selectedIndex = value;
EnsureInvokedOnMainThread(delegate { NavigationItemSelected(value); });
}
}
public bool DisableRotation { get; set; }
public override bool ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation)
{
if (DisableRotation)
return toInterfaceOrientation == InterfaceOrientation;
bool theReturn = CurrentViewController == null
? true
: CurrentViewController.ShouldAutorotateToInterfaceOrientation(toInterfaceOrientation);
return theReturn;
}
public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
{
if (CurrentViewController != null)
return CurrentViewController.GetSupportedInterfaceOrientations();
return UIInterfaceOrientationMask.All;
}
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
CGRect navFrame = View.Bounds;
// navFrame.Y += UIApplication.SharedApplication.StatusBarFrame.Height;
// navFrame.Height -= navFrame.Y;
//this.statusbar
navFrame.Width = menuWidth;
if (Position == FlyOutPosition.Right)
navFrame.X = mainView.Frame.Width - menuWidth;
if (leftNavigation.View.Frame != navFrame)
leftNavigation.View.Frame = navFrame;
}
public override void ViewWillAppear(bool animated)
{
CGRect navFrame = leftNavigation.View.Frame;
navFrame.Width = menuWidth;
if (Position == FlyOutPosition.Right)
navFrame.X = mainView.Frame.Width - menuWidth;
navFrame.Location = PointF.Empty;
leftNavigation.View.Frame = navFrame;
View.BackgroundColor = NavigationTableView.BackgroundColor;
var frame = mainView.Frame;
setViewSize();
SetLocation(frame);
base.ViewWillAppear(animated);
}
private void Initialize(UITableViewStyle navigationStyle = UITableViewStyle.Plain)
{
DisableStatusBarMoving = true;
statusImage = new UIView { ClipsToBounds = true }.SetAccessibilityId("statusbar");
leftNavigation = new DialogViewController(navigationStyle, null);
leftNavigation.OnSelection += NavigationItemSelected;
CGRect navFrame = leftNavigation.View.Frame;
navFrame.Width = menuWidth;
if (Position == FlyOutPosition.Right)
navFrame.X = mainView.Frame.Width - menuWidth;
leftNavigation.View.Frame = navFrame;
View.AddSubview(leftNavigation.View);
var version = new Version(UIDevice.CurrentDevice.SystemVersion);
isIos7 = version.Major >= 7;
if (isIos7)
{
leftNavigation.TableView.TableHeaderView = new UIView(new CGRect(0, 0, 320, 22))
{
BackgroundColor = UIColor.Clear
};
leftNavigation.TableView.SectionHeaderHeight = 50;
}
leftNavigation.TableView.TableFooterView = new UIView(new CGRect(0, 0, 100, 100)) { BackgroundColor = UIColor.Clear };
leftNavigation.TableView.ScrollsToTop = false;
shadowView = new UIView();
shadowView.BackgroundColor = UIColor.White;
shadowView.Layer.ShadowOffset = new CGSize(Position == FlyOutPosition.Left ? -5 : 5, -1);
shadowView.Layer.ShadowColor = UIColor.Black.CGColor;
shadowView.Layer.ShadowOpacity = .75f;
closeButton = new UIButton();
closeButton.TouchUpInside += delegate { HideMenu(); };
AlwaysShowLandscapeMenu = true;
View.AddGestureRecognizer(new OpenMenuGestureRecognizer(DragContentView, shouldReceiveTouch));
}
private void DragContentView(UIPanGestureRecognizer panGesture)
{
//if (ShouldStayOpen || mainView == null)
if (mainView == null)
return;
if (!HideShadow)
View.InsertSubviewBelow(shadowView, mainView);
leftNavigation.View.Hidden = false;
CGRect frame = mainView.Frame;
shadowView.Frame = frame;
nfloat translation = panGesture.TranslationInView(View).X;
if (panGesture.State == UIGestureRecognizerState.Began)
{
startX = frame.X;
}
else if (panGesture.State == UIGestureRecognizerState.Changed)
{
frame.X = translation + startX;
if (Position == FlyOutPosition.Left)
{
if (frame.X < 0)
frame.X = 0;
else if (frame.X > menuWidth)
frame.X = menuWidth;
}
else
{
if (frame.X > 0)
frame.X = 0;
else if (frame.X < -menuWidth)
frame.X = -menuWidth;
}
SetLocation(frame);
}
else if (panGesture.State == UIGestureRecognizerState.Ended)
{
nfloat velocity = panGesture.VelocityInView(View).X;
nfloat newX = translation + startX;
bool show = Math.Abs(velocity) > sidebarFlickVelocity ? velocity > 0 : newX > (menuWidth / 2);
if (Position == FlyOutPosition.Right)
{
show = Math.Abs(velocity) > sidebarFlickVelocity ? velocity < 0 : newX < -(menuWidth / 2);
}
if (show)
{
ShowMenu();
}
else
{
HideMenu();
}
}
}
private bool shouldReceiveTouch(UIGestureRecognizer gesture, UITouch touch)
{
if (ShouldReceiveTouch != null)
return ShouldReceiveTouch(gesture, touch);
return true;
}
private void NavigationItemSelected(NSIndexPath indexPath)
{
int index = GetIndex(indexPath);
NavigationItemSelected(index);
}
private void NavigationItemSelected(int index)
{
if (selectedIndex == index && CurrentViewController != null)
{
HideMenu();
return;
}
selectedIndex = index;
if (viewControllers == null || viewControllers.Length <= index || index < 0)
{
if (SelectedIndexChanged != null)
SelectedIndexChanged();
return;
}
if (ViewControllers[index] == null)
{
if (SelectedIndexChanged != null)
SelectedIndexChanged();
return;
}
if (!DisableStatusBarMoving)
//if (!DisableStatusBarMoving && !ShouldStayOpen)
UIApplication.SharedApplication.SetStatusBarHidden(false, UIStatusBarAnimation.Fade);
//bool isOpen = false;
//if (mainView != null)
//{
// mainView.RemoveFromSuperview();
// isOpen = IsOpen;
//}
//isOpen = false;
CurrentViewController = ViewControllers[SelectedIndex];
CGRect frame = View.Bounds;
//if (isOpen || ShouldStayOpen)
if (isOpen)
{
frame.X = Position == FlyOutPosition.Left ? menuWidth : -menuWidth;
frame.Width = frame.Width - frame.X;
}
//setViewSize();
SetLocation(frame);
View.AddSubview(mainView);
AddChildViewController(CurrentViewController);
//if (!ShouldStayOpen)
HideMenu();
if (SelectedIndexChanged != null)
SelectedIndexChanged();
}
//bool isOpen {get{ return mainView.Frame.X == menuWidth; }}
private void ShowMenu()
{
if (mainView == null)
return;
EnsureInvokedOnMainThread(delegate
{
//navigation.ReloadData ();
//isOpen = true;
leftNavigation.View.Hidden = false;
closeButton.Frame = mainView.Frame;
shadowView.Frame = mainView.Frame;
var statusFrame = statusImage.Frame;
statusFrame.X = mainView.Frame.X;
statusImage.Frame = statusFrame;
//if (!ShouldStayOpen)
View.AddSubview(closeButton);
if (!HideShadow)
View.InsertSubviewBelow(shadowView, mainView);
UIView.BeginAnimations("slideMenu");
UIView.SetAnimationCurve(UIViewAnimationCurve.EaseIn);
UIView.SetAnimationDuration(.3);
setViewSize();
CGRect frame = mainView.Frame;
frame.X = Position == FlyOutPosition.Left ? menuWidth : -menuWidth;
SetLocation(frame);
setViewSize();
frame = mainView.Frame;
shadowView.Frame = frame;
closeButton.Frame = frame;
statusFrame.X = mainView.Frame.X;
statusImage.Frame = statusFrame;
UIView.CommitAnimations();
isOpen = true;
});
}
private void setViewSize()
{
CGRect frame = View.Bounds;
//frame.Location = PointF.Empty;
//if (ShouldStayOpen)
if (isOpen)
frame.Width -= menuWidth;
if (mainView.Bounds == frame)
return;
mainView.Bounds = frame;
}
private void SetLocation(CGRect frame)
{
mainView.Layer.AnchorPoint = new CGPoint(.5f, .5f);
frame.Y = 0;
if (mainView.Frame.Location == frame.Location)
return;
frame.Size = mainView.Frame.Size;
var center = new CGPoint(frame.Left + frame.Width / 2,
frame.Top + frame.Height / 2);
mainView.Center = center;
shadowView.Center = center;
if (Math.Abs(frame.X - 0) > float.Epsilon)
{
getStatus();
var statusFrame = statusImage.Frame;
statusFrame.X = mainView.Frame.X;
statusImage.Frame = statusFrame;
}
}
private bool DisableStatusBarMoving { get; set; }
private void getStatus()
{
//if (DisableStatusBarMoving || !isIos7 || statusImage.Superview != null || ShouldStayOpen)
if (DisableStatusBarMoving || !isIos7 || statusImage.Superview != null)
return;
var image = captureStatusBarImage();
if (image == null)
return;
this.View.AddSubview(statusImage);
foreach (var view in statusImage.Subviews)
view.RemoveFromSuperview();
statusImage.AddSubview(image);
statusImage.Frame = UIApplication.SharedApplication.StatusBarFrame;
UIApplication.SharedApplication.StatusBarHidden = true;
}
private UIView captureStatusBarImage()
{
try
{
UIView screenShot = UIScreen.MainScreen.SnapshotView(false);
return screenShot;
}
catch (Exception ex)
{
return null;
}
}
private void hideStatus()
{
if (!isIos7)
return;
statusImage.RemoveFromSuperview();
UIApplication.SharedApplication.StatusBarHidden = false;
}
private void HideMenu()
{
//if (mainView == null || mainView.Frame.X == 0)
if (mainView == null)
return;
EnsureInvokedOnMainThread(delegate
{
isOpen = false;
leftNavigation.FinishSearch();
closeButton.RemoveFromSuperview();
shadowView.Frame = mainView.Frame;
var statusFrame = statusImage.Frame;
statusFrame.X = mainView.Frame.X;
statusImage.Frame = statusFrame;
UIView.Animate(.5, () =>
{
UIView.SetAnimationCurve(UIViewAnimationCurve.EaseInOut);
CGRect frame = View.Bounds;
frame.X = 0;
setViewSize();
SetLocation(frame);
shadowView.Frame = frame;
statusFrame.X = 0;
statusImage.Frame = statusFrame;
}, hideComplete);
});
}
[Export("animationEnded")]
private void hideComplete()
{
hideStatus();
shadowView.RemoveFromSuperview();
leftNavigation.View.Hidden = true;
}
private void ResignFirstResponders(UIView view)
{
if (view.Subviews == null)
return;
foreach (UIView subview in view.Subviews)
{
if (subview.IsFirstResponder)
subview.ResignFirstResponder();
ResignFirstResponders(subview);
}
}
public void ToggleMenu()
{
EnsureInvokedOnMainThread(delegate
{
if (!IsOpen && CurrentViewController != null && CurrentViewController.IsViewLoaded)
ResignFirstResponders(CurrentViewController.View);
if (IsOpen)
HideMenu();
else
ShowMenu();
});
}
private int GetIndex(NSIndexPath indexPath)
{
int section = 0;
int rowCount = 0;
while (section < indexPath.Section)
{
rowCount += leftNavigation.Root[section].Count;
section++;
}
return rowCount + indexPath.Row;
}
private NSIndexPath GetIndexPath(int index)
{
if (leftNavigation.Root == null)
return NSIndexPath.FromRowSection(0, 0);
int currentCount = 0;
int section = 0;
foreach (Section element in leftNavigation.Root)
{
if (element.Count + currentCount > index)
break;
currentCount += element.Count;
section++;
}
int row = index - currentCount;
return NSIndexPath.FromRowSection(row, section);
}
//public override void DidRotate(UIInterfaceOrientation fromInterfaceOrientation)
//{
// base.DidRotate(fromInterfaceOrientation);
// if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone)
// return;
// switch (InterfaceOrientation)
// {
// case UIInterfaceOrientation.LandscapeLeft:
// case UIInterfaceOrientation.LandscapeRight:
// ShowMenu();
// break;
// default:
// HideMenu();
// break;
// }
//}
private void EnsureInvokedOnMainThread(Action action)
{
if (NSThread.Current.IsMainThread)
{
action();
return;
}
BeginInvokeOnMainThread(() =>
action()
);
}
}
internal static class Helpers
{
static readonly IntPtr selAccessibilityIdentifier_Handle = Selector.GetHandle("accessibilityIdentifier");
public static UIView SetAccessibilityId(this UIView view, string id)
{
var nsId = NSString.CreateNative(id);
//Messaging.void_objc_msgSend_IntPtr(view.Handle, selAccessibilityIdentifier_Handle, nsId);
return view;
}
}
internal class OpenMenuGestureRecognizer : UIPanGestureRecognizer
{
public OpenMenuGestureRecognizer(Action callback, Func shouldReceiveTouch)
: base(callback)
{
ShouldReceiveTouch += (sender, touch) =>
{
//Ugly hack to ignore touches that are on a cell that is moving...
bool isMovingCell = touch.View.ToString().IndexOf("UITableViewCellReorderControl", StringComparison.InvariantCultureIgnoreCase) > -1;
if (touch.View is UISlider || touch.View is MPVolumeView || isMovingCell)
return false;
return shouldReceiveTouch(sender, touch);
};
}
}
}
====AssemblyInfo.cs====
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly:|AssemblyTitle("AnalyzingVisualization")]
[assembly: AssemblyDescription("")]
[assembly:|AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly:|AssemblyProduct("AnalyzingVisualization")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly:|AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly:|ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly:|Guid("84efb68d-6dbd-4d6e-a2e8-f4ef414d8ee0")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly:|AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("9.0.0.0")]
[assembly:|AssemblyFileVersion("9.0.0.0")]