Skip to content

Commit

Permalink
Draw full circle without slice spacing
Browse files Browse the repository at this point in the history
  • Loading branch information
danielgindi committed Feb 19, 2016
1 parent b390f38 commit 2c7b714
Showing 1 changed file with 36 additions and 6 deletions.
42 changes: 36 additions & 6 deletions Charts/Classes/Renderers/PieChartRenderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -72,18 +72,29 @@ public class PieChartRenderer: ChartDataRendererBase

let entryCount = dataSet.entryCount
var drawAngles = chart.drawAngles
let sliceSpace = dataSet.sliceSpace
let center = chart.centerCircleBox
let radius = chart.radius
let innerRadius = drawHoleEnabled && holeTransparent ? radius * holeRadiusPercent : 0.0

var visibleAngleCount = 0
for (var j = 0; j < entryCount; j++)
{
guard let e = dataSet.entryForIndex(j) else { continue }
if ((abs(e.value) > 0.000001))
{
visibleAngleCount++;
}
}

CGContextSaveGState(context)

for (var j = 0; j < entryCount; j++)
{
let sliceAngle = drawAngles[j]
let sliceSpace = dataSet.sliceSpace
let sliceSpaceOuterAngle = sliceSpace / (ChartUtils.Math.FDEG2RAD * radius)
let sliceSpaceInnerAngle = innerRadius == 0.0 ? 0.0 : sliceSpace / (ChartUtils.Math.FDEG2RAD * innerRadius)
let sliceSpaceOuterAngle = visibleAngleCount == 1 ?
0.0 :
sliceSpace / (ChartUtils.Math.FDEG2RAD * radius)

guard let e = dataSet.entryForIndex(j) else { continue }

Expand Down Expand Up @@ -120,6 +131,9 @@ public class PieChartRenderer: ChartDataRendererBase

if (innerRadius > 0.0)
{
let sliceSpaceInnerAngle = visibleAngleCount == 1 ?
0.0 :
sliceSpace / (ChartUtils.Math.FDEG2RAD * innerRadius)
let startAngleInner = rotationAngle + (angle + sliceSpaceInnerAngle / 2.0) * phaseY
var sweepAngleInner = (sliceAngle - sliceSpaceInnerAngle) * phaseY
if (sweepAngleInner < 0.0)
Expand Down Expand Up @@ -444,6 +458,17 @@ public class PieChartRenderer: ChartDataRendererBase
continue
}

let entryCount = set.entryCount
var visibleAngleCount = 0
for (var j = 0; j < entryCount; j++)
{
guard let e = set.entryForIndex(j) else { continue }
if ((abs(e.value) > 0.000001))
{
visibleAngleCount++;
}
}

if (xIndex == 0)
{
angle = 0.0
Expand All @@ -453,10 +478,12 @@ public class PieChartRenderer: ChartDataRendererBase
angle = absoluteAngles[xIndex - 1] * phaseX
}

let sliceAngle = drawAngles[xIndex]
let sliceSpace = set.sliceSpace
let sliceSpaceOuterAngle = sliceSpace / (ChartUtils.Math.FDEG2RAD * radius)
let sliceSpaceInnerAngle = innerRadius == 0.0 ? 0.0 : sliceSpace / (ChartUtils.Math.FDEG2RAD * innerRadius)

let sliceAngle = drawAngles[xIndex]
let sliceSpaceOuterAngle = visibleAngleCount == 1 ?
0.0 :
sliceSpace / (ChartUtils.Math.FDEG2RAD * radius)

let shift = set.selectionShift
let highlightedRadius = radius + shift
Expand Down Expand Up @@ -488,6 +515,9 @@ public class PieChartRenderer: ChartDataRendererBase

if (innerRadius > 0.0)
{
let sliceSpaceInnerAngle = visibleAngleCount == 1 ?
0.0 :
sliceSpace / (ChartUtils.Math.FDEG2RAD * innerRadius)
let startAngleInner = rotationAngle + (angle + sliceSpaceInnerAngle / 2.0) * phaseY
var sweepAngleInner = (sliceAngle - sliceSpaceInnerAngle) * phaseY
if (sweepAngleInner < 0.0)
Expand Down

2 comments on commit 2c7b714

@liuxuan30
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@danielgindi seems like your commits since Feb 18 will fail the tests, so does my #765. Have you checked it? I run test on your master on my machine will fail. Seems tests not updated?

@danielgindi
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not about the pie charts, but related to #767. Hope to get this resolved soon :-)
As long as people use release versions they should be ok...

Please sign in to comment.