Esempio n. 1
0
        private async void CreateEllipseFeature(Geometry geom, EllipseAttributes ellipseAttributes)
        {
            string message = string.Empty;
            await QueuedTask.Run(async() =>
                                 message = await AddFeatureToLayer(geom, ellipseAttributes));

            RaisePropertyChanged(() => HasMapGraphics);

            if (!string.IsNullOrEmpty(message))
            {
                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(message,
                                                                 DistanceAndDirectionLibrary.Properties.Resources.ErrorFeatureCreateTitle);
            }
        }
Esempio n. 2
0
        private Geometry DrawEllipse()
        {
            if (Point1 == null || double.IsNaN(MajorAxisDistance) || double.IsNaN(MinorAxisDistance))
            {
                return(null);
            }

            try
            {
                var nameConverter = new EnumToFriendlyNameConverter();
                var param         = new GeodesicEllipseParameter();

                param.Center          = new Coordinate2D(Point1);
                param.AxisDirection   = GetRadiansFrom360Degrees(GetAzimuthAsDegrees());
                param.LinearUnit      = GetLinearUnit(LineDistanceType);
                param.OutGeometryType = GeometryType.Polygon;
                param.SemiAxis1Length = MajorAxisDistance;
                param.SemiAxis2Length = MinorAxisDistance;
                param.VertexCount     = VertexCount;

                var geom = GeometryEngine.Instance.GeodesicEllipse(param, MapView.Active.Map.SpatialReference);

                // Hold onto the attributes in case user saves graphics to file later
                var displayValue = nameConverter.Convert(LineDistanceType, typeof(string), new object(), CultureInfo.CurrentCulture);

                EllipseAttributes ellipseAttributes = new EllipseAttributes()
                {
                    mapPoint     = Point1,
                    minorAxis    = MinorAxisDistance * 2, // TRICKY: Label/Attribute always shows the "full" value
                    majorAxis    = MajorAxisDistance * 2,
                    angle        = Azimuth,
                    angleunit    = AzimuthType.ToString(),
                    centerx      = Point1.X,
                    centery      = Point1.Y,
                    distanceunit = displayValue.ToString()
                };

                CreateEllipseFeature(geom, ellipseAttributes);

                return((Geometry)geom);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return(null);
            }
        }
Esempio n. 3
0
        private Geometry DrawEllipse()
        {
            if (Point1 == null || double.IsNaN(MajorAxisDistance) || double.IsNaN(MinorAxisDistance))
            {
                return(null);
            }

            try
            {
                var param = new GeodesicEllipseParameter();

                param.Center          = new Coordinate2D(Point1);
                param.AxisDirection   = GetRadiansFrom360Degrees(GetAzimuthAsDegrees());
                param.LinearUnit      = GetLinearUnit(LineDistanceType);
                param.OutGeometryType = GeometryType.Polygon;
                param.SemiAxis1Length = MajorAxisDistance;
                param.SemiAxis2Length = MinorAxisDistance;
                param.VertexCount     = VertexCount;

                var geom = GeometryEngine.Instance.GeodesicEllipse(param, MapView.Active.Map.SpatialReference);

                // Hold onto the attributes in case user saves graphics to file later
                EllipseAttributes ellipseAttributes = new EllipseAttributes()
                {
                    mapPoint  = Point1, minorAxis = MinorAxisDistance,
                    majorAxis = MajorAxisDistance, angle = Azimuth,
                    angleunit = AzimuthType.ToString(), centerx = Point1.X,
                    centery   = Point1.Y, distanceunit = LineDistanceType.ToString()
                };

                CreateEllipseFeature(geom, ellipseAttributes);

                return((Geometry)geom);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return(null);
            }
        }
Esempio n. 4
0
        private async Task <string> AddFeatureToLayer(Geometry geom, EllipseAttributes attributes)
        {
            string message = String.Empty;

            if (attributes == null)
            {
                message = "Attributes are Empty"; // For debug does not need to be resource
                return(message);
            }

            FeatureClass ellipseFeatureClass = await GetFeatureClass(addToMapIfNotPresent : true);

            if (ellipseFeatureClass == null)
            {
                message = DistanceAndDirectionLibrary.Properties.Resources.ErrorFeatureClassNotFound + this.GetLayerName();
                return(message);
            }

            bool creationResult = false;

            FeatureClassDefinition ellipseDefinition = ellipseFeatureClass.GetDefinition();

            EditOperation editOperation = new EditOperation();

            editOperation.Name = "Ellipse Feature Insert";
            editOperation.Callback(context =>
            {
                try
                {
                    RowBuffer rowBuffer = ellipseFeatureClass.CreateRowBuffer();

                    if (ellipseDefinition.FindField("Major") >= 0)
                    {
                        rowBuffer["Major"] = attributes.majorAxis;       // Text
                    }
                    if (ellipseDefinition.FindField("Minor") >= 0)
                    {
                        rowBuffer["Minor"] = attributes.minorAxis;       // Double
                    }
                    if (ellipseDefinition.FindField("DistUnit") >= 0)
                    {
                        rowBuffer["DistUnit"] = attributes.distanceunit; // Text
                    }
                    if (ellipseDefinition.FindField("Angle") >= 0)
                    {
                        rowBuffer["Angle"] = attributes.angle;           // Double
                    }
                    if (ellipseDefinition.FindField("AngleUnit") >= 0)
                    {
                        rowBuffer["AngleUnit"] = attributes.angleunit;   // Text
                    }
                    if (ellipseDefinition.FindField("CenterX") >= 0)
                    {
                        rowBuffer["CenterX"] = attributes.centerx;       // Double
                    }
                    if (ellipseDefinition.FindField("CenterY") >= 0)
                    {
                        rowBuffer["CenterY"] = attributes.centery;       // Double
                    }
                    rowBuffer["Shape"] = GeometryEngine.Instance.Project(geom, ellipseDefinition.GetSpatialReference());

                    Feature feature = ellipseFeatureClass.CreateRow(rowBuffer);
                    feature.Store();

                    //To indicate that the attribute table has to be updated
                    context.Invalidate(feature);
                }
                catch (GeodatabaseException geodatabaseException)
                {
                    message = geodatabaseException.Message;
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                }
            }, ellipseFeatureClass);

            await QueuedTask.Run(async() =>
            {
                creationResult = await editOperation.ExecuteAsync();
            });

            if (!creationResult)
            {
                message = editOperation.ErrorMessage;
            }

            return(message);
        }