fix translation of non-centered cylinderX/Y

This commit is contained in:
2023-12-21 23:06:47 +00:00
parent 68088bc4b7
commit ccb5e541fe
2 changed files with 16 additions and 6 deletions

View File

@@ -28,7 +28,7 @@ PowerHeight=2.0;
// offset from left edge of phone to left edge of 3.5mm audio jack // offset from left edge of phone to left edge of 3.5mm audio jack
AuxMinX=23.0; AuxMinX=23.0;
AuxMinZ=4.1; AuxMinZ=3.8;
UsbWidth=9.0; UsbWidth=9.0;
UsbHeight=3.5; UsbHeight=3.5;

View File

@@ -1,12 +1,18 @@
function _toRad(r=undef, d=undef) = (r != undef) ? r : d/2; function _toRad(r=undef, d=undef) = (r != undef) ? r : d/2;
module translateIf(cond, amount) {
if (cond) {
translate(amount) children();
} else {
children();
}
}
/// cylinder() where `center=false` behaves like for `cube(center=false)`, /// cylinder() where `center=false` behaves like for `cube(center=false)`,
/// i.e. circle center is not at (0, 0) but (r, r) /// i.e. circle center is not at (0, 0) but (r, r)
module cylinderZ(d=undef, r=undef, h=undef, center=false) { module cylinderZ(d=undef, r=undef, h=undef, center=false) {
if (center) { translateIf(!center, [_toRad(r=r, d=d), _toRad(r=r, d=d), 0]) {
cylinder(d=d, r=r, h=h, center=center); cylinder(d=d, r=r, h=h, center=center);
} else {
translate([_toRad(r=r, d=d), _toRad(r=r, d=d), 0]) cylinder(d=d, r=r, h=h, center=center);
} }
} }
@@ -14,13 +20,17 @@ module cylinderZ(d=undef, r=undef, h=undef, center=false) {
/// and where `center=false` behaves like for `cube(center=false)`, /// and where `center=false` behaves like for `cube(center=false)`,
/// i.e. circle center is not at (0, 0) but (r, r) /// i.e. circle center is not at (0, 0) but (r, r)
module cylinderX(d=undef, r=undef, h=undef, center=false) { module cylinderX(d=undef, r=undef, h=undef, center=false) {
rotate(a=[0,-90,0]) cylinderZ(d=d, r=r, h=h, center=center); translateIf(!center, [0, _toRad(r=r, d=d), _toRad(r=r, d=d)]) {
rotate(a=[0,-90,0]) cylinder(d=d, r=r, h=h, center=center);
}
} }
/// cylinder() but with the axis on the y axis instead of the z axis /// cylinder() but with the axis on the y axis instead of the z axis
/// and where `center=false` behaves like for `cube(center=false)`, /// and where `center=false` behaves like for `cube(center=false)`,
/// i.e. circle center is not at (0, 0) but (r, r) /// i.e. circle center is not at (0, 0) but (r, r)
module cylinderY(d=undef, r=undef, h=undef, center=false) { module cylinderY(d=undef, r=undef, h=undef, center=false) {
rotate(a=[-90,0,0]) cylinderZ(d=d, r=r, h=h, center=center); translateIf(!center, [_toRad(r=r, d=d), 0, _toRad(r=r, d=d)]) {
rotate(a=[-90,0,0]) cylinder(d=d, r=r, h=h, center=center);
}
} }