Skip to content

Commit 06233f5

Browse files
committed
screw_thread.py: fixed bug in internal neck-in
1 parent 58660de commit 06233f5

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

solid/screw_thread.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def thread( outline_pts, inner_rad, pitch, length, external=True, segments_per_r
6767
outline_h = max_bb[1] - min_bb[1]
6868

6969
min_rad = max( 0, inner_rad-outline_w-EPSILON)
70+
max_rad = inner_rad + outline_w + EPSILON
7071

7172
# outline_pts, since they were created in 2D , are in the XY plane.
7273
# But spirals move a profile in XZ around the Z-axis. So swap Y and Z
@@ -89,12 +90,27 @@ def thread( outline_pts, inner_rad, pitch, length, external=True, segments_per_r
8990
angle = total_angle
9091
elevation = length
9192

93+
# Handle the neck-in radius for internal and external threads
9294
rad = inner_rad
95+
int_ext_mult = 1 if external else -1
96+
neck_in_rad = min_rad if external else max_rad
97+
9398
if angle < neck_in_degrees:
94-
rad = min_rad + angle/neck_in_degrees * outline_w
95-
elif angle > total_angle - neck_out_degrees:
96-
rad =min_rad + (total_angle - angle)/neck_out_degrees * outline_w
99+
rad = neck_in_rad + int_ext_mult * angle / neck_in_degrees * outline_w
100+
elif angle > total_angle - neck_in_degrees:
101+
rad = neck_in_rad + int_ext_mult * (total_angle - angle)/neck_out_degrees * outline_w
97102

103+
# if angle < neck_in_degrees:
104+
# if external:
105+
# rad = min_rad + angle/neck_in_degrees * outline_w
106+
# else:
107+
# rad = max_rad - angle/neck_out_degrees *outline_w
108+
# elif angle > total_angle - neck_out_degrees:
109+
# if external:
110+
# rad = min_rad + (total_angle - angle)/neck_out_degrees * outline_w
111+
# else:
112+
# rad = max_rad - (total_angle - angle)/neck_out_degrees *outline_w
113+
#
98114
elev_vec = Vector3( rad, 0, elevation)
99115

100116
for p in euc_points:

0 commit comments

Comments
 (0)