Kicker
Hier findest du einige 3D-Modelle, die du für deinen Kicker verwenden kannst. Alle Modelle sind im OpenSCAD-Format und parameterisiert, damit du sie an deine Bedürfnisse anpassen kannst.
Vorschau
Parameter
include <BOSL2/std.scad>
include <BOSL2/threading.scad>
r = 14;
type = "football"; // [football:Football, smooth:Smooth]
module connector() {
threaded_rod(d=r, height=r, pitch=2, $fa=1, $fs=1);
}
module ball() {
difference() {
if (type == "smooth") {
sphere(r=r, $fn=100);
} else {
spheroid(d=r * 2, style="icosa", circum=true, $fn=10);
}
connector();
}
}
module ball_half(lower = false) {
difference() {
ball();
if (lower) {
translate([0, 0, r]) cube([r * 3, r * 3, r * 2], center=true);
} else {
translate([0, 0, -r]) cube([r * 3, r * 3, r * 2], center=true);
}
}
}
translate([-r * 2, 0, 0]) ball_half();
translate([0, 0, r / 2]) connector();
rotate([180, 0, 0]) translate([r * 2, 0, 0]) ball_half(true);
Vorschau
Parameter
include <BOSL2/std.scad>
depth = 9;
radius = 17.5;
rim = 2;
thickness = 1;
$fn = 100;
module entry() {
union() {
back_half()
tube(h=depth, or=radius + thickness, wall=thickness);
down(depth / 2 - thickness / 2)
tube(h=thickness, ir=radius, or=radius + rim);
difference() {
up(depth / 2)
top_half()
back_half()
sphere(radius + thickness);
up(depth / 2)
top_half()
back_half()
sphere(radius);
}
}
}
entry();
Vorschau
Parameter
include <BOSL2/std.scad>
// Number of score cubes
score_cubes = 5; // [1:20]
// show numbers on the score cubes
score_cube_show_numbers = true;
// Font for the score cubes
score_cube_font = "Liberation Sans"; // font
// Length of the beam
beam_length = 150;
// Width of the beam
beam_width = 6;
// Height of the posts
post_height = 20;
// Gap between the supports
support_gap = 13;
// Width of the supports
support_width = 2;
// Height of the supports
support_height = 20;
module post() {
support_gap = support_gap + support_width;
module support() {
cube([support_width, support_gap, support_height], center=true);
}
difference() {
union() {
translate([-support_gap / 2 + support_width / 2, 0, -post_height + support_height / 2]) support();
translate([support_gap / 2 - support_width / 2, 0, -post_height + support_height / 2]) support();
cuboid([support_gap, support_gap, post_height], edges=[TOP], rounding=2);
}
translate([0, -support_gap / 2, post_height / 2 - support_gap / 2]) cube([beam_width + 0.1, support_gap, beam_width + 0.1], center=true);
}
}
module beam() {
difference() {
cube([beam_width, beam_length, beam_width], center=true);
}
}
module score_cube(n) {
difference() {
cuboid([support_gap, support_gap, support_gap], rounding=1);
rotate([0, 0, 0]) cuboid([beam_width + 1, beam_width + 1, support_gap + 2], rounding=1);
}
t = str(n);
size = support_gap - 2;
tm = textmetrics(t, size=size, font=score_cube_font);
module number() {
max_width = support_gap - 4;
scale_factor = max_width < tm.size[0] ? max_width / tm.size[0] : 1;
linear_extrude(0.4)
xscale(scale_factor)
text(text=t, size=size, font=score_cube_font, halign="center", valign="center");
}
if (score_cube_show_numbers) {
fwd(support_gap / 2)
rotate([90, 270, 0])
number();
fwd(-support_gap / 2)
rotate([-90, 90, 0])
number();
}
}
translate([-support_gap * 3, 0, 0]) rotate([90, 180, 0]) post();
translate([-support_gap * 4.5, 0, 0]) rotate([90, 180, 0]) post();
translate([-beam_width - support_gap, 0, 0]) rotate([0, 0, 180]) beam();
grid_size = ceil(sqrt(score_cubes));
for (i = [0:grid_size - 1]) {
for (j = [0:grid_size - 1]) {
n = i * grid_size + j;
if (n < score_cubes) {
translate([i * 15, j * 15, 0]) score_cube(n + 1);
}
}
}