Implement draw_probabilities()

This commit is contained in:
XANTRONIX 2025-03-25 16:41:06 -04:00
parent 8755d4d899
commit e403694e5e

View file

@ -185,7 +185,7 @@ class SPCOutlookProbabilityArea(SPCOutlookArea):
)
def sort_value(self):
if self.probability == 'SIGN':
if self.sig:
return 1.0
return float(self.probability)
@ -496,12 +496,22 @@ class SPCOutlookMap(EquirectMap):
LOGO_MARGIN = 16
__category_colors__ = {
'TSTM': (212, 240, 213),
'MRGL': ( 80, 201, 134),
'SLGT': (255, 255, 81),
'ENH': (255, 192, 108),
'MDT': (255, 80, 80),
'HIGH': (255, 80, 255)
'TSTM': (212/255.0, 240/255.0, 213/255.0),
'MRGL': ( 80/255.0, 201/255.0, 134/255.0),
'SLGT': (255/255.0, 255/255.0, 81/255.0),
'ENH': (255/255.0, 192/255.0, 108/255.0),
'MDT': (255/255.0, 80/255.0, 80/255.0),
'HIGH': (255/255.0, 80/255.0, 255/255.0)
}
__probability_colors__ = {
0.02: (148/255.0, 192/255.0, 224/255.0),
0.05: (139/255.0, 71/255.0, 38/255.0),
0.15: (255/255.0, 200/255.0, 0/255.0),
0.30: (255/255.0, 0/255.0, 0/255.0),
0.45: (255/255.0, 0/255.0, 255/255.0),
0.60: (145/255.0, 44/255.0, 238/255.0),
None: ( 20/255.0, 20/255.0, 20/255.0),
}
def __init__(self):
@ -528,17 +538,11 @@ class SPCOutlookMap(EquirectMap):
cr.show_text(text)
def draw_categories(self,
cr: cairo.Context,
outlook: SPCOutlook):
def draw_categories(self, cr: cairo.Context, outlook: SPCOutlook):
cr.save()
for category in outlook.sorted_categories():
color = self.__category_colors__[category.category]
r = color[0] / 255.0
g = color[1] / 255.0
b = color[2] / 255.0
r, g, b = self.__category_colors__[category.category]
cr.set_source_rgba(r, g, b, 0.35)
self.draw_polygon(cr, category.poly)
@ -549,3 +553,26 @@ class SPCOutlookMap(EquirectMap):
cr.stroke()
cr.restore()
def draw_probabilities(self,
cr: cairo.Context,
outlook: SPCOutlook,
hazard: str):
cr.save()
for probability in outlook.sorted_probabilities():
if probability.hazard != hazard:
continue
r, g, b = self.__probability_colors__[probability.probability]
if not probability.sig:
cr.set_source_rgba(r, g, b, 0.35)
self.draw_polygon(cr, probability.poly)
cr.fill()
cr.set_source_rgba(r*0.75, g*0.75, b*0.75, 1.0)
self.draw_polygon(cr, probability.poly)
cr.stroke()
cr.restore()