If you haven't tried OpenSCAD yet, this part would be a prime example for some experiments with it: I whipped up some crude code which should be fairly configurable, and find it a lot easier to prototypes that way than with blender, too, as much as I like it for more complicated and free-form designs.
Hopefully your new models work out better, but judging from the size of the MX stem which should be 4x1mm² the dent and rim looks awfully thin for 3D printing - maybe the geometry could be changed in a few places?
Code: Select all
/**
* OpenSCAD model of MX caps to topre slider based on image from matt3o :
* http://deskthority.net/workshop-f7/topre-sliders-mx-caps-t7437.html
*
* 2014-02-11 suka @ deskthority
*
* All sizes are on estimates from above image, so most likely wrong :-)
* Other @todos are commented, most notably the join of the dent and the exact shape of the base cutouts tips.
*
*/
// set resolution to a higher value for smoother curves
$fn=230;
eps=0.001; // minimal offset for boolean operations
base_w = 14;
base_h = 1;
base_radius = 2;
block_w = 3;
block_d = 1.5;
block_h= 4;
cyl_R = 5;
cyl_H = 8;
cyl_r = 4;
cyl_h = 4;
cut_w = 3;
dent_h=1.5;
dent_w=1;
dent_d=1.5;
// Base plate with cut-out, round corner and two blocks
difference() {
union() {
translate([-base_w/2, -base_w/2, 0]) {
// base plate with one rounded corner
hull(){
translate([base_radius, base_w-base_radius, 0]) cylinder(r=base_radius, h=base_h);
//translate([base_w-base_radius, base_radius, 0]) cylinder(r=base_radius, h=base_h);
translate([base_w-1, 0, 0]) cube([1,1,base_h]);
translate([base_w-1, base_w-1, 0]) cube([1,1,base_h]);
translate([0, 0, 0]) cube([base_radius, base_radius, base_h]);
}
// two vertical blocks on base corners:
translate([0,block_w/sqrt(2),-block_h+base_h]) rotate([0,0,-45]) translate([0,-block_d,0]) cube([block_w, block_d, block_h]);
translate([base_w,base_w-block_w/sqrt(2), -block_h+base_h]) rotate([0,0,135]) translate([0,-block_d,0]) cube([block_w, block_d, block_h]);
}
}
color("green"){
// cut-out on one corner
rotate([0,0,-135]) translate([-cut_w/2, cyl_R-1, -eps ]) cube([cut_w, base_w/2, base_h+2*eps]);
// don't know what that cutout corners should look like
translate([base_w/2-cut_w/sqrt(2)*1.3+eps, -base_w/2-eps, -eps]) cube([cut_w/sqrt(2)*1.3, cut_w/sqrt(2)*1.3, base_h+2*eps]);
}
}
// Cylinder
difference() {
cylinder(r=cyl_R, h=cyl_H+base_h);
translate([0,0, cyl_H+base_h-cyl_h+eps]) cylinder(r=cyl_r, h=cyl_h);
}
// cherry stem
color("blue") {
rotate([0,0,90]) translate([-4/2, -1.0/2, cyl_h+base_h]) cube([4, 1.0, cyl_H-cyl_h]);
rotate([0,0, 0]) translate([-4/2, -1.1/2, cyl_h+base_h]) cube([4, 1.1, cyl_H-cyl_h]);
}
// dent @todo fix connection to cylinder
rotate([0,0,-45]) color("red") {
translate([dent_w/2+cyl_R-0.1,0,-dent_h/2+cyl_H+base_h]) rotate([0, -atan(dent_w/dent_h), 0]) {
difference() {
rotate([0, atan(dent_w/dent_h), 0]) cube([dent_w, dent_d, dent_h], center=true);
translate([dent_w,0,0]) cube([2*dent_w, 2*dent_d, 2*dent_h], center=true);
}
}
}