/// <summary> /// Create a geodetic ellipse /// </summary> private IGeometry DrawEllipse() { try { var ellipticArc = (IConstructGeodetic) new Polyline(); double bearing; if (AzimuthType == AzimuthTypes.Mils) { bearing = GetAzimuthAsDegrees(); } else { bearing = Azimuth; } ellipticArc.ConstructGeodesicEllipse(Point1, GetLinearUnit(), MajorAxisDistance, MinorAxisDistance, bearing, esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.01); var line = ellipticArc as IPolyline; if (line != null) { var color = (IColor) new RgbColorClass() { Red = 255 }; IDictionary <String, System.Object> ellipseAttributes = new Dictionary <String, System.Object>(); ellipseAttributes.Add("majoraxis", MajorAxisDistance); ellipseAttributes.Add("minoraxis", MinorAxisDistance); ellipseAttributes.Add("azimuth", Azimuth); ellipseAttributes.Add("centerx", Point1.X); ellipseAttributes.Add("centery", Point1.Y); ellipseAttributes.Add("distanceunit", LineDistanceType.ToString()); ellipseAttributes.Add("angleunit", AzimuthType.ToString()); AddGraphicToMap((IGeometry)line, color, attributes: ellipseAttributes); //Convert ellipse polyline to polygon var newPoly = PolylineToPolygon((IPolyline)ellipticArc); if (newPoly != null) { //Get centroid of polygon var area = newPoly as IArea; //Add text using centroid point DistanceTypes dtVal = (DistanceTypes)LineDistanceType; //Get line distance type AzimuthTypes atVal = (AzimuthTypes)AzimuthType; //Get azimuth type EllipseTypes ellipseType = EllipseType; double majAxisDist = majorAxisDistance * 2; double minAxisDist = minorAxisDistance * 2; if (area != null) { AddTextToMap(area.LabelPoint, string.Format("{0}:{1} {2}{3}{4}:{5} {6}{7}{8}:{9} {10}", "Major Axis", Math.Round(majAxisDist, 2), dtVal.ToString(), Environment.NewLine, "Minor Axis", Math.Round(minAxisDist, 2), dtVal.ToString(), Environment.NewLine, "Orientation Angle", Math.Round(azimuth, 2), atVal.ToString())); } } } return((IGeometry)line); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }