public static HitTestInfo CreateNewByDrag(XDrawing drawing, Point startPt, out XDrawingModes newMode) { var path = new Path(); path.Stroke = new SolidColorBrush(Colors.Black); path.StrokeThickness = 1.0; var pathG = new PathGeometry(); var figure = new PathFigure(); figure.StartPoint = startPt; var segment = new LineSegment(startPt, true); figure.Segments.Add(segment); pathG.Figures.Add(figure); path.Data = pathG; var shape = new XDrawingPath(drawing, path); ControlPoint cp; shape.CreateControlPoints(true, out cp, null); newMode = XDrawingModes.Edit; var hti = new HitTestInfo(); hti.Shape = shape; hti.Offset = new Vector(0.0, 0.0); hti.ControlPoint = cp; return(hti); }
public static HitTestInfo CreateNewByDrag(XDrawing drawing, Point startPt, out XDrawingModes newMode) { var path = new Path(); path.Stroke = new SolidColorBrush(Colors.Black); path.StrokeThickness = 1.0; path.Data = new EllipseGeometry(startPt, 0.0, 5.0); var shape = new XDrawingEllipse(drawing, path); ControlPoint cp; shape.CreateControlPoints(false, out cp); //newMode = XDrawingModes.Select; newMode = XDrawingModes.Edit; var hti = new HitTestInfo(); hti.Shape = shape; hti.Offset = new Vector(0.0, 0.0); hti.ControlPoint = cp; return(hti); }
public static HitTestInfo CreateNewByDrag(XDrawing drawing, Point startPt, out XDrawingModes newMode) { var path = new Path(); path.Fill = new SolidColorBrush(Colors.Black); path.StrokeThickness = 1.0; var shape = new XDrawingText(drawing, path); shape.TopLeft = startPt; shape.BottomRight = startPt; ControlPoint cp; shape.CreateControlPoints(false, out cp); //newMode = XDrawingModes.Select; newMode = XDrawingModes.Edit; var hti = new HitTestInfo(); hti.Shape = shape; hti.Offset = new Vector(0.0, 0.0); hti.ControlPoint = cp; return(hti); }
void Canvas_PreviewMouseDown(object sender, MouseButtonEventArgs e) { var pt = e.GetPosition(Canvas); Canvas.Focus(); Keyboard.Focus(Canvas); if (e.ChangedButton == MouseButton.Left) { switch (Mode) { //case XDrawingModes.Select: case XDrawingModes.Edit: m_DragInfo = HitTest(pt); if (!m_DragInfo.HasValue) { SelectedShape = null; } else { if (m_DragInfo.Value.Shape != SelectedShape) { SelectedShape = m_DragInfo.Value.Shape; } if (m_DragInfo.Value.ControlPoint != SelectedControlPoint) { if (m_DragInfo.Value.ControlPoint == null || m_DragInfo.Value.ControlPoint.IsSelectable) { SelectedControlPoint = m_DragInfo.Value.ControlPoint; } } m_DragInfo.Value.DragObject.StartDrag(); } break; case XDrawingModes.NewLine: case XDrawingModes.NewRect: case XDrawingModes.NewEllipse: case XDrawingModes.NewPath: case XDrawingModes.NewText: SelectedShape = null; XDrawingModes newMode = Mode; switch (Mode) { case XDrawingModes.NewLine: m_DragInfo = XDrawingLine.CreateNewByDrag(this, SnapToGrid(pt), out newMode); break; case XDrawingModes.NewRect: m_DragInfo = XDrawingRectangle.CreateNewByDrag(this, SnapToGrid(pt), out newMode); break; case XDrawingModes.NewEllipse: m_DragInfo = XDrawingEllipse.CreateNewByDrag(this, SnapToGrid(pt), out newMode); break; case XDrawingModes.NewPath: m_DragInfo = XDrawingPath.CreateNewByDrag(this, SnapToGrid(pt), out newMode); break; case XDrawingModes.NewText: m_DragInfo = XDrawingText.CreateNewByDrag(this, SnapToGrid(pt), out newMode); break; } if (m_DragInfo.HasValue) { Mode = newMode; SetValue(SelectedShapeProperty, m_DragInfo.Value.Shape); m_Shapes.Add(m_DragInfo.Value.Shape); Canvas.Children.Insert(Canvas.Children.IndexOf(m_ControlPointPath), m_DragInfo.Value.Shape.Path); m_DragInfo.Value.DragObject.StartDrag(); } break; } Canvas.CaptureMouse(); } else if (e.ChangedButton == MouseButton.Right) { var hti = HitTest(pt); if (!hti.HasValue) { SelectedShape = null; } else { if (hti.Value.Shape != SelectedShape) { SelectedShape = hti.Value.Shape; } if (hti.Value.ControlPoint != SelectedControlPoint) { if (hti.Value.ControlPoint == null || hti.Value.ControlPoint.IsSelectable) { SelectedControlPoint = hti.Value.ControlPoint; } } } } e.Handled = true; }