Add (incomplete) OBS stopper base for: 75847-14050 & 75849-14020
This commit is contained in:
parent
38e29eb868
commit
d16190879d
128
obs_stopper_base.jscad
Normal file
128
obs_stopper_base.jscad
Normal file
@ -0,0 +1,128 @@
|
||||
const { polygon, cylinder } = require('@jscad/modeling').primitives;
|
||||
const { extrudeLinear } = require('@jscad/modeling').extrusions;
|
||||
const { translate, rotate } = require('@jscad/modeling').transforms;
|
||||
const { intersect, subtract, union } = require('@jscad/modeling').booleans
|
||||
|
||||
function stripRounding(pointArray) {
|
||||
return pointArray.map(point => point.slice(0, 2));
|
||||
}
|
||||
|
||||
function polyRound({ points, factor }) {
|
||||
return polygon({points: stripRounding(points)});
|
||||
}
|
||||
|
||||
function polyRoundExtrude({points, length, startRadius, endRadius, factor}) {
|
||||
return extrudeLinear({height: length}, polyRound({ points, factor }))
|
||||
}
|
||||
|
||||
const baseWidth = 32;
|
||||
const baseLength = 27;
|
||||
const baseHeight = 1;
|
||||
|
||||
const ridgeWidth = 5;
|
||||
const ridgeHeight = 3;
|
||||
|
||||
function ridge() {
|
||||
const length = baseWidth;
|
||||
const offset = [0, 8, baseHeight];
|
||||
|
||||
const radii = [
|
||||
[0, 0, 0],
|
||||
[length, 0, 0],
|
||||
[length, ridgeWidth, 0],
|
||||
[0, ridgeWidth, 0],
|
||||
];
|
||||
|
||||
return translate(
|
||||
offset,
|
||||
polyRoundExtrude({ points: radii, length: ridgeHeight })
|
||||
);
|
||||
}
|
||||
|
||||
function base() {
|
||||
const radii = [
|
||||
[0, 0, 0],
|
||||
[baseWidth, 0, 0],
|
||||
[baseWidth, baseLength, 0],
|
||||
[0, baseLength, 0],
|
||||
];
|
||||
return polyRoundExtrude({ points: radii, length: baseHeight });
|
||||
}
|
||||
|
||||
function ridgeSpace() {
|
||||
const height = 2;
|
||||
const width = ridgeWidth;
|
||||
const length = 12;
|
||||
const offset = [0, 8, baseHeight + ridgeHeight - height];
|
||||
|
||||
const radii = [
|
||||
[0, 0, 0],
|
||||
[length, 0, 0],
|
||||
[length, width, 0],
|
||||
[0, width, 0],
|
||||
];
|
||||
|
||||
return translate(
|
||||
offset,
|
||||
polyRoundExtrude({ points: radii, length: height })
|
||||
);
|
||||
}
|
||||
|
||||
function hole() {
|
||||
const radius = 5 / 2;
|
||||
const offset = [6, 8 + radius, 0];
|
||||
|
||||
return translate(
|
||||
offset,
|
||||
cylinder({height: ridgeHeight + baseHeight, radius: radius * 1.1})
|
||||
);
|
||||
}
|
||||
|
||||
function wingBase() {
|
||||
const height = 1;
|
||||
const width = 5.5;
|
||||
const wingBaseLength = 15.5;
|
||||
const wingEdgeLength = 10;
|
||||
const wingEdgeOffset = 1;
|
||||
const offset = [0, 3, baseHeight];
|
||||
|
||||
const radii = [
|
||||
[0, 0, 0],
|
||||
[width, wingEdgeOffset, 0],
|
||||
[width, wingEdgeLength + 1, 0],
|
||||
[0, wingBaseLength, 0],
|
||||
];
|
||||
|
||||
// FIXME - this piece is not well-shaped
|
||||
const rootRadii = [
|
||||
[-1, 0, 0],
|
||||
[0, 0, 0],
|
||||
[0, wingBaseLength, 0],
|
||||
[-1, wingBaseLength, 0],
|
||||
];
|
||||
|
||||
return translate(
|
||||
offset,
|
||||
rotate(
|
||||
[0, -3*Math.PI / 4, 0],
|
||||
union(
|
||||
polyRoundExtrude({ points: radii, length: height }),
|
||||
polyRoundExtrude({ points: rootRadii, length: height })
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
const main = () => {
|
||||
return subtract(
|
||||
union(
|
||||
base(),
|
||||
ridge(),
|
||||
wingBase()
|
||||
),
|
||||
ridgeSpace(),
|
||||
hole()
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = { main }
|
||||
Loading…
x
Reference in New Issue
Block a user