Skip to content

Instantly share code, notes, and snippets.

@ryansturmer
Last active August 20, 2016 04:05
Show Gist options
  • Save ryansturmer/6cc59704e098a13f42a29a518e7f701d to your computer and use it in GitHub Desktop.
Save ryansturmer/6cc59704e098a13f42a29a518e7f701d to your computer and use it in GitHub Desktop.
Locking joint
function getParameterDefinitions() {
return [
{ name: 'detents', type: 'int', initial: 12, caption: "Detents" },
{ name: 'holeDiameter', type: 'float', initial: 0.25, caption: "Bolt Diameter" }
];
}
function main(params) {
var holeDiameter = params.holeDiameter;
var detents = params.detents;
return [
makeFemalePlate({
detentHeight: 0.10,
holeDiameter:holeDiameter,
detents:detents,
allowance:0.020
}),
makeMalePlate({
detentHeight: 0.10,
holeDiameter:holeDiameter,
detents:detents
}).rotateX(180).translate([0,0,0.01])
]
}
function makePill(options) {
options = options || {};
var r = options.r || 0.125;
var h = options.h || 1.0;
return union(
cylinder({
h : h-2*r,
r : r
}).translate([0,0,r]),
sphere({
r : r,
}).translate([0,0,r]),
sphere({
r : r,
}).translate([0,0,h-r])
);
}
function makeFlatPill(options) {
options = options || {};
var r = options.r || 0.25;
var h = options.h || 0.125;
var length = options.length || 1.0;
var bl = length-2*r;
var center = options.center || false;
return union(
cylinder({
h : h,
r : r,
center : true
}).translate([0,bl]),
cylinder({
h : h,
r : r,
center : true
}),
cube({
size: [2*r, bl, h],
center: true
}).translate([0,bl/2,0])
).translate(
center ? [0,-bl/2] : [r,r,h/2]);
}
function makeMalePlate(options) {
var options = options || {};
var detentOffset = options.detentOffset || 0.25;
var detentHeight = options.detentHeight || 0.125;
var outerDiameter = options.diameter || 4.0;
var hubDiameter = options.hubDiameter || 1.0;
var detents = options.detents || 12;
var thickness = options.thickness || 0.5;
var holeDiameter = options.holeDiameter || 0.25;
var outerRadius = outerDiameter/2.0;
var hubRadius = hubDiameter/2.0;
var allowance = options.allowance || 0.010;
var spokeLength = outerRadius - hubRadius - detentOffset*2
var spoke = makePill({
h : outerRadius-hubRadius-detentOffset*2,
r : detentHeight
}).rotateX(-90).translate([0, hubRadius + detentOffset])
var spokeList = [spoke];
var angle = 360.0/detents;
for(var i=0; i<detents; i++) {
spokeList.push(spokeList[spokeList.length-1].rotateZ(angle))
}
var machinedThickness = thickness-detentHeight;
var plate = cylinder({
h: machinedThickness,
r: outerRadius,
center:true
}).translate([0,0,-machinedThickness/2.0]);
var hub = cylinder( {
h: detentHeight*4.5,
r: hubRadius + allowance/2,
center: true
});
var hole = cylinder( {
h: thickness*3,
r: holeDiameter/2.0,
center: true
});
plate = union(
plate,
spokeList
);
return difference(plate ,hub, hole)
}
function makeFemalePlate(options) {
var options = options || {};
var detentOffset = options.detentOffset || 0.25;
var detentHeight = options.detentHeight || 0.125;
var outerDiameter = options.diameter || 4.0;
var hubDiameter = options.hubDiameter || 1.0;
var detents = options.detents || 12;
var thickness = options.thickness || 0.5;
var holeDiameter = options.holeDiameter || 0.25;
var outerRadius = outerDiameter/2.0;
var hubRadius = hubDiameter/2.0;
var allowance = options.allowance || 0.010;
var spokeLength = outerRadius - hubRadius - detentOffset*2 + allowance
detentHeight = detentHeight+allowance;
var spoke = makeFlatPill({
length : spokeLength,
r : detentHeight,
}).translate([-detentHeight, hubRadius + detentOffset, -detentHeight])
var spokeList = spoke;
var lastSpoke = spoke;
var angle = 360.0/detents;
for(var i=0; i<detents; i++) {
newSpoke = lastSpoke.rotateZ(angle)
spokeList = union(spokeList, newSpoke)
lastSpoke = newSpoke;
}
var machinedThickness = thickness-detentHeight;
var plate = cylinder({
h: machinedThickness,
r: outerRadius,
center:true
}).translate([0,0,-machinedThickness/2.0]);
var hub = cylinder( {
h: detentHeight*2,
r: hubRadius,
center: true
}).translate([0,0,detentHeight]);
var hole = cylinder( {
h : thickness*3,
r : holeDiameter/2,
center : true
});
plate = difference(
plate,
spokeList
);
return difference(
union(plate,hub),
hole
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment