Newer
Older
y = cos(radians(0)) * Half_Flat
vec1 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height])
x = sin(radians(60 / 6)) * Half_Flat
y = cos(radians(60 / 6)) * Half_Flat
vec2 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height])
x = sin(radians(60 / 3)) * Half_Flat
y = cos(radians(60 / 3)) * Half_Flat
vec3 = Vector([x, y, 0.0])
verts.append([x, y, -Flat_Height - Undercut_Height])
x = sin(radians(60 / 2)) * Half_Flat
y = cos(radians(60 / 2)) * Half_Flat
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
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
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_RADIUS = FLANGE_DIA * 0.5
FLANGE_TAPPER_HEIGHT = HEIGHT - FLANGE_HEIGHT - FLAT_HEIGHT
# HOLE_DIA = 0.0
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])
# print("HOLE_RADIUS" + str(HOLE_RADIUS))
# 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])
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 orign extended out past the first line
# This gives the cross point of the
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
Flange_Opposite = FLANGE_TAPPER_HEIGHT
# 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")
# 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])
Row += 1
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
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
# 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))