a
This commit is contained in:
parent
b5ef545c77
commit
70a521a14c
7 changed files with 515 additions and 16 deletions
20
Dom/Kulki_na_brame.scad
Normal file
20
Dom/Kulki_na_brame.scad
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
include<BOSL2/std.scad>
|
||||||
|
|
||||||
|
kula_d = 50;
|
||||||
|
pret_t = 2.5;
|
||||||
|
pret_l = 27;
|
||||||
|
|
||||||
|
$fn = 13;
|
||||||
|
|
||||||
|
corner = pret_l/2 - pret_t/2;
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
spheroid(d=kula_d, style="octa");
|
||||||
|
// cuboid([kula_d,kula_d,kula_d], rounding=10);
|
||||||
|
down(kula_d/4) union() {
|
||||||
|
left(corner) cuboid([pret_t,pret_l,kula_d]);
|
||||||
|
fwd(corner) cuboid([pret_l,pret_t,kula_d]);
|
||||||
|
left(corner) fwd(corner) pie_slice(h=kula_d/2, d=10, ang=90);
|
||||||
|
}
|
||||||
|
down(kula_d*3/4) cuboid([kula_d, kula_d, kula_d]);
|
||||||
|
}
|
||||||
187
Dom/rectangular_folding_case_v1-1.scad
Normal file
187
Dom/rectangular_folding_case_v1-1.scad
Normal file
|
|
@ -0,0 +1,187 @@
|
||||||
|
// https://www.thingiverse.com/thing:384919/files
|
||||||
|
include <BOSL2/std.scad>
|
||||||
|
|
||||||
|
text = ["Niedz","23:00"];
|
||||||
|
textsize = 4;
|
||||||
|
|
||||||
|
/*[Dimensions]*/
|
||||||
|
|
||||||
|
// Width of the case in mm (interior dimension)
|
||||||
|
interiorWidth = 15;
|
||||||
|
|
||||||
|
// Length of the case in mm (interior dimension)
|
||||||
|
interiorLength = 15;
|
||||||
|
|
||||||
|
// Height of the case in mm (interior dimension)
|
||||||
|
interiorHeight = 5;
|
||||||
|
|
||||||
|
// Case interior fillet radius
|
||||||
|
interiorFillet = 2.5;
|
||||||
|
|
||||||
|
// Width of the hinge in mm
|
||||||
|
hingeWidth = 7.5;
|
||||||
|
|
||||||
|
|
||||||
|
/*[Walls]*/
|
||||||
|
|
||||||
|
// Horizontal wall (top and bottom) thickness
|
||||||
|
coverThickness = 1.0;
|
||||||
|
|
||||||
|
// Vertical wall (side) thickness
|
||||||
|
sidewallWidth = 1.1;
|
||||||
|
|
||||||
|
// Amount the lid protrudes into the case (larger value allows the case to close more securely)
|
||||||
|
lidInsetHeight = 1.1;
|
||||||
|
|
||||||
|
// Thickness of the hinge (it should be no more than a few layers thick keep it flexible)
|
||||||
|
hingeThickness = 0.3;
|
||||||
|
|
||||||
|
// hinge length multiplier (as a function of case height - longer hinges may be needed for less flexible plastics)
|
||||||
|
hingeLengthScale = 1.5;
|
||||||
|
|
||||||
|
|
||||||
|
/*[Details]*/
|
||||||
|
|
||||||
|
// Distance the top and bottom surfaces extend beyond the sides of the case (makes the case easier to open)
|
||||||
|
rimInset = 0.6;
|
||||||
|
|
||||||
|
// Length of the opening tab on the lid of the case (optional - set to 0 to remove)
|
||||||
|
tabSize = 2;
|
||||||
|
|
||||||
|
// Fillet radius used for hinge and tab
|
||||||
|
hingeFillet = 3;
|
||||||
|
|
||||||
|
|
||||||
|
/*[Printer Tolerances]*/
|
||||||
|
|
||||||
|
// Adjust the tightness of the closed case (larger value makes the case looser, negative value makes it tighter - try adjusting in 0.1mm increments)
|
||||||
|
lidInsetOffset = 0.0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*[hidden]*/
|
||||||
|
eps = 0.1;
|
||||||
|
$fn = 120; // resolution
|
||||||
|
|
||||||
|
module case()
|
||||||
|
{
|
||||||
|
// minimal error checking
|
||||||
|
hingeWidth = min(hingeWidth, interiorWidth);
|
||||||
|
hingeThickness = min(hingeThickness, coverThickness);
|
||||||
|
lidInsetHeight = min(lidInsetHeight, interiorHeight);
|
||||||
|
|
||||||
|
baseLength = interiorLength + sidewallWidth*2;
|
||||||
|
baseWidth = interiorWidth + sidewallWidth*2;
|
||||||
|
baseRadius = interiorFillet + sidewallWidth;
|
||||||
|
|
||||||
|
caseLength = baseLength + rimInset*2;
|
||||||
|
caseWidth = baseWidth + rimInset*2;
|
||||||
|
caseRadius = baseRadius + rimInset;
|
||||||
|
|
||||||
|
hingeLength = hingeLengthScale * interiorHeight + coverThickness*2;
|
||||||
|
centerY = (caseLength + hingeLength)/2;
|
||||||
|
|
||||||
|
filletXOffset = hingeWidth/2 + hingeFillet;
|
||||||
|
filletYOffset = hingeLength/2 - hingeFillet;
|
||||||
|
|
||||||
|
|
||||||
|
module rrect(h, w, l, r) {
|
||||||
|
r = min(r, min(w/2, l/2));
|
||||||
|
w = max(w, eps);
|
||||||
|
l = max(l, eps);
|
||||||
|
h = max(h, eps);
|
||||||
|
if (r <= 0) {
|
||||||
|
translate([-w/2, -l/2,0]) {
|
||||||
|
cube([w,l,h]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
hull() {
|
||||||
|
for (y = [-l/2+r, l/2-r]) {
|
||||||
|
for (x = [-w/2+r, w/2-r]) {
|
||||||
|
translate([x,y,0]) {
|
||||||
|
cylinder(h=h, r=r, center=false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module rrectTube(h, ow, ol, or, t) {
|
||||||
|
difference() {
|
||||||
|
rrect(h=h, w=ow, l=ol, r=or);
|
||||||
|
translate([0,0,-eps]) {
|
||||||
|
rrect(h=h+eps*2, w=ow-t*2, l=ol-t*2, r=or-t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
// bottom surfaces
|
||||||
|
for (i = [-centerY, centerY]) {
|
||||||
|
translate([0,i,0]) {
|
||||||
|
rrect(h=coverThickness, w=caseWidth, l=caseLength, r=caseRadius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
translate([0,0,coverThickness-eps]) {
|
||||||
|
|
||||||
|
// base
|
||||||
|
translate([0,centerY,0]) {
|
||||||
|
rrectTube(h=interiorHeight+eps, ow=baseWidth, ol=baseLength, or=baseRadius, t=sidewallWidth);
|
||||||
|
}
|
||||||
|
|
||||||
|
// lid
|
||||||
|
translate([0,-centerY,0]) {
|
||||||
|
rrectTube(h=lidInsetHeight+eps, ow=interiorWidth - lidInsetOffset, ol=interiorLength - lidInsetOffset, or=interiorFillet - lidInsetOffset/2, t=sidewallWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// hinge
|
||||||
|
if (hingeWidth > caseWidth - caseRadius*2) {
|
||||||
|
translate([-hingeWidth/2,-centerY,0]) {
|
||||||
|
cube([hingeWidth, centerY*2, hingeThickness]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
difference() {
|
||||||
|
translate([-hingeWidth/2 - hingeFillet,-centerY,0]) {
|
||||||
|
cube([hingeWidth + hingeFillet*2, centerY*2, hingeThickness]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// fillet hinge
|
||||||
|
for (x = [-filletXOffset, filletXOffset]) {
|
||||||
|
hull() {
|
||||||
|
for (y = [-filletYOffset, filletYOffset]) {
|
||||||
|
translate([x,y,-eps]) {
|
||||||
|
cylinder(h=hingeThickness + eps*2, r=hingeFillet, center=false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// tab
|
||||||
|
if (tabSize > 0) {
|
||||||
|
hull() {
|
||||||
|
for (x = [hingeFillet - hingeWidth/2, hingeWidth/2 - hingeFillet]) {
|
||||||
|
translate([x,-caseLength - hingeLength/2 - tabSize + hingeFillet,0]) {
|
||||||
|
cylinder(h=coverThickness, r=hingeFillet, center=false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
translate([-hingeWidth/2,-centerY,0]) {
|
||||||
|
cube([hingeWidth, eps, coverThickness]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fwd(centerY) xflip() union() {
|
||||||
|
back(textsize/2 + 1) text3d(text[0],center=true, size=textsize, h=0.5, font=":style=bold");
|
||||||
|
fwd(textsize/2 + 1) text3d(text[1],center=true, size=textsize, h=0.5, font=":style=bold");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
case();
|
||||||
|
|
||||||
84
Dom/tabl_basi_dzien.scad
Normal file
84
Dom/tabl_basi_dzien.scad
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
include <BOSL2/std.scad>
|
||||||
|
|
||||||
|
day = ["P","W","Ś","C","P","S","N"];
|
||||||
|
layer_h = 0.3;
|
||||||
|
hole_w = 13;
|
||||||
|
hole_d = 13;
|
||||||
|
hole_h = 8;
|
||||||
|
t_w = 3;
|
||||||
|
t_d = 6;
|
||||||
|
|
||||||
|
num_w = 1;
|
||||||
|
num_d = 2;
|
||||||
|
|
||||||
|
t = 2;
|
||||||
|
r = 1;
|
||||||
|
cap_t = 2;
|
||||||
|
$slop=0.35;
|
||||||
|
|
||||||
|
conn_l = 20;
|
||||||
|
conn_w = 8;
|
||||||
|
|
||||||
|
// constants for easy modeling
|
||||||
|
box_w = hole_w*num_w + t_w*(num_w+1);
|
||||||
|
box_d = hole_d*num_d + t_d*(num_d-1) + 2*t;
|
||||||
|
box_h = hole_h+t;
|
||||||
|
|
||||||
|
conn_cyl1 = [hole_d/2 + t,hole_d/2+t_d+hole_d+t];
|
||||||
|
conn_cyl2 = [hole_d/2+t_d - t,hole_d/2+t_d+hole_d+conn_l+t_d/2+t - r];
|
||||||
|
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
// main box
|
||||||
|
cuboid([box_w,box_d,box_h], rounding=r);
|
||||||
|
// holes
|
||||||
|
left((hole_w+t_w) * (num_w-1)/2) back((hole_d+t_d) * (num_d-1)/2)
|
||||||
|
for(i=[0:num_w-1]) { for(j=[0:num_d-1]) {
|
||||||
|
right(i*(hole_w + t_w)) fwd(j*(hole_d + t_d)) up(t/2) union() {
|
||||||
|
cuboid([hole_w, hole_d, hole_h], chamfer=-0.5, edges=TOP);
|
||||||
|
// channel for locking mechanism
|
||||||
|
up(hole_h/2 - cap_t/2 - 0.2) cuboid([hole_w+$slop, hole_d+$slop, layer_h*3], chamfer=layer_h/2);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
// connecting tabs / hinges
|
||||||
|
down(box_h/2 - layer_h/2) back(box_d/2 + conn_l/2)
|
||||||
|
left((hole_w+t_w) * (num_w-1)/2) for(i = [0 : num_w-1]) {
|
||||||
|
right(i*(hole_w + t_w)) cuboid([conn_w,conn_l + 2*r,layer_h]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cap
|
||||||
|
back(box_d/2 + conn_l - t) down(box_h/2)
|
||||||
|
left((hole_w+t_w) * (num_w-1)/2) back(hole_d)
|
||||||
|
for(i=[0:num_w-1]) { for(j=[0:num_d-1]) {
|
||||||
|
right(i*(hole_w + t_w)) back(j*(hole_d + t_d)) difference() {
|
||||||
|
union() {
|
||||||
|
// cap body
|
||||||
|
cuboid([hole_w-$slop, hole_d-$slop, cap_t + t], anchor=BOTTOM, chamfer=0.5, edges=TOP);
|
||||||
|
// cap thicker part to friction lock
|
||||||
|
up(cap_t + t - 0.8) cuboid([hole_w, hole_d, layer_h*1.5], rounding=layer_h/2);
|
||||||
|
// cap top with letters
|
||||||
|
cuboid([hole_w+t, hole_d+t, t], anchor=BOTTOM, rounding=1, edges="Z");
|
||||||
|
fwd(hole_d/2) cuboid([conn_w, t_d - t/2, layer_h], anchor=BOTTOM+BACK);
|
||||||
|
if(j==(num_d-1)) {
|
||||||
|
// round tab to open the container
|
||||||
|
back(hole_d/2) cyl(d=hole_w, h=t, anchor=BOTTOM, chamfer=0.5);
|
||||||
|
// chamfers for connectors
|
||||||
|
for(k = conn_cyl1) {
|
||||||
|
up(t/2 + layer_h) fwd(k) difference() {
|
||||||
|
cuboid([conn_w,t,t]);
|
||||||
|
up(t/2) fwd(t/2) xrot(45) cuboid([conn_w+1,t*2,t*2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(k = conn_cyl2) {
|
||||||
|
up(t/2 + layer_h) fwd(k) difference() {
|
||||||
|
cuboid([conn_w,t,t]);
|
||||||
|
up(t/2) back(t/2) xrot(45) cuboid([conn_w+1,t*2,t*2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
text3d(day[i], center=true, orient=BOTTOM, spin=180, h=layer_h*2, size=8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
68
Neptune4/filament_detector_guide.scad
Normal file
68
Neptune4/filament_detector_guide.scad
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
include <BOSL2/std.scad>
|
||||||
|
|
||||||
|
$fn = 36*5;
|
||||||
|
t = 5;
|
||||||
|
rounding = 1;
|
||||||
|
|
||||||
|
// base to connect to the printer
|
||||||
|
base_hole_distance = 40;
|
||||||
|
base_hole_d = 4.5;
|
||||||
|
base_dim = [62,25,12];
|
||||||
|
|
||||||
|
det_offset = 4;
|
||||||
|
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
// base
|
||||||
|
cuboid(base_dim, rounding=rounding, anchor=TOP);
|
||||||
|
// holes for screws
|
||||||
|
left(base_hole_distance/2) cyl(d=base_hole_d, h=base_dim[2], chamfer=-1, anchor=TOP);
|
||||||
|
right(base_hole_distance/2) cyl(d=base_hole_d, h=base_dim[2], chamfer=-1, anchor=TOP);
|
||||||
|
|
||||||
|
// hole for screw for filament detector
|
||||||
|
down(base_dim[2]/2) left(det_offset) ycyl(d=base_hole_d, h=base_dim[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ball bearing holder
|
||||||
|
bear_up = 25;
|
||||||
|
bear_fwd = 15;
|
||||||
|
|
||||||
|
bear_od = 22;
|
||||||
|
bear_cover_od = 35; // I have a cover/guide printed on my 608 bearings
|
||||||
|
bear_id = 8;
|
||||||
|
bear_w = 8;// bearing is 7mm, +1 for clearance
|
||||||
|
|
||||||
|
// bearing mockup to see clearance
|
||||||
|
// up(bear_up) fwd(bear_fwd) xcyl(d=bear_cover_od);
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
// base for bearing
|
||||||
|
chain_hull() {
|
||||||
|
up(bear_up) fwd(bear_fwd) xcyl(d=bear_od, h=bear_w+2*t, rounding=rounding);
|
||||||
|
cuboid([bear_w + 2*t, base_dim[1],2]);
|
||||||
|
}
|
||||||
|
// cutout for bearing
|
||||||
|
up(bear_up) fwd(bear_fwd) xcyl(d=bear_cover_od + t, h=bear_w);
|
||||||
|
// hole for screw to hold bearing
|
||||||
|
up(bear_up) fwd(bear_fwd) xcyl(d=bear_id, h=bear_w + 2*t+0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// PTFE tube holder
|
||||||
|
ptfe_dim = [bear_w + 2*t,9,37];
|
||||||
|
filament_od = 2.5;
|
||||||
|
ptfe_od = 4.2;
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
// upright square
|
||||||
|
back(base_dim[1]/2) down(rounding) cuboid(ptfe_dim, anchor=BACK+BOTTOM);
|
||||||
|
// upright round top
|
||||||
|
up(ptfe_dim[2]-rounding) back(base_dim[1]/2)
|
||||||
|
ycyl(h=ptfe_dim[1], d=ptfe_dim[0], anchor=BACK);
|
||||||
|
}
|
||||||
|
// hole for filament
|
||||||
|
up(ptfe_dim[2]-rounding) back(base_dim[1]/2) ycyl(h=ptfe_dim[1], d=filament_od, anchor=BACK);
|
||||||
|
// hole for PTFE tube
|
||||||
|
up(ptfe_dim[2]-rounding) back(base_dim[1]/2) ycyl(h=ptfe_dim[1]/2, d=ptfe_od, rounding1=1, rounding2=-0.5, anchor=BACK);
|
||||||
|
|
||||||
|
}
|
||||||
61
Neptune4/screen_holder.scad
Normal file
61
Neptune4/screen_holder.scad
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
include <BOSL2/std.scad>
|
||||||
|
|
||||||
|
// the original Neptune 4 screen module
|
||||||
|
module screen() {
|
||||||
|
// main body
|
||||||
|
cuboid([87,20,145], chamfer=2, edges=BACK, anchor=BOTTOM);
|
||||||
|
// space for cable
|
||||||
|
cuboid([25,20,50]);
|
||||||
|
xrot(20) cuboid([25,20,50]);
|
||||||
|
// MAGNET
|
||||||
|
back(14) up(15 + 25) union() {
|
||||||
|
cuboid([48,5,30]);
|
||||||
|
left(62/2) ycyl(d=3.5, h=20);
|
||||||
|
right(62/2) ycyl(d=3.5, h=20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bot_w = 90;
|
||||||
|
bot_d = 50;
|
||||||
|
bot_h = 5;
|
||||||
|
bot_mag_d = 8.5;
|
||||||
|
bot_mag_h = 2;
|
||||||
|
bot_mag = [3,3];
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
difference() {
|
||||||
|
// main base
|
||||||
|
cuboid([bot_w, bot_d, bot_h], anchor=FWD+BOTTOM, chamfer=1);
|
||||||
|
// magnet holes
|
||||||
|
for(i = [0 : bot_mag[0]-1]) {
|
||||||
|
for(j = [0 : bot_mag[1]-1]) {
|
||||||
|
left(bot_w/2) right(bot_mag_d) fwd(bot_mag_d)
|
||||||
|
right(((bot_w - bot_mag_d*2)/(bot_mag[0]-1)) * i)
|
||||||
|
fwd(((bot_d - bot_mag_d*2)/(bot_mag[1]-1)) * j)
|
||||||
|
cyl(d=bot_mag_d, h=bot_mag_h, anchor=BOTTOM, chamfer=-0.2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// vertical upright
|
||||||
|
|
||||||
|
vert_h = 50;
|
||||||
|
vert_t = 5;
|
||||||
|
|
||||||
|
// holder
|
||||||
|
|
||||||
|
hold_angle = 20;
|
||||||
|
hold_t = 20;
|
||||||
|
hold_h = 65;
|
||||||
|
hold_dist = 5;
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
// vertical upright
|
||||||
|
cuboid([bot_w, vert_t, vert_h], anchor=BOTTOM+FWD, chamfer=1);
|
||||||
|
// holder body
|
||||||
|
up(vert_h - vert_t) xrot(-hold_angle)
|
||||||
|
cuboid([bot_w,hold_t,hold_h], anchor=BOTTOM, chamfer=1);
|
||||||
|
}
|
||||||
|
up(vert_h - vert_t) xrot(-hold_angle) fwd(hold_t/2 - 3.55) up(hold_dist) screen();
|
||||||
|
}
|
||||||
72
Neptune4/wkladka_do_rolki.scad
Normal file
72
Neptune4/wkladka_do_rolki.scad
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
include <BOSL2/std.scad>
|
||||||
|
include <BOSL2/threading.scad>
|
||||||
|
|
||||||
|
// the values are diameter, length
|
||||||
|
// specify diameter 2-3mm smaller for clearance, length doesn't matter much
|
||||||
|
spectrum = [51, 65]; // in diam = 53
|
||||||
|
|
||||||
|
|
||||||
|
t = 2;
|
||||||
|
roll = spectrum;
|
||||||
|
grid_const = 100;
|
||||||
|
grid = 18;
|
||||||
|
|
||||||
|
$slop = 0.3;
|
||||||
|
$fn = 360;
|
||||||
|
|
||||||
|
module holes(size, num) {
|
||||||
|
down(100/2) textured_tile("trunc_diamonds", size, tex_depth=100, tex_reps=[num,num], tex_extra=0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
// main body
|
||||||
|
cyl(d=roll[0], h=t, anchor=BOTTOM);
|
||||||
|
// holes
|
||||||
|
holes(roll[0], grid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// wall
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
// main body
|
||||||
|
tube(h=roll[1], od=roll[0], wall=t, anchor=BOTTOM);
|
||||||
|
// holes
|
||||||
|
// cyl(h=roll[1], d=20, tex_reps=[40,20], texture="pyramids", tex_depth=roll[0]*2, anchor=BOTTOM);
|
||||||
|
}
|
||||||
|
// top threads
|
||||||
|
for(a = [0,180] ) {
|
||||||
|
zrot(a) up(roll[1] - 2*t) thread_helix(d=roll[0] - 4*t, pitch=5, thread_depth=2, turns=0.2, internal=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
top_d = roll[0] + 5;
|
||||||
|
top_h = 6;
|
||||||
|
thread_h = 16;
|
||||||
|
|
||||||
|
chamfer_h = 4;
|
||||||
|
chamfer_t = 3;
|
||||||
|
|
||||||
|
// top
|
||||||
|
up(roll[1] + 20) union() {
|
||||||
|
// top
|
||||||
|
difference() {
|
||||||
|
cyl(d=roll[0], h=t, anchor=TOP);
|
||||||
|
holes(roll[0], grid);
|
||||||
|
}
|
||||||
|
// cylinder with threads
|
||||||
|
tube(od=roll[0] - 4*t - $slop, wall=t, h=thread_h, anchor=TOP);
|
||||||
|
for(a = [0,180] ) {
|
||||||
|
zrot(a) down(thread_h - 4) thread_helix(d=roll[0] - 4*t - $slop, pitch=5, thread_depth=2, turns=0.2);
|
||||||
|
}
|
||||||
|
// outer part with texture
|
||||||
|
difference() {
|
||||||
|
cyl(d=top_d, h=top_h, anchor=TOP, texture="hex_grid");
|
||||||
|
cyl(h=top_h, d=roll[0]-4*t-$slop, anchor=TOP);
|
||||||
|
}
|
||||||
|
// tube(od=top_d, id=roll[0]-4*t-$slop, h=top_h, anchor=TOP, texture="hex");
|
||||||
|
// chamfered part
|
||||||
|
down(top_h) tube(id=roll[0] - 4*t - $slop, od2=roll[0] - 4*t - $slop + chamfer_t, od1=roll[0] - 4*t - $slop, h=chamfer_h);
|
||||||
|
}
|
||||||
|
|
@ -1,27 +1,34 @@
|
||||||
include <BOSL2/std.scad>
|
include <BOSL2/std.scad>
|
||||||
|
include <BOSL2/joiners.scad>
|
||||||
|
|
||||||
t=3;
|
t=7.5;
|
||||||
d = 50;
|
d = 80;
|
||||||
h = 50;
|
h = 100;
|
||||||
conn = 5;
|
conn = 0;
|
||||||
tr = 3; // trytytka szer
|
tr = 4; // trytytka szer
|
||||||
tr_d = 0.5;
|
tr_d = 1;
|
||||||
|
|
||||||
$fn = 360;
|
$fn = 360;
|
||||||
|
|
||||||
difference() {
|
difference() {
|
||||||
torus(d_maj=d, d_min=t);
|
torus(d_maj=d, d_min=t);
|
||||||
back(d + conn/2)cuboid([2*d,2*d,2*d]);
|
back(d + conn/2)cuboid([2*d,2*d,2*d]);
|
||||||
left(d/2) union() {
|
// left(d/2) union() {
|
||||||
up(conn/2) cuboid([conn,conn,conn]);
|
// up(conn/2) cuboid([t*2,conn,conn]);
|
||||||
xrot(90) tube(h=tr, id=t-tr_d, wall=t, rounding=0.3);
|
// xrot(90) tube(h=tr, id=t-tr_d, wall=t, rounding=0.3);
|
||||||
}
|
// }
|
||||||
right(d/2) union() {
|
// right(d/2) union() {
|
||||||
down(conn/2) cuboid([conn,conn,conn]);
|
// down(conn/2) cuboid([t*2,conn,conn]);
|
||||||
xrot(90) tube(h=tr, id=t-tr_d, wall=t, rounding=0.3);
|
// xrot(90) tube(h=tr, id=t-tr_d, wall=t, rounding=0.3);
|
||||||
}
|
// }
|
||||||
|
left(d/2) xrot(-90) rabbit_clip("female", t/2,t/2,0.5, 0.4,1, lock=true);
|
||||||
}
|
}
|
||||||
|
right(d/2) xrot(-90) rabbit_clip("male", t/2,t/2,0.5, 0.4,1, lock=true);
|
||||||
|
|
||||||
|
|
||||||
for(i = [0:1] ) {
|
for(i = [0:1] ) {
|
||||||
zrot(90*i + 45) left(d/2) up(h/2) cyl(h=h, d=t);
|
zrot(90*i + 45) left(d/2) union() {
|
||||||
|
cyl(h=h, d=t, anchor=BOTTOM);
|
||||||
|
up(h) cyl(h=t*2, d1=t, d2=0, anchor=BOTTOM);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue