powder-loader/power-loader.scad

125 lines
3.1 KiB
OpenSCAD

overall_cylinder_diam = 41;
chamber_to_center = 6.96;
chamber_diam = 11.45;
bottom_height = 3;
top_height = 20;
opening_sep = 0.1;
border = 1;
funnel_size = 1;
module _end_of_customizer() {}
$fn = $preview?30:80;
module overall_cylinder() {
translate([0, 0, -20])
difference() {
cylinder(d = overall_cylinder_diam, h = 20);
for(i = [0:5]) {
rotate([0, 0, i/6*360])
translate([chamber_to_center + chamber_diam/2, 0, -1])
cylinder(d = chamber_diam, h = 22);
}
}
}
*if($preview)
color("#777")
overall_cylinder();
module bottom() {
for(i = [0:5]) {
rotate([0, 0, i / 6 * 360])
bottom_part();
}
}
center_to_bottom_opening_center = chamber_to_center + chamber_diam / 2;
bottom_opening_diam = center_to_bottom_opening_center * sin(360 / 12) - opening_sep;
module bottom_part() {
difference() {
union() {
rotate([0, 0, 360/12])
linear_extrude(bottom_height)
polygon([
[0, 0],
[overall_cylinder_diam / 2 * cos(360 / 12), overall_cylinder_diam / 2 * sin(360 / 12)],
[overall_cylinder_diam / 2 * cos(360 / 12), -overall_cylinder_diam / 2 * sin(360 / 12)],
]);
translate([center_to_bottom_opening_center, 0, -funnel_size])
cylinder(
d1 = bottom_opening_diam,
d2 = bottom_opening_diam + funnel_size,
h = funnel_size
);
}
translate([center_to_bottom_opening_center, 0, -1 - funnel_size])
cylinder(d = bottom_opening_diam, h = bottom_height + 2 + funnel_size);
rotate([0, 0, 360/6])
translate([center_to_bottom_opening_center, 0, -1 - funnel_size])
cylinder(d = bottom_opening_diam, h = bottom_height + 2 + funnel_size);
}
}
color("#dd08")
*bottom();
module top() {
for(i = [0:5]) {
rotate([0, 0, i / 6 * 360])
top_part();
}
}
module top_part() {
difference() {
linear_extrude(top_height)
polygon([
[0, 0],
[overall_cylinder_diam / 2 * cos(360 / 12), overall_cylinder_diam / 2 * sin(360 / 12)],
[overall_cylinder_diam / 2 * cos(360 / 12), -overall_cylinder_diam / 2 * sin(360 / 12)],
]);
top_part_hollow();
}
}
module top_part_hollow() {
adjusted_radius = overall_cylinder_diam / 2 - border;
hull() {
translate([center_to_bottom_opening_center, 0, 0])
cylinder(d = bottom_opening_diam, h = 0.1);
translate([0, 0, top_height - 0.1 - border])
linear_extrude(0.1)
polygon([
[border, 0],
[adjusted_radius * cos(360 / 12), adjusted_radius * sin(360 / 12) - border / 2],
[adjusted_radius * cos(360 / 12), -adjusted_radius * sin(360 / 12) + border / 2],
]);
}
}
color("#4d48")
translate([0, 0, bottom_height])
top();
*if($preview)
color("#f008")
for(i = [0:5]) {
rotate([0, 0, i/6*360 + 360 / 12])
translate([center_to_bottom_opening_center, 0, 01])
cylinder(d = bottom_opening_diam, h = bottom_height + 2);
}