@bitbybit-dev/jscad
Version:
Bit By Bit Developers JSCAD based CAD Library to Program Geometry
65 lines (64 loc) • 2.91 kB
JavaScript
/**
* 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;
}
}