/// <summary> /// Move selection. /// </summary> public void Move() { var a = WpfArc.FromXArc(_arc, 0, 0); if (_ellipse != null) { _ellipse.TopLeft.X = a.P1.X; _ellipse.TopLeft.Y = a.P1.Y; _ellipse.BottomRight.X = a.P2.X; _ellipse.BottomRight.Y = a.P2.Y; } if (_startLine != null) { _startLine.Start.X = a.Center.X; _startLine.Start.Y = a.Center.Y; _startLine.End.X = a.Start.X; _startLine.End.Y = a.Start.Y; } if (_endLine != null) { _endLine.Start.X = a.Center.X; _endLine.Start.Y = a.Center.Y; _endLine.End.X = a.End.X; _endLine.End.Y = a.End.Y; } if (_p1HelperPoint != null) { _p1HelperPoint.X = a.P1.X; _p1HelperPoint.Y = a.P1.Y; } if (_p2HelperPoint != null) { _p2HelperPoint.X = a.P2.X; _p2HelperPoint.Y = a.P2.Y; } if (_centerHelperPoint != null) { _centerHelperPoint.X = a.Center.X; _centerHelperPoint.Y = a.Center.Y; } if (_startHelperPoint != null) { _startHelperPoint.X = a.Start.X; _startHelperPoint.Y = a.Start.Y; } if (_endHelperPoint != null) { _endHelperPoint.X = a.End.X; _endHelperPoint.Y = a.End.Y; } _layer.Invalidate(); }
/// <inheritdoc/> public override void Finalize(BaseShape shape) { base.Finalize(shape); var arc = shape as XArc; var a = WpfArc.FromXArc(arc, 0, 0); if (!_connectedPoint3) { arc.Point3.X = a.Start.X; arc.Point3.Y = a.Start.Y; } if (!_connectedPoint4) { arc.Point4.X = a.End.X; arc.Point4.Y = a.End.Y; } }
public void Draw(object ds, XArc arc, double dx, double dy, ImmutableArray <ShapeProperty> db, Record r) { var a = WpfArc.FromXArc(arc, dx, dy); var _ds = ds as CanvasDrawingSession; double thickness = arc.Style.Thickness / _state.Zoom; var brush = ToColor(arc.Style.Fill); var pen = ToColor(arc.Style.Stroke); var ss = CreateStrokeStyle(arc.Style); CanvasGeometry g; using (var builder = new CanvasPathBuilder(_ds)) { builder.BeginFigure((float)a.Start.X, (float)a.Start.Y); builder.AddArc( new N.Vector2( (float)a.End.X, (float)a.End.Y), (float)a.Radius.Width, (float)a.Radius.Height, 0f, CanvasSweepDirection.Clockwise, a.IsLargeArc ? CanvasArcSize.Large : CanvasArcSize.Small); builder.EndFigure(CanvasFigureLoop.Open); g = CanvasGeometry.CreatePath(builder); } if (arc.IsFilled) { _ds.FillGeometry(g, brush); } if (arc.IsStroked) { _ds.DrawGeometry(g, pen, (float)thickness, ss); } g.Dispose(); ss.Dispose(); }
/// <inheritdoc/> public override void Draw(object dc, ArcShape arc, double dx, double dy, object db, object r) { if (!arc.IsFilled && !arc.IsStroked) { return; } var _dc = dc as AM.DrawingContext; AM.IBrush brush = ToBrush(arc.Style.Fill); AM.Pen pen = ToPen(arc.Style, _scaleToPage); var sg = new AM.StreamGeometry(); using (var sgc = sg.Open()) { var a = new WpfArc( Point2.FromXY(arc.Point1.X, arc.Point1.Y), Point2.FromXY(arc.Point2.X, arc.Point2.Y), Point2.FromXY(arc.Point3.X, arc.Point3.Y), Point2.FromXY(arc.Point4.X, arc.Point4.Y)); sgc.BeginFigure( new A.Point(a.Start.X + dx, a.Start.Y), arc.IsFilled); sgc.ArcTo( new A.Point(a.End.X + dx, a.End.Y + dy), new A.Size(a.Radius.Width, a.Radius.Height), 0.0, a.IsLargeArc, AM.SweepDirection.Clockwise); sgc.EndFigure(false); } _dc.DrawGeometry( arc.IsFilled ? brush : null, arc.IsStroked ? pen : null, sg); }
/// <summary> /// /// </summary> /// <param name="dc"></param> /// <param name="arc"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="db"></param> /// <param name="r"></param> public void Draw(object dc, XArc arc, double dx, double dy, ImmutableArray <ShapeProperty> db, Record r) { if (!arc.IsFilled && !arc.IsStroked) { return; } var _dc = dc as DrawingContext; Brush brush = ToSolidBrush(arc.Style.Fill); Pen pen = ToPen(arc.Style, _scaleToPage); var sg = new StreamGeometry(); using (var sgc = sg.Open()) { var a = WpfArc.FromXArc(arc, dx, dy); sgc.BeginFigure( new Point(a.Start.X, a.Start.Y), arc.IsFilled); sgc.ArcTo( new Point(a.End.X, a.End.Y), new Size(a.Radius.Width, a.Radius.Height), 0.0, a.IsLargeArc, SweepDirection.Clockwise); sgc.EndFigure(false); } _dc.DrawGeometry( arc.IsFilled ? brush : null, arc.IsStroked ? pen : null, sg); // TODO: sg.Dispose(); // TODO: brush.Dispose(); // TODO: pen.Dispose(); }
public static AM.Geometry ToGeometry(ArcShapeViewModel arc) { var sg = new AM.StreamGeometry(); using var sgc = sg.Open(); var a = new WpfArc( Point2.FromXY(arc.Point1.X, arc.Point1.Y), Point2.FromXY(arc.Point2.X, arc.Point2.Y), Point2.FromXY(arc.Point3.X, arc.Point3.Y), Point2.FromXY(arc.Point4.X, arc.Point4.Y)); sgc.BeginFigure( new A.Point(a.Start.X, a.Start.Y), arc.IsFilled); sgc.ArcTo( new A.Point(a.End.X, a.End.Y), new A.Size(a.Radius.Width, a.Radius.Height), 0.0, a.IsLargeArc, AM.SweepDirection.Clockwise); sgc.EndFigure(false); return(sg); }
/// <inheritdoc/> public override void Draw(object dc, XArc arc, double dx, double dy, ImmutableArray <XProperty> db, XRecord r) { if (!arc.IsFilled && !arc.IsStroked) { return; } var _dc = dc as AM.DrawingContext; AM.IBrush brush = ToBrush(arc.Style.Fill); AM.Pen pen = ToPen(arc.Style, _scaleToPage); var sg = new AM.StreamGeometry(); using (var sgc = sg.Open()) { var a = WpfArc.FromXArc(arc, dx, dy); sgc.BeginFigure( new A.Point(a.Start.X, a.Start.Y), arc.IsFilled); sgc.ArcTo( new A.Point(a.End.X, a.End.Y), new A.Size(a.Radius.Width, a.Radius.Height), 0.0, a.IsLargeArc, AM.SweepDirection.Clockwise); sgc.EndFigure(false); } _dc.DrawGeometry( arc.IsFilled ? brush : null, arc.IsStroked ? pen : null, sg); }
/// <inheritdoc/> public override void Draw(object dc, ArcShape arc, double dx, double dy, object db, object r) { var _dc = dc as DrawingContext; var style = arc.Style; if (style == null) { return; } double thickness = style.Thickness / _state.ZoomX; double half = thickness / 2.0; Tuple <Brush, Pen> styleCached = _styleCache.Get(style); Brush fill; Pen stroke; if (styleCached != null) { fill = styleCached.Item1; stroke = styleCached.Item2; } else { fill = CreateBrush(style.Fill); stroke = CreatePen(style, thickness); _styleCache.Set(style, Tuple.Create(fill, stroke)); } var a = new WpfArc( Point2.FromXY(arc.Point1.X, arc.Point1.Y), Point2.FromXY(arc.Point2.X, arc.Point2.Y), Point2.FromXY(arc.Point3.X, arc.Point3.Y), Point2.FromXY(arc.Point4.X, arc.Point4.Y)); System.Windows.Media.PathGeometry pg = _arcCache.Get(arc); if (pg != null) { var pf = pg.Figures[0]; pf.StartPoint = new Point(a.Start.X + dx, a.Start.Y + dy); pf.IsFilled = arc.IsFilled; var segment = pf.Segments[0] as ArcSegment; segment.Point = new Point(a.End.X + dx, a.End.Y + dy); segment.Size = new Size(a.Radius.Width, a.Radius.Height); segment.IsLargeArc = a.IsLargeArc; segment.IsStroked = arc.IsStroked; } else { var pf = new System.Windows.Media.PathFigure() { StartPoint = new Point(a.Start.X, a.Start.Y), IsFilled = arc.IsFilled }; var segment = new ArcSegment( new Point(a.End.X, a.End.Y), new Size(a.Radius.Width, a.Radius.Height), 0.0, a.IsLargeArc, System.Windows.Media.SweepDirection.Clockwise, arc.IsStroked); //segment.Freeze(); pf.Segments.Add(segment); //pf.Freeze(); pg = new System.Windows.Media.PathGeometry(); pg.Figures.Add(pf); //pg.Freeze(); _arcCache.Set(arc, pg); } DrawPathGeometryInternal(_dc, half, fill, stroke, arc.IsStroked, arc.IsFilled, pg); }
/// <summary> /// Move selection. /// </summary> public void Move() { var a = new WpfArc( Point2.FromXY(_arc.Point1.X, _arc.Point1.Y), Point2.FromXY(_arc.Point2.X, _arc.Point2.Y), Point2.FromXY(_arc.Point3.X, _arc.Point3.Y), Point2.FromXY(_arc.Point4.X, _arc.Point4.Y)); if (_ellipse != null) { _ellipse.TopLeft.X = a.P1.X; _ellipse.TopLeft.Y = a.P1.Y; _ellipse.BottomRight.X = a.P2.X; _ellipse.BottomRight.Y = a.P2.Y; } if (_startLine != null) { _startLine.Start.X = a.Center.X; _startLine.Start.Y = a.Center.Y; _startLine.End.X = a.Start.X; _startLine.End.Y = a.Start.Y; } if (_endLine != null) { _endLine.Start.X = a.Center.X; _endLine.Start.Y = a.Center.Y; _endLine.End.X = a.End.X; _endLine.End.Y = a.End.Y; } if (_p1HelperPoint != null) { _p1HelperPoint.X = a.P1.X; _p1HelperPoint.Y = a.P1.Y; } if (_p2HelperPoint != null) { _p2HelperPoint.X = a.P2.X; _p2HelperPoint.Y = a.P2.Y; } if (_centerHelperPoint != null) { _centerHelperPoint.X = a.Center.X; _centerHelperPoint.Y = a.Center.Y; } if (_startHelperPoint != null) { _startHelperPoint.X = a.Start.X; _startHelperPoint.Y = a.Start.Y; } if (_endHelperPoint != null) { _endHelperPoint.X = a.End.X; _endHelperPoint.Y = a.End.Y; } _layer.InvalidateLayer(); }
/// <summary> /// /// </summary> /// <param name="dc"></param> /// <param name="arc"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="db"></param> /// <param name="r"></param> public void Draw(object dc, XArc arc, double dx, double dy, ImmutableArray <ShapeProperty> db, Record r) { var _dc = dc as DrawingContext; var style = arc.Style; if (style == null) { return; } double thickness = style.Thickness / _state.Zoom; double half = thickness / 2.0; Tuple <Brush, Pen> cache = null; Brush fill; Pen stroke; if (_enableStyleCache && _styleCache.TryGetValue(style, out cache)) { fill = cache.Item1; stroke = cache.Item2; } else { fill = CreateBrush(style.Fill); stroke = CreatePen(style, thickness); if (_enableStyleCache) { _styleCache.Add(style, Tuple.Create(fill, stroke)); } } var a = WpfArc.FromXArc(arc, dx, dy); PathGeometry pg = null; if (_enableArcCache && _arcCache.TryGetValue(arc, out pg)) { var pf = pg.Figures[0]; pf.StartPoint = new Point(a.Start.X, a.Start.Y); pf.IsFilled = arc.IsFilled; var segment = pf.Segments[0] as ArcSegment; segment.Point = new Point(a.End.X, a.End.Y); segment.Size = new Size(a.Radius.Width, a.Radius.Height); segment.IsLargeArc = a.IsLargeArc; segment.IsStroked = arc.IsStroked; } else { var pf = new PathFigure() { StartPoint = new Point(a.Start.X, a.Start.Y), IsFilled = arc.IsFilled }; var segment = new ArcSegment( new Point(a.End.X, a.End.Y), new Size(a.Radius.Width, a.Radius.Height), 0.0, a.IsLargeArc, SweepDirection.Clockwise, arc.IsStroked); //segment.Freeze(); pf.Segments.Add(segment); //pf.Freeze(); pg = new PathGeometry(); pg.Figures.Add(pf); //pg.Freeze(); if (_enableArcCache) { _arcCache.Add(arc, pg); } } DrawPathGeometryInternal(_dc, half, fill, stroke, arc.IsStroked, arc.IsFilled, pg); }