@@ -77,7 +77,7 @@ def interpolate_color(color1, color2, t):
7777 return Color .FromArgb (r , g , b )
7878
7979
80- def value_to_color (value , min_value , max_value , settings ):
80+ def value_to_color (value , min_value , max_value , palette ):
8181 """
8282 Map a value to a color based on a colormap.
8383 """
@@ -87,7 +87,7 @@ def value_to_color(value, min_value, max_value, settings):
8787 elif value > max_value :
8888 value = max_value
8989
90- colormap = settings . palette .colors
90+ colormap = palette .colors
9191
9292 # Normalize the value within the range
9393 if min_value == max_value :
@@ -109,24 +109,24 @@ def value_to_color(value, min_value, max_value, settings):
109109 return interpolate_color (color1 , color2 , t )
110110
111111
112- def color_pcd (pcd , values , min_value , max_value , settings ):
112+ def color_pcd (pcd , values , min_value , max_value , palette ):
113113 """
114114 Colors a point cloud data based on given values and palette.
115115 """
116116
117117 for i , p in enumerate (pcd ):
118118 # check if values is a list
119119 if isinstance (values , list ):
120- mapped_color = value_to_color (values [i ], min_value , max_value , settings )
120+ mapped_color = value_to_color (values [i ], min_value , max_value , palette )
121121 else :
122- mapped_color = value_to_color (values , min_value , max_value , settings )
122+ mapped_color = value_to_color (values , min_value , max_value , palette )
123123
124124 p .Color = mapped_color
125125
126126 return pcd
127127
128128
129- def color_mesh (mesh , values , min_value , max_value , settings ):
129+ def color_mesh (mesh , values , min_value , max_value , palette ):
130130 """
131131 Colors a mesh based on given values and palette.
132132 """
@@ -136,15 +136,15 @@ def color_mesh(mesh, values, min_value, max_value, settings):
136136 for i , vertex in enumerate (mesh .Vertices ):
137137 # check if values is a list
138138 if isinstance (values , list ):
139- mapped_color = value_to_color (values [i ], min_value , max_value , settings )
139+ mapped_color = value_to_color (values [i ], min_value , max_value , palette )
140140 else :
141- mapped_color = value_to_color (values , min_value , max_value , settings )
141+ mapped_color = value_to_color (values , min_value , max_value , palette )
142142 mesh .VertexColors .Add (mapped_color .R , mapped_color .G , mapped_color .B )
143143
144144 return mesh
145145
146146
147- def create_legend (min_value , max_value , settings , steps = 10 , plane = rg .Plane .WorldXY ,
147+ def create_legend (min_value , max_value , palette , steps = 10 , plane = rg .Plane .WorldXY ,
148148 width = 0.5 , total_height = 10 , spacing = 0 ):
149149 """
150150 Create a legend in Rhino with colored hatches and text labels.
@@ -157,7 +157,7 @@ def create_legend(min_value, max_value, settings, steps=10, plane = rg.Plane.Wor
157157 for i in range (steps + 1 ):
158158
159159 value = min_value + (max_value - min_value ) * i / steps
160- color = value_to_color (value , min_value , max_value , settings )
160+ color = value_to_color (value , min_value , max_value , palette )
161161
162162 if i > 0 :
163163 mesh = rg .Mesh ()
@@ -193,18 +193,20 @@ def create_legend(min_value, max_value, settings, steps=10, plane = rg.Plane.Wor
193193 previous_color = color
194194
195195 if plane != rg .Plane .WorldXY :
196- trans = rg .Transform .PlaneToPlane (rg .Plane .WorldXY ,plane )
196+ trans = rg .Transform .PlaneToPlane (rg .Plane .WorldXY , plane )
197197 for geo in legend_geometry :
198198 geo .Transform (trans )
199199
200200 return legend_geometry
201201
202202
203- def create_histogram (values , min_value , max_value , steps = 100 , plane = rg .Plane .WorldXY , height = 0.1 , spacing = 0 ):
203+ def create_histogram (values , min_value , max_value , steps = 100 , plane = rg .Plane .WorldXY , total_height = 10 , scaling_factor = 0.01 , spacing = 0 ):
204204 """
205205 Create a histogram in Rhino with a polyline representing value frequencies.
206206 """
207207
208+ height = total_height / steps
209+
208210 histogram_geometry = []
209211
210212 # Calculate the size of each bin
@@ -231,7 +233,7 @@ def create_histogram(values, min_value, max_value, steps=100, plane=rg.Plane.Wor
231233 points = []
232234 for i in range (steps + 1 ):
233235
234- bar_height = frequencies [i ] * 0.01 * height
236+ bar_height = frequencies [i ] * scaling_factor
235237 points .append (rg .Point3d (- bar_height - (1.5 * height ), i * (spacing + height ), 0 ))
236238
237239 # Create the polyline and add it to the histogram geometry
@@ -277,7 +279,6 @@ def filter_values_based_on_valuetype(results, settings):
277279 min_value = min (values )
278280 max_value = max (values )
279281
280-
281282 # threshold values
282283 if settings .lower_threshold is not None :
283284 min_value = settings .lower_threshold
0 commit comments