2
2
from numpy import sign , arange
3
3
4
4
5
+ def get_text_size (scene ):
6
+ """
7
+
8
+ """
9
+ # Distance of camera from focus point to determine text size
10
+ distance_from_center = mag (scene .center - scene .camera .pos )
11
+
12
+ # Eq generated from data (Using 3rd order polynomial)
13
+ # D | size
14
+ # 0 | 5
15
+ # 0.5 | 8
16
+ # 1 | 10
17
+ # 2 | 12
18
+ # 3 | 14
19
+ # 5 | 15
20
+ val = 0.1114 * distance_from_center ** 3 - 1.336 * distance_from_center ** 2 + 5.8666 * distance_from_center + 5.1711
21
+
22
+ return min (max (val , 10 ), 15 ) # Return val between 10 and 15
23
+
24
+
5
25
def draw_label (label_text , label_position , scene ):
6
26
"""
7
27
Display a label at a given position, with borders and lines
@@ -54,15 +74,7 @@ def draw_text(label_text, label_position, scene):
54
74
:return: The created label object.
55
75
:rtype: class:`vpython.label`
56
76
"""
57
-
58
- # Distance of camera from focus point to determine text size
59
- distance_from_center = mag (scene .center - scene .camera .pos )
60
-
61
- # Far away = smaller text, closer = larger text (up to a min (20) and max (40))
62
- # Typically 5->20 units away
63
- # (eqn and limits modified to suit display better) = -1.3333 * distance_from_center + 46.6667
64
- label_height = - 1.3333 * distance_from_center + 36.6667 # Calculate label height
65
- label_height = max (min (label_height , 35 ), 10 ) # Limit to 10->35
77
+ label_height = get_text_size (scene )
66
78
label_xoffset = 0
67
79
label_yoffset = 0
68
80
label_space = 0
@@ -151,9 +163,11 @@ def update_grid_numbers(focal_point, numbers_list, num_squares, scale, scene):
151
163
pos = vector (x_pos + padding , y_origin + padding , z_origin )
152
164
if append :
153
165
numbers_list .append (draw_text (txt , pos , scene ))
166
+ numbers_list [len (numbers_list )- 1 ].height = get_text_size (scene )
154
167
else :
155
168
numbers_list [index ].text = txt
156
169
numbers_list [index ].pos = pos
170
+ numbers_list [index ].height = get_text_size (scene )
157
171
index += 1
158
172
# Draw the axis label at either the positive or negative side away from center
159
173
# If sign = -1, draw off max side, if sign = 0 or 1, draw off negative side
@@ -164,9 +178,11 @@ def update_grid_numbers(focal_point, numbers_list, num_squares, scale, scene):
164
178
pos = vector (min_x_coord - 1 , y_origin , z_origin )
165
179
if append :
166
180
numbers_list .append (draw_text (txt , pos , scene ))
181
+ numbers_list [len (numbers_list ) - 1 ].height = get_text_size (scene )
167
182
else :
168
183
numbers_list [index ].text = txt
169
184
numbers_list [index ].pos = pos
185
+ numbers_list [index ].height = get_text_size (scene )
170
186
index += 1
171
187
172
188
# Y plane
@@ -176,9 +192,11 @@ def update_grid_numbers(focal_point, numbers_list, num_squares, scale, scene):
176
192
pos = vector (x_origin , y_pos + padding , z_origin + padding )
177
193
if append :
178
194
numbers_list .append (draw_text (txt , pos , scene ))
195
+ numbers_list [len (numbers_list ) - 1 ].height = get_text_size (scene )
179
196
else :
180
197
numbers_list [index ].text = txt
181
198
numbers_list [index ].pos = pos
199
+ numbers_list [index ].height = get_text_size (scene )
182
200
index += 1
183
201
# Draw the axis label at either the positive or negative side away from center
184
202
# If sign = -1, draw off max side, if sign = 0 or 1, draw off negative side
@@ -189,9 +207,11 @@ def update_grid_numbers(focal_point, numbers_list, num_squares, scale, scene):
189
207
pos = vector (x_origin , min_y_coord - 1 , z_origin )
190
208
if append :
191
209
numbers_list .append (draw_text (txt , pos , scene ))
210
+ numbers_list [len (numbers_list ) - 1 ].height = get_text_size (scene )
192
211
else :
193
212
numbers_list [index ].text = txt
194
213
numbers_list [index ].pos = pos
214
+ numbers_list [index ].height = get_text_size (scene )
195
215
index += 1
196
216
197
217
# Z plane
@@ -201,9 +221,11 @@ def update_grid_numbers(focal_point, numbers_list, num_squares, scale, scene):
201
221
pos = vector (x_origin , y_origin - padding , z_pos + padding )
202
222
if append :
203
223
numbers_list .append (draw_text (txt , pos , scene ))
224
+ numbers_list [len (numbers_list ) - 1 ].height = get_text_size (scene )
204
225
else :
205
226
numbers_list [index ].text = txt
206
227
numbers_list [index ].pos = pos
228
+ numbers_list [index ].height = get_text_size (scene )
207
229
index += 1
208
230
# Draw the axis label at either the positive or negative side away from center
209
231
# If sign = -1, draw off max side, if sign = 0 or 1, draw off negative side
@@ -214,7 +236,9 @@ def update_grid_numbers(focal_point, numbers_list, num_squares, scale, scene):
214
236
pos = vector (x_origin , y_origin , min_z_coord - 1 )
215
237
if append :
216
238
numbers_list .append (draw_text (txt , pos , scene ))
239
+ numbers_list [len (numbers_list ) - 1 ].height = get_text_size (scene )
217
240
else :
218
241
numbers_list [index ].text = txt
219
242
numbers_list [index ].pos = pos
243
+ numbers_list [index ].height = get_text_size (scene )
220
244
index += 1
0 commit comments