Fume-Extraction-Nozzles/nozzle1.py

60 lines
1.8 KiB
Python

#!/usr/bin/env python3
# Copyright (C) 2025 Thomas Kolb (cfr34k)
# This model is licensed under CC BY-SA 4.0. To view a copy of this license,
# visit https://creativecommons.org/licenses/by-sa/4.0/
from build123d import *
from math import sin, cos, tan, pi
ALIGN_BOTTOM = (Align.CENTER, Align.CENTER, Align.MIN)
ALIGN_TOP = (Align.CENTER, Align.CENTER, Align.MAX)
plug_base_d = 60.8
plug_clip_d = 62
plug_clip_offset = 12
plug_clip_l = 2.5
plug_l = 21
plug_wall_t = 2.5
plug_notch_w = 3
plug_notch_offset = 3
plug_notch_depth = plug_l - plug_notch_offset
adapter_outer_d = 65
adapter_l = 30
nozzle_l = 100
nozzle_d = 62
clip = Pos(Z=plug_clip_offset) * Cylinder(plug_clip_d/2, plug_clip_l, align=ALIGN_BOTTOM)
notches = [ \
Pos(Z=plug_notch_offset) * Box(plug_clip_d, plug_notch_w, plug_notch_depth, align=ALIGN_BOTTOM),
Rot(Z=90) * Pos(Z=plug_notch_offset) * Box(plug_clip_d, plug_notch_w, plug_notch_depth, align=ALIGN_BOTTOM),
]
overall_l = plug_l + adapter_l + nozzle_l
duct = Pos(Z=plug_l) * Cylinder(plug_base_d/2 - plug_wall_t, overall_l, align=ALIGN_TOP)
plug = Cylinder(plug_base_d/2, plug_l, align=ALIGN_BOTTOM) + clip - notches
adapter = Cylinder(adapter_outer_d/2, adapter_l, align=ALIGN_TOP)
angle = 50
cutoff_l = nozzle_d / cos(angle*pi/180)
cutoff_h = nozzle_d
cutoff_box = \
Pos(X=nozzle_d/2, Z=-nozzle_l-adapter_l) * \
Rot(Y=angle) * \
Pos(X=-cutoff_l/2) * \
Box(cutoff_l, nozzle_d, cutoff_h, align=ALIGN_TOP)
nozzle = Pos(Z=-adapter_l) * Cylinder(nozzle_d/2, nozzle_l, align=ALIGN_TOP) \
- cutoff_box
device = plug + adapter + nozzle - duct
show_object(device, "device", options={"alpha":0.0, "color": (192, 192, 192)})
#show_object(cutoff_box, "cutoff_box", options={"alpha":0.7, "color": (255, 0, 0)})