handlebar-grip/handlebar_grip.scad

146 lines
2.8 KiB
OpenSCAD
Raw Normal View History

2024-08-13 22:40:18 +02:00
DIAM=22;
LEN=120;
THICK=1.35;
module base() {
difference() {
cylinder(h=LEN, d=DIAM, $fn=64);
cylinder(h=LEN+1, d=DIAM-2*THICK, $fn=64);
}
}
module cap() {
// front
cylinder(h=3, d=DIAM, $fn=64);
// hook
difference() {
union() {
cylinder(h=20, d=DIAM-2*THICK-1, $fn=64);
for ( y = [0:4] ) {
translate([0,0, 5+y*3])
hull() {
cylinder(h=0.1, d=DIAM-2*THICK-1, $fn=64);
translate([0,0,1])
cylinder(h=0.1, d=DIAM-2*THICK, $fn=64);
}
}
}
cylinder(h=25, d=DIAM-2*THICK-2*2, $fn=64);
}
}
module handle_shape(l=0) {
2024-10-07 22:15:22 +02:00
cylinder(h=l, d=DIAM+2*3, $fn=64);
2024-08-13 22:40:18 +02:00
2024-10-07 21:43:47 +02:00
difference()
{
hull() {
translate([0,0,LEN-50])
cylinder(h=30, d=DIAM+2*3+5, $fn=64);
2024-08-13 22:40:18 +02:00
2024-10-07 21:43:47 +02:00
translate([0,0, l])
cylinder(h=LEN+3+8-l, d=DIAM+2*3, $fn=64);
2024-08-13 22:40:18 +02:00
2024-10-07 21:43:47 +02:00
translate([30,10,LEN-40])
cylinder(d=8, h=40, $fn=64);
}
translate([86,0,15])
rotate([80, -15, 25])
cylinder(h=200, d=135, $fn=128, center=true);
}
2024-08-13 22:40:18 +02:00
}
module ripple_stencil() {
translate([0,0,-1]) {
for( z = [0:10] ) {
translate([0,0,z*(LEN-5)/10]) {
hull() {
2024-10-07 21:52:17 +02:00
cylinder(h=0.1, d=DIAM+1.4, $fn=64);
2024-08-13 22:40:18 +02:00
translate([0,0,(LEN-5)/10])
2024-10-07 21:52:17 +02:00
cylinder(h=0.1, d=DIAM-0.4, $fn=64);
}
2024-08-13 22:40:18 +02:00
}
}
}
2024-08-13 22:40:18 +02:00
translate([0,0,LEN+3+5])
difference() {
cylinder(h=10, d=DIAM-3, $fn=64);
translate([0,0,-8])
cylinder(h=10, d=DIAM-8, $fn=64);
}
}
module handle() {
difference()
{
handle_shape();
ripple_stencil();
2024-08-13 22:40:18 +02:00
}
}
//color([1,0,0])
//cap();
module hexshape( h0=10 ) {
translate([0,0,0])
rotate([90,0,0])
for( x = [0:5] ) {
2024-10-07 21:24:15 +02:00
for( y = [0:10] ) {
2024-08-13 22:40:18 +02:00
//translate([0, 0.8*(y*y) + 5 * y + 10,0])
2024-10-07 21:24:15 +02:00
s0 = 0.6 + (y/24);
s = (s0*s0);
2024-08-13 22:40:18 +02:00
rotate([0, 80-(x*60) * s ,0])
2024-10-07 21:52:17 +02:00
translate([0,(x%2)*7+y*13, DIAM/2+0.7])
2024-08-13 22:40:18 +02:00
difference() {
cylinder(h=h0, d=14*s, $fn=6);
translate([0,0,-1])
2024-10-07 21:24:15 +02:00
cylinder(h=h0+3, d=8*s, $fn=6);
2024-08-13 22:40:18 +02:00
}
}
}
}
2024-10-07 22:15:22 +02:00
module part_TPU() {
color([0.8,0.8,0.8])
difference() {
handle();
2024-08-13 22:40:18 +02:00
2024-10-07 22:15:22 +02:00
intersection() {
hexshape(100);
translate([ 0,0, 5 ])
cylinder(d=DIAM+100, h=LEN-2);
}
2024-08-13 22:40:18 +02:00
}
}
2024-10-07 22:15:22 +02:00
module part_Glow() {
color([0.2,0.47,0.8])
{
difference() {
translate([0,0,LEN+5])
cylinder(d=DIAM, h=5);
handle();
}
2024-08-13 22:40:18 +02:00
}
2024-10-07 22:15:22 +02:00
intersection() {
hexshape(100);
2024-08-13 22:40:18 +02:00
2024-10-07 22:15:22 +02:00
scale([0.95, 0.95, 1])
handle_shape();
2024-08-13 22:40:18 +02:00
2024-10-07 22:15:22 +02:00
translate([ 0,0, 5 ])
cylinder(d=DIAM+1000, h=LEN-2);
}
2024-08-13 22:40:18 +02:00
}
2024-10-07 22:15:22 +02:00
part_Glow();