コード例 #1
0
        private void HullCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            Point loc = e.GetPosition(HullCanvas);

            Console.WriteLine("Preview Mouse Down {0},{1}", loc.X, loc.Y);
            if (m_handle == null)
            {
                return;
            }

            if (e.ButtonState == MouseButtonState.Pressed)
            {
                if (m_Dragging)
                {
                    m_dragX = loc.X;
                    m_dragY = loc.Y;

                    m_handle[m_DraggingHandle].SetValue(Canvas.TopProperty, m_dragY - RECT_SIZE / 2);
                    m_handle[m_DraggingHandle].SetValue(Canvas.LeftProperty, m_dragX - RECT_SIZE / 2);

                    //HullCanvas.Children.Remove(m_handle[m_DraggingHandle]);

                    //Rectangle rect = new Rectangle();
                    //rect.Height = 8;
                    //rect.Width = 8;
                    //rect.Stroke = new SolidColorBrush(Colors.Black); ;
                    //rect.StrokeThickness = 1;
                    //Canvas.SetTop(rect, m_dragY - 4);
                    //Canvas.SetLeft(rect, m_dragX - 4);
                    //HullCanvas.Children.Add(rect);

                    //m_handle[m_DraggingHandle] = rect;
                }
                else
                {
                    m_dragX = loc.X;
                    m_dragY = loc.Y;

                    Console.WriteLine("Checking for MouseOver");
                    for (int ii = 0; ii < m_handle.Length; ii++)
                    {
                        Console.WriteLine("Checking {0},{1}",
                                          m_handle[ii].GetValue(Canvas.LeftProperty), m_handle[ii].GetValue(Canvas.TopProperty));

                        if (m_handle[ii].IsMouseOver)
                        {
                            m_DraggingHandle = ii;
                            m_Dragging       = true;
                            Console.WriteLine("Mouse over {0} {1},{2}", ii, m_dragX, m_dragY);
                            break;
                        }

                        double x = (double)m_handle[ii].GetValue(Canvas.LeftProperty);
                        double y = (double)m_handle[ii].GetValue(Canvas.TopProperty);
                        if (x <= loc.X && x + RECT_SIZE >= loc.X &&
                            y <= loc.Y && y + RECT_SIZE >= loc.Y)
                        {
                            m_DraggingHandle = ii;
                            m_Dragging       = true;
                            Console.WriteLine("Found {0} {1},{2}", ii, m_dragX, m_dragY);
                            break;
                        }
                    }
                }
            }
            else
            {
                if (m_Dragging)
                {
                    Console.WriteLine("Dropped at {0} {1}", m_dragX, m_dragY);
                    m_Dragging = false;

                    //zzz TODO:
                    //      Need to scale and rotate the new point
                    //      Need to place point back in bulkhead plain.
                    //m_hull.GetBulkheadPoints(currBulkhead.SelectedIndex, points);
                    m_hull.SetBulkheadPoint(currBulkhead.SelectedIndex, m_DraggingHandle, m_dragX, m_dragY, 0);
                    Display();
                }
            }
        }