Example #1
0
        /// <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);
            }
        }