public void AddNewCharge(Charge charge)
        {
            if (charge.Type == Charge.ChargeType.Positive)
            {
                var positiveCharge = new PositiveCharge();
                positiveCharge.Margin              = new Thickness(0, 0, 0, 0);
                positiveCharge.VerticalAlignment   = VerticalAlignment.Top;
                positiveCharge.HorizontalAlignment = HorizontalAlignment.Left;
                positiveCharge.MyCharge            = charge;

                gridField.Children.Add(positiveCharge);

                var group = new TransformGroup();

                var transfer = new TranslateTransform
                {
                    X = Helper.RandomNumber(10, (int)gridField.Width - 45),
                    Y = Helper.Clamp(Helper.RandomNumber(10, ((int)gridField.Height - 35) / 2), 0,
                                     (int)gridField.Height - 65)
                };
                group.Children.Add(transfer);
                positiveCharge.RenderTransform = group;

                _charges.Add(positiveCharge.MyCharge);
            }
            else
            {
                var negativeCharge = new NegativeCharge();
                negativeCharge.Margin              = new Thickness(0, 0, 0, 0);
                negativeCharge.VerticalAlignment   = VerticalAlignment.Top;
                negativeCharge.HorizontalAlignment = HorizontalAlignment.Left;
                negativeCharge.MyCharge            = charge;

                gridField.Children.Add(negativeCharge);

                var group = new TransformGroup();

                var transfer = new TranslateTransform
                {
                    X = Helper.RandomNumber(10, (int)gridField.Width - 45),
                    Y = Helper.RandomNumber(10, ((int)gridField.Height - 35))
                };
                group.Children.Add(transfer);
                negativeCharge.RenderTransform = group;

                _charges.Add(negativeCharge.MyCharge);
            }
            CalculatePositions();
            Calculation();
            FieldOutline.Update();
        }
        private void BtnDrawClick(object sender, RoutedEventArgs e)
        {
            if (cmbFloat.SelectedIndex == -1 || cmbStatic.SelectedIndex == -1)
            {
                MessageBox.Show("Fill all fields!!");
                return;
            }

            int duration = 10;
            var startloc = new Point((double)integerUDStartX.Value, (double)integerUDStartY.Value);

            if (integerUDDuration.Value != null)
            {
                duration = (int)integerUDDuration.Value;
            }

            var slver = new Solver(_charges, _surfaces, ImageHieght, ImageWidth);

            slver.SolveIt();


            FreeCharge     freeCharge     = null;
            PositiveCharge positiveCharge = null;
            NegativeCharge negativeCharge = null;

            IEnumerable <UIElement> allitems = MainWindow.Instance.GetListOfItems();

            foreach (UIElement chargeitem in allitems)
            {
                if (chargeitem.GetType() == typeof(FreeCharge))
                {
                    string name = ((FreeCharge)chargeitem).MyCharge.Name;
                    if ((string)cmbFloat.SelectedValue == name)
                    {
                        freeCharge = ((FreeCharge)chargeitem);
                    }
                }
                else if (chargeitem.GetType() == typeof(PositiveCharge))
                {
                    string name = ((PositiveCharge)chargeitem).MyCharge.Name;
                    if ((string)cmbStatic.SelectedValue == name)
                    {
                        positiveCharge = ((PositiveCharge)chargeitem);
                    }
                }
                else if (chargeitem.GetType() == typeof(NegativeCharge))
                {
                    string name = ((NegativeCharge)chargeitem).MyCharge.Name;
                    if ((string)cmbStatic.SelectedValue == name)
                    {
                        negativeCharge = ((NegativeCharge)chargeitem);
                    }
                }
            }


            if (freeCharge != null)
            {
                var Orgins = new Point();
                if (positiveCharge != null)
                {
                    Orgins = new Point(positiveCharge.RenderTransform.Value.OffsetX,
                                       positiveCharge.RenderTransform.Value.OffsetY);
                }
                else if (negativeCharge != null)
                {
                    Orgins = new Point(negativeCharge.RenderTransform.Value.OffsetX,
                                       negativeCharge.RenderTransform.Value.OffsetY);
                }

                var returnedData = (List <Point>)slver.ChargeChargeDistance(freeCharge, Orgins, duration, startloc);

                var graphOutput = new GraphWindow("Distance", "Time");
                graphOutput.DrawThis(returnedData, Brushes.DarkRed, Brushes.DarkMagenta, "Distance");

                if (returnedData != null)
                {
                    IEnumerable <Point> velcocity = Helper.CalculateVelocity(returnedData);
                    graphOutput.DrawThis(velcocity, Brushes.DodgerBlue, Brushes.LightSkyBlue, "Velocity");
                }


                graphOutput.Show();
            }


            Close();
        }