public TEditUserObj(GeoPoint[] pts, Pen pen, Brush brush, MapView mapView, string infoText, TEditUserObj.eType geometryType) : base(pts, geometryType == TEditUserObj.eType.Polygon, pen, brush) { // this.pts = pts; this.limits = GeoRect.FromPoints(pts); // if (pen != null) { // обычное перо this.unselected_pen = pen; // перо для выделения this.selected_pen = (pen.Clone() as Pen); this.selected_pen.Width = pen.Width + Math.Max((float)(pen.Width / 2.0), 1); } // вид на карту запоминаем для возможности смещения точек this.mapView = mapView; // this.geometryType = geometryType; this.InfoText = infoText; }
// Смещаем выделенную точку public void MovePoint(int dx, int dy) { if (!EnableEdit) { return; } int ind = selectedPointIndex; if (ind >= 0) { // объект выделен // т.к. объект замкнут, то возможно что выделен замыкающий отрезок, // а его последняя точка - это первая точка базового набора if (ind >= pts.Length) { ind = 0; } ; // сдвигаем точку mapView.MoveCoordinate(pts[ind], dx, dy); // переиндексируем объект на карте ApplyPoints(pts, geometryType == TEditUserObj.eType.Polygon); // переиндексируем лимиты limits = GeoRect.FromPoints(pts); if (Changed != null) { Changed(this, EventArgs.Empty); } ; } ; }
private Point UpdatePosition(Point value) { if (MapView != null) { List <GeoPoint> geoPts = new List <GeoPoint>(); switch (_drawPosition) { case DrawPosition.Center: if (pts[0] != null) { geoPts.Add(pts[0]); } ; geoPts.Add(MapView.GetCoordinate(new Point(value.X - _iconToDraw.Width / 2, value.Y - _iconToDraw.Height / 2))); geoPts.Add(MapView.GetCoordinate(new Point(value.X + _iconToDraw.Width / 2, value.Y - _iconToDraw.Height / 2))); geoPts.Add(MapView.GetCoordinate(new Point(value.X + _iconToDraw.Width / 2, value.Y + _iconToDraw.Height / 2))); geoPts.Add(MapView.GetCoordinate(new Point(value.X - _iconToDraw.Width / 2, value.Y + _iconToDraw.Height / 2))); break; case DrawPosition.LeftBottom: geoPts.Add(pts[0]); geoPts.Add(MapView.GetCoordinate(new Point(value.X + _iconToDraw.Width, value.Y))); geoPts.Add(MapView.GetCoordinate(new Point(value.X + _iconToDraw.Width, value.Y - _iconToDraw.Height))); geoPts.Add(MapView.GetCoordinate(new Point(value.X, value.Y - _iconToDraw.Height))); break; default: break; } ApplyPoints(geoPts, true); this.pts = geoPts.ToArray(); this.Limits = GeoRect.FromPoints(pts); } ; return(value); }