98 lines
3.7 KiB
OpenSCAD
98 lines
3.7 KiB
OpenSCAD
|
// Valve Index headset and controllers mount
|
||
|
// length units are millimeters
|
||
|
tableLegDiameter = 44.5;
|
||
|
screwToLeg = 15.42;
|
||
|
screwHeadDiameter = 9.00;
|
||
|
screwThreadHole = 5.00;
|
||
|
headsetBottomSupportWidth = 25.40;
|
||
|
legWrapperWidth = 5.00;
|
||
|
clampHeight = 100.0;
|
||
|
circleResolution=360*2; // faces per rotation
|
||
|
|
||
|
difference() {
|
||
|
union() {
|
||
|
// leg clamp
|
||
|
difference() {
|
||
|
cylinder(h=100, r=tableLegDiameter/2 + legWrapperWidth, $fn=circleResolution);
|
||
|
union() {
|
||
|
translate([0,0,-0.05]) {
|
||
|
cylinder(h=clampHeight + 0.1, r=tableLegDiameter/2, $fn=circleResolution);
|
||
|
}
|
||
|
translate([-clampHeight,screwHeadDiameter, -0.05]) {
|
||
|
cube([clampHeight*2, clampHeight, clampHeight + 0.1]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// leg screw connection
|
||
|
translate([-screwHeadDiameter,-(screwToLeg+screwHeadDiameter+tableLegDiameter/2),clampHeight-27.0]) {
|
||
|
difference() {
|
||
|
cube([screwHeadDiameter * 2, screwToLeg + screwHeadDiameter, 27.0]);
|
||
|
union() {
|
||
|
rotate([0, 90, 0]) {
|
||
|
translate([42, -45, screwHeadDiameter+0.1
|
||
|
]) {
|
||
|
cylinder(h=screwHeadDiameter*2.5, r=78.0, center=true, $fn=circleResolution);
|
||
|
}
|
||
|
}
|
||
|
// space for screw head
|
||
|
translate([screwHeadDiameter, screwHeadDiameter/2, 15]) {
|
||
|
cylinder(h=12.0, r=screwHeadDiameter*0.55, center=true, $fn=circleResolution);
|
||
|
translate([-screwHeadDiameter*0.55,-screwHeadDiameter,-6])
|
||
|
cube([screwHeadDiameter*1.1, 10, 12]);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// headset hook
|
||
|
translate([-screwHeadDiameter,-(legWrapperWidth+headsetBottomSupportWidth*1.5+tableLegDiameter/2),0]) {
|
||
|
union() {
|
||
|
cube([screwHeadDiameter*2, legWrapperWidth+headsetBottomSupportWidth*1.5, legWrapperWidth*1.5]);
|
||
|
translate([0, -legWrapperWidth*0.99, 0]) {
|
||
|
cube([screwHeadDiameter*2, legWrapperWidth, legWrapperWidth*3]);
|
||
|
}
|
||
|
translate([0, (headsetBottomSupportWidth*1.5)-14, legWrapperWidth*1.5]) {
|
||
|
difference() {
|
||
|
cube([screwHeadDiameter*2, 12+legWrapperWidth,10]);
|
||
|
translate([-50,0,12+legWrapperWidth]) {
|
||
|
rotate([0,90,0]) {
|
||
|
cylinder(h=100, r=12+legWrapperWidth, $fn=circleResolution);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// left controller hook
|
||
|
translate([-(legWrapperWidth+legWrapperWidth+tableLegDiameter/2), 0, 0]) {
|
||
|
cube([legWrapperWidth+legWrapperWidth, screwHeadDiameter, legWrapperWidth]);
|
||
|
translate([-legWrapperWidth*0.99,0,0]){
|
||
|
cube([legWrapperWidth, screwHeadDiameter, legWrapperWidth*2]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// right controller hook
|
||
|
translate([tableLegDiameter/2, 0, 0]) {
|
||
|
cube([legWrapperWidth+legWrapperWidth, screwHeadDiameter, legWrapperWidth]);
|
||
|
translate([legWrapperWidth+legWrapperWidth*0.99,0,0]){
|
||
|
cube([legWrapperWidth, screwHeadDiameter, legWrapperWidth*2]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// extra critical space deletion
|
||
|
union() {
|
||
|
// table leg
|
||
|
translate([0,0,-0.05]) {
|
||
|
cylinder(h=clampHeight + 0.1, r=tableLegDiameter/2, $fn=circleResolution);
|
||
|
}
|
||
|
translate([-clampHeight,10, -0.05]) {
|
||
|
cube([clampHeight*2, clampHeight, clampHeight + 0.1]);
|
||
|
}
|
||
|
// screw hole
|
||
|
translate([0, -(screwToLeg+screwHeadDiameter/2 + tableLegDiameter/2), 200]) {
|
||
|
cylinder(h=250.0, r=screwThreadHole/2, center=true, $fn=circleResolution);
|
||
|
}
|
||
|
}
|
||
|
}
|