UNPKG

@bitbybit-dev/jscad

Version:

Bit By Bit Developers JSCAD based CAD Library to Program Geometry

45 lines (44 loc) 2.06 kB
/** * 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; } }