Newer
Older
vec3 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height])
Campbell Barton
committed
# Under cut to Shank BEVEL
x = sin(radians(0)) * (SHANK_RADIUS + Shank_Bevel)
y = cos(radians(0)) * (SHANK_RADIUS + Shank_Bevel)
vec1 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height])
x = sin(radians(60 / 6)) * (SHANK_RADIUS + Shank_Bevel)
y = cos(radians(60 / 6)) * (SHANK_RADIUS + Shank_Bevel)
vec2 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height])
x = sin(radians(60 / 3)) * (SHANK_RADIUS + Shank_Bevel)
y = cos(radians(60 / 3)) * (SHANK_RADIUS + Shank_Bevel)
vec3 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height])
x = sin(radians(60 / 2)) * (SHANK_RADIUS + Shank_Bevel)
y = cos(radians(60 / 2)) * (SHANK_RADIUS + Shank_Bevel)
vec3 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height])
Campbell Barton
committed
# Under cut to Shank BEVEL
x = sin(radians(0)) * SHANK_RADIUS
y = cos(radians(0)) * SHANK_RADIUS
vec1 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height - Shank_Bevel])
x = sin(radians(60 / 6)) * SHANK_RADIUS
y = cos(radians(60 / 6)) * SHANK_RADIUS
vec2 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height - Shank_Bevel])
x = sin(radians(60 / 3)) * SHANK_RADIUS
y = cos(radians(60 / 3)) * SHANK_RADIUS
vec3 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height - Shank_Bevel])
x = sin(radians(60 / 2)) * SHANK_RADIUS
y = cos(radians(60 / 2)) * SHANK_RADIUS
vec3 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height - Shank_Bevel])
Campbell Barton
committed
faces.extend(Build_Face_List_Quads(FaceStart, 3, Row - 1))
Campbell Barton
committed
Mirror_Verts, Mirror_Faces = Mirror_Verts_Faces(verts, faces, 'y')
verts.extend(Mirror_Verts)
faces.extend(Mirror_Faces)
Campbell Barton
committed
Spin_Verts, Spin_Faces = SpinDup(verts, faces, 360, 6, 'z')
Campbell Barton
committed
return Spin_Verts, Spin_Faces, 0 - (-HEIGHT)
Campbell Barton
committed
def Create_12_Point(FLAT, HOLE_DIA, SHANK_DIA, HEIGHT,FLANGE_DIA):
FLANGE_HEIGHT = (1.89/8.0)*HEIGHT
FLAT_HEIGHT = (4.18/8.0)*HEIGHT
# FLANGE_DIA = (13.27/8.0)*FLAT
FLANGE_TAPPER_HEIGHT = HEIGHT - FLANGE_HEIGHT - FLAT_HEIGHT
verts = []
faces = []
HOLE_RADIUS = HOLE_DIA / 2
Half_Flat = FLAT / 2
TopBevelRadius = Half_Flat - (Half_Flat * (0.05 / 8))
# Undercut_Height = (Half_Flat * (0.05 / 8))
# Shank_Bevel = (Half_Flat * (0.05 / 8))
# Flat_Height = HEIGHT - Undercut_Height - Shank_Bevel
# Undercut_Height = 5
SHANK_RADIUS = SHANK_DIA / 2
Row = 0
verts.append([0.0, 0.0, 0.0])
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
# print("TopBevelRadius" + str(TopBevelRadius))
FaceStart = len(verts)
# inner hole
x = sin(radians(0)) * HOLE_RADIUS
y = cos(radians(0)) * HOLE_RADIUS
verts.append([x, y, 0.0])
x = sin(radians(5)) * HOLE_RADIUS
y = cos(radians(5)) * HOLE_RADIUS
verts.append([x, y, 0.0])
x = sin(radians(10)) * HOLE_RADIUS
y = cos(radians(10)) * HOLE_RADIUS
verts.append([x, y, 0.0])
x = sin(radians(15)) * HOLE_RADIUS
y = cos(radians(15)) * HOLE_RADIUS
verts.append([x, y, 0.0])
x = sin(radians(20)) * HOLE_RADIUS
y = cos(radians(20)) * HOLE_RADIUS
verts.append([x, y, 0.0])
x = sin(radians(25)) * HOLE_RADIUS
y = cos(radians(25)) * HOLE_RADIUS
verts.append([x, y, 0.0])
x = sin(radians(30)) * HOLE_RADIUS
y = cos(radians(30)) * HOLE_RADIUS
verts.append([x, y, 0.0])
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
Row += 1
# bevel
x = sin(radians(0)) * TopBevelRadius
y = cos(radians(0)) * TopBevelRadius
vec1 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
x = sin(radians(5)) * TopBevelRadius
y = cos(radians(5)) * TopBevelRadius
vec2 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
x = sin(radians(10)) * TopBevelRadius
y = cos(radians(10)) * TopBevelRadius
vec3 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
x = sin(radians(15)) * TopBevelRadius
y = cos(radians(15)) * TopBevelRadius
vec4 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
x = sin(radians(20)) * TopBevelRadius
y = cos(radians(20)) * TopBevelRadius
vec5 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
x = sin(radians(25)) * TopBevelRadius
y = cos(radians(25)) * TopBevelRadius
vec6 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
x = sin(radians(30)) * TopBevelRadius
y = cos(radians(30)) * TopBevelRadius
vec7 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
Row += 1
#45Deg bevel on the top
#First we work out how far up the Y axis the vert is
v_origin = Vector([0.0,0.0,0.0]) # center of the model
v_15Deg_Point = Vector([tan(radians(15)) * Half_Flat,Half_Flat,0.0]) #Is a know point to work back from
x = tan(radians(0)) * Half_Flat
Point_Distance =(tan(radians(30)) * v_15Deg_Point.x)+Half_Flat
dvec = vec1 - Vector([x, Point_Distance, 0.0])
verts.append([x, Point_Distance, -dvec.length])
v_0_Deg_Top_Point = Vector([x, Point_Distance, -dvec.length])
v_0_Deg_Point = Vector([x, Point_Distance,0.0])
v_5Deg_Line = Vector([tan(radians(5)) * Half_Flat, Half_Flat, 0.0])
v_5Deg_Line.length *= 2 # extende out the line on a 5 deg angle
#We cross 2 lines. One from the origin to the 0 Deg point
#and the second is from the origin extended out past the first line
v_Cross = geometry.intersect_line_line_2d(v_0_Deg_Point,v_15Deg_Point,v_origin,v_5Deg_Line)
dvec = vec2 - Vector([v_Cross.x,v_Cross.y,0.0])
verts.append([v_Cross.x,v_Cross.y,-dvec.length])
v_5_Deg_Top_Point = Vector([v_Cross.x,v_Cross.y,-dvec.length])
v_10Deg_Line = Vector([tan(radians(10)) * Half_Flat, Half_Flat, 0.0])
v_10Deg_Line.length *= 2 # extende out the line
v_Cross = geometry.intersect_line_line_2d(v_0_Deg_Point,v_15Deg_Point,v_origin,v_10Deg_Line)
dvec = vec3 - Vector([v_Cross.x,v_Cross.y,0.0])
verts.append([v_Cross.x,v_Cross.y,-dvec.length])
v_10_Deg_Top_Point = Vector([v_Cross.x,v_Cross.y,-dvec.length])
#The remain points are stright forward because y is all the same y height (Half_Flat)
x = tan(radians(15)) * Half_Flat
dvec = vec4 - Vector([x, Half_Flat, 0.0])
Lowest_Point = -dvec.length
verts.append([x, Half_Flat, -dvec.length])
v_15_Deg_Top_Point = Vector([x, Half_Flat, -dvec.length])
x = tan(radians(20)) * Half_Flat
dvec = vec5 - Vector([x, Half_Flat, 0.0])
Lowest_Point = -dvec.length
verts.append([x, Half_Flat, -dvec.length])
v_20_Deg_Top_Point = Vector([x, Half_Flat, -dvec.length])
x = tan(radians(25)) * Half_Flat
dvec = vec6 - Vector([x, Half_Flat, 0.0])
Lowest_Point = -dvec.length
verts.append([x, Half_Flat, -dvec.length])
v_25_Deg_Top_Point = Vector([x, Half_Flat, -dvec.length])
x = tan(radians(30)) * Half_Flat
dvec = vec7 - Vector([x, Half_Flat, 0.0])
Lowest_Point = -dvec.length
verts.append([x, Half_Flat, -dvec.length])
v_30_Deg_Top_Point = Vector([x, Half_Flat, -dvec.length])
Row += 1
#Down Bits
# print ("Point_Distance")
# print (Point_Distance)
Flange_Adjacent = FLANGE_RADIUS - Point_Distance
if (Flange_Adjacent == 0.0):
Flange_Adjacent = 0.000001
# print ("Flange_Opposite")
# print (Flange_Opposite)
# print ("Flange_Adjacent")
# print (Flange_Adjacent)
FLANGE_ANGLE_RAD = atan(Flange_Opposite/Flange_Adjacent )
# FLANGE_ANGLE_RAD = radians(45)
# print("FLANGE_ANGLE_RAD")
# print (degrees (FLANGE_ANGLE_RAD))
v_Extended_Flange_Edge = Vector([0.0,0.0,-HEIGHT + FLANGE_HEIGHT + (tan(FLANGE_ANGLE_RAD)* FLANGE_RADIUS) ])
# print("v_Extended_Flange_Edge")
#0deg
v_Flange_Edge = Vector([sin(radians(0)) * FLANGE_RADIUS,cos(radians(0)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT ])
v_Cross = geometry.intersect_line_line(v_0_Deg_Top_Point,Vector([v_0_Deg_Top_Point.x,v_0_Deg_Top_Point.y,-HEIGHT]),v_Flange_Edge,v_Extended_Flange_Edge)
verts.append(v_Cross[0])
#5deg
v_Flange_Edge = Vector([sin(radians(5)) * FLANGE_RADIUS,cos(radians(5)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT ])
v_Cross = geometry.intersect_line_line(v_5_Deg_Top_Point,Vector([v_5_Deg_Top_Point.x,v_5_Deg_Top_Point.y,-HEIGHT]),v_Flange_Edge,v_Extended_Flange_Edge)
verts.append(v_Cross[0])
#10deg
v_Flange_Edge = Vector([sin(radians(10)) * FLANGE_RADIUS,cos(radians(10)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT ])
v_Cross = geometry.intersect_line_line(v_10_Deg_Top_Point,Vector([v_10_Deg_Top_Point.x,v_10_Deg_Top_Point.y,-HEIGHT]),v_Flange_Edge,v_Extended_Flange_Edge)
verts.append(v_Cross[0])
#15deg
v_Flange_Edge = Vector([sin(radians(15)) * FLANGE_RADIUS,cos(radians(15)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT ])
v_Cross = geometry.intersect_line_line(v_15_Deg_Top_Point,Vector([v_15_Deg_Top_Point.x,v_15_Deg_Top_Point.y,-HEIGHT]),v_Flange_Edge,v_Extended_Flange_Edge)
verts.append(v_Cross[0])
#20deg
v_Flange_Edge = Vector([sin(radians(20)) * FLANGE_RADIUS,cos(radians(20)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT ])
v_Cross = geometry.intersect_line_line(v_20_Deg_Top_Point,Vector([v_20_Deg_Top_Point.x,v_20_Deg_Top_Point.y,-HEIGHT]),v_Flange_Edge,v_Extended_Flange_Edge)
verts.append(v_Cross[0])
#25deg
v_Flange_Edge = Vector([sin(radians(25)) * FLANGE_RADIUS,cos(radians(25)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT ])
v_Cross = geometry.intersect_line_line(v_25_Deg_Top_Point,Vector([v_25_Deg_Top_Point.x,v_25_Deg_Top_Point.y,-HEIGHT]),v_Flange_Edge,v_Extended_Flange_Edge)
verts.append(v_Cross[0])
#30deg
v_Flange_Edge = Vector([sin(radians(30)) * FLANGE_RADIUS,cos(radians(30)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT ])
v_Cross = geometry.intersect_line_line(v_30_Deg_Top_Point,Vector([v_30_Deg_Top_Point.x,v_30_Deg_Top_Point.y,-HEIGHT]),v_Flange_Edge,v_Extended_Flange_Edge)
verts.append(v_Cross[0])
Row += 1
verts.append([sin(radians(0)) * FLANGE_RADIUS,cos(radians(0)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT ])
verts.append([sin(radians(5)) * FLANGE_RADIUS,cos(radians(5)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT])
verts.append([sin(radians(10)) * FLANGE_RADIUS,cos(radians(10)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT])
verts.append([sin(radians(15)) * FLANGE_RADIUS,cos(radians(15)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT])
verts.append([sin(radians(20)) * FLANGE_RADIUS,cos(radians(20)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT])
verts.append([sin(radians(25)) * FLANGE_RADIUS,cos(radians(25)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT])
verts.append([sin(radians(30)) * FLANGE_RADIUS,cos(radians(30)) * FLANGE_RADIUS,-HEIGHT + FLANGE_HEIGHT])
Row += 1
verts.append([sin(radians(0)) * FLANGE_RADIUS,cos(radians(0)) * FLANGE_RADIUS,-HEIGHT])
verts.append([sin(radians(5)) * FLANGE_RADIUS,cos(radians(5)) * FLANGE_RADIUS,-HEIGHT])
verts.append([sin(radians(10)) * FLANGE_RADIUS,cos(radians(10)) * FLANGE_RADIUS,-HEIGHT])
verts.append([sin(radians(15)) * FLANGE_RADIUS,cos(radians(15)) * FLANGE_RADIUS,-HEIGHT])
verts.append([sin(radians(20)) * FLANGE_RADIUS,cos(radians(20)) * FLANGE_RADIUS,-HEIGHT])
verts.append([sin(radians(25)) * FLANGE_RADIUS,cos(radians(25)) * FLANGE_RADIUS,-HEIGHT])
verts.append([sin(radians(30)) * FLANGE_RADIUS,cos(radians(30)) * FLANGE_RADIUS,-HEIGHT])
verts.append([sin(radians(0)) * SHANK_RADIUS,cos(radians(0)) * SHANK_RADIUS,-HEIGHT])
verts.append([sin(radians(0)) * SHANK_RADIUS,cos(radians(0)) * SHANK_RADIUS,-HEIGHT])
verts.append([sin(radians(10)) * SHANK_RADIUS,cos(radians(10)) * SHANK_RADIUS,-HEIGHT])
verts.append([sin(radians(10)) * SHANK_RADIUS,cos(radians(10)) * SHANK_RADIUS,-HEIGHT])
verts.append([sin(radians(20)) * SHANK_RADIUS,cos(radians(20)) * SHANK_RADIUS,-HEIGHT])
verts.append([sin(radians(20)) * SHANK_RADIUS,cos(radians(20)) * SHANK_RADIUS,-HEIGHT])
verts.append([sin(radians(30)) * SHANK_RADIUS,cos(radians(30)) * SHANK_RADIUS,-HEIGHT])
Row += 1
faces.extend(Build_Face_List_Quads(FaceStart, 6, Row - 1))
Spin_Verts, Spin_Faces = SpinDup(verts, faces, 360,12, 'z')
return Spin_Verts, Spin_Faces, 0 - (-HEIGHT)
def Create_12_Point_Head(FLAT, HOLE_DIA, SHANK_DIA, HEIGHT,FLANGE_DIA):
#TODO add under head radius
return Create_12_Point(FLAT, HOLE_DIA, SHANK_DIA, HEIGHT,FLANGE_DIA)
# ####################################################################
# Create External Thread
# ####################################################################
def Thread_Start3(verts, INNER_RADIUS, OUTTER_RADIUS, PITCH, DIV_COUNT,
CREST_PERCENT, ROOT_PERCENT, Height_Offset):
Campbell Barton
committed
Height_Step = float(PITCH) / float(DIV_COUNT)
Deg_Step = 360.0 / float(DIV_COUNT)
Campbell Barton
committed
Crest_Height = float(PITCH) * float(CREST_PERCENT) / float(100)
Root_Height = float(PITCH) * float(ROOT_PERCENT) / float(100)
Root_to_Crest_Height = Crest_to_Root_Height = \
(float(PITCH) - (Crest_Height + Root_Height)) / 2.0
Campbell Barton
committed
# thread start
Rank = float(OUTTER_RADIUS - INNER_RADIUS) / float(DIV_COUNT)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
verts.append([x, y, z])
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
Campbell Barton
committed
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
verts.append([x, y, z])
Height_Offset -= Crest_to_Root_Height
Ret_Row += 1
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
Campbell Barton
committed
x = sin(radians(i * Deg_Step)) * INNER_RADIUS
y = cos(radians(i * Deg_Step)) * INNER_RADIUS
x = sin(radians(i * Deg_Step)) * (OUTTER_RADIUS - (i * Rank))
y = cos(radians(i * Deg_Step)) * (OUTTER_RADIUS - (i * Rank))
verts.append([x, y, z])
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
Campbell Barton
committed
x = sin(radians(i * Deg_Step)) * INNER_RADIUS
y = cos(radians(i * Deg_Step)) * INNER_RADIUS
x = sin(radians(i * Deg_Step)) * (OUTTER_RADIUS - (i * Rank))
y = cos(radians(i * Deg_Step)) * (OUTTER_RADIUS - (i * Rank))
verts.append([x, y, z])
Height_Offset -= Root_to_Crest_Height
Ret_Row += 1
Campbell Barton
committed
def Create_Shank_Verts(START_DIA, OUTTER_DIA, LENGTH, Z_LOCATION, DIV_COUNT):
Campbell Barton
committed
START_RADIUS = START_DIA / 2
OUTTER_RADIUS = OUTTER_DIA / 2
Campbell Barton
committed
Taper_Lentgh = Opp / tan(radians(31))
Campbell Barton
committed
Campbell Barton
committed
Campbell Barton
committed
Deg_Step = 360.0 / float(DIV_COUNT)
Campbell Barton
committed
Campbell Barton
committed
Campbell Barton
committed
# Ring
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * START_RADIUS
y = cos(radians(i * Deg_Step)) * START_RADIUS
z = Height_Offset - 0
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Stright_Length
Row += 1
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * START_RADIUS
y = cos(radians(i * Deg_Step)) * START_RADIUS
z = Height_Offset - 0
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
return verts, Row, Height_Offset
def Create_Thread_Start_Verts(INNER_DIA, OUTTER_DIA, PITCH, CREST_PERCENT,
ROOT_PERCENT, Z_LOCATION, DIV_COUNT):
Campbell Barton
committed
INNER_RADIUS = INNER_DIA / 2
OUTTER_RADIUS = OUTTER_DIA / 2
Campbell Barton
committed
Deg_Step = 360.0 / float(DIV_COUNT)
Height_Step = float(PITCH) / float(DIV_COUNT)
Campbell Barton
committed
Campbell Barton
committed
Campbell Barton
committed
Height_Start = Height_Offset
Crest_Height = float(PITCH) * float(CREST_PERCENT) / float(100)
Root_Height = float(PITCH) * float(ROOT_PERCENT) / float(100)
Root_to_Crest_Height = Crest_to_Root_Height = \
(float(PITCH) - (Crest_Height + Root_Height)) / 2.0
Rank = float(OUTTER_RADIUS - INNER_RADIUS) / float(DIV_COUNT)
Campbell Barton
committed
Height_Offset = Z_LOCATION + PITCH
Campbell Barton
committed
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
z = Height_Offset - (Height_Step * i)
if z > Cut_off:
z = Cut_off
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
z = Height_Offset - (Height_Step * i)
if z > Cut_off:
z = Cut_off
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Crest_to_Root_Height
Row += 1
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
z = Height_Offset - (Height_Step * i)
if z > Cut_off:
z = Cut_off
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
z = Height_Offset - (Height_Step * i)
if z > Cut_off:
z = Cut_off
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Root_to_Crest_Height
Row += 1
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
Campbell Barton
committed
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Crest_to_Root_Height
Row += 1
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
Campbell Barton
committed
x = sin(radians(i * Deg_Step)) * INNER_RADIUS
y = cos(radians(i * Deg_Step)) * INNER_RADIUS
x = sin(radians(i * Deg_Step)) * (OUTTER_RADIUS - (i * Rank))
y = cos(radians(i * Deg_Step)) * (OUTTER_RADIUS - (i * Rank))
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
Campbell Barton
committed
x = sin(radians(i * Deg_Step)) * INNER_RADIUS
y = cos(radians(i * Deg_Step)) * INNER_RADIUS
x = sin(radians(i * Deg_Step)) * (OUTTER_RADIUS - (i * Rank))
y = cos(radians(i * Deg_Step)) * (OUTTER_RADIUS - (i * Rank))
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Root_to_Crest_Height
Row += 1
Campbell Barton
committed
return verts, Row, Height_Offset
def Create_Thread_Verts(INNER_DIA, OUTTER_DIA, PITCH, HEIGHT,
CREST_PERCENT, ROOT_PERCENT, Z_LOCATION, DIV_COUNT):
Campbell Barton
committed
INNER_RADIUS = INNER_DIA / 2
OUTTER_RADIUS = OUTTER_DIA / 2
Campbell Barton
committed
Deg_Step = 360.0 / float(DIV_COUNT)
Height_Step = float(PITCH) / float(DIV_COUNT)
NUM_OF_START_THREADS = 4.0
NUM_OF_END_THREADS = 3.0
Num = int((HEIGHT - ((NUM_OF_START_THREADS * PITCH) + (NUM_OF_END_THREADS * PITCH))) / PITCH)
Campbell Barton
committed
Crest_Height = float(PITCH) * float(CREST_PERCENT) / float(100)
Root_Height = float(PITCH) * float(ROOT_PERCENT) / float(100)
Root_to_Crest_Height = Crest_to_Root_Height = \
(float(PITCH) - (Crest_Height + Root_Height)) / 2.0
Campbell Barton
committed
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
z = Height_Offset - (Height_Step * i)
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * OUTTER_RADIUS
y = cos(radians(i * Deg_Step)) * OUTTER_RADIUS
z = Height_Offset - (Height_Step * i)
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Crest_to_Root_Height
Row += 1
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * INNER_RADIUS
y = cos(radians(i * Deg_Step)) * INNER_RADIUS
z = Height_Offset - (Height_Step * i)
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
x = sin(radians(i * Deg_Step)) * INNER_RADIUS
y = cos(radians(i * Deg_Step)) * INNER_RADIUS
z = Height_Offset - (Height_Step * i)
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Root_to_Crest_Height
Row += 1
Campbell Barton
committed
return verts, Row, Height_Offset
def Create_Thread_End_Verts(INNER_DIA, OUTTER_DIA, PITCH, CREST_PERCENT,
ROOT_PERCENT, Z_LOCATION, DIV_COUNT):
Campbell Barton
committed
INNER_RADIUS = INNER_DIA / 2
OUTTER_RADIUS = OUTTER_DIA / 2
Campbell Barton
committed
Deg_Step = 360.0 / float(DIV_COUNT)
Height_Step = float(PITCH) / float(DIV_COUNT)
Crest_Height = float(PITCH) * float(CREST_PERCENT) / float(100)
Root_Height = float(PITCH) * float(ROOT_PERCENT) / float(100)
Root_to_Crest_Height = Crest_to_Root_Height = \
(float(PITCH) - (Crest_Height + Root_Height)) / 2.0
Campbell Barton
committed
Campbell Barton
committed
Height_Offset = Z_LOCATION
Tapper_Height_Start = Height_Offset - PITCH - PITCH
Max_Height = Tapper_Height_Start - PITCH
Campbell Barton
committed
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
z = max(z, Max_Height)
Tapper_Radius = OUTTER_RADIUS
if z < Tapper_Height_Start:
Tapper_Radius = OUTTER_RADIUS - (Tapper_Height_Start - z)
x = sin(radians(i * Deg_Step)) * (Tapper_Radius)
y = cos(radians(i * Deg_Step)) * (Tapper_Radius)
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
z = max(z, Max_Height)
Tapper_Radius = OUTTER_RADIUS
if z < Tapper_Height_Start:
Tapper_Radius = OUTTER_RADIUS - (Tapper_Height_Start - z)
x = sin(radians(i * Deg_Step)) * (Tapper_Radius)
y = cos(radians(i * Deg_Step)) * (Tapper_Radius)
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Crest_to_Root_Height
Row += 1
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
z = max(z, Max_Height)
Tapper_Radius = OUTTER_RADIUS - (Tapper_Height_Start - z)
if Tapper_Radius > INNER_RADIUS:
Campbell Barton
committed
Tapper_Radius = INNER_RADIUS
Campbell Barton
committed
x = sin(radians(i * Deg_Step)) * (Tapper_Radius)
y = cos(radians(i * Deg_Step)) * (Tapper_Radius)
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(DIV_COUNT + 1):
z = Height_Offset - (Height_Step * i)
z = max(z, Max_Height)
Tapper_Radius = OUTTER_RADIUS - (Tapper_Height_Start - z)
if Tapper_Radius > INNER_RADIUS:
Campbell Barton
committed
Tapper_Radius = INNER_RADIUS
Campbell Barton
committed
x = sin(radians(i * Deg_Step)) * (Tapper_Radius)
y = cos(radians(i * Deg_Step)) * (Tapper_Radius)
verts.append([x, y, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Height_Offset -= Root_to_Crest_Height
Row += 1
Campbell Barton
committed
return verts, Row, Height_Offset, Lowest_Z_Vert
def Create_External_Thread(SHANK_DIA, SHANK_LENGTH, INNER_DIA, OUTTER_DIA,
PITCH, LENGTH, CREST_PERCENT, ROOT_PERCENT, DIV_COUNT):
Campbell Barton
committed
verts = []
faces = []
Total_Row = 0
Campbell Barton
committed
Campbell Barton
committed
Shank_Verts, Shank_Row, Offset = Create_Shank_Verts(
SHANK_DIA, OUTTER_DIA, SHANK_LENGTH,
Offset, DIV_COUNT
)
Thread_Start_Verts, Thread_Start_Row, Offset = Create_Thread_Start_Verts(
INNER_DIA, OUTTER_DIA, PITCH, CREST_PERCENT,
ROOT_PERCENT, Offset, DIV_COUNT
)
Campbell Barton
committed
Thread_Verts, Thread_Row, Offset = Create_Thread_Verts(
INNER_DIA, OUTTER_DIA, PITCH, LENGTH,
CREST_PERCENT, ROOT_PERCENT, Offset, DIV_COUNT
)
Campbell Barton
committed
Thread_End_Verts, Thread_End_Row, Offset, Lowest_Z_Vert = Create_Thread_End_Verts(
INNER_DIA, OUTTER_DIA, PITCH, CREST_PERCENT,
ROOT_PERCENT, Offset, DIV_COUNT
)
Campbell Barton
committed
Total_Row += Thread_End_Row
verts.extend(Shank_Verts)
verts.extend(Thread_Start_Verts)
verts.extend(Thread_Verts)
verts.extend(Thread_End_Verts)
Campbell Barton
committed
faces.extend(Build_Face_List_Quads(Face_Start, DIV_COUNT, Total_Row - 1, 0))
faces.extend(Fill_Ring_Face(len(verts) - DIV_COUNT, DIV_COUNT, 1))
Campbell Barton
committed
return verts, faces, 0.0 - Lowest_Z_Vert
Campbell Barton
committed
# ####################################################################
# Create Nut
# ####################################################################
def add_Hex_Nut(FLAT, HOLE_DIA, HEIGHT):
global Global_Head_Height
global Global_NutRad
Campbell Barton
committed
verts = []
faces = []
HOLE_RADIUS = HOLE_DIA * 0.5
Half_Flat = FLAT / 2
Half_Height = HEIGHT / 2
Campbell Barton
committed
Row = 0
Lowest_Z_Vert = 0.0
Campbell Barton
committed
Campbell Barton
committed
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
# inner hole
x = sin(radians(0)) * HOLE_RADIUS
y = cos(radians(0)) * HOLE_RADIUS
# print ("rad 0 x;", x, "y:" ,y )
verts.append([x, y, 0.0])
x = sin(radians(60 / 6)) * HOLE_RADIUS
y = cos(radians(60 / 6)) * HOLE_RADIUS
# print ("rad 60/6x;", x, "y:" ,y )
verts.append([x, y, 0.0])
x = sin(radians(60 / 3)) * HOLE_RADIUS
y = cos(radians(60 / 3)) * HOLE_RADIUS
# print ("rad 60/3x;", x, "y:" ,y )
verts.append([x, y, 0.0])
x = sin(radians(60 / 2)) * HOLE_RADIUS
y = cos(radians(60 / 2)) * HOLE_RADIUS
# print ("rad 60/2x;", x, "y:" ,y )
verts.append([x, y, 0.0])
Campbell Barton
committed
Campbell Barton
committed
x = sin(radians(0)) * TopBevelRadius
y = cos(radians(0)) * TopBevelRadius
vec1 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
Campbell Barton
committed
x = sin(radians(60 / 6)) * TopBevelRadius
y = cos(radians(60 / 6)) * TopBevelRadius
vec2 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
Campbell Barton
committed
x = sin(radians(60 / 3)) * TopBevelRadius
y = cos(radians(60 / 3)) * TopBevelRadius
vec3 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
Campbell Barton
committed
x = sin(radians(60 / 2)) * TopBevelRadius
y = cos(radians(60 / 2)) * TopBevelRadius
vec4 = Vector([x, y, 0.0])
verts.append([x, y, 0.0])
Campbell Barton
committed
# Flats
x = tan(radians(0)) * Half_Flat
dvec = vec1 - Vector([x, Half_Flat, 0.0])
verts.append([x, Half_Flat, -dvec.length])
Lowest_Z_Vert = min(Lowest_Z_Vert, -dvec.length)
Campbell Barton
committed
x = tan(radians(60 / 6)) * Half_Flat
dvec = vec2 - Vector([x, Half_Flat, 0.0])
verts.append([x, Half_Flat, -dvec.length])
Lowest_Z_Vert = min(Lowest_Z_Vert, -dvec.length)
Campbell Barton
committed
x = tan(radians(60 / 3)) * Half_Flat
dvec = vec3 - Vector([x, Half_Flat, 0.0])
verts.append([x, Half_Flat, -dvec.length])
Lowest_Z_Vert = min(Lowest_Z_Vert, -dvec.length)
x = tan(radians(60 / 2)) * Half_Flat
dvec = vec4 - Vector([x, Half_Flat, 0.0])
verts.append([x, Half_Flat, -dvec.length])
Lowest_Z_Vert = min(Lowest_Z_Vert, -dvec.length)
Campbell Barton
committed
# down Bits Tri
x = tan(radians(0)) * Half_Flat
verts.append([x, Half_Flat, Lowest_Point])
Campbell Barton
committed
x = tan(radians(60 / 6)) * Half_Flat
verts.append([x, Half_Flat, Lowest_Point])
x = tan(radians(60 / 3)) * Half_Flat
verts.append([x, Half_Flat, Lowest_Point])
Campbell Barton
committed
x = tan(radians(60 / 2)) * Half_Flat
verts.append([x, Half_Flat, Lowest_Point])
Lowest_Z_Vert = min(Lowest_Z_Vert, Lowest_Point)
Campbell Barton
committed
x = tan(radians(0)) * Half_Flat
verts.append([x, Half_Flat, -Half_Height])
Campbell Barton
committed
x = tan(radians(60 / 6)) * Half_Flat
verts.append([x, Half_Flat, -Half_Height])
x = tan(radians(60 / 3)) * Half_Flat
verts.append([x, Half_Flat, -Half_Height])
Campbell Barton
committed
x = tan(radians(60 / 2)) * Half_Flat
verts.append([x, Half_Flat, -Half_Height])
Lowest_Z_Vert = min(Lowest_Z_Vert, -Half_Height)
Campbell Barton
committed
faces.extend(Build_Face_List_Quads(FaceStart, 3, Row - 1))
Campbell Barton
committed
Tvert, tface = Mirror_Verts_Faces(verts, faces, 'z', Lowest_Z_Vert)
Campbell Barton
committed
Tvert, tface = Mirror_Verts_Faces(verts, faces, 'y')
Campbell Barton
committed
S_verts, S_faces = SpinDup(verts, faces, 360, 6, 'z')
# return verts, faces, TopBevelRadius
return S_verts, S_faces, TopBevelRadius
def add_Nylon_Head(OUTSIDE_RADIUS, Z_LOCATION, DIV_COUNT):
INNER_HOLE = OUTSIDE_RADIUS - (OUTSIDE_RADIUS * (1.25 / 4.75))
EDGE_THICKNESS = (OUTSIDE_RADIUS * (0.4 / 4.75))
RAD1 = (OUTSIDE_RADIUS * (0.5 / 4.75))
OVER_ALL_HEIGHT = (OUTSIDE_RADIUS * (2.0 / 4.75))
Campbell Barton
committed
Height_Offset = Z_LOCATION
Lowest_Z_Vert = 0
Campbell Barton
committed
z = (Height_Offset - OVER_ALL_HEIGHT) + EDGE_THICKNESS
verts.append([x, 0.0, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
z = (Height_Offset - OVER_ALL_HEIGHT)
verts.append([x, 0.0, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
for i in range(180, 80, -10):
x = sin(radians(i)) * RAD1
z = cos(radians(i)) * RAD1
verts.append([(OUTSIDE_RADIUS - RAD1) + x, 0.0, ((Height_Offset - OVER_ALL_HEIGHT) + RAD1) + z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
Campbell Barton
committed
z = Height_Offset
verts.append([x, 0.0, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
sVerts, sFaces = SpinDup(verts, faces, 360, DIV_COUNT, 'z')
sVerts.extend(verts) # add the start verts to the Spin verts to complete the loop
Campbell Barton
committed
faces.extend(Build_Face_List_Quads(FaceStart, Row - 1, DIV_COUNT,1))
return Move_Verts_Up_Z(sVerts, 0), faces, Lowest_Z_Vert
def add_Nylon_Part(OUTSIDE_RADIUS, Z_LOCATION, DIV_COUNT):
INNER_HOLE = OUTSIDE_RADIUS - (OUTSIDE_RADIUS * (1.5 / 4.75))
EDGE_THICKNESS = (OUTSIDE_RADIUS * (0.4 / 4.75))
OVER_ALL_HEIGHT = (OUTSIDE_RADIUS * (2.0 / 4.75))
PART_THICKNESS = OVER_ALL_HEIGHT - EDGE_THICKNESS
PART_INNER_HOLE = (OUTSIDE_RADIUS * (2.5 / 4.75))
Campbell Barton
committed
FaceStart = len(verts)
Height_Offset = Z_LOCATION
Lowest_Z_Vert = 0
Campbell Barton
committed
Campbell Barton
committed
z = Height_Offset
verts.append([x, 0.0, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)
Campbell Barton
committed
verts.append([x, 0.0, z])
Lowest_Z_Vert = min(Lowest_Z_Vert, z)