Ejemplo n.º 1
0
        private void Mapa_Drop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent("ugrozeniDrag"))
            {
                Vrsta vrsta = e.Data.GetData("ugrozeniDrag") as Vrsta;
                //Console.WriteLine("Dropovan " + vrsta.Ime);

                //Provera
                //lok.Point = e.GetPosition(Mapa);

                double newLeft = e.GetPosition(Mapa).X;
                // newLeft inside canvas right-border?
                if (newLeft > Mapa.Margin.Left + Mapa.ActualWidth - 30)
                {
                    newLeft = Mapa.Margin.Left + Mapa.ActualWidth - 30;  //30 je sirina slike
                }
                // newLeft inside canvas left-border?
                else if (newLeft < Mapa.Margin.Left)
                {
                    newLeft = Mapa.Margin.Left;
                }

                double newTop = e.GetPosition(Mapa).Y;

                // newTop inside canvas bottom-border?
                if (newTop > Mapa.Margin.Top + Mapa.ActualHeight - 30)
                {
                    newTop = Mapa.Margin.Top + Mapa.ActualHeight - 30; //30 je visina slike
                }
                // newTop inside canvas top-border?
                else if (newTop < Mapa.Margin.Top)
                {
                    newTop = Mapa.Margin.Top;
                }

                vrsta.Point = new Point(newLeft, newTop);

                //provera za presek sa ostalim ikonicama na mapi
                foreach (Vrsta v in NaMapi)
                {
                    //da li se novi sece po x osi
                    if (Math.Abs(vrsta.Point.X - v.Point.X) < 30)                            //ako su u preseku
                    {
                        if (Mapa.ActualWidth - vrsta.Point.X < Mapa.ActualWidth - v.Point.X) //ako je prevlaceni blizi levo
                        {
                            vrsta.Point = new Point(newLeft - 40, newTop);
                        }
                        else if (Mapa.ActualWidth - vrsta.Point.X > Mapa.ActualWidth - v.Point.X) //ako je prevlaceni blizi desno
                        {
                            vrsta.Point = new Point(newLeft + 40, newTop);
                        }
                    }

                    //da li se novi sece po y osi
                    if (Math.Abs(vrsta.Point.Y - v.Point.Y) < 30)                              //ako su u preseku
                    {
                        if (Mapa.ActualHeight - vrsta.Point.Y < Mapa.ActualHeight - v.Point.Y) //ako je prevlaceni blizi gore
                        {
                            vrsta.Point = new Point(vrsta.Point.X, newTop - 40);
                        }
                        else if (Mapa.ActualHeight - vrsta.Point.Y > Mapa.ActualHeight - v.Point.Y) //ako je prevlaceni blizi dole
                        {
                            vrsta.Point = new Point(vrsta.Point.X, newTop + 40);
                        }
                    }
                }

                if (NaMapi.Contains(vrsta) == false)
                {
                    NaMapi.Add(vrsta);
                }

                Console.WriteLine(NaMapi.Count);
                isDragging = false;
            }
        }