UNPKG

@bitbybit-dev/jscad

Version:

Bit By Bit Developers JSCAD based CAD Library to Program Geometry

65 lines (64 loc) 2.91 kB
/** * Contains various functions for Path from JSCAD library https://github.com/jscad/OpenJSCAD.org * Thanks JSCAD community for developing this kernel */ export class JSCADPath { constructor(jscad, geometryHelper, math) { this.jscad = jscad; this.geometryHelper = geometryHelper; this.math = math; } createFromPoints(inputs) { const twoDimensionalPoints = inputs.points.map(pt => [pt[0], pt[1]]); return this.removeDuplicatesAndCreateFromPoints(twoDimensionalPoints, inputs.closed); } createPathsFromPoints(inputs) { return inputs.pointsLists.map(points => { const twoDimensionalPoints = points.map(pt => [pt[0], pt[1]]); if (twoDimensionalPoints.length > 1 && this.geometryHelper.vectorsTheSame(twoDimensionalPoints[0], twoDimensionalPoints[twoDimensionalPoints.length - 1], 0.00001)) { return this.removeDuplicatesAndCreateFromPoints(twoDimensionalPoints, true); } return this.removeDuplicatesAndCreateFromPoints(twoDimensionalPoints, false); }); } createFromPolyline(inputs) { const twoDimensionalPoints = inputs.polyline.points.map(pt => [pt[0], pt[1]]); return this.removeDuplicatesAndCreateFromPoints(twoDimensionalPoints, inputs.closed); } createEmpty() { return this.jscad.geometries.path2.create(); } close(inputs) { return this.jscad.geometries.path2.close(inputs.path); } appendPoints(inputs) { const twoDimensionalPoints = inputs.points.map(pt => [pt[0], pt[1]]); const duplicatePointsRemoved = this.geometryHelper.removeConsecutiveVectorDuplicates(twoDimensionalPoints); return this.jscad.geometries.path2.appendPoints(duplicatePointsRemoved, inputs.path); } appendPolyline(inputs) { const twoDimensionalPoints = inputs.polyline.points.map(pt => [pt[0], pt[1]]); return this.appendPoints({ points: twoDimensionalPoints, path: inputs.path }); } appendArc(inputs) { const endpoint = [inputs.endPoint[0], inputs.endPoint[1]]; const radius = [inputs.radiusX, inputs.radiusY]; return this.jscad.geometries.path2.appendArc({ endpoint, radius, xaxisrotation: this.math.degToRad({ number: inputs.xAxisRotation }), clockwise: inputs.clockwise, large: inputs.large, segments: inputs.segments, }, inputs.path); } removeDuplicatesAndCreateFromPoints(twoDimensionalPoints, closed) { const duplicatePointsRemoved = this.geometryHelper.removeConsecutiveVectorDuplicates(twoDimensionalPoints); let path2d = this.jscad.geometries.path2.fromPoints({}, duplicatePointsRemoved); if (closed) { path2d = this.jscad.geometries.path2.close(path2d); } return path2d; } }