/// <inheritdoc/> public override void Draw(object dc, QuadraticBezierShape quadraticBezier, double dx, double dy, object db, object r) { if (!quadraticBezier.IsFilled && !quadraticBezier.IsStroked) { return; } var _dc = dc as AM.DrawingContext; AM.IBrush brush = ToBrush(quadraticBezier.Style.Fill); AM.Pen pen = ToPen(quadraticBezier.Style, _scaleToPage); var sg = new AM.StreamGeometry(); using (var sgc = sg.Open()) { sgc.BeginFigure( new A.Point(quadraticBezier.Point1.X, quadraticBezier.Point1.Y), quadraticBezier.IsFilled); sgc.QuadraticBezierTo( new A.Point(quadraticBezier.Point2.X, quadraticBezier.Point2.Y), new A.Point(quadraticBezier.Point3.X, quadraticBezier.Point3.Y)); sgc.EndFigure(false); } _dc.DrawGeometry( quadraticBezier.IsFilled ? brush : null, quadraticBezier.IsStroked ? pen : null, sg); }
internal static void AddQuad(IToolContext context, QuadraticBezierShape quadraticBezier, double dx, double dy, SKPath geometry) { geometry.MoveTo(ToSKPoint(quadraticBezier.StartPoint, dx, dy)); geometry.QuadTo( ToSKPoint(quadraticBezier.Point1, dx, dy), ToSKPoint(quadraticBezier.Point2, dx, dy)); }
/// <inheritdoc/> public override void Draw(object dc, QuadraticBezierShape quadraticBezier, double dx, double dy, object db, object r) { var _gfx = dc as XGraphics; double x1 = quadraticBezier.Point1.X; double y1 = quadraticBezier.Point1.Y; double x2 = quadraticBezier.Point1.X + (2.0 * (quadraticBezier.Point2.X - quadraticBezier.Point1.X)) / 3.0; double y2 = quadraticBezier.Point1.Y + (2.0 * (quadraticBezier.Point2.Y - quadraticBezier.Point1.Y)) / 3.0; double x3 = x2 + (quadraticBezier.Point3.X - quadraticBezier.Point1.X) / 3.0; double y3 = y2 + (quadraticBezier.Point3.Y - quadraticBezier.Point1.Y) / 3.0; double x4 = quadraticBezier.Point3.X; double y4 = quadraticBezier.Point3.Y; if (quadraticBezier.IsFilled) { var path = new XGraphicsPath(); path.AddBezier( _scaleToPage(x1 + dx), _scaleToPage(y1 + dy), _scaleToPage(x2 + dx), _scaleToPage(y2 + dy), _scaleToPage(x3 + dx), _scaleToPage(y3 + dy), _scaleToPage(x4 + dx), _scaleToPage(y4 + dy)); if (quadraticBezier.IsStroked) { _gfx.DrawPath( ToXPen(quadraticBezier.Style, _scaleToPage, _sourceDpi, _targetDpi), ToXSolidBrush(quadraticBezier.Style.Fill), path); } else { _gfx.DrawPath( ToXSolidBrush(quadraticBezier.Style.Fill), path); } } else { if (quadraticBezier.IsStroked) { _gfx.DrawBezier( ToXPen(quadraticBezier.Style, _scaleToPage, _sourceDpi, _targetDpi), _scaleToPage(x1 + dx), _scaleToPage(y1 + dy), _scaleToPage(x2 + dx), _scaleToPage(y2 + dy), _scaleToPage(x3 + dx), _scaleToPage(y3 + dy), _scaleToPage(x4 + dx), _scaleToPage(y4 + dy)); } } }
public void DrawQuadraticBezier(object dc, QuadraticBezierShape quadraticBezier, string styleId, double dx, double dy, double scale) { var geometry = new SKPath() { FillType = SKPathFillType.Winding }; SkiaHelper.AddQuad(null, quadraticBezier, dx, dy, geometry); _rootNodes[_currentRootNode].Children.Add(new ChildNode(quadraticBezier, styleId, dx, dy, scale, geometry)); }
/// <inheritdoc/> public override void Draw(object dc, QuadraticBezierShape quadraticBezier, double dx, double dy, object db, object r) { if (!quadraticBezier.IsStroked && !quadraticBezier.IsFilled) { return; } var dxf = dc as DxfDocument; var style = quadraticBezier.Style; var dxfSpline = CreateQuadraticSpline( quadraticBezier.Point1.X + dx, quadraticBezier.Point1.Y + dy, quadraticBezier.Point2.X + dx, quadraticBezier.Point2.Y + dy, quadraticBezier.Point3.X + dx, quadraticBezier.Point3.Y + dy); if (quadraticBezier.IsFilled) { var fill = ToColor(style.Fill); var fillTransparency = ToTransparency(style.Fill); var bounds = new List <HatchBoundaryPath> { new HatchBoundaryPath( new List <EntityObject> { (Spline)dxfSpline.Clone() }) }; var hatch = new Hatch(HatchPattern.Solid, bounds, false); hatch.Layer = _currentLayer; hatch.Color = fill; hatch.Transparency.Value = fillTransparency; dxf.AddEntity(hatch); } if (quadraticBezier.IsStroked) { var stroke = ToColor(style.Stroke); var strokeTansparency = ToTransparency(style.Stroke); var lineweight = ToLineweight(style.Thickness); dxfSpline.Layer = _currentLayer; dxfSpline.Color = stroke; dxfSpline.Transparency.Value = strokeTansparency; dxfSpline.Lineweight = lineweight; dxf.AddEntity(dxfSpline); } }
/// <inheritdoc/> QuadraticBezierShape IShapeFactory.QuadraticBezier(double x1, double y1, double x2, double y2, double x3, double y3, bool isStroked, bool isFilled) { var style = _editor.Project.CurrentStyleLibrary.Selected; var quadraticBezier = QuadraticBezierShape.Create( x1, y1, x2, y2, x3, y3, _editor.Project.Options.CloneStyle ? style.Clone() : style, _editor.Project.Options.PointShape, isStroked, isFilled); _editor.Project.AddShape(_editor.Project.CurrentContainer.CurrentLayer, quadraticBezier); return(quadraticBezier); }
/// <inheritdoc/> QuadraticBezierShape IShapeFactory.QuadraticBezier(PointShape point1, PointShape point2, PointShape point3, bool isStroked, bool isFilled) { var style = _editor.Project.CurrentStyleLibrary.Selected; var quadraticBezier = QuadraticBezierShape.Create( point1, point2, point3, _editor.Project.Options.CloneStyle ? style.Clone() : style, _editor.Project.Options.PointShape, isStroked, isFilled); _editor.Project.AddShape(_editor.Project.CurrentContainer.CurrentLayer, quadraticBezier); return(quadraticBezier); }
/// <inheritdoc/> public override void Draw(object dc, QuadraticBezierShape quadraticBezier, double dx, double dy, object db, object r) { var _gfx = dc as Graphics; Brush brush = ToSolidBrush(quadraticBezier.Style.Fill); Pen pen = ToPen(quadraticBezier.Style, _scaleToPage); double x1 = quadraticBezier.Point1.X; double y1 = quadraticBezier.Point1.Y; double x2 = quadraticBezier.Point1.X + (2.0 * (quadraticBezier.Point2.X - quadraticBezier.Point1.X)) / 3.0; double y2 = quadraticBezier.Point1.Y + (2.0 * (quadraticBezier.Point2.Y - quadraticBezier.Point1.Y)) / 3.0; double x3 = x2 + (quadraticBezier.Point3.X - quadraticBezier.Point1.X) / 3.0; double y3 = y2 + (quadraticBezier.Point3.Y - quadraticBezier.Point1.Y) / 3.0; double x4 = quadraticBezier.Point3.X; double y4 = quadraticBezier.Point3.Y; if (quadraticBezier.IsFilled) { var path = new GraphicsPath(); path.AddBezier( _scaleToPage(x1 + dx), _scaleToPage(y1 + dy), _scaleToPage(x2 + dx), _scaleToPage(y2 + dy), _scaleToPage(x3 + dx), _scaleToPage(y3 + dy), _scaleToPage(x4 + dx), _scaleToPage(y4 + dy)); _gfx.FillPath(brush, path); } if (quadraticBezier.IsStroked) { _gfx.DrawBezier( pen, _scaleToPage(x1 + dx), _scaleToPage(y1 + dy), _scaleToPage(x2 + dx), _scaleToPage(y2 + dy), _scaleToPage(x3 + dx), _scaleToPage(y3 + dy), _scaleToPage(x4 + dx), _scaleToPage(y4 + dy)); } brush.Dispose(); pen.Dispose(); }
/// <inheritdoc/> public override void Draw(object dc, QuadraticBezierShape quadraticBezier, double dx, double dy, object db, object r) { var canvas = dc as SKCanvas; using (SKPaint brush = ToSKPaintBrush(quadraticBezier.Style.Fill)) using (SKPaint pen = ToSKPaintPen(quadraticBezier.Style, _scaleToPage, _sourceDpi, _targetDpi)) using (var path = new SKPath()) { path.MoveTo( _scaleToPage(quadraticBezier.Point1.X + dx), _scaleToPage(quadraticBezier.Point1.Y + dy)); path.QuadTo( _scaleToPage(quadraticBezier.Point2.X + dx), _scaleToPage(quadraticBezier.Point2.Y + dy), _scaleToPage(quadraticBezier.Point3.X + dx), _scaleToPage(quadraticBezier.Point3.Y + dy)); DrawPathInternal(canvas, brush, pen, quadraticBezier.IsStroked, quadraticBezier.IsFilled, path); } }
private void CleanInternal(IToolContext context) { Filters?.ForEach(f => f.Clear(context)); CurrentState = State.StartPoint; if (_quadraticBezier != null) { context.WorkingContainer.Shapes.Remove(_quadraticBezier); context.Renderer.Selected.Remove(_quadraticBezier); context.Renderer.Selected.Remove(_quadraticBezier.StartPoint); context.Renderer.Selected.Remove(_quadraticBezier.Point1); context.Renderer.Selected.Remove(_quadraticBezier.Point2); _quadraticBezier = null; } context.Release?.Invoke(); context.Invalidate?.Invoke(); }
private void Point1Internal(IToolContext context, double x, double y, Modifier modifier) { Filters?.Any(f => f.Process(context, ref x, ref y)); CurrentState = State.StartPoint; context.Renderer.Selected.Remove(_quadraticBezier); context.Renderer.Selected.Remove(_quadraticBezier.StartPoint); context.Renderer.Selected.Remove(_quadraticBezier.Point1); context.Renderer.Selected.Remove(_quadraticBezier.Point2); context.WorkingContainer.Shapes.Remove(_quadraticBezier); _quadraticBezier.Point1 = context.GetNextPoint(x, y, false, 0.0); context.CurrentContainer.Shapes.Add(_quadraticBezier); _quadraticBezier = null; Filters?.ForEach(f => f.Clear(context)); context.Release?.Invoke(); context.Invalidate?.Invoke(); }
private void StartPointInternal(IToolContext context, double x, double y, Modifier modifier) { Filters?.Any(f => f.Process(context, ref x, ref y)); var next = context.GetNextPoint(x, y, false, 0.0); _quadraticBezier = new QuadraticBezierShape() { StartPoint = next, Point1 = (PointShape)next.Copy(null), Point2 = (PointShape)next.Copy(null), Style = context.CurrentStyle }; context.WorkingContainer.Shapes.Add(_quadraticBezier); context.Renderer.Selected.Add(_quadraticBezier); context.Renderer.Selected.Add(_quadraticBezier.StartPoint); context.Renderer.Selected.Add(_quadraticBezier.Point1); context.Renderer.Selected.Add(_quadraticBezier.Point2); context.Capture?.Invoke(); context.Invalidate?.Invoke(); CurrentState = State.Point2; }
/// <inheritdoc/> public override void Draw(object dc, QuadraticBezierShape quadraticBezier, double dx, double dy, object db, object r) { var _dc = dc as DrawingContext; var style = quadraticBezier.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)); } System.Windows.Media.PathGeometry pg = _quadraticBezierCache.Get(quadraticBezier); if (pg != null) { var pf = pg.Figures[0]; pf.StartPoint = new Point(quadraticBezier.Point1.X + dx, quadraticBezier.Point1.Y + dy); pf.IsFilled = quadraticBezier.IsFilled; var qbs = pf.Segments[0] as QuadraticBezierSegment; qbs.Point1 = new Point(quadraticBezier.Point2.X + dx, quadraticBezier.Point2.Y + dy); qbs.Point2 = new Point(quadraticBezier.Point3.X + dx, quadraticBezier.Point3.Y + dy); qbs.IsStroked = quadraticBezier.IsStroked; } else { var pf = new System.Windows.Media.PathFigure() { StartPoint = new Point(quadraticBezier.Point1.X + dx, quadraticBezier.Point1.Y + dy), IsFilled = quadraticBezier.IsFilled }; var qbs = new QuadraticBezierSegment( new Point(quadraticBezier.Point2.X + dx, quadraticBezier.Point2.Y + dy), new Point(quadraticBezier.Point3.X + dx, quadraticBezier.Point3.Y + dy), quadraticBezier.IsStroked); //bs.Freeze(); pf.Segments.Add(qbs); //pf.Freeze(); pg = new System.Windows.Media.PathGeometry(); pg.Figures.Add(pf); //pg.Freeze(); _quadraticBezierCache.Set(quadraticBezier, pg); } DrawPathGeometryInternal(_dc, half, fill, stroke, quadraticBezier.IsStroked, quadraticBezier.IsFilled, pg); }
internal static PathShape ToPathShape(IToolContext context, SKPath path, ShapeStyle style, IBaseShape pointTemplate) { var pathShape = new PathShape() { Points = new ObservableCollection <IPointShape>(), Shapes = new ObservableCollection <IBaseShape>(), FillType = ToPathFillType(path.FillType), Text = new Text(), StyleId = style.Title }; var figureShape = default(FigureShape); using (var iterator = path.CreateRawIterator()) { var points = new SKPoint[4]; var pathVerb = SKPathVerb.Move; var firstPoint = new SKPoint(); var lastPoint = new SKPoint(); while ((pathVerb = iterator.Next(points)) != SKPathVerb.Done) { switch (pathVerb) { case SKPathVerb.Move: { figureShape = new FigureShape() { Points = new ObservableCollection <IPointShape>(), Shapes = new ObservableCollection <IBaseShape>(), IsFilled = true, IsClosed = false }; figureShape.Owner = pathShape; pathShape.Shapes.Add(figureShape); firstPoint = lastPoint = points[0]; } break; case SKPathVerb.Line: { var lastPointShape = pathShape.GetLastPoint(); if (lastPointShape == null) { lastPointShape = new PointShape(points[0].X, points[0].Y, pointTemplate); } var lineShape = new LineShape() { Points = new ObservableCollection <IPointShape>(), StartPoint = lastPointShape, Point = new PointShape(points[1].X, points[1].Y, pointTemplate), Text = new Text(), StyleId = style.Title }; lineShape.Owner = figureShape; lineShape.StartPoint.Owner = lineShape; lineShape.Point.Owner = lineShape; figureShape.Shapes.Add(lineShape); lastPoint = points[1]; } break; case SKPathVerb.Cubic: { var lastPointShape = pathShape.GetLastPoint(); if (lastPointShape == null) { lastPointShape = new PointShape(points[0].X, points[0].Y, pointTemplate); } var cubicBezierShape = new CubicBezierShape() { Points = new ObservableCollection <IPointShape>(), StartPoint = lastPointShape, Point1 = new PointShape(points[1].X, points[1].Y, pointTemplate), Point2 = new PointShape(points[2].X, points[2].Y, pointTemplate), Point3 = new PointShape(points[3].X, points[3].Y, pointTemplate), Text = new Text(), StyleId = style.Title }; cubicBezierShape.Owner = figureShape; cubicBezierShape.StartPoint.Owner = cubicBezierShape; cubicBezierShape.Point1.Owner = cubicBezierShape; cubicBezierShape.Point2.Owner = cubicBezierShape; cubicBezierShape.Point3.Owner = cubicBezierShape; figureShape.Shapes.Add(cubicBezierShape); lastPoint = points[3]; } break; case SKPathVerb.Quad: { var lastPointShape = pathShape.GetLastPoint(); if (lastPointShape == null) { lastPointShape = new PointShape(points[0].X, points[0].Y, pointTemplate); } var quadraticBezierShape = new QuadraticBezierShape() { Points = new ObservableCollection <IPointShape>(), StartPoint = lastPointShape, Point1 = new PointShape(points[1].X, points[1].Y, pointTemplate), Point2 = new PointShape(points[2].X, points[2].Y, pointTemplate), Text = new Text(), StyleId = style.Title }; quadraticBezierShape.Owner = figureShape; quadraticBezierShape.StartPoint.Owner = quadraticBezierShape; quadraticBezierShape.Point1.Owner = quadraticBezierShape; quadraticBezierShape.Point2.Owner = quadraticBezierShape; figureShape.Shapes.Add(quadraticBezierShape); lastPoint = points[2]; } break; case SKPathVerb.Conic: { var lastPointShape = pathShape.GetLastPoint(); if (lastPointShape == null) { lastPointShape = new PointShape(points[0].X, points[0].Y, pointTemplate); } var conicShape = new ConicShape() { Points = new ObservableCollection <IPointShape>(), StartPoint = lastPointShape, Point1 = new PointShape(points[1].X, points[1].Y, pointTemplate), Point2 = new PointShape(points[2].X, points[2].Y, pointTemplate), Weight = iterator.ConicWeight(), Text = new Text(), StyleId = style.Title }; conicShape.Owner = figureShape; conicShape.StartPoint.Owner = conicShape; conicShape.Point1.Owner = conicShape; conicShape.Point2.Owner = conicShape; figureShape.Shapes.Add(conicShape); lastPoint = points[2]; } break; case SKPathVerb.Close: { #if USE_CLOSE_SHAPE var line = new LineShape() { Points = new ObservableCollection <IPointShape>(), StartPoint = pathShape.GetLastPoint(), Point = pathShape.GetFirstPoint(), Text = new Text(), StyleId = style.Title }; line.Owner = figureShape; line.StartPoint.Owner = line; line.Point.Owner = line; figureShape.Shapes.Add(line); #else figureShape.IsClosed = true; firstPoint = lastPoint = new SKPoint(0, 0); #endif } break; } } } return(pathShape); }
public void Draw(object dc, IShapeRenderer renderer, QuadraticBezierShape quadraticBezier, double dx, double dy, double scale) { DrawLine(dc, renderer, quadraticBezier.StartPoint, quadraticBezier.Point1, dx, dy, scale); DrawLine(dc, renderer, quadraticBezier.Point1, quadraticBezier.Point2, dx, dy, scale); }
public void Inherits_From_BaseShape() { var target = new QuadraticBezierShape(); Assert.True(target is BaseShape); }
public abstract void DrawQuadraticBezier(object dc, QuadraticBezierShape quadraticBezier, ShapeStyle style, double dx, double dy);
/// <summary> /// Initializes static designer context. /// </summary> /// <param name="serviceProvider">The service provider.</param> public static void InitializeContext(IServiceProvider serviceProvider) { // Editor Editor = serviceProvider.GetService <ProjectEditor>(); // Recent Projects Editor.RecentProjects = Editor.RecentProjects.Add(RecentFile.Create("Test1", "Test1.project")); Editor.RecentProjects = Editor.RecentProjects.Add(RecentFile.Create("Test2", "Test2.project")); // New Project Editor.OnNewProject(); // Transform Transform = MatrixObject.Identity; // Data var db = Database.Create("Db"); var fields = new string[] { "Column0", "Column1" }; var columns = ImmutableArray.CreateRange(fields.Select(c => Column.Create(db, c))); db.Columns = columns; var values = Enumerable.Repeat("<empty>", db.Columns.Length).Select(c => Value.Create(c)); var record = Record.Create( db, ImmutableArray.CreateRange(values)); db.Records = db.Records.Add(record); db.CurrentRecord = record; Database = db; Data = Context.Create(record); Record = record; // Project IProjectFactory factory = new ProjectFactory(); Project = factory.GetProject(); Template = PageContainer.CreateTemplate(); Page = PageContainer.CreatePage(); var layer = Page.Layers.FirstOrDefault(); layer.Shapes = layer.Shapes.Add(LineShape.Create(0, 0, null, null)); Page.CurrentLayer = layer; Page.CurrentShape = layer.Shapes.FirstOrDefault(); Page.Template = Template; Document = DocumentContainer.Create(); Layer = LayerContainer.Create(); Options = Options.Create(); // State State = ShapeState.Create(); // Style ArgbColor = ArgbColor.Create(128, 255, 0, 0); ArrowStyle = ArrowStyle.Create(); FontStyle = FontStyle.Create(); LineFixedLength = LineFixedLength.Create(); LineStyle = LineStyle.Create(); Style = ShapeStyle.Create("Default"); TextStyle = TextStyle.Create(); // Shapes Arc = ArcShape.Create(0, 0, Style, null); CubicBezier = CubicBezierShape.Create(0, 0, Style, null); Ellipse = EllipseShape.Create(0, 0, Style, null); Group = GroupShape.Create(Constants.DefaulGroupName); Image = ImageShape.Create(0, 0, Style, null, "key"); Line = LineShape.Create(0, 0, Style, null); Path = PathShape.Create(Style, null); Point = PointShape.Create(); QuadraticBezier = QuadraticBezierShape.Create(0, 0, Style, null); Rectangle = RectangleShape.Create(0, 0, Style, null); Text = TextShape.Create(0, 0, Style, null, "Text"); // Path ArcSegment = ArcSegment.Create(PointShape.Create(), PathSize.Create(), 180, true, SweepDirection.Clockwise, true, true); CubicBezierSegment = CubicBezierSegment.Create(PointShape.Create(), PointShape.Create(), PointShape.Create(), true, true); LineSegment = LineSegment.Create(PointShape.Create(), true, true); PathFigure = PathFigure.Create(PointShape.Create(), false, true); PathGeometry = PathGeometry.Create(ImmutableArray.Create <PathFigure>(), FillRule.EvenOdd); PathSize = PathSize.Create(); PolyCubicBezierSegment = PolyCubicBezierSegment.Create(ImmutableArray.Create <PointShape>(), true, true); PolyLineSegment = PolyLineSegment.Create(ImmutableArray.Create <PointShape>(), true, true); PolyQuadraticBezierSegment = PolyQuadraticBezierSegment.Create(ImmutableArray.Create <PointShape>(), true, true); QuadraticBezierSegment = QuadraticBezierSegment.Create(PointShape.Create(), PointShape.Create(), true, true); }