def draw
@hide_line_markers = true
super
return unless @has_data
diameter = @graph_height
radius = ([@graph_width, @graph_height].min / 2.0) * 0.8
center_x = @graph_left + (@graph_width / 2.0)
center_y = @graph_top + (@graph_height / 2.0) - 10
total_sum = sums_for_pie()
prev_degrees = @zero_degree
data = (@sort ? @data.sort{ |a, b| a[DATA_VALUES_INDEX].first <=> b[DATA_VALUES_INDEX].first } : @data)
data.each do |data_row|
if data_row[DATA_VALUES_INDEX].first > 0
@d = @d.stroke data_row[DATA_COLOR_INDEX]
@d = @d.fill 'transparent'
@d.stroke_width(radius)
current_degrees = (data_row[DATA_VALUES_INDEX].first / total_sum) * 360.0
@d = @d.ellipse(center_x, center_y,
radius / 2.0, radius / 2.0,
prev_degrees, prev_degrees + current_degrees + 0.5)
half_angle = prev_degrees + ((prev_degrees + current_degrees) - prev_degrees) / 2
label_val = ((data_row[DATA_VALUES_INDEX].first / total_sum) * 100.0).round
unless label_val < @hide_labels_less_than
label_string = @show_values_as_labels ? data_row[DATA_VALUES_INDEX].first.to_s : label_val.to_s + '%'
@d = draw_label(center_x,center_y, half_angle,
radius + (radius * @text_offset_percentage),
label_string)
end
prev_degrees += current_degrees
end
end
@d.draw(@base_image)
end