@bitbybit-dev/jscad
Version:
Bit By Bit Developers JSCAD based CAD Library to Program Geometry
45 lines (44 loc) • 2.06 kB
JavaScript
/**
* Contains various functions for Solid extrusions from JSCAD library https://github.com/jscad/OpenJSCAD.org
* Thanks JSCAD community for developing this kernel
*/
export class JSCADExtrusions {
constructor(jscad, geometryHelper, math) {
this.jscad = jscad;
this.geometryHelper = geometryHelper;
this.math = math;
}
extrudeLinear(inputs) {
const multipleGeometries = inputs.geometry.length && inputs.geometry.length > 0;
const geometry = multipleGeometries ? inputs.geometry : [inputs.geometry];
const extrusions = this.jscad.extrusions.extrudeLinear({
height: inputs.height,
twistAngle: this.math.degToRad({ number: inputs.twistAngle }),
twistSteps: inputs.twistSteps
}, ...geometry);
return extrusions;
}
extrudeRectangular(inputs) {
const multipleGeometries = inputs.geometry.length && inputs.geometry.length > 0;
const geometry = multipleGeometries ? inputs.geometry : [inputs.geometry];
const extrusions = this.jscad.extrusions.extrudeRectangular({ height: inputs.height, size: inputs.size }, ...geometry);
return extrusions;
}
extrudeRectangularPoints(inputs) {
const twoDimensionalPoints = inputs.points.map(pt => [pt[0], pt[1]]);
const duplicatePointsRemoved = this.geometryHelper.removeConsecutiveVectorDuplicates(twoDimensionalPoints);
const path = this.jscad.geometries.path2.fromPoints({}, duplicatePointsRemoved);
const extrusion = this.extrudeRectangular({ height: inputs.height, size: inputs.size, geometry: path });
return extrusion;
}
extrudeRotate(inputs) {
const options = {
angle: this.math.degToRad({ number: inputs.angle }),
startAngle: this.math.degToRad({ number: inputs.startAngle }),
overflow: "cap",
segments: inputs.segments
};
const extrusion = this.jscad.extrusions.extrudeRotate(options, inputs.polygon);
return extrusion;
}
}