wolfhece 2.2.2__py3-none-any.whl → 2.2.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wolfhece/PandasGrid.py +67 -0
- wolfhece/PyDraw.py +732 -34
- wolfhece/PyGui.py +6 -2
- wolfhece/PyPalette.py +10 -0
- wolfhece/PyVertex.py +15 -2
- wolfhece/PyWMS.py +72 -3
- wolfhece/acceptability/acceptability_gui.py +99 -155
- wolfhece/acceptability/func.py +88 -8
- wolfhece/apps/check_install.py +6 -6
- wolfhece/apps/splashscreen.py +5 -0
- wolfhece/apps/version.py +1 -1
- wolfhece/assets/__init__.py +1 -0
- wolfhece/assets/speedometer.py +135 -0
- wolfhece/dike.py +684 -0
- wolfhece/drowning_victims/__init__.py +0 -0
- wolfhece/drowning_victims/drowning_class.py +2124 -0
- wolfhece/drowning_victims/drowning_functions.py +1019 -0
- wolfhece/lifewatch.py +88 -0
- wolfhece/scenario/config_manager.py +4 -4
- wolfhece/wolf_array.py +34 -11
- wolfhece/wolf_texture.py +9 -2
- {wolfhece-2.2.2.dist-info → wolfhece-2.2.4.dist-info}/METADATA +3 -1
- {wolfhece-2.2.2.dist-info → wolfhece-2.2.4.dist-info}/RECORD +26 -18
- {wolfhece-2.2.2.dist-info → wolfhece-2.2.4.dist-info}/WHEEL +0 -0
- {wolfhece-2.2.2.dist-info → wolfhece-2.2.4.dist-info}/entry_points.txt +0 -0
- {wolfhece-2.2.2.dist-info → wolfhece-2.2.4.dist-info}/top_level.txt +0 -0
wolfhece/apps/check_install.py
CHANGED
@@ -37,12 +37,12 @@ def main():
|
|
37
37
|
else:
|
38
38
|
ret += 'WolfGPU not installed\n Please install WolfGPU if needed\n\n'
|
39
39
|
|
40
|
-
try:
|
41
|
-
|
42
|
-
|
43
|
-
except ImportError as e:
|
44
|
-
|
45
|
-
|
40
|
+
# try:
|
41
|
+
# from ..libs import wolfpy
|
42
|
+
# ret += 'Wolfpy accessible\n\n'
|
43
|
+
# except ImportError as e:
|
44
|
+
# ret += 'Wolfpy not accessible\n\n'
|
45
|
+
# ret += 'Error : ' + str(e) + '\n\n'
|
46
46
|
|
47
47
|
try:
|
48
48
|
from ..PyGui import MapManager
|
wolfhece/apps/splashscreen.py
CHANGED
@@ -11,6 +11,11 @@ copying or distribution of this file, via any medium, is strictly prohibited.
|
|
11
11
|
"""
|
12
12
|
This is a minimal wxPython SplashScreen
|
13
13
|
"""
|
14
|
+
try:
|
15
|
+
from osgeo import gdal
|
16
|
+
except ImportError as e:
|
17
|
+
print(f"Import Error: {e} - GDAL")
|
18
|
+
print("Please install GDAL for your Python version.")
|
14
19
|
|
15
20
|
from os.path import dirname, join, exists
|
16
21
|
import wx
|
wolfhece/apps/version.py
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
from . import _add_path
|
@@ -0,0 +1,135 @@
|
|
1
|
+
import matplotlib.pyplot as plt
|
2
|
+
import numpy as np
|
3
|
+
from matplotlib.colors import LinearSegmentedColormap
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
class Semi_Circle_Gauge():
|
8
|
+
|
9
|
+
def __init__(self):
|
10
|
+
# Create a polar plot for the speedometer background
|
11
|
+
self.fig, self.ax = plt.subplots(figsize=(6, 3), subplot_kw={'projection': 'polar'})
|
12
|
+
self.ax.set_theta_zero_location('W')
|
13
|
+
self.ax.set_theta_direction(-1)
|
14
|
+
|
15
|
+
def plot_background(self):
|
16
|
+
# Define the ranges for red, yellow, and green
|
17
|
+
theta = np.linspace(0, np.pi, 500)
|
18
|
+
# Create metallic gradient for green with highlights for a modern effect
|
19
|
+
green_cmap = LinearSegmentedColormap.from_list(
|
20
|
+
"metallic_green", ["#003300", "#00FF00", "#66FF66", "#00FF00", "#003300"]
|
21
|
+
)
|
22
|
+
green_colors = green_cmap(np.linspace(0, 1, 500))
|
23
|
+
self.ax.fill_between(theta, 0, 1, where=(theta <= np.pi/3), color=None, alpha=0.7, facecolor=green_colors)
|
24
|
+
# green_cmap = LinearSegmentedColormap.from_list("metallic_green", ["#006400", "#00FF00", "#006400"])
|
25
|
+
# green_colors = green_cmap(np.linspace(0, 1, 500))
|
26
|
+
# ax.fill_between(theta, 0, 1, where=(theta <= np.pi/3), color=None, alpha=0.7, facecolor=green_colors)
|
27
|
+
|
28
|
+
# Create metallic gradient for yellow
|
29
|
+
yellow_cmap = LinearSegmentedColormap.from_list("metallic_yellow", ["#FFD700", "#FFFF00", "#FFD700"])
|
30
|
+
yellow_colors = yellow_cmap(np.linspace(0, 1, 500))
|
31
|
+
self.ax.fill_between(theta, 0, 1, where=((theta > np.pi/3) & (theta <= 2*np.pi/3)), color=None, alpha=0.7, facecolor=yellow_colors)
|
32
|
+
|
33
|
+
# Create metallic gradient for red
|
34
|
+
red_cmap = LinearSegmentedColormap.from_list("metallic_red", ["#8B0000", "#FF0000", "#8B0000"])
|
35
|
+
red_colors = red_cmap(np.linspace(0, 1, 500))
|
36
|
+
self.ax.fill_between(theta, 0, 1, where=(theta > 2*np.pi/3), color=None, alpha=0.7, facecolor=red_colors)
|
37
|
+
|
38
|
+
# Remove polar grid and labels for a clean look
|
39
|
+
self.ax.grid(False)
|
40
|
+
self.ax.set_yticks([])
|
41
|
+
self.ax.set_xticks([])
|
42
|
+
|
43
|
+
self.ax.set_ylim(0, 1)
|
44
|
+
self.ax.set_xlim(0, np.pi)
|
45
|
+
|
46
|
+
def plot_needle(self, value, color='black'):
|
47
|
+
# Add a needle to indicate a specific value
|
48
|
+
width = 0.1 # Needle width
|
49
|
+
self.ax.fill([value, value-width, value, value+width, value],
|
50
|
+
[0, .25, .9, .25, 0], color='black', linewidth=2, zorder=5)
|
51
|
+
self.ax.plot([value, value+width*.9, value],
|
52
|
+
[.9, .25, 0], color='grey', linewidth=2, zorder=6)
|
53
|
+
self.ax.plot([value, value+width, value],
|
54
|
+
[.9, .25, 0], color='white', linewidth=1, zorder=6)
|
55
|
+
# Plot a black semi-circle at the origin
|
56
|
+
semi_circle = plt.Circle((0, 0), 0.1, transform=self.ax.transData._b, color='black', zorder=7)
|
57
|
+
self.ax.add_artist(semi_circle)
|
58
|
+
|
59
|
+
def plot_text(self, text, value):
|
60
|
+
# Add text to the speedometer
|
61
|
+
# The text is above the speedometer in the center
|
62
|
+
# The value is the angle of the needle
|
63
|
+
self.ax.text(np.pi/2., 1.15, text, fontsize=12, ha='center', va='center', color='black')
|
64
|
+
|
65
|
+
class Rectangular_Gauge():
|
66
|
+
|
67
|
+
def __init__(self, horizontal_or_vertical='vertical'):
|
68
|
+
# Create a rectangular plot for the speedometer background
|
69
|
+
|
70
|
+
if horizontal_or_vertical == 'horizontal':
|
71
|
+
self.fig, self.ax = plt.subplots(figsize=(6, 3))
|
72
|
+
self.direction = 'horizontal'
|
73
|
+
else:
|
74
|
+
# Default to vertical if not specified
|
75
|
+
self.fig, self.ax = plt.subplots(figsize=(3, 6))
|
76
|
+
self.direction = 'vertical'
|
77
|
+
|
78
|
+
self.ax.set_xlim(0, 1)
|
79
|
+
self.ax.set_ylim(0, 1)
|
80
|
+
|
81
|
+
def plot_background(self):
|
82
|
+
# Define the ranges for red, yellow, and green
|
83
|
+
|
84
|
+
if self.direction == 'horizontal':
|
85
|
+
# Horizontal speedometer
|
86
|
+
self.ax.fill_between([0, 1/3], 0, 1, color='green', alpha=0.7)
|
87
|
+
self.ax.fill_between([1/3, 2/3], 0, 1, color='yellow', alpha=0.7)
|
88
|
+
self.ax.fill_between([2/3, 1], 0, 1, color='red', alpha=0.7)
|
89
|
+
else:
|
90
|
+
# Vertical speedometer
|
91
|
+
self.ax.fill_between([0, 1], 0, 1/3, color='green', alpha=0.7)
|
92
|
+
self.ax.fill_between([0, 1], 1/3, 2/3, color='yellow', alpha=0.7)
|
93
|
+
self.ax.fill_between([0, 1], 2/3, 1, color='red', alpha=0.7)
|
94
|
+
|
95
|
+
# Remove grid and ticks for a clean look
|
96
|
+
self.ax.grid(False)
|
97
|
+
self.ax.set_xticks([])
|
98
|
+
self.ax.set_yticks([])
|
99
|
+
|
100
|
+
def plot_needle(self, value):
|
101
|
+
# Add a needle to indicate a specific value
|
102
|
+
width = 0.01 # Needle width
|
103
|
+
|
104
|
+
if self.direction == 'horizontal':
|
105
|
+
# Horizontal speedometer
|
106
|
+
self.ax.fill([value-width, value+width, value+width, value-width],
|
107
|
+
[0.25, 0.25, 0.9, 0.9], color='black', linewidth=2)
|
108
|
+
else:
|
109
|
+
# Vertical speedometer
|
110
|
+
self.ax.fill([0, 1, 1, 0],
|
111
|
+
[value-width, value-width, value+width, value+width], color='black', linewidth=2)
|
112
|
+
|
113
|
+
def plot_text(self, text, value):
|
114
|
+
# Add text to the speedometer
|
115
|
+
self.ax.text(0.5, 1.15, text, fontsize=12, ha='center', va='center', color='black')
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
if __name__ == "__main__":
|
121
|
+
# Test the speedometer function
|
122
|
+
fig = Semi_Circle_Gauge()
|
123
|
+
import matplotlib.animation as animation
|
124
|
+
|
125
|
+
def update(frame):
|
126
|
+
fig.ax.clear()
|
127
|
+
fig.plot_background() # Reinitialize the speedometer to clear previous needle
|
128
|
+
fig.plot_needle(frame)
|
129
|
+
fig.plot_text("Danger: {:.2f}".format(frame), frame)
|
130
|
+
|
131
|
+
# Create an animation with values ranging from 0 to π
|
132
|
+
ani = animation.FuncAnimation(fig.fig, update, frames=np.linspace(0, np.pi, 100), interval=50)
|
133
|
+
|
134
|
+
plt.show()
|
135
|
+
pass
|