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); } }
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); }
/// <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); }