Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hittest ошибка в координатах 
:(
    Опции темы
Weprr
Дата 4.2.2013, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.2.2012

Репутация: нет
Всего: нет



Народ  вообщем проблема в следующем :  есть  Canvas  name = canvas1  на нем расположены два прямоугольника или два usercontrol  ,  эти объекты можно передвигать по canvas1  с помощью мышки,  мне нужно чтоб когда границы этих фигур соприкасались вываливался запрос на объединение фигур. Для поиска пересечения этих фигур  в событии Canvas_MouseMove использую следующий код
Код



 private void Canvas_MouseMove(object sender, MouseEventArgs e)

        {

           //  if mouse is down when its moving, then it's dragging current

            if (e.LeftButton == MouseButtonState.Pressed && current.InputElement != null)

                this.current.IsDragging = true;


            if (this.current.IsDragging && current.InputElement != null)
            {

                // Retrieve the current position of the mouse.

                var newX = Mouse.GetPosition((IInputElement)sender).X;

                var newY = Mouse.GetPosition((IInputElement)sender).Y;


                // Reset the location of the object (add to sender's renderTransform

                // newPosition minus currentElement's position

                var rt = ((UIElement)this.current.InputElement).RenderTransform;

                var offsetX = rt.Value.OffsetX;

                var offsetY = rt.Value.OffsetY;

                rt.SetValue(TranslateTransform.XProperty, offsetX + newX - current.X);

                rt.SetValue(TranslateTransform.YProperty, offsetY + newY - current.Y);
                this.current.X = newX;

                this.current.Y = newY;
                if (ObjectIsCrossing(this.current.X, this.current.Y, (current.InputElement as ObjectRactangle).Width, (current.InputElement as ObjectRactangle).Height, rt))
                {
                    if (DoDrop)
                    {
                        if (MessageBox.Show("Выполнить объединение ?", "Внимание", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                        {
                        }
                        else
                            DoDrop = false;
                    }
                }
                else
                    DoDrop = true;
             

                // Update position of the mouse

             

            }

        }

Где метод ObjectIsCrossing это:
Код


//При перемещении объекта проверяем не попадают ли его координаты в диапазон координат другого обекта
        private bool ObjectIsCrossing(double x, double y, double i_width, double i_height, Transform tr)
        {
            m_lstHitList.Clear();
            Rect rec = new Rect(x, y, i_width, i_height);
            RectangleGeometry rectangleArea = new RectangleGeometry(rec); ;
         
            VisualTreeHelper.HitTest(canvas1, null, HitTestCallback, new GeometryHitTestParameters(rectangleArea));
            if (m_lstHitList.Count > 0)
            {
             
                return true;
            }
            else
                return false;
        }


        public HitTestResultBehavior HitTestCallback(HitTestResult result)
        {
        
            DependencyObject obj = LogicalTreeHelper.GetParent(result.VisualHit);
            if (obj != null && obj.GetType() == typeof(ObjectRactangle)
                && (this.current.InputElement as ObjectRactangle) != obj )
            {
                m_lstHitList.Add(obj as ObjectRactangle);
                return HitTestResultBehavior.Stop;
            }
          
            return HitTestResultBehavior.Continue;
        }


Однако это срабатывает за долго до пересечения, когда между фигурами большое расстояние. Не могу понять гдe я ошибся.
И сразу второй вопрос на повестку дня, как в usercontrol  вставить другой usercontrol? Добавлял в usercontrol  steckpanel  и потом в нее вставить , все равно фигня какая-то выходит, вставленный контрол в другой стороне от родительского 

PM MAIL   Вверх
Weprr
Дата 4.2.2013, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.2.2012

Репутация: нет
Всего: нет



все вопрос снят
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.