diff --git a/lib/xmet/spc.py b/lib/xmet/spc.py index 47ec1a4..14ff4c6 100644 --- a/lib/xmet/spc.py +++ b/lib/xmet/spc.py @@ -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()