public static dynamic GetTSObject(CircleAttributes dynObject)
 {
     if (dynObject is null)
     {
         return(null);
     }
     return(dynObject.teklaObject);
 }
        private async void CreateCircleFeature(Geometry geom, CircleAttributes circleAttributes)
        {
            string message = string.Empty;
            await QueuedTask.Run(async() =>
                                 message = await AddFeatureToLayer(geom, circleAttributes));

            RaisePropertyChanged(() => HasMapGraphics);

            if (!string.IsNullOrEmpty(message))
            {
                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(message,
                                                                 DistanceAndDirectionLibrary.Properties.Resources.ErrorFeatureCreateTitle);
            }
        }
예제 #3
0
        private async Task <string> AddFeatureToLayer(Geometry geom, CircleAttributes attributes)
        {
            string message = String.Empty;

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

            FeatureClass circleFeatureClass = await GetFeatureClass(addToMapIfNotPresent : true);

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

            bool creationResult = false;

            FeatureClassDefinition circleDefinition = circleFeatureClass.GetDefinition();

            EditOperation editOperation = new EditOperation();

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

                    double distance = attributes.distance;
                    if (IsDistanceCalcExpanded && (CircleType == CircleFromTypes.Diameter))
                    {
                        distance *= 2.0;
                    }

                    if (circleDefinition.FindField("Distance") >= 0)
                    {
                        rowBuffer["Distance"] = distance;     // Double
                    }
                    if (circleDefinition.FindField("DistUnit") >= 0)
                    {
                        rowBuffer["DistUnit"] = attributes.distanceunit; // Text
                    }
                    if (circleDefinition.FindField("DistType") >= 0)
                    {
                        rowBuffer["DistType"] = attributes.circletype;   // Text
                    }
                    if (circleDefinition.FindField("CenterX") >= 0)
                    {
                        rowBuffer["CenterX"] = attributes.centerx;       // Double
                    }
                    if (circleDefinition.FindField("CenterY") >= 0)
                    {
                        rowBuffer["CenterY"] = attributes.centery;       // Double
                    }
                    rowBuffer["Shape"] = GeometryEngine.Instance.Project(geom, circleDefinition.GetSpatialReference());

                    Feature feature = circleFeatureClass.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;
                }
            }, circleFeatureClass);

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

            if (!creationResult)
            {
                message = editOperation.ErrorMessage;
                await Project.Current.DiscardEditsAsync();
            }
            else
            {
                await Project.Current.SaveEditsAsync();
            }

            return(message);
        }
예제 #4
0
        /// <summary>
        /// Create geodetic circle
        /// </summary>
        private Geometry CreateCircle(bool isFeedback)
        {
            if (Point1 == null || double.IsNaN(Distance) || Distance <= 0.0)
            {
                return(null);
            }
            var nameConverter = new EnumToFriendlyNameConverter();
            var param         = new GeodesicEllipseParameter();

            param.Center          = new Coordinate2D(Point1);
            param.AxisDirection   = 0.0;
            param.LinearUnit      = GetLinearUnit(LineDistanceType);
            param.OutGeometryType = GeometryType.Polygon;
            if (isFeedback)
            {
                param.OutGeometryType = GeometryType.Polyline;
            }
            param.SemiAxis1Length = Distance;
            param.SemiAxis2Length = Distance;
            param.VertexCount     = VertexCount;

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

            CIMColor color = new CIMRGBColor()
            {
                R = 255, B = 0, G = 0, Alpha = 25
            };

            if (isFeedback)
            {
                color = ColorFactory.Instance.GreyRGB;
                ClearTempGraphics();
                AddGraphicToMap(Point1, ColorFactory.Instance.GreenRGB, null, true, 5.0);
            }

            // Hold onto the attributes in case user saves graphics to file later
            //CircleAttributes circleAttributes = new CircleAttributes(Point1, Distance, CircleType);
            double        dist = 0.0;
            DistanceTypes distunit;

            if (CircleType == CircleFromTypes.Diameter)
            {
                dist = Distance * 2;
            }
            else
            {
                dist = Distance;
            }

            if (IsDistanceCalcExpanded)
            {
                dist     = ConvertFromTo(LineDistanceType, RateUnit, Distance);
                distunit = RateUnit;
            }
            else
            {
                distunit = LineDistanceType;
            }

            var displayValue = nameConverter.Convert(distunit, typeof(string), new object(), CultureInfo.CurrentCulture);
            CircleAttributes circleAttributes = new CircleAttributes()
            {
                mapPoint = Point1, distance = dist, circleFromTypes = CircleType, circletype = CircleType.ToString(), centerx = Point1.X, centery = Point1.Y, distanceunit = displayValue.ToString()
            };

            if (isFeedback)
            {
                AddGraphicToMap(geom, color, (ProGraphicAttributes)circleAttributes, IsTempGraphic: isFeedback);
            }
            else
            {
                CreateCircleFeature(geom, circleAttributes);
            }

            return((Geometry)geom);
        }