public void AddEqualRelation(object arg)
        {
            IsAddingRelation = true;
            var line = arg as Line;

            if (relatedLine != null)
            {
                if (relation != Relation.EQUALS)
                {
                    return;
                }
                relatedLine.RelatedLine = line;
                line.RelatedLine        = relatedLine;
                IsAddingRelation        = false;
                relatedLine             = null;
                relation = Relation.NONE;
                Debug.WriteLine("Adding old relation. Line:" + line.First.X + " " + line.Second.X);
            }
            else
            {
                if (relation != Relation.NONE)
                {
                    return;
                }
                Debug.WriteLine("Adding new relation. Line:" + line.First.X + " " + line.Second.X);
                IsAddingRelation = true;
                relatedLine      = line;
                relation         = Relation.EQUALS;
            }
            line.Relation = Relation.EQUALS;
            if (SelectedPolygon != null)
            {
                SelectedPolygon.RenderBitmap();
            }
        }
        public void DeletePoint(object arg)
        {
            var point = arg as DragablePoint;

            if (point == null)
            {
                return;
            }
            if (SelectedPolygon == null)
            {
                return;
            }

            if (SelectedPolygon.Points.Count <= 3)
            {
                var toDel = SelectedPolygon;
                Polygons.Remove(toDel);
                SelectedPolygon = null;
            }
            else
            {
                SelectedPolygon.DeletePoint(point);
                SelectedPolygon.RenderBitmap();
            }
        }
 private void RefreshPolygonUsers()
 {
     if (SelectedPolygon != null)
     {
         if (SelectedPolygon.PolygonTagTypeEquals(PolygonTagType.Hexagon))
         {
             var friends = _layerService.UsersInsidePolygonTagBrief(SelectedPolygon.ExtractPolygonTag().Tag);
             SelectedUsers = new ObservableCollection <UserInfoBriefViewCellModel>(friends);
         }
         else if (SelectedPolygon.PolygonTagTypeEquals(PolygonTagType.Zone))
         {
             //TODO: read friends inside of Zone from webapi
             var friends = _layerService.UsersInsideZone(SelectedPolygon.ExtractPolygonTag().Tag);
             SelectedUsers = new ObservableCollection <UserInfoBriefViewCellModel>(friends);
         }
         else
         {
             SelectedUsers.Clear();
         }
         PolygonUsersVisible = SelectedUsers.Count > 0;
     }
     else
     {
         SelectedUsers.Clear();
         PolygonUsersVisible = false;
     }
 }
        public void DeleteRelation(object line)
        {
            var line1 = line as Line;

            line1.RemoveRelation();
            if (SelectedPolygon != null)
            {
                SelectedPolygon.RenderBitmap();
            }
        }
        public void ChangeBlockStatus(object arg)
        {
            var point = arg as DragablePoint;

            if (point == null)
            {
                return;
            }
            point.IsBlocked = !point.IsBlocked;
            if (SelectedPolygon != null)
            {
                SelectedPolygon.RenderBitmap();
            }
        }
 private void Polygon_Clicked(object sender, EventArgs e)
 {
     if (sender is Polygon sp)
     {
         if (SelectedPolygon != null &&
             SelectedPolygon.PolygonTagEquals(sp))
         {
             SelectedPolygon     = null;
             PolygonUsersVisible = false;
         }
         else
         {
             SelectedPolygon = sp;
             RefreshPolygonUsers();
         }
     }
 }
        public void AddMiddlePoint(object arg)
        {
            var line = arg as Line;

            if (line == null)
            {
                return;
            }
            if (SelectedPolygon == null)
            {
                return;
            }
            line.RemoveRelation();
            var index = SelectedPolygon.Lines.IndexOf(line);
            var toAdd = new DragablePoint((line.First.X + line.Second.X) / 2, (line.First.Y + line.Second.Y) / 2);

            SelectedPolygon.AddPoint(toAdd, index);
            SelectedPolygon.RenderBitmap();
        }