private PathGeometry BuildPolarStripe(RadPolarVector vector, RadPolarVector nextVector, bool isLargeArc) { RadPoint center = this.model.layoutSlot.Center; double radius = this.model.layoutSlot.Width / 2; double endAngle = nextVector.Angle; if (endAngle == 360) { endAngle = 0; } RadPoint arcEndPoint = RadMath.GetArcPoint(endAngle, center, radius); PathGeometry geometry = new PathGeometry(); PathFigure figure = new PathFigure(); figure.IsClosed = true; figure.IsFilled = true; figure.StartPoint = new Point(vector.Center.X, vector.Center.Y); // first line figure.Segments.Add(new LineSegment() { Point = new Point(vector.Point.X, vector.Point.Y) }); // arc ArcSegment arc = new ArcSegment(); arc.SweepDirection = (this.Chart as RadPolarChart).RadialAxis.SweepDirection; arc.Size = new Size(radius, radius); arc.IsLargeArc = isLargeArc; arc.Point = new Point(arcEndPoint.X, arcEndPoint.Y); figure.Segments.Add(arc); // second line figure.Segments.Add(new LineSegment() { Point = new Point(nextVector.Point.X, nextVector.Point.Y) }); geometry.Figures.Add(figure); return(geometry); }
internal override void UpdatePresenters() { RadPolarVector vector1 = this.model.polarVector1; RadPolarVector vector2 = this.model.polarVector2; bool isLargeArc; if (vector1.Angle > vector2.Angle) { isLargeArc = vector1.Angle - vector2.Angle > 180d; } else { isLargeArc = (vector1.Angle + 360) - vector2.Angle > 180d; } if (this.model.Axis.IsInverse) { this.presenter.Data = this.BuildPolarStripe(vector1, vector2, !isLargeArc); } else { this.presenter.Data = this.BuildPolarStripe(vector2, vector1, isLargeArc); } }
private PathGeometry BuildPolarStripe(RadPolarVector vector, RadPolarVector nextVector, bool isLargeArc) { double radius = this.model.radius; Point center = new Point(vector.Center.X, vector.Center.Y); PathGeometry geometry = new PathGeometry(); PathFigure figure = new PathFigure(); figure.IsClosed = true; figure.IsFilled = true; figure.StartPoint = center; // first line LineSegment line1 = new LineSegment(); line1.Point = new Point(vector.Point.X, vector.Point.Y); figure.Segments.Add(line1); // arc ArcSegment arc = new ArcSegment(); arc.SweepDirection = SweepDirection.Clockwise; arc.Size = new Size(radius, radius); arc.IsLargeArc = isLargeArc; arc.Point = new Point(nextVector.Point.X, nextVector.Point.Y); figure.Segments.Add(arc); // second line var line2 = new LineSegment(); line2.Point = center; figure.Segments.Add(line2); geometry.Figures.Add(figure); return(geometry); }