@@ -79,6 +79,26 @@ def diagram(self) -> ThrustDiagram:
7979 def diagram (self , diagram : ThrustDiagram ) -> None :
8080 self .mesh = diagram
8181
82+ def compute_pipe_colors (self , tol = 1e-3 ) -> None :
83+
84+ edges = list (self .mesh .edges ())
85+
86+ forces = [self .mesh .edge_attribute (edge , "_f" ) for edge in edges ]
87+ magnitudes = [abs (f ) for f in forces ]
88+ fmin = min (magnitudes )
89+ fmax = max (magnitudes )
90+ if fmax - fmin < tol :
91+ return
92+ colors = []
93+
94+ for force , magnitude in zip (forces , magnitudes ):
95+ if fmin != fmax :
96+ colors .append (Color .from_i ((magnitude - fmin ) / (fmax - fmin )))
97+
98+ pipe_colors = dict (zip (edges , colors ))
99+
100+ return pipe_colors
101+
82102 def draw (self ):
83103 faces = []
84104 if self .show_faces :
@@ -211,13 +231,19 @@ def draw_pipes(self):
211231 scale = self .session .settings .drawing .scale_pipes
212232 tol = self .session .settings .drawing .tol_pipes
213233
234+ pipe_colors = self .compute_pipe_colors ()
235+
214236 for edge in self .mesh .edges ():
215237 force = self .mesh .edge_attribute (edge , "_f" )
216238
217239 if force != 0 :
218240 line = self .mesh .edge_line (edge )
219241 radius = abs (force ) * scale
242+
220243 color = self .compressioncolor
244+ if self .session .settings .drawing .show_forces :
245+ color = pipe_colors [edge ]
246+
221247 if radius > tol :
222248 pipe = Cylinder .from_line_and_radius (line , radius )
223249 name = "{}.edge.{}.force" .format (self .mesh .name , edge )
0 commit comments