Add draw_wedge function that was removed from ReportUtils.py.
svn: r13735
This commit is contained in:
parent
291b13090b
commit
6392a15610
@ -27,6 +27,7 @@
|
|||||||
#
|
#
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
from gettext import gettext as _
|
from gettext import gettext as _
|
||||||
|
from math import pi, cos, sin
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -58,6 +59,65 @@ RADIAL_ROUNDABOUT = 1
|
|||||||
|
|
||||||
pt2cm = ReportUtils.pt2cm
|
pt2cm = ReportUtils.pt2cm
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# private functions
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------
|
||||||
|
def draw_wedge(doc, style, centerx, centery, radius, start_angle,
|
||||||
|
end_angle, short_radius=0):
|
||||||
|
"""
|
||||||
|
Draw a wedge shape.
|
||||||
|
"""
|
||||||
|
while end_angle < start_angle:
|
||||||
|
end_angle += 360
|
||||||
|
|
||||||
|
p = []
|
||||||
|
|
||||||
|
degreestoradians = pi / 180.0
|
||||||
|
radiansdelta = degreestoradians / 2
|
||||||
|
sangle = start_angle * degreestoradians
|
||||||
|
eangle = end_angle * degreestoradians
|
||||||
|
while eangle < sangle:
|
||||||
|
eangle = eangle + 2 * pi
|
||||||
|
angle = sangle
|
||||||
|
|
||||||
|
if short_radius == 0:
|
||||||
|
if (end_angle - start_angle) != 360:
|
||||||
|
p.append((centerx, centery))
|
||||||
|
else:
|
||||||
|
origx = (centerx + cos(angle) * short_radius)
|
||||||
|
origy = (centery + sin(angle) * short_radius)
|
||||||
|
p.append((origx, origy))
|
||||||
|
|
||||||
|
while angle < eangle:
|
||||||
|
x = centerx + cos(angle) * radius
|
||||||
|
y = centery + sin(angle) * radius
|
||||||
|
p.append((x, y))
|
||||||
|
angle = angle + radiansdelta
|
||||||
|
x = centerx + cos(eangle) * radius
|
||||||
|
y = centery + sin(eangle) * radius
|
||||||
|
p.append((x, y))
|
||||||
|
|
||||||
|
if short_radius:
|
||||||
|
x = centerx + cos(eangle) * short_radius
|
||||||
|
y = centery + sin(eangle) * short_radius
|
||||||
|
p.append((x, y))
|
||||||
|
|
||||||
|
angle = eangle
|
||||||
|
while angle >= sangle:
|
||||||
|
x = centerx + cos(angle) * short_radius
|
||||||
|
y = centery + sin(angle) * short_radius
|
||||||
|
p.append((x, y))
|
||||||
|
angle -= radiansdelta
|
||||||
|
doc.draw_path(style, p)
|
||||||
|
|
||||||
|
delta = (eangle - sangle) / 2.0
|
||||||
|
rad = short_radius + (radius - short_radius) / 2.0
|
||||||
|
|
||||||
|
return ( (centerx + cos(sangle + delta) * rad),
|
||||||
|
(centery + sin(sangle + delta) * rad))
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# FanChart
|
# FanChart
|
||||||
@ -89,7 +149,8 @@ class FanChart(Report):
|
|||||||
self.circle = menu.get_option_by_name('circle').get_value()
|
self.circle = menu.get_option_by_name('circle').get_value()
|
||||||
self.background = menu.get_option_by_name('background').get_value()
|
self.background = menu.get_option_by_name('background').get_value()
|
||||||
self.radial = menu.get_option_by_name('radial').get_value()
|
self.radial = menu.get_option_by_name('radial').get_value()
|
||||||
self.calendar = gen.lib.date.Date.ui_calendar_names[menu.get_option_by_name('calendar').get_value()]
|
selected_cal = menu.get_option_by_name('calendar').get_value()
|
||||||
|
self.calendar = gen.lib.date.Date.ui_calendar_names[selected_cal]
|
||||||
pid = menu.get_option_by_name('pid').get_value()
|
pid = menu.get_option_by_name('pid').get_value()
|
||||||
self.center_person = database.get_person_from_gramps_id(pid)
|
self.center_person = database.get_person_from_gramps_id(pid)
|
||||||
if (self.center_person == None) :
|
if (self.center_person == None) :
|
||||||
@ -279,7 +340,7 @@ class FanChart(Report):
|
|||||||
for index in range(segments - 1, 2*segments - 1):
|
for index in range(segments - 1, 2*segments - 1):
|
||||||
start_angle = end_angle
|
start_angle = end_angle
|
||||||
end_angle = start_angle + delta
|
end_angle = start_angle + delta
|
||||||
(xc,yc) = ReportUtils.draw_wedge(self.doc,background_style, x, y, rad2,
|
(xc,yc) = draw_wedge(self.doc, background_style, x, y, rad2,
|
||||||
start_angle, end_angle, rad1)
|
start_angle, end_angle, rad1)
|
||||||
if self.map[index]:
|
if self.map[index]:
|
||||||
if (generation == 0) and self.circle == FULL_CIRCLE:
|
if (generation == 0) and self.circle == FULL_CIRCLE:
|
||||||
@ -311,7 +372,7 @@ class FanChart(Report):
|
|||||||
for index in range(segments - 1, 2*segments - 1):
|
for index in range(segments - 1, 2*segments - 1):
|
||||||
start_angle = end_angle
|
start_angle = end_angle
|
||||||
end_angle = start_angle + delta
|
end_angle = start_angle + delta
|
||||||
(xc,yc) = ReportUtils.draw_wedge(self.doc,background_style, x, y, rad2,
|
(xc,yc) = draw_wedge(self.doc,background_style, x, y, rad2,
|
||||||
start_angle, end_angle, rad1)
|
start_angle, end_angle, rad1)
|
||||||
text_angle += delta
|
text_angle += delta
|
||||||
if self.map[index]:
|
if self.map[index]:
|
||||||
|
Loading…
Reference in New Issue
Block a user