Skip to content

Commit 58fcd31

Browse files
committed
WIP-ADD expose more setting options to the viz_settings component
1 parent 7e0c61c commit 58fcd31

File tree

4 files changed

+342
-525
lines changed

4 files changed

+342
-525
lines changed

src/gh/components/DF_vizualization/code.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
class Vizualization(component):
1919
def RunScript(self,
20-
i_results,
21-
i_viz_settings):
20+
i_results,
21+
i_viz_settings):
2222
"""
2323
Adds color to the mesh or point cloud and generates a corresponding legend and histogram
2424
"""
@@ -32,20 +32,30 @@ def RunScript(self,
3232
o_source = [df_cvt_bindings.cvt_dfcloud_2_rhcloud(src) for src in i_results.source]
3333

3434
# color geometry
35-
o_colored_geo = [df_vizualization.color_pcd(src, dist, min_value, max_value, i_viz_settings) for src, dist in zip(o_source, values)]
36-
35+
o_colored_geo = [df_vizualization.color_pcd(src, dist, min_value, max_value, i_viz_settings.palette) for src, dist in zip(o_source, values)]
3736

3837
elif type(i_results.source[0]) is rg.Mesh:
3938
# convert to Rhino Mesh
4039
o_source = i_results.source
4140

4241
# color geometry
43-
o_colored_geo = [df_vizualization.color_mesh(src, dist, min_value, max_value, i_viz_settings) for src, dist in zip(o_source, values)]
44-
45-
o_legend = df_vizualization.create_legend(min_value, max_value, i_viz_settings)
46-
47-
o_histogram = df_vizualization.create_histogram(values, min_value, max_value)
48-
42+
o_colored_geo = [df_vizualization.color_mesh(src, dist, min_value, max_value, i_viz_settings.palette) for src, dist in zip(o_source, values)]
43+
44+
o_legend = df_vizualization.create_legend(min_value,
45+
max_value,
46+
i_viz_settings.palette,
47+
steps=10,
48+
plane=i_viz_settings.legend_plane,
49+
width=i_viz_settings.legend_width,
50+
total_height=i_viz_settings.legend_height)
51+
52+
o_histogram = df_vizualization.create_histogram(values,
53+
min_value,
54+
max_value,
55+
steps=100,
56+
plane=i_viz_settings.legend_plane,
57+
total_height=i_viz_settings.legend_height,
58+
scaling_factor=i_viz_settings.histogram_scale_factor)
4959
return o_source, o_colored_geo, o_legend, o_histogram
5060

5161

src/gh/components/DF_vizualization_settings/code.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,18 @@ def RunScript(self,
2626
i_legend_width,
2727
i_legend_plane,
2828
i_histogram_scale_factor):
29+
2930
"""
30-
sth
31+
Compiles all the vizualization settings to feed to the vizualization component
3132
"""
3233

34+
# set default values
35+
if i_palette is None: i_palette = "Jet"
36+
if i_legend_height is None: i_legend_height = 10
37+
if i_legend_width is None: i_legend_width = 0.5
38+
if i_legend_plane is None: i_legend_plane = rg.Plane.WorldXY
39+
if i_histogram_scale_factor is None: i_histogram_scale_factor = 0.01
40+
3341
# pack settings
3442
o_viz_settings = df_vizualization.DFVizSettings(i_value_type,
3543
i_upper_threshold,

src/gh/diffCheck/diffCheck/df_vizualization.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)