private void Rectangle_MouseDown(object sender, MouseButtonEventArgs e) { Rectangle rect = (Rectangle)sender; Point pos = e.GetPosition(rect); SelectableBoundingBox sbb = (SelectableBoundingBox)rect.DataContext; if (e.ClickCount == 2) { if (_rectDoubleClick != null) { _rectDoubleClick(this, new RectMouseEventArgs((SelectableBoundingBox)((Rectangle)sender).DataContext)); } } _editingState = GetMouseOverState(sbb, pos); if (_editingState != EditingState.None) { rect.CaptureMouse(); } else { sbb.IsSelected = !sbb.IsSelected; if (_rectangleSelectionChanged != null) { _rectangleSelectionChanged(sbb, null); } } }
private void CloseTruePositive_Click(object sender, RoutedEventArgs e) { if (_rectClosed != null) { SelectableBoundingBox sb = (SelectableBoundingBox)((Button)sender).DataContext; _rectClosed(sb, e); } }
void bigger_Click(object sender, RoutedEventArgs e) { MenuItem menuitem = sender as MenuItem; SelectableBoundingBox sbb = menuitem.DataContext as SelectableBoundingBox; if (_lookBiggerClick != null) { _lookBiggerClick(sbb, new RectMouseEventArgs(sbb)); } }
private void NonEditableRectangle_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ClickCount == 2) { if (_rectDoubleClick != null) { _rectDoubleClick(this, new RectMouseEventArgs((SelectableBoundingBox)((Rectangle)sender).DataContext)); } } Rectangle rect = (Rectangle)sender; SelectableBoundingBox sbb = (SelectableBoundingBox)rect.DataContext; if (e.ChangedButton == MouseButton.Right) { //ContextMenu menu = new ContextMenu(); //MenuItem bigger = new MenuItem(); //bigger.Header = "View Parent"; //MenuItem smaller = new MenuItem(); //smaller.Header = "View Children"; //Separator sep = new Separator(); //MenuItem delete = new MenuItem(); //delete.Header = "Delete Prototype"; //bigger.Click += bigger_Click; //smaller.Click += smaller_Click; //menu.Items.Add(bigger); //menu.Items.Add(smaller); //menu.Items.Add(sep); //menu.Items.Add(delete); //rect.ContextMenu = menu; //rect.ContextMenu.Visibility = System.Windows.Visibility.Visible; } else { sbb.IsSelected = !sbb.IsSelected; if (_rectMouseUp != null) { _rectMouseUp(this, new RectMouseEventArgs((SelectableBoundingBox)rect.DataContext)); } if (_rectangleSelectionChanged != null) { _rectangleSelectionChanged(sbb, null); } } }
private EditingState GetMouseOverState(SelectableBoundingBox sbb, Point pos) { if (pos.X <= c_rectCornerSize && pos.Y > c_rectCornerSize && pos.Y < sbb.Height - c_rectCornerSize) { return(EditingState.Left); } else if (pos.X >= sbb.Width - c_rectCornerSize && pos.Y > c_rectCornerSize && pos.Y < sbb.Height - c_rectCornerSize) { return(EditingState.Width); } else if (pos.Y <= c_rectCornerSize && pos.X > c_rectCornerSize && pos.X < sbb.Width - c_rectCornerSize) { return(EditingState.Top); } else if (pos.Y >= sbb.Height - c_rectCornerSize && pos.X > c_rectCornerSize && pos.X < sbb.Width - c_rectCornerSize) { return(EditingState.Height); } else if (pos.X <= c_rectCornerSize && pos.Y >= sbb.Height - c_rectCornerSize) { return(EditingState.LeftAndHeight); } else if (pos.X >= sbb.Width - c_rectCornerSize && pos.Y <= c_rectCornerSize) { return(EditingState.TopAndWidth); } else if (pos.X >= sbb.Width - c_rectCornerSize && pos.Y >= sbb.Height - c_rectCornerSize) { return(EditingState.WidthAndHeight); } else if (pos.X <= c_rectCornerSize && pos.Y <= c_rectCornerSize) { return(EditingState.TopAndLeft); } else { return(EditingState.None); } }
private int CompareRects(SelectableBoundingBox a, SelectableBoundingBox b) { return (b.Width * b.Height) - (a.Width * a.Height); }
private void RectsSnapped(IEnumerable<IBoundingBox> snappedRects) { ClearDrawnSelected(); foreach (IBoundingBox bb in snappedRects) { SelectableBoundingBox sbb = new SelectableBoundingBox(bb.Left, bb.Top, bb.Width, bb.Height, Brushes.YellowGreen); UserDrawnRectangleControl.Rectangles.Add(sbb); } }
private void RemoveSelectedNode(SelectableBoundingBox.WithTreeNode sbb) { Tree node = sbb.TreeNode; sbb.Left = 0; sbb.TreeNode = null; sbb.Top = 0; sbb.Width = 0; sbb.Height = 0; sbb.IsSelected = false; sbb.Color = Brushes.Transparent; //RectangleViewerControl.Rectangles.Remove(sbb); PropertiesControl torem = SelectedNodes.FirstOrDefault(s => s.Node == node); if (torem != null) { SelectedNodes.Remove(torem); TreeBrowserControl.DeselectNode(node); } }
private void RemoveRectangles(SelectableBoundingBox.WithTreeNode.Type type) { List<SelectableBoundingBox.WithTreeNode> torem = new List<SelectableBoundingBox.WithTreeNode>(); foreach (SelectableBoundingBox.WithTreeNode sbb in RectangleViewerControl.Rectangles) { if (sbb.CreationType == type) torem.Add(sbb); } foreach (var rem in torem) RemoveSelectedNode(rem); }
public void StopDragRecting() { if (_currState == State.Dragging) { _currState = State.DrawMode; if (!DragRect.IsEmpty && DragRect.Width > 2 && DragRect.Height > 2) { SelectableBoundingBox sbb = new SelectableBoundingBox((int)DragRect.Left, (int)DragRect.Top, (int)DragRect.Width, (int)DragRect.Height, Brushes.YellowGreen); if (Keyboard.Modifiers != ModifierKeys.Control) { List<BoundingBox> list = new List<BoundingBox>() { new BoundingBox(sbb.Left, sbb.Top, sbb.Width, sbb.Height) }; _interpreter.SnapRectangles(list, (int)FrameSlider.Value - 1); } else { UserDrawnRectangleControl.Rectangles.Add(sbb); } } DragRect = Rect.Empty; DragRectangleControl.Visibility = Visibility.Hidden; } }
private void Rectangle_MouseMove(object sender, MouseEventArgs e) { if (Visibility == System.Windows.Visibility.Visible) { Rectangle rect = (Rectangle)sender; SelectableBoundingBox sbb = (SelectableBoundingBox)rect.DataContext; Point pos = e.GetPosition(rect); switch (_editingState) { case EditingState.Left: Cursor = Cursors.SizeWE; sbb.Left += (int)pos.X; sbb.Width -= (int)pos.X; break; case EditingState.Top: Cursor = Cursors.SizeNS; sbb.Top += (int)pos.Y; sbb.Height -= (int)pos.Y; break; case EditingState.Width: Cursor = Cursors.SizeWE; sbb.Width = (int)pos.X; break; case EditingState.Height: Cursor = Cursors.SizeNS; sbb.Height = (int)pos.Y; break; case EditingState.LeftAndHeight: Cursor = Cursors.SizeNESW; sbb.Left += (int)pos.X; sbb.Width -= (int)pos.X; sbb.Height = (int)pos.Y; break; case EditingState.TopAndWidth: Cursor = Cursors.SizeNESW; sbb.Top += (int)pos.Y; sbb.Height -= (int)pos.Y; sbb.Width = (int)pos.X; break; case EditingState.TopAndLeft: Cursor = Cursors.SizeNWSE; sbb.Top += (int)pos.Y; sbb.Height -= (int)pos.Y; sbb.Left += (int)pos.X; sbb.Width -= (int)pos.X; break; case EditingState.WidthAndHeight: Cursor = Cursors.SizeNWSE; sbb.Width = (int)pos.X; sbb.Height = (int)pos.Y; break; case EditingState.None: EditingState mouseover = GetMouseOverState(sbb, pos); switch (mouseover) { case EditingState.Left: Cursor = Cursors.SizeWE; break; case EditingState.Top: Cursor = Cursors.SizeNS; break; case EditingState.Width: Cursor = Cursors.SizeWE; break; case EditingState.Height: Cursor = Cursors.SizeNS; break; case EditingState.LeftAndHeight: Cursor = Cursors.SizeNESW; break; case EditingState.TopAndWidth: Cursor = Cursors.SizeNESW; break; case EditingState.WidthAndHeight: Cursor = Cursors.SizeNWSE; break; case EditingState.TopAndLeft: Cursor = Cursors.SizeNWSE; break; case EditingState.None: Cursor = Cursors.Arrow; break; } break; } if (sbb.Left < 0) { sbb.Left = 0; } if (sbb.Top < 0) { sbb.Top = 0; } if (sbb.Left + sbb.Width > Width) { sbb.Width = (int)Width - sbb.Left; } if (sbb.Height + sbb.Top > Height) { sbb.Height = (int)Height - sbb.Top; } } }
private void CloseRectButton_Click(object sender, RoutedEventArgs e) { SelectableBoundingBox sb = (SelectableBoundingBox)((Button)sender).DataContext; Rectangles.Remove(sb); }
public RectMouseEventArgs(SelectableBoundingBox rect) { Rect = rect; }
private EditingState GetMouseOverState(SelectableBoundingBox sbb, Point pos) { if (pos.X <= c_rectCornerSize && pos.Y > c_rectCornerSize && pos.Y < sbb.Height - c_rectCornerSize) { return EditingState.Left; } else if (pos.X >= sbb.Width - c_rectCornerSize && pos.Y > c_rectCornerSize && pos.Y < sbb.Height - c_rectCornerSize) { return EditingState.Width; } else if (pos.Y <= c_rectCornerSize && pos.X > c_rectCornerSize && pos.X < sbb.Width - c_rectCornerSize) { return EditingState.Top; } else if (pos.Y >= sbb.Height - c_rectCornerSize && pos.X > c_rectCornerSize && pos.X < sbb.Width - c_rectCornerSize) { return EditingState.Height; } else if (pos.X <= c_rectCornerSize && pos.Y >= sbb.Height - c_rectCornerSize) { return EditingState.LeftAndHeight; } else if (pos.X >= sbb.Width - c_rectCornerSize && pos.Y <= c_rectCornerSize) { return EditingState.TopAndWidth; } else if (pos.X >= sbb.Width - c_rectCornerSize && pos.Y >= sbb.Height - c_rectCornerSize) { return EditingState.WidthAndHeight; } else if (pos.X <= c_rectCornerSize && pos.Y <= c_rectCornerSize) { return EditingState.TopAndLeft; } else { return EditingState.None; } }