public Primitives.Path Create( double x, double y, double width, double height, double radius, Corners corners ) { bool topLeft = (corners & Corners.TopLeft) != 0; bool topRight = (corners & Corners.TopRight) != 0; bool bottomLeft = (corners & Corners.BottomLeft) != 0; bool bottomRight = (corners & Corners.BottomRight) != 0; Primitives.Path path = new Primitives.Path(); path.Add( new Primitives.Path.Move( new Types.Point( x + (topLeft ? radius : 0), y ) ) ); path.Add( new Primitives.Path.Line( new Types.Point( x + width - (topRight ? radius : 0), y ) ) ); if( topRight ) { path.Add( new Primitives.Path.EllipticalArc( radius, radius, 0, false, true, new Types.Point( x + width, y + radius ) ) ); } path.Add( new Primitives.Path.Line( new Types.Point( x + width, y + height - (bottomRight ? radius : 0) ) ) ); if( bottomRight ) { path.Add( new Primitives.Path.EllipticalArc( radius, radius, 0, false, true, new Types.Point( x + width - radius, y + height ) ) ); } path.Add( new Primitives.Path.Line( new Types.Point( x + (bottomLeft ? radius : 0), y + height ) ) ); if( bottomLeft ) { path.Add( new Primitives.Path.EllipticalArc( radius, radius, 0, false, true, new Types.Point( x, y + height - radius ) ) ); } path.Add( new Primitives.Path.Line( new Types.Point( x, y + (topLeft ? radius : 0) ) ) ); if( topLeft ) { path.Add( new Primitives.Path.EllipticalArc( radius, radius, 0, false, true, new Types.Point( x + radius, y ) ) ); } path.Add( new Primitives.Path.Close() ); return path; }
protected override Primitives.VisualItem CreateItem( Primitives.BoundsMarker marker ) { Primitives.Path rect = new Primitives.Path(); rect.Add( new Primitives.Path.Move( marker.Rectangle.TopLeft ) ); rect.Add( new Primitives.Path.Line( marker.Rectangle.TopRight ) ); rect.Add( new Primitives.Path.Line( marker.Rectangle.BottomRight ) ); rect.Add( new Primitives.Path.Line( marker.Rectangle.BottomLeft ) ); rect.Add( new Primitives.Path.Line( marker.Rectangle.TopLeft ) ); rect.Add( new Primitives.Path.Close() ); return rect; }
public Primitives.Path Create( double x, double y, double width, double height ) { Primitives.Path path = new Primitives.Path(); path.Add( new Primitives.Path.Move( new Types.Point( x, y ) ) ); path.Add( new Primitives.Path.Line( new Types.Point( x + width, y ) ) ); path.Add( new Primitives.Path.Line( new Types.Point( x + width, y + height ) ) ); path.Add( new Primitives.Path.Line( new Types.Point( x, y + height ) ) ); path.Add( new Primitives.Path.Line( new Types.Point( x, y ) ) ); path.Add( new Primitives.Path.Close() ); return path; }
public Primitives.Path Create( double x, double y, double width, double height ) { Primitives.Path path = new Primitives.Path(); path.Add( new Primitives.Path.Move( new Types.Point( x + width / 2, y ) ) ); path.Add( new Primitives.Path.EllipticalArc( width / 2, height / 2, 0, false, true, new Types.Point( x + width, y + height / 2 ) ) ); path.Add( new Primitives.Path.EllipticalArc( width / 2, height / 2, 0, false, true, new Types.Point( x + width / 2, y + height ) ) ); path.Add( new Primitives.Path.EllipticalArc( width / 2, height / 2, 0, false, true, new Types.Point( x, y + height / 2 ) ) ); path.Add( new Primitives.Path.EllipticalArc( width / 2, height / 2, 0, false, true, new Types.Point( x + width / 2, y ) ) ); path.Add( new Primitives.Path.Close() ); return path; }
private Primitives.Path CreateSlice( int index, int count, double start, double sweep, double radius, double move ) { Primitives.Path path = new Primitives.Path(); double cx = Math.Sin( start + sweep / 2 ) * move, cy = -Math.Cos( start + sweep / 2 ) * move; double sx = Math.Sin( start ) * radius, sy = -Math.Cos( start ) * radius; double ex = Math.Sin( start + sweep ) * radius, ey = -Math.Cos( start + sweep ) * radius; path.Add( new Primitives.Path.Move( new Types.Point( cx, cy ) ) ); path.Add( new Primitives.Path.Line( new Types.Point( cx + sx, cy + sy ) ) ); path.Add( new Primitives.Path.EllipticalArc( radius, radius, 0, (sweep > Math.PI), true, new Types.Point( cx + ex, cy + ey ) ) ); path.Add( new Primitives.Path.Line( new Types.Point( cx, cy ) ) ); path.Add( new Primitives.Path.Close() ); path.Style.Add( "GraphPiece" ); path.Style.AddExtra( "RowIndex", index.ToString() ); path.Style.AddExtra( "RowCount", count.ToString() ); return path; }
public override Primitives.Path FlattenPath( Primitives.Path source ) { PathCommandVisitor visitor = new PathCommandVisitor(); foreach( Primitives.Path.Command pathCommand in source.Commands ) { pathCommand.Visit( visitor ); } using( GraphicsPath gp = visitor.GetGraphicsPath() ) { gp.Flatten(); PointF lastPoint = PointF.Empty; Primitives.Path path = new Primitives.Path(); path.Pen = source.Pen; path.Brush = source.Brush; for( int i = 0; i < gp.PointCount; ++i ) { PointF point = gp.PathPoints[i]; byte type = gp.PathTypes[i]; PointF nextPoint = point; if( i < gp.PointCount - 1 && gp.PathTypes[i + 1] == 1 ) { nextPoint = gp.PathPoints[i + 1]; } switch( type ) { case 0: { path.Add( new Primitives.Path.Move( new Types.Point( point.X, point.Y ) ) ); break; } case 1: { bool first = (i == 0) || gp.PathTypes[i - 1] != 1; bool last = (i == gp.PointCount - 1) || gp.PathTypes[i + 1] != 1; if( first || last || Math.Sqrt( Math.Pow( point.X - lastPoint.X, 2 ) + Math.Pow( point.Y - lastPoint.Y, 2 ) ) > _accuracy || Math.Sqrt( Math.Pow( point.X - nextPoint.X, 2 ) + Math.Pow( point.Y - nextPoint.Y, 2 ) ) > _accuracy ) { path.Add( new Primitives.Path.Line( new Types.Point( point.X, point.Y ) ) ); lastPoint = point; } break; } case 129: { path.Add( new Primitives.Path.Line( new Types.Point( point.X, point.Y ) ) ); path.Add( new Primitives.Path.Close() ); break; } default: throw new InvalidOperationException(); } } return path; } }