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(); } } }