p5bezier 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -71,6 +71,25 @@ function setup() {
71
71
  }
72
72
  ```
73
73
 
74
+ You can also pass a buffer returned by `createGraphics()`. In WebGL mode, supply `[x, y, z]` control points:
75
+
76
+ ```js
77
+ const buffer = createGraphics(300, 300, WEBGL)
78
+ const curves = initBezier(buffer)
79
+
80
+ buffer.noFill()
81
+ buffer.stroke(255)
82
+
83
+ curves.draw([
84
+ [-100, 0, 0],
85
+ [0, -100, 40],
86
+ [100, 0, 0],
87
+ ])
88
+ image(buffer, 0, 0)
89
+ ```
90
+
91
+ Curves use the target canvas or buffer's current styles and transforms. Dashed curves draw only the stroke and restore the fill afterward. Raw WebGL contexts without a p5.js renderer are not supported.
92
+
74
93
  ## Draw a Bézier Curve
75
94
 
76
95
  The simplest way to use the library is to call `p5bezier.draw()` in your `draw()` function. You can adjust the curve's style using `fill()` or `strokeWeight()` just like other shapes.
@@ -138,7 +157,7 @@ The call of `p5bezier.new` will not draw the curve on canvas automatically. To d
138
157
 
139
158
  ![cover](img/example.png)
140
159
 
141
- Check out the examples page and their [source code](https://github.com/peilingjiang/p5.bezier/tree/main/examples/sketch.js).
160
+ Check out the [examples page](https://p5bezier.netlify.app) and their [source code](https://github.com/peilingjiang/p5.bezier/tree/main/examples/).
142
161
 
143
162
  ### Projects and Demos
144
163
 
@@ -152,6 +171,17 @@ Check out the examples page and their [source code](https://github.com/peilingji
152
171
  2. `offset()`, `intersection()`, and `curvature()`... functions for Bézier object
153
172
  3. Draw B-Spline curves
154
173
 
174
+ ## Development
175
+
176
+ Install development dependencies and build the library:
177
+
178
+ ```sh
179
+ bun install --frozen-lockfile
180
+ bun run build # build the library
181
+ # or
182
+ bun run start # rebuild the library as you edit the source
183
+ ```
184
+
155
185
  ## References
156
186
 
157
187
  - [Bézier curve - Wikipedia](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see p5.bezier.min.js.LICENSE.txt */
2
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.initBezier=e():t.initBezier=e()}(this,(()=>(()=>{"use strict";var t={d:(e,n)=>{for(var i in n)t.o(n,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:n[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{default:()=>m});var n={1:.1,2:.02,3:.001,4:5e-4,5:2e-4},i=[1],o={};function r(t){return i[t]}function s(t,e){return 0===e||e===t?1:o[t][e]}!function(t){for(var e=i.length;e<=t;e++)i[e]=e*i[e-1]}(161),function(t){for(var e=2;e<=t;e++){o[e]={};for(var n=1;n<e;n++)o[e][n]=r(e)/(r(n)*r(e-n))}}(161);var h=function(t,e,n){if(n||2===arguments.length)for(var i,o=0,r=e.length;o<r;o++)!i&&o in e||(i||(i=Array.prototype.slice.call(e,0,o)),i[o]=e[o]);return t.concat(i||Array.prototype.slice.call(e))};function a(t,e){return"WebGLRenderingContext"===t.constructor.name||e?3:2}function c(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t.length;if(4===n){var i=t[0]-t[2],o=t[1]-t[3];return Math.sqrt(i*i+o*o)}if(6===n){i=t[0]-t[3],o=t[1]-t[4];var r=t[2]-t[5];return Math.sqrt(i*i+o*o+r*r)}return 0}function u(t){t.canvas._doFill&&t.ctx.fill(),t.canvas._doStroke&&t.ctx.stroke()}var l=function(){function t(t){this.m=Math.pow(2,31)-1,this.a=1103515245,this.c=12345,this.state=t}return t.prototype.r=function(){return this.state=(this.a*this.state+this.c)%this.m,this.state/this.m},t.prototype.next=function(t,e){return Math.floor(this.r()*(e-t+1))+t},t}();function p(t,e){void 0===e&&(e=!1);var n=160-(e?3:0);if(t.length<=n)return f(t);var i=t.length-n,o=new l(1234),r=new Set;return h([],new Array(i),!0).map((function(t,e){for(var i=o.next(5+e,n-5+e);r.has(i);)i=o.next(5+e,n-5+e);r.add(i)})),f(t.filter((function(t,e){return!r.has(e)})))}function f(t){return t.map((function(t){return t.slice()}))}function v(t){var e=t.length;if(0===e)return[];var n=t[0],i=t[e-1];if(1===e)return f([n]);var o=t[1],r=t[e-2];return f([[2*i[0]-r[0],2*i[1]-r[1]],[2*n[0]-o[0],2*n[1]-o[1]],n])}var d=function(t,e,n){if(n||2===arguments.length)for(var i,o=0,r=e.length;o<r;o++)!i&&o in e||(i||(i=Array.prototype.slice.call(e,0,o)),i[o]=e[o]);return t.concat(i||Array.prototype.slice.call(e))};function b(t,e,n,i){for(var o=new Array(i).fill(0),r=1-n,h=0;h<=e;h++)for(var a=s(e,h)*Math.pow(r,e-h)*Math.pow(n,h),c=0;c<i;c++)o[c]+=a*t[h][c];return o}window.console.log("[p5.bezier] ".concat("0.7.0"));var x=function(){function t(t){if(this.b={canvas:null,ctx:null,dimension:2,useP5:!0,beginPath:function(){},moveTo:function(){},lineTo:function(){},closePath:function(){}},this.b.canvas=t,this.b.ctx=this.b.canvas.drawingContext,"undefined"!=typeof p5&&t instanceof p5.Graphics)this.b.useP5=!0,this.b.dimension=a(this.b.ctx,!1);else{if(!("undefined"!=typeof p5&&t instanceof p5.Renderer||t.drawingContext))throw new Error("[p5.bezier] Canvas is not supported");this.b.useP5=!1,"undefined"!=typeof p5&&("undefined"==typeof p5||t instanceof p5.Renderer)||window.console.warn("[p5.bezier] Support beyond p5.js is not tested"),this.b.dimension=a(this.b.ctx,t.isP3D)}var e;(e=this.b).useP5?(e.beginPath=e.canvas.beginShape,e.moveTo=e.canvas.vertex,e.lineTo=e.canvas.vertex,e.closePath=e.canvas.endShape):e.ctx instanceof WebGLRenderingContext?(e.beginPath=function(){},e.moveTo=function(t,n,i){return void 0===i&&(i=0),e.ctx.vertexAttrib3f(0,t,n,i)},e.lineTo=function(t,n,i){return void 0===i&&(i=0),e.ctx.vertexAttrib3f(0,t,n,i)},e.closePath=function(){}):(e.beginPath=e.ctx.beginPath.bind(e.ctx),e.moveTo=e.ctx.moveTo.bind(e.ctx),e.lineTo=e.ctx.lineTo.bind(e.ctx),e.closePath=e.ctx.closePath.bind(e.ctx))}return t.prototype.draw=function(t,e,i){var o,r;void 0===e&&(e="OPEN"),void 0===i&&(i=3);var s="CLOSE"===e?d(d([],p(t,!0),!0),v(t),!0):p(t);return this.b.beginPath(),(o=this.b).moveTo.apply(o,s[0]),function(t,e,i){for(var o=e.length-1,r=n[i],s=0;s<=1;s+=r){var h=b(e,o,s,t.dimension);t.lineTo.apply(t,h)}}(this.b,s,i),(r=this.b).lineTo.apply(r,s[s.length-1]),this.b.useP5?this.b.closePath(e):"CLOSE"===e&&this.b.closePath(),u(this.b),s},t.prototype.new=function(t,e,i){return void 0===e&&(e="OPEN"),void 0===i&&(i=3),new y(t,e,n[i],this.b)},t}();var y=function(){function t(t,e,n,i,o){var r;void 0===o&&(o=null),this.controlPoints=p(t,"CLOSE"===e),"CLOSE"===e?((r=this.controlPoints).push.apply(r,v(this.controlPoints)),this.closeType="CLOSE"):this.closeType="OPEN",this.dimension=i.dimension,this.increment=n,this.vertexList=[],this.p=this.controlPoints.length,this.n=this.p-1,this.b=i,null===o?this._buildVertexList():this.vertexList=d([],o,!0)}return t.prototype._buildVertexList=function(){this.vertexList=[];for(var t=0;t<=1;t+=this.increment){var e=b(this.controlPoints,this.n,t,this.dimension);this.vertexList.push(e)}return this._addVertex(this.controlPoints[this.controlPoints.length-1]),this.dimension=this.vertexList[0].length,this.vertexList},t.prototype._addVertex=function(t){var e;(e=this.b).lineTo.apply(e,t)},t.prototype._distVertex=function(t,e){return 3===this.dimension&&3===t.length&&3===e.length?c(t[0],t[1],t[2],e[0],e[1],e[2]):2===this.dimension?c(t[0],t[1],e[0],e[1]):0},t.prototype.draw=function(t){t?this._dashedCurve(t):this._solidCurve()},t.prototype._solidCurve=function(){var t=this;this.b.beginPath(),this.vertexList.map((function(e){return t._addVertex(e)})),"CLOSE"===this.closeType&&this.b.closePath(),this.b.useP5?this.b.closePath(this.closeType):"CLOSE"===this.closeType&&this.b.closePath(),u(this.b)},t.prototype._dashedCurve=function(t){var e,n,i,o,r;this.increment>.001&&(this.increment=.001,window.console.warn("[p5.bezier] Smoothness set to 3 for a dashed curve"));var s,h,a,c,l,p=t.map(Math.abs),f=p[0],v=p[1],d=!0,b=this.vertexList[0],x=1,y=b,m=0,P=f;for(this.b.ctx.save(),this.b.ctx.fillStyle="rgba(0, 0, 0, 0)",this.b.beginPath(),(e=this.b).moveTo.apply(e,b);x<this.vertexList.length;){var g=this.vertexList[x];for(m=this._distVertex(b,g);m>=P;)h=g,a=P/m,c=void 0,l=void 0,c=(s=y).length,l=h.length,y=2===c&&2===l?[s[0]+(h[0]-s[0])*a,s[1]+(h[1]-s[1])*a]:3===c&&3===l?[s[0]+(h[0]-s[0])*a,s[1]+(h[1]-s[1])*a,s[2]+(h[2]-s[2])*a]:h,d?(n=this.b).lineTo.apply(n,y):(i=this.b).moveTo.apply(i,y),m-=P,P=(d=!d)?f:v;d?(o=this.b).lineTo.apply(o,g):(r=this.b).moveTo.apply(r,g),P-=this._distVertex(y,g),y=b=g,x++}u(this.b),this.b.ctx.restore()},t.prototype.update=function(t){if(t.length!==this.controlPoints.length)throw new Error("[p5.bezier] The number of control points changed");this.controlPoints.every((function(e,n){return e===t[n]}))||(this.controlPoints=t,this._buildVertexList())},t.prototype.move=function(e,n,i,o,r){if(void 0===i&&(i=null),void 0===o&&(o=!0),null===i&&3===this.dimension)throw new Error("[p5.bezier] X, Y, and Z are needed to move a 3D curve");var s=[e,n];null!==i&&s.push(i);var h=this.vertexList.map((function(t){return t.slice()})),a=new t(this.controlPoints,this.closeType,this.increment,this.b,h);return a.vertexList=a.vertexList.map((function(t){return t.map((function(t,e){return t+s[e]}))})),o&&a.draw(r),a},t.prototype.shortest=function(t,e,n){var i=this;void 0===n&&(n=0);var o=[0,0,0],r=Number.POSITIVE_INFINITY;return this.vertexList.map((function(s){var h=i._distVertex(s,[t,e,n]);r>h&&(r=h,o=d([],s,!0))})),o},t}();const m=function(t){return new x(t)};return e=e.default})()));
2
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.initBezier=e():t.initBezier=e()}(this,(()=>(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{default:()=>x});var n={1:.1,2:.02,3:.001,4:5e-4,5:2e-4},r=[1],i={};function o(t){return r[t]}function s(t,e){return 0===e||e===t?1:i[t][e]}!function(t){for(var e=r.length;e<=t;e++)r[e]=e*r[e-1]}(161),function(t){for(var e=2;e<=t;e++){i[e]={};for(var n=1;n<e;n++)i[e][n]=o(e)/(o(n)*o(e-n))}}(161);var h=function(t,e,n){if(n||2===arguments.length)for(var r,i=0,o=e.length;i<o;i++)!r&&i in e||(r||(r=Array.prototype.slice.call(e,0,i)),r[i]=e[i]);return t.concat(r||Array.prototype.slice.call(e))};function a(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t.length;if(4===n){var r=t[0]-t[2],i=t[1]-t[3];return Math.sqrt(r*r+i*i)}if(6===n){r=t[0]-t[3],i=t[1]-t[4];var o=t[2]-t[5];return Math.sqrt(r*r+i*i+o*o)}return 0}var u=!1;function l(t){return t<1||t>5||!Number.isInteger(t)?(u||(u=!0,window.console.warn("[p5.bezier] Smoothness should be an integer between 1 and 5")),Math.round(Math.max(1,Math.min(5,t)))):t}var c=function(){function t(t){this.m=Math.pow(2,31)-1,this.a=1103515245,this.c=12345,this.state=t}return t.prototype.r=function(){return this.state=(this.a*this.state+this.c)%this.m,this.state/this.m},t.prototype.next=function(t,e){return Math.floor(this.r()*(e-t+1))+t},t}();function p(t,e){void 0===e&&(e=!1);var n=160-(e?3:0);if(t.length<=n)return v(t);var r=t.length-n,i=new c(1234),o=new Set;return h([],new Array(r),!0).map((function(t,e){for(var r=i.next(5+e,n-5+e);o.has(r);)r=i.next(5+e,n-5+e);o.add(r)})),v(t.filter((function(t,e){return!o.has(e)})))}function v(t){return t.map((function(t){return t.slice()}))}function f(t){var e=t.length;if(0===e)return[];var n=t[0],r=t[e-1];if(1===e)return v([n]);var i=t[1];return[d(t[e-2],r,2),d(i,n,2),n.slice()]}function d(t,e,n){var r=t.length,i=e.length;return 2===r&&2===i?[t[0]+(e[0]-t[0])*n,t[1]+(e[1]-t[1])*n]:3===r&&3===i?[t[0]+(e[0]-t[0])*n,t[1]+(e[1]-t[1])*n,t[2]+(e[2]-t[2])*n]:e}var b=function(t,e,n){if(n||2===arguments.length)for(var r,i=0,o=e.length;i<o;i++)!r&&i in e||(r||(r=Array.prototype.slice.call(e,0,i)),r[i]=e[i]);return t.concat(r||Array.prototype.slice.call(e))};function m(t,e,n,r){for(var i=new Array(r).fill(0),o=1-n,h=0;h<=e;h++)for(var a=s(e,h)*Math.pow(o,e-h)*Math.pow(n,h),u=0;u<r;u++)i[u]+=a*t[h][u];return i}window.console.log("[p5.bezier] ".concat("0.8.0"));var y=function(){function t(t){this.b=function(t){var e,n=null!==(e=null==t?void 0:t._renderer)&&void 0!==e?e:t,r=null==n?void 0:n.drawingContext;if(!r)throw new Error("[p5.bezier] Canvas is not supported");var i=function(t,e){var n,r=null===(n=t.constructor)||void 0===n?void 0:n.name;return e||"WebGLRenderingContext"===r||"WebGL2RenderingContext"===r?3:2}(r,n.isP3D),o=n._pInst;if(!o){if(3===i)throw new Error("[p5.bezier] WebGL requires a p5.js renderer");return{dimension:i,beginPath:r.beginPath.bind(r),moveTo:r.moveTo.bind(r),lineTo:r.lineTo.bind(r),closePath:function(t){"CLOSE"===t&&r.closePath(),n._doFill&&r.fill(),n._doStroke&&r.stroke()},beginDash:function(){r.save(),r.fillStyle="rgba(0, 0, 0, 0)"},endDash:function(){return r.restore()}}}var s=!1,h=null;return{dimension:i,beginPath:function(){o.beginShape(),s=!1,h=null},lineTo:function(t,e,n){void 0===n&&(n=0),h&&(o.vertex.apply(o,h),h=null),o.vertex(t,e,n),s=!0},moveTo:function(t,e,n){void 0===n&&(n=0),s&&(o.endShape(),o.beginShape(),s=!1),h=[t,e,n]},closePath:function(t){o.endShape("CLOSE"===t?o.CLOSE:void 0),s=!1,h=null},beginDash:function(){o.push(),o.noFill()},endDash:function(){return o.pop()}}}(t)}return t.prototype.draw=function(t,e,r){var i,o;if(void 0===e&&(e="OPEN"),void 0===r&&(r=3),t.length<2)throw new Error("[p5.bezier] At least 2 points are needed to draw a curve");var s="CLOSE"===e?b(b([],p(t,!0),!0),f(t),!0):p(t);return this.b.beginPath(),(i=this.b).moveTo.apply(i,s[0]),function(t,e,r){for(var i=e.length-1,o=n[l(r)],s=0;s<=1;s+=o){var h=m(e,i,s,t.dimension);t.lineTo.apply(t,h)}}(this.b,s,r),(o=this.b).lineTo.apply(o,s[s.length-1]),this.b.closePath(e),s},t.prototype.new=function(t,e,r){void 0===e&&(e="OPEN"),void 0===r&&(r=3);var i=n[l(r)];return new g(t,e,i,this.b)},t}();var g=function(){function t(t,e,n,r,i){var o;void 0===i&&(i=null),this.controlPoints=p(t,"CLOSE"===e),"CLOSE"===e?((o=this.controlPoints).push.apply(o,f(this.controlPoints)),this.closeType="CLOSE"):this.closeType="OPEN",this.dimension=r.dimension,this.increment=n,this.vertexList=[],this.p=this.controlPoints.length,this.n=this.p-1,this.b=r,null===i?this._buildVertexList():this.vertexList=b([],i,!0)}return t.prototype._buildVertexList=function(){this.vertexList=[];for(var t=0;t<=1;t+=this.increment){var e=m(this.controlPoints,this.n,t,this.dimension);this.vertexList.push(e)}return this.vertexList.push(this.controlPoints[this.controlPoints.length-1].slice()),this.dimension=this.vertexList[0].length,this.vertexList},t.prototype._addVertex=function(t){var e;(e=this.b).lineTo.apply(e,t)},t.prototype._distVertex=function(t,e){return 3===this.dimension&&3===t.length&&3===e.length?a(t[0],t[1],t[2],e[0],e[1],e[2]):2===this.dimension?a(t[0],t[1],e[0],e[1]):0},t.prototype.draw=function(t){t?this._dashedCurve(t):this._solidCurve()},t.prototype._solidCurve=function(){var t=this;this.b.beginPath(),this.vertexList.map((function(e){return t._addVertex(e)})),this.b.closePath(this.closeType)},t.prototype._dashedCurve=function(t){var e,n,r,i,o;this.increment>.001&&(this.increment=.001,window.console.warn("[p5.bezier] Smoothness set to 3 for a dashed curve"));var s=t.map(Math.abs),h=s[0],a=s[1],u=!0,l=this.vertexList[0],c=1,p=l,v=0,f=h;for(this.b.beginDash(),this.b.beginPath(),(e=this.b).moveTo.apply(e,l);c<this.vertexList.length;){var b=this.vertexList[c];for(v=this._distVertex(l,b);v>=f;)p=d(p,b,f/v),u?(n=this.b).lineTo.apply(n,p):(r=this.b).moveTo.apply(r,p),v-=f,f=(u=!u)?h:a;u?(i=this.b).lineTo.apply(i,b):(o=this.b).moveTo.apply(o,b),f-=this._distVertex(p,b),p=l=b,c++}this.b.closePath("OPEN"),this.b.endDash()},t.prototype.update=function(t){if(t.length!==this.controlPoints.length)throw new Error("[p5.bezier] The number of control points changed");this.controlPoints.every((function(e,n){return e===t[n]}))||(this.controlPoints=t,this._buildVertexList())},t.prototype.move=function(e,n,r,i,o){if(void 0===r&&(r=null),void 0===i&&(i=!0),null===r&&3===this.dimension)throw new Error("[p5.bezier] X, Y, and Z are needed to move a 3D curve");var s=[e,n];null!==r&&s.push(r);var h=this.vertexList.map((function(t){return t.slice()})),a=new t(this.controlPoints,this.closeType,this.increment,this.b,h);return a.vertexList=a.vertexList.map((function(t){return t.map((function(t,e){return t+s[e]}))})),i&&a.draw(o),a},t.prototype.shortest=function(t,e,n){var r=this;void 0===n&&(n=0);var i=[0,0,0],o=Number.POSITIVE_INFINITY;return this.vertexList.map((function(s){var h=r._distVertex(s,[t,e,n]);o>h&&(o=h,i=b([],s,!0))})),i},t}();const x=function(t){return new y(t)};return e=e.default})()));
3
3
  //# sourceMappingURL=p5.bezier.min.js.map
@@ -1,10 +1,10 @@
1
1
  /*!
2
2
  *
3
3
  * @license
4
- * p5bezier Version 0.7.0
4
+ * p5bezier Version 0.8.0
5
5
  * https://github.com/peilingjiang/p5.bezier
6
6
  *
7
- * Copyright 2018-2024 Peiling Jiang
7
+ * Copyright 2018-2026 Peiling Jiang
8
8
  * Available under MIT license
9
9
  *
10
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"p5.bezier.min.js","mappings":"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","sources":["webpack://initBezier/webpack/universalModuleDefinition","webpack://initBezier/webpack/bootstrap","webpack://initBezier/webpack/runtime/define property getters","webpack://initBezier/webpack/runtime/hasOwnProperty shorthand","webpack://initBezier/./src/coefficients.ts","webpack://initBezier/./src/utils.ts","webpack://initBezier/./src/p5.bezier.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"initBezier\"] = factory();\n\telse\n\t\troot[\"initBezier\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export var MAX_DEGREE = 160;\nexport var _smoothness = {\n 1: 0.1,\n 2: 0.02,\n 3: 0.001,\n 4: 0.0005,\n 5: 0.0002,\n};\nvar _calculatedFactorials = [1];\nvar _binomialCoefficients = {};\n/* -------------------------------------------------------------------------- */\nfunction _helper_ensureFactorials(n) {\n var prevLen = _calculatedFactorials.length;\n for (var i = prevLen; i <= n; i++)\n _calculatedFactorials[i] = i * _calculatedFactorials[i - 1];\n}\nfunction _f(i) {\n return _calculatedFactorials[i];\n}\n/* -------------------------------------------------------------------------- */\nfunction _helper_ensureBinomialCoefficients(_n) {\n for (var n = 2; n <= _n; n++) {\n _binomialCoefficients[n] = {};\n for (var i = 1; i < n; i++) {\n _binomialCoefficients[n][i] = _f(n) / (_f(i) * _f(n - i));\n }\n }\n}\nexport function _binomialCoefficient(n, i) {\n if (i === 0 || i === n)\n return 1;\n return _binomialCoefficients[n][i];\n}\n/* -------------------------------------------------------------------------- */\n_helper_ensureFactorials(MAX_DEGREE + 1);\n_helper_ensureBinomialCoefficients(MAX_DEGREE + 1);\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { MAX_DEGREE } from './coefficients';\nexport function _getDimension(\n// biome-ignore lint/suspicious/noExplicitAny: p5 typing\ncontext, isP3D) {\n return context.constructor.name === 'WebGLRenderingContext' || isP3D ? 3 : 2;\n}\nexport function _getCanvasUtils(b) {\n if (b.useP5) {\n b.beginPath = b.canvas.beginShape;\n b.moveTo = b.canvas.vertex;\n b.lineTo = b.canvas.vertex;\n b.closePath = b.canvas.endShape;\n }\n else {\n if (b.ctx instanceof WebGLRenderingContext) {\n b.beginPath = function () { };\n b.moveTo = function (x, y, z) {\n if (z === void 0) { z = 0; }\n return b.ctx.vertexAttrib3f(0, x, y, z);\n };\n b.lineTo = function (x, y, z) {\n if (z === void 0) { z = 0; }\n return b.ctx.vertexAttrib3f(0, x, y, z);\n };\n b.closePath = function () { };\n }\n else {\n b.beginPath = b.ctx.beginPath.bind(b.ctx);\n b.moveTo = b.ctx.moveTo.bind(b.ctx);\n b.lineTo = b.ctx.lineTo.bind(b.ctx);\n b.closePath = b.ctx.closePath.bind(b.ctx);\n }\n }\n}\nexport function _dist() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var len = args.length;\n if (len === 4) {\n var dx = args[0] - args[2];\n var dy = args[1] - args[3];\n return Math.sqrt(dx * dx + dy * dy);\n }\n if (len === 6) {\n var dx = args[0] - args[3];\n var dy = args[1] - args[4];\n var dz = args[2] - args[5];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n }\n return 0;\n}\nexport function _setStyles(b) {\n if (b.canvas._doFill)\n b.ctx.fill();\n if (b.canvas._doStroke)\n b.ctx.stroke();\n}\n/* -------------------------------------------------------------------------- */\nvar SeedRandom = /** @class */ (function () {\n function SeedRandom(seed) {\n this.m = Math.pow(2, 31) - 1;\n this.a = 1103515245;\n this.c = 12345;\n this.state = seed;\n }\n SeedRandom.prototype.r = function () {\n this.state = (this.a * this.state + this.c) % this.m;\n return this.state / this.m;\n };\n SeedRandom.prototype.next = function (min, max) {\n return Math.floor(this.r() * (max - min + 1)) + min;\n };\n return SeedRandom;\n}());\nvar seed = 1234;\nexport function _concentrate(pointList, close) {\n if (close === void 0) { close = false; }\n var save = close ? 3 : 0;\n var limit = MAX_DEGREE - save;\n if (pointList.length <= limit)\n return _copy(pointList);\n var excessPoints = pointList.length - limit;\n var rng = new SeedRandom(seed);\n var rmIndex = new Set();\n __spreadArray([], new Array(excessPoints), true).map(function (_, ind) {\n var r = rng.next(5 + ind, limit - 5 + ind);\n while (rmIndex.has(r)) {\n r = rng.next(5 + ind, limit - 5 + ind);\n }\n rmIndex.add(r);\n });\n return _copy(pointList.filter(function (_, index) { return !rmIndex.has(index); }));\n}\nfunction _copy(arr) {\n return arr.map(function (v) { return v.slice(); });\n}\nexport function _getCloseCurvePoints(pointList) {\n var len = pointList.length;\n if (len === 0)\n return [];\n var first = pointList[0];\n var last = pointList[len - 1];\n if (len === 1)\n return _copy([first]);\n var second = pointList[1];\n var secondLast = pointList[len - 2];\n return _copy([\n [2 * last[0] - secondLast[0], 2 * last[1] - secondLast[1]],\n [2 * first[0] - second[0], 2 * first[1] - second[1]],\n first,\n ]);\n}\nexport function _interpolateVertex(v1, v2, t) {\n var len1 = v1.length;\n var len2 = v2.length;\n if (len1 === 2 && len2 === 2) {\n return [v1[0] + (v2[0] - v1[0]) * t, v1[1] + (v2[1] - v1[1]) * t];\n }\n if (len1 === 3 && len2 === 3) {\n return [\n v1[0] + (v2[0] - v1[0]) * t,\n v1[1] + (v2[1] - v1[1]) * t,\n v1[2] + (v2[2] - v1[2]) * t,\n ];\n }\n return v2;\n}\n","/*\np5.bezier library by Peiling Jiang\n2020\n\nupdated Aug 2024\n*/\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport packageJson from '../package.json';\nimport { _binomialCoefficient, _smoothness, } from './coefficients';\nimport { _concentrate, _dist, _getCanvasUtils, _getCloseCurvePoints, _getDimension, _interpolateVertex, _setStyles, } from './utils';\nwindow.console.log(\"[p5.bezier] \".concat(packageJson.version));\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n// helpers\nfunction _bezierVertex(pointList, n, t, dimension) {\n var vertex = new Array(dimension).fill(0);\n var oneMinusT = 1 - t;\n for (var i = 0; i <= n; i++) {\n var coefficient = _binomialCoefficient(n, i) * Math.pow(oneMinusT, (n - i)) * Math.pow(t, i);\n for (var d = 0; d < dimension; d++)\n vertex[d] += coefficient * pointList[i][d];\n }\n return vertex;\n}\nfunction _drawBezierCurve(bezierCanvas, pointList, smoothness) {\n var n = pointList.length - 1;\n var increment = _smoothness[smoothness];\n for (var t = 0; t <= 1; t += increment) {\n var v = _bezierVertex(pointList, n, t, bezierCanvas.dimension);\n bezierCanvas.lineTo.apply(bezierCanvas, v);\n }\n}\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\nvar P5Bezier = /** @class */ (function () {\n // biome-ignore lint/suspicious/noExplicitAny: p5 typing\n function P5Bezier(canvas) {\n this.b = {\n canvas: null,\n ctx: null,\n dimension: 2,\n useP5: true,\n beginPath: function () { },\n moveTo: function () { },\n lineTo: function () { },\n closePath: function () { },\n };\n this.b.canvas = canvas;\n this.b.ctx = this.b.canvas.drawingContext;\n if (typeof p5 !== 'undefined' && canvas instanceof p5.Graphics) {\n this.b.useP5 = true;\n this.b.dimension = _getDimension(this.b.ctx, false);\n }\n else if ((typeof p5 !== 'undefined' && canvas instanceof p5.Renderer) ||\n canvas.drawingContext) {\n this.b.useP5 = false;\n if (typeof p5 === 'undefined' ||\n (typeof p5 !== 'undefined' && !(canvas instanceof p5.Renderer)))\n window.console.warn('[p5.bezier] Support beyond p5.js is not tested');\n this.b.dimension = _getDimension(this.b.ctx, canvas.isP3D);\n }\n else\n throw new Error('[p5.bezier] Canvas is not supported');\n _getCanvasUtils(this.b);\n }\n P5Bezier.prototype.draw = function (pointList, closeType, smoothness) {\n var _a, _b;\n if (closeType === void 0) { closeType = 'OPEN'; }\n if (smoothness === void 0) { smoothness = 3; }\n var _pL = closeType === 'CLOSE'\n ? __spreadArray(__spreadArray([], _concentrate(pointList, true), true), _getCloseCurvePoints(pointList), true) : _concentrate(pointList);\n this.b.beginPath();\n (_a = this.b).moveTo.apply(_a, _pL[0]);\n _drawBezierCurve(this.b, _pL, smoothness);\n (_b = this.b).lineTo.apply(_b, _pL[_pL.length - 1]);\n if (this.b.useP5)\n this.b.closePath(closeType);\n else if (closeType === 'CLOSE')\n this.b.closePath();\n _setStyles(this.b);\n return _pL;\n };\n P5Bezier.prototype.new = function (pointList, closeType, smoothness) {\n if (closeType === void 0) { closeType = 'OPEN'; }\n if (smoothness === void 0) { smoothness = 3; }\n var increment = _smoothness[smoothness];\n return new BezierCurve(pointList, closeType, increment, this.b);\n };\n return P5Bezier;\n}());\n// biome-ignore lint/suspicious/noExplicitAny: p5 typing\nfunction initBezier(canvas) {\n return new P5Bezier(canvas);\n}\n/* -------------------------------------------------------------------------- */\nvar BezierCurve = /** @class */ (function () {\n function BezierCurve(points, closeType, increment, bezierCanvas, vertexList) {\n var _a;\n if (vertexList === void 0) { vertexList = null; }\n this.controlPoints = _concentrate(points, closeType === 'CLOSE');\n if (closeType === 'CLOSE') {\n (_a = this.controlPoints).push.apply(_a, _getCloseCurvePoints(this.controlPoints));\n this.closeType = 'CLOSE';\n }\n else\n this.closeType = 'OPEN';\n this.dimension = bezierCanvas.dimension;\n this.increment = increment;\n this.vertexList = [];\n this.p = this.controlPoints.length; // has p points for (p - 1) degree curves\n this.n = this.p - 1; // degree\n this.b = bezierCanvas;\n if (vertexList === null)\n this._buildVertexList();\n else\n this.vertexList = __spreadArray([], vertexList, true);\n }\n BezierCurve.prototype._buildVertexList = function () {\n this.vertexList = [];\n for (var t = 0; t <= 1; t += this.increment) {\n var v = _bezierVertex(this.controlPoints, this.n, t, this.dimension);\n this.vertexList.push(v);\n }\n this._addVertex(this.controlPoints[this.controlPoints.length - 1]);\n this.dimension = this.vertexList[0].length;\n return this.vertexList;\n };\n BezierCurve.prototype._addVertex = function (vArray) {\n var _a;\n (_a = this.b).lineTo.apply(_a, vArray);\n };\n BezierCurve.prototype._distVertex = function (vArray1, vArray2) {\n return this.dimension === 3 && vArray1.length === 3 && vArray2.length === 3\n ? _dist(vArray1[0], vArray1[1], vArray1[2], vArray2[0], vArray2[1], vArray2[2])\n : this.dimension === 2\n ? _dist(vArray1[0], vArray1[1], vArray2[0], vArray2[1])\n : 0;\n };\n BezierCurve.prototype.draw = function (dash) {\n if (!dash) {\n this._solidCurve();\n }\n else {\n this._dashedCurve(dash);\n }\n };\n BezierCurve.prototype._solidCurve = function () {\n var _this = this;\n this.b.beginPath();\n this.vertexList.map(function (v) { return _this._addVertex(v); });\n if (this.closeType === 'CLOSE')\n this.b.closePath();\n if (this.b.useP5)\n this.b.closePath(this.closeType);\n else if (this.closeType === 'CLOSE')\n this.b.closePath();\n _setStyles(this.b);\n };\n BezierCurve.prototype._dashedCurve = function (dash) {\n var _a, _b, _c, _d, _e;\n if (this.increment > 0.001) {\n this.increment = 0.001;\n window.console.warn('[p5.bezier] Smoothness set to 3 for a dashed curve');\n }\n var _f = dash.map(Math.abs), solidPart = _f[0], gapPart = _f[1];\n var solid = true;\n var lastVertex = this.vertexList[0];\n var toUseVertexInd = 1;\n var currentVirtualVertex = lastVertex;\n var availableDist = 0;\n var neededDist = solidPart;\n this.b.ctx.save();\n this.b.ctx.fillStyle = 'rgba(0, 0, 0, 0)';\n this.b.beginPath();\n (_a = this.b).moveTo.apply(_a, lastVertex);\n while (toUseVertexInd < this.vertexList.length) {\n var toUseVertex = this.vertexList[toUseVertexInd];\n availableDist = this._distVertex(lastVertex, toUseVertex);\n while (availableDist >= neededDist) {\n currentVirtualVertex = _interpolateVertex(currentVirtualVertex, toUseVertex, neededDist / availableDist);\n solid\n ? (_b = this.b).lineTo.apply(_b, currentVirtualVertex) : (_c = this.b).moveTo.apply(_c, currentVirtualVertex);\n availableDist -= neededDist;\n solid = !solid;\n neededDist = solid ? solidPart : gapPart;\n }\n solid ? (_d = this.b).lineTo.apply(_d, toUseVertex) : (_e = this.b).moveTo.apply(_e, toUseVertex);\n neededDist -= this._distVertex(currentVirtualVertex, toUseVertex);\n lastVertex = toUseVertex;\n currentVirtualVertex = lastVertex;\n toUseVertexInd++;\n }\n _setStyles(this.b);\n this.b.ctx.restore();\n };\n BezierCurve.prototype.update = function (newControlPointList) {\n if (newControlPointList.length !== this.controlPoints.length) {\n throw new Error('[p5.bezier] The number of control points changed');\n }\n if (this.controlPoints.every(function (v, i) { return v === newControlPointList[i]; })) {\n return;\n }\n this.controlPoints = newControlPointList;\n this._buildVertexList();\n };\n BezierCurve.prototype.move = function (x, y, z, toDraw, dash) {\n if (z === void 0) { z = null; }\n if (toDraw === void 0) { toDraw = true; }\n if (z === null && this.dimension === 3) {\n throw new Error('[p5.bezier] X, Y, and Z are needed to move a 3D curve');\n }\n var toMove = [x, y];\n if (z !== null)\n toMove.push(z);\n var newCurveV = this.vertexList.map(function (v) { return v.slice(); });\n var newCurveObj = new BezierCurve(this.controlPoints, this.closeType, this.increment, this.b, newCurveV);\n newCurveObj.vertexList = newCurveObj.vertexList.map(function (v) { return v.map(function (val, i) { return val + toMove[i]; }); });\n if (toDraw)\n newCurveObj.draw(dash);\n return newCurveObj;\n };\n BezierCurve.prototype.shortest = function (pX, pY, pZ) {\n var _this = this;\n if (pZ === void 0) { pZ = 0; }\n var minVertex = [0, 0, 0];\n var dMin = Number.POSITIVE_INFINITY;\n this.vertexList.map(function (v) {\n var nowMin = _this._distVertex(v, [pX, pY, pZ]);\n if (dMin > nowMin) {\n dMin = nowMin;\n minVertex = __spreadArray([], v, true);\n }\n });\n return minVertex;\n };\n return BezierCurve;\n}());\nexport default initBezier;\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","_smoothness","_calculatedFactorials","_binomialCoefficients","_f","i","_binomialCoefficient","n","length","_helper_ensureFactorials","MAX_DEGREE","_n","_helper_ensureBinomialCoefficients","__spreadArray","to","from","pack","arguments","ar","l","Array","slice","concat","_getDimension","context","isP3D","constructor","name","_dist","args","_i","len","dx","dy","Math","sqrt","dz","_setStyles","b","canvas","_doFill","ctx","fill","_doStroke","stroke","SeedRandom","seed","m","pow","a","c","state","r","next","min","max","floor","_concentrate","pointList","close","limit","_copy","excessPoints","rng","rmIndex","Set","map","_","ind","has","add","filter","index","arr","v","_getCloseCurvePoints","first","last","second","secondLast","_bezierVertex","t","dimension","vertex","oneMinusT","coefficient","d","window","console","log","P5Bezier","useP5","beginPath","moveTo","lineTo","closePath","drawingContext","p5","Graphics","Renderer","Error","warn","beginShape","endShape","WebGLRenderingContext","x","y","z","vertexAttrib3f","bind","draw","closeType","smoothness","_a","_b","_pL","apply","bezierCanvas","increment","_drawBezierCurve","new","BezierCurve","points","vertexList","controlPoints","push","p","_buildVertexList","_addVertex","vArray","_distVertex","vArray1","vArray2","dash","_dashedCurve","_solidCurve","_this","_c","_d","_e","v1","v2","len1","len2","abs","solidPart","gapPart","solid","lastVertex","toUseVertexInd","currentVirtualVertex","availableDist","neededDist","save","fillStyle","toUseVertex","restore","update","newControlPointList","every","move","toDraw","toMove","newCurveV","newCurveObj","val","shortest","pX","pY","pZ","minVertex","dMin","Number","POSITIVE_INFINITY","nowMin"],"sourceRoot":""}
1
+ {"version":3,"file":"p5.bezier.min.js","mappings":"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","sources":["webpack://initBezier/webpack/universalModuleDefinition","webpack://initBezier/webpack/bootstrap","webpack://initBezier/webpack/runtime/define property getters","webpack://initBezier/webpack/runtime/hasOwnProperty shorthand","webpack://initBezier/./src/coefficients.ts","webpack://initBezier/./src/utils.ts","webpack://initBezier/./src/p5.bezier.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"initBezier\"] = factory();\n\telse\n\t\troot[\"initBezier\"] = factory();\n})(this, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export var MAX_DEGREE = 160;\nexport var _smoothness = {\n 1: 0.1,\n 2: 0.02,\n 3: 0.001,\n 4: 0.0005,\n 5: 0.0002,\n};\nvar _calculatedFactorials = [1];\nvar _binomialCoefficients = {};\n/* -------------------------------------------------------------------------- */\nfunction _helper_ensureFactorials(n) {\n var prevLen = _calculatedFactorials.length;\n for (var i = prevLen; i <= n; i++)\n _calculatedFactorials[i] = i * _calculatedFactorials[i - 1];\n}\nfunction _f(i) {\n return _calculatedFactorials[i];\n}\n/* -------------------------------------------------------------------------- */\nfunction _helper_ensureBinomialCoefficients(_n) {\n for (var n = 2; n <= _n; n++) {\n _binomialCoefficients[n] = {};\n for (var i = 1; i < n; i++) {\n _binomialCoefficients[n][i] = _f(n) / (_f(i) * _f(n - i));\n }\n }\n}\nexport function _binomialCoefficient(n, i) {\n if (i === 0 || i === n)\n return 1;\n return _binomialCoefficients[n][i];\n}\n/* -------------------------------------------------------------------------- */\n_helper_ensureFactorials(MAX_DEGREE + 1);\n_helper_ensureBinomialCoefficients(MAX_DEGREE + 1);\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { MAX_DEGREE } from './coefficients';\nfunction _getDimension(\n// biome-ignore lint/suspicious/noExplicitAny: p5 typing\ncontext, isP3D) {\n var _a;\n var name = (_a = context.constructor) === null || _a === void 0 ? void 0 : _a.name;\n return isP3D ||\n name === 'WebGLRenderingContext' ||\n name === 'WebGL2RenderingContext'\n ? 3\n : 2;\n}\n// biome-ignore lint/suspicious/noExplicitAny: p5 typing\nexport function _getCanvasUtils(canvas) {\n var _a;\n // createGraphics wraps a renderer; createCanvas returns the renderer itself.\n var renderer = (_a = canvas === null || canvas === void 0 ? void 0 : canvas._renderer) !== null && _a !== void 0 ? _a : canvas;\n var ctx = renderer === null || renderer === void 0 ? void 0 : renderer.drawingContext;\n if (!ctx)\n throw new Error('[p5.bezier] Canvas is not supported');\n var dimension = _getDimension(ctx, renderer.isP3D);\n var sketch = renderer._pInst;\n if (!sketch) {\n if (dimension === 3) {\n throw new Error('[p5.bezier] WebGL requires a p5.js renderer');\n }\n return {\n dimension: dimension,\n beginPath: ctx.beginPath.bind(ctx),\n moveTo: ctx.moveTo.bind(ctx),\n lineTo: ctx.lineTo.bind(ctx),\n closePath: function (closeType) {\n if (closeType === 'CLOSE')\n ctx.closePath();\n if (renderer._doFill)\n ctx.fill();\n if (renderer._doStroke)\n ctx.stroke();\n },\n beginDash: function () {\n ctx.save();\n ctx.fillStyle = 'rgba(0, 0, 0, 0)';\n },\n endDash: function () { return ctx.restore(); },\n };\n }\n var hasVertices = false;\n var pendingVertex = null;\n return {\n dimension: dimension,\n beginPath: function () {\n sketch.beginShape();\n hasVertices = false;\n pendingVertex = null;\n },\n lineTo: function (x, y, z) {\n if (z === void 0) { z = 0; }\n if (pendingVertex) {\n sketch.vertex.apply(sketch, pendingVertex);\n pendingVertex = null;\n }\n sketch.vertex(x, y, z);\n hasVertices = true;\n },\n moveTo: function (x, y, z) {\n if (z === void 0) { z = 0; }\n // Defer the next vertex so dash gaps don't submit singleton shapes.\n if (hasVertices) {\n sketch.endShape();\n sketch.beginShape();\n hasVertices = false;\n }\n pendingVertex = [x, y, z];\n },\n closePath: function (closeType) {\n sketch.endShape(closeType === 'CLOSE' ? sketch.CLOSE : undefined);\n hasVertices = false;\n pendingVertex = null;\n },\n beginDash: function () {\n sketch.push();\n sketch.noFill();\n },\n endDash: function () { return sketch.pop(); },\n };\n}\nexport function _dist() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var len = args.length;\n if (len === 4) {\n var dx = args[0] - args[2];\n var dy = args[1] - args[3];\n return Math.sqrt(dx * dx + dy * dy);\n }\n if (len === 6) {\n var dx = args[0] - args[3];\n var dy = args[1] - args[4];\n var dz = args[2] - args[5];\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n }\n return 0;\n}\nvar warnedSmoothness = false;\nexport function _validateSmoothness(smoothness) {\n if (smoothness < 1 || smoothness > 5 || !Number.isInteger(smoothness)) {\n if (!warnedSmoothness) {\n warnedSmoothness = true;\n window.console.warn('[p5.bezier] Smoothness should be an integer between 1 and 5');\n }\n return Math.round(Math.max(1, Math.min(5, smoothness)));\n }\n return smoothness;\n}\n/* -------------------------------------------------------------------------- */\nvar SeedRandom = /** @class */ (function () {\n function SeedRandom(seed) {\n this.m = Math.pow(2, 31) - 1;\n this.a = 1103515245;\n this.c = 12345;\n this.state = seed;\n }\n SeedRandom.prototype.r = function () {\n this.state = (this.a * this.state + this.c) % this.m;\n return this.state / this.m;\n };\n SeedRandom.prototype.next = function (min, max) {\n return Math.floor(this.r() * (max - min + 1)) + min;\n };\n return SeedRandom;\n}());\nvar seed = 1234;\nexport function _concentrate(pointList, close) {\n if (close === void 0) { close = false; }\n var save = close ? 3 : 0;\n var limit = MAX_DEGREE - save;\n if (pointList.length <= limit)\n return _copy(pointList);\n var excessPoints = pointList.length - limit;\n var rng = new SeedRandom(seed);\n var rmIndex = new Set();\n __spreadArray([], new Array(excessPoints), true).map(function (_, ind) {\n var r = rng.next(5 + ind, limit - 5 + ind);\n while (rmIndex.has(r)) {\n r = rng.next(5 + ind, limit - 5 + ind);\n }\n rmIndex.add(r);\n });\n return _copy(pointList.filter(function (_, index) { return !rmIndex.has(index); }));\n}\nfunction _copy(arr) {\n return arr.map(function (v) { return v.slice(); });\n}\nexport function _getCloseCurvePoints(pointList) {\n var len = pointList.length;\n if (len === 0)\n return [];\n var first = pointList[0];\n var last = pointList[len - 1];\n if (len === 1)\n return _copy([first]);\n var second = pointList[1];\n var secondLast = pointList[len - 2];\n return [\n _interpolateVertex(secondLast, last, 2),\n _interpolateVertex(second, first, 2),\n first.slice(),\n ];\n}\nexport function _interpolateVertex(v1, v2, t) {\n var len1 = v1.length;\n var len2 = v2.length;\n if (len1 === 2 && len2 === 2) {\n return [v1[0] + (v2[0] - v1[0]) * t, v1[1] + (v2[1] - v1[1]) * t];\n }\n if (len1 === 3 && len2 === 3) {\n return [\n v1[0] + (v2[0] - v1[0]) * t,\n v1[1] + (v2[1] - v1[1]) * t,\n v1[2] + (v2[2] - v1[2]) * t,\n ];\n }\n return v2;\n}\n","/*\np5.bezier library by Peiling Jiang\n2020\n\nupdated Aug 2024\n*/\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport packageJson from '../package.json';\nimport { _binomialCoefficient, _smoothness, } from './coefficients';\nimport { _concentrate, _dist, _getCanvasUtils, _getCloseCurvePoints, _interpolateVertex, _validateSmoothness, } from './utils';\nwindow.console.log(\"[p5.bezier] \".concat(packageJson.version));\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n// helpers\nfunction _bezierVertex(pointList, n, t, dimension) {\n var vertex = new Array(dimension).fill(0);\n var oneMinusT = 1 - t;\n for (var i = 0; i <= n; i++) {\n var coefficient = _binomialCoefficient(n, i) * Math.pow(oneMinusT, (n - i)) * Math.pow(t, i);\n for (var d = 0; d < dimension; d++)\n vertex[d] += coefficient * pointList[i][d];\n }\n return vertex;\n}\nfunction _drawBezierCurve(bezierCanvas, pointList, smoothness) {\n var n = pointList.length - 1;\n var increment = _smoothness[_validateSmoothness(smoothness)];\n for (var t = 0; t <= 1; t += increment) {\n var v = _bezierVertex(pointList, n, t, bezierCanvas.dimension);\n bezierCanvas.lineTo.apply(bezierCanvas, v);\n }\n}\n// function _drawBSplineCurve(\n// bezierCanvas: BezierCanvas,\n// pointList: PointList,\n// smoothness: Smoothness,\n// ): void {\n// const increment = _smoothness[_validateSmoothness(smoothness)]\n// const n = pointList.length - 1\n// for (let i = 0; i < n - 2; i++) {\n// const b0 = pointList[i]\n// const b1 = pointList[i + 1]\n// const b2 = pointList[i + 2]\n// const b3 = pointList[i + 3]\n// for (let t = 0; t <= 1; t += increment) {\n// const t2 = t * t\n// const t3 = t2 * t\n// const vertex = bezierCanvas.dimension === 2 ? [0, 0] : [0, 0, 0]\n// for (let d = 0; d < bezierCanvas.dimension; d++) {\n// vertex[d] =\n// (1 / 6) *\n// ((-b0[d] + 3 * b1[d] - 3 * b2[d] + b3[d]) * t3 +\n// (3 * b0[d] - 6 * b1[d] + 3 * b2[d]) * t2 +\n// (-3 * b0[d] + 3 * b2[d]) * t +\n// (b0[d] + 4 * b1[d] + b2[d]))\n// }\n// bezierCanvas.lineTo(vertex[0], vertex[1], vertex[2])\n// }\n// }\n// }\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\nvar P5Bezier = /** @class */ (function () {\n // biome-ignore lint/suspicious/noExplicitAny: p5 typing\n function P5Bezier(canvas) {\n this.b = _getCanvasUtils(canvas);\n }\n P5Bezier.prototype.draw = function (pointList, closeType, smoothness) {\n var _a, _b;\n if (closeType === void 0) { closeType = 'OPEN'; }\n if (smoothness === void 0) { smoothness = 3; }\n if (pointList.length < 2) {\n throw new Error('[p5.bezier] At least 2 points are needed to draw a curve');\n }\n var _pL = closeType === 'CLOSE'\n ? __spreadArray(__spreadArray([], _concentrate(pointList, true), true), _getCloseCurvePoints(pointList), true) : _concentrate(pointList);\n this.b.beginPath();\n (_a = this.b).moveTo.apply(_a, _pL[0]);\n _drawBezierCurve(this.b, _pL, smoothness);\n (_b = this.b).lineTo.apply(_b, _pL[_pL.length - 1]);\n this.b.closePath(closeType);\n return _pL;\n };\n // bSpline(\n // pointList: PointList,\n // closeType: CloseType = 'OPEN',\n // smoothness: Smoothness = 3,\n // ): PointList {\n // if (pointList.length < 2) {\n // throw new Error(\n // '[p5.bezier] At least 2 points are needed to draw a curve',\n // )\n // }\n // const _pL =\n // closeType === 'CLOSE'\n // ? [...pointList, ...pointList.slice(0, 3)]\n // : pointList\n // this.b.beginPath()\n // // this.b.moveTo(..._pL[0])\n // _drawBSplineCurve(this.b, _pL, smoothness)\n // // this.b.lineTo(..._pL[_pL.length - 1])\n // if (this.b.useP5) {\n // this.b.closePath(closeType)\n // } else if (closeType === 'CLOSE') {\n // this.b.closePath()\n // }\n // _setStyles(this.b)\n // return _pL\n // }\n P5Bezier.prototype.new = function (pointList, closeType, smoothness) {\n if (closeType === void 0) { closeType = 'OPEN'; }\n if (smoothness === void 0) { smoothness = 3; }\n var increment = _smoothness[_validateSmoothness(smoothness)];\n return new BezierCurve(pointList, closeType, increment, this.b);\n };\n return P5Bezier;\n}());\n// biome-ignore lint/suspicious/noExplicitAny: p5 typing\nfunction initBezier(canvas) {\n return new P5Bezier(canvas);\n}\n/* -------------------------------------------------------------------------- */\nvar BezierCurve = /** @class */ (function () {\n function BezierCurve(points, closeType, increment, bezierCanvas, vertexList) {\n var _a;\n if (vertexList === void 0) { vertexList = null; }\n this.controlPoints = _concentrate(points, closeType === 'CLOSE');\n if (closeType === 'CLOSE') {\n (_a = this.controlPoints).push.apply(_a, _getCloseCurvePoints(this.controlPoints));\n this.closeType = 'CLOSE';\n }\n else\n this.closeType = 'OPEN';\n this.dimension = bezierCanvas.dimension;\n this.increment = increment;\n this.vertexList = [];\n this.p = this.controlPoints.length; // has p points for (p - 1) degree curves\n this.n = this.p - 1; // degree\n this.b = bezierCanvas;\n if (vertexList === null)\n this._buildVertexList();\n else\n this.vertexList = __spreadArray([], vertexList, true);\n }\n BezierCurve.prototype._buildVertexList = function () {\n this.vertexList = [];\n for (var t = 0; t <= 1; t += this.increment) {\n var v = _bezierVertex(this.controlPoints, this.n, t, this.dimension);\n this.vertexList.push(v);\n }\n // Sampling may stop just short of t=1 because of floating-point increments.\n // Building or updating a curve must not issue any drawing commands.\n this.vertexList.push(this.controlPoints[this.controlPoints.length - 1].slice());\n this.dimension = this.vertexList[0].length;\n return this.vertexList;\n };\n BezierCurve.prototype._addVertex = function (vArray) {\n var _a;\n (_a = this.b).lineTo.apply(_a, vArray);\n };\n BezierCurve.prototype._distVertex = function (vArray1, vArray2) {\n return this.dimension === 3 && vArray1.length === 3 && vArray2.length === 3\n ? _dist(vArray1[0], vArray1[1], vArray1[2], vArray2[0], vArray2[1], vArray2[2])\n : this.dimension === 2\n ? _dist(vArray1[0], vArray1[1], vArray2[0], vArray2[1])\n : 0;\n };\n BezierCurve.prototype.draw = function (dash) {\n if (!dash) {\n this._solidCurve();\n }\n else {\n this._dashedCurve(dash);\n }\n };\n BezierCurve.prototype._solidCurve = function () {\n var _this = this;\n this.b.beginPath();\n this.vertexList.map(function (v) { return _this._addVertex(v); });\n this.b.closePath(this.closeType);\n };\n BezierCurve.prototype._dashedCurve = function (dash) {\n var _a, _b, _c, _d, _e;\n if (this.increment > 0.001) {\n this.increment = 0.001;\n window.console.warn('[p5.bezier] Smoothness set to 3 for a dashed curve');\n }\n var _f = dash.map(Math.abs), solidPart = _f[0], gapPart = _f[1];\n var solid = true;\n var lastVertex = this.vertexList[0];\n var toUseVertexInd = 1;\n var currentVirtualVertex = lastVertex;\n var availableDist = 0;\n var neededDist = solidPart;\n this.b.beginDash();\n this.b.beginPath();\n (_a = this.b).moveTo.apply(_a, lastVertex);\n while (toUseVertexInd < this.vertexList.length) {\n var toUseVertex = this.vertexList[toUseVertexInd];\n availableDist = this._distVertex(lastVertex, toUseVertex);\n while (availableDist >= neededDist) {\n currentVirtualVertex = _interpolateVertex(currentVirtualVertex, toUseVertex, neededDist / availableDist);\n solid\n ? (_b = this.b).lineTo.apply(_b, currentVirtualVertex) : (_c = this.b).moveTo.apply(_c, currentVirtualVertex);\n availableDist -= neededDist;\n solid = !solid;\n neededDist = solid ? solidPart : gapPart;\n }\n solid ? (_d = this.b).lineTo.apply(_d, toUseVertex) : (_e = this.b).moveTo.apply(_e, toUseVertex);\n neededDist -= this._distVertex(currentVirtualVertex, toUseVertex);\n lastVertex = toUseVertex;\n currentVirtualVertex = lastVertex;\n toUseVertexInd++;\n }\n this.b.closePath('OPEN');\n this.b.endDash();\n };\n BezierCurve.prototype.update = function (newControlPointList) {\n if (newControlPointList.length !== this.controlPoints.length) {\n throw new Error('[p5.bezier] The number of control points changed');\n }\n if (this.controlPoints.every(function (v, i) { return v === newControlPointList[i]; })) {\n return;\n }\n this.controlPoints = newControlPointList;\n this._buildVertexList();\n };\n BezierCurve.prototype.move = function (x, y, z, toDraw, dash) {\n if (z === void 0) { z = null; }\n if (toDraw === void 0) { toDraw = true; }\n if (z === null && this.dimension === 3) {\n throw new Error('[p5.bezier] X, Y, and Z are needed to move a 3D curve');\n }\n var toMove = [x, y];\n if (z !== null)\n toMove.push(z);\n var newCurveV = this.vertexList.map(function (v) { return v.slice(); });\n var newCurveObj = new BezierCurve(this.controlPoints, this.closeType, this.increment, this.b, newCurveV);\n newCurveObj.vertexList = newCurveObj.vertexList.map(function (v) { return v.map(function (val, i) { return val + toMove[i]; }); });\n if (toDraw)\n newCurveObj.draw(dash);\n return newCurveObj;\n };\n BezierCurve.prototype.shortest = function (pX, pY, pZ) {\n var _this = this;\n if (pZ === void 0) { pZ = 0; }\n var minVertex = [0, 0, 0];\n var dMin = Number.POSITIVE_INFINITY;\n this.vertexList.map(function (v) {\n var nowMin = _this._distVertex(v, [pX, pY, pZ]);\n if (dMin > nowMin) {\n dMin = nowMin;\n minVertex = __spreadArray([], v, true);\n }\n });\n return minVertex;\n };\n return BezierCurve;\n}());\nexport default initBezier;\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","_smoothness","_calculatedFactorials","_binomialCoefficients","_f","i","_binomialCoefficient","n","length","_helper_ensureFactorials","MAX_DEGREE","_n","_helper_ensureBinomialCoefficients","__spreadArray","to","from","pack","arguments","ar","l","Array","slice","concat","_dist","args","_i","len","dx","dy","Math","sqrt","dz","warnedSmoothness","_validateSmoothness","smoothness","Number","isInteger","window","console","warn","round","max","min","SeedRandom","seed","m","pow","a","c","state","r","next","floor","_concentrate","pointList","close","limit","_copy","excessPoints","rng","rmIndex","Set","map","_","ind","has","add","filter","index","arr","v","_getCloseCurvePoints","first","last","second","_interpolateVertex","v1","v2","t","len1","len2","_bezierVertex","dimension","vertex","fill","oneMinusT","coefficient","d","log","P5Bezier","canvas","b","_a","renderer","_renderer","ctx","drawingContext","Error","context","isP3D","name","constructor","_getDimension","sketch","_pInst","beginPath","bind","moveTo","lineTo","closePath","closeType","_doFill","_doStroke","stroke","beginDash","save","fillStyle","endDash","restore","hasVertices","pendingVertex","beginShape","x","y","z","apply","endShape","CLOSE","undefined","push","noFill","pop","_getCanvasUtils","draw","_b","_pL","bezierCanvas","increment","_drawBezierCurve","new","BezierCurve","points","vertexList","controlPoints","p","_buildVertexList","_addVertex","vArray","_distVertex","vArray1","vArray2","dash","_dashedCurve","_solidCurve","_this","_c","_d","_e","abs","solidPart","gapPart","solid","lastVertex","toUseVertexInd","currentVirtualVertex","availableDist","neededDist","toUseVertex","update","newControlPointList","every","move","toDraw","toMove","newCurveV","newCurveObj","val","shortest","pX","pY","pZ","minVertex","dMin","POSITIVE_INFINITY","nowMin"],"sourceRoot":""}
package/lib/utils.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type Smoothness } from './coefficients';
1
2
  export type CloseType = 'OPEN' | 'CLOSE';
2
3
  export type Dimension = 2 | 3;
3
4
  export type Point = [number, number] | [number, number, number];
@@ -5,19 +6,17 @@ export type PointList = Point[];
5
6
  export type Vertex = [number, number] | [number, number, number];
6
7
  export type VertexList = Vertex[];
7
8
  export type BezierCanvas = {
8
- canvas: any;
9
- ctx: any;
10
9
  dimension: Dimension;
11
- useP5: boolean;
12
10
  beginPath: () => void;
13
11
  moveTo: (...args: Vertex) => void;
14
12
  lineTo: (...args: Vertex) => void;
15
13
  closePath: (closeType?: CloseType) => void;
14
+ beginDash: () => void;
15
+ endDash: () => void;
16
16
  };
17
- export declare function _getDimension(context: any, isP3D: boolean): Dimension;
18
- export declare function _getCanvasUtils(b: BezierCanvas): void;
17
+ export declare function _getCanvasUtils(canvas: any): BezierCanvas;
19
18
  export declare function _dist(...args: number[]): number;
20
- export declare function _setStyles(b: BezierCanvas): void;
19
+ export declare function _validateSmoothness(smoothness: number): Smoothness;
21
20
  export declare function _concentrate(pointList: PointList, close?: boolean): PointList;
22
21
  export declare function _getCloseCurvePoints(pointList: PointList): PointList;
23
22
  export declare function _interpolateVertex(v1: Vertex, v2: Vertex, t: number): Vertex;
package/package.json CHANGED
@@ -1,22 +1,21 @@
1
1
  {
2
2
  "name": "p5bezier",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "author": "Peiling Jiang",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "https://github.com/peilingjiang/p5.bezier.git"
7
+ "url": "git+https://github.com/peilingjiang/p5.bezier.git"
8
8
  },
9
9
  "main": "lib/p5.bezier.min.js",
10
10
  "devDependencies": {
11
- "@biomejs/biome": "^1.8.3",
12
- "@types/p5": "^1.7.6",
13
- "husky": "^9.1.5",
14
- "lint-staged": "^15.2.9",
11
+ "@biomejs/biome": "^1.9.2",
12
+ "husky": "^9.1.6",
13
+ "lint-staged": "^15.2.10",
15
14
  "prettier": "^3.3.3",
16
15
  "terser-webpack-plugin": "^5.3.10",
17
16
  "ts-loader": "^9.5.1",
18
- "typescript": "^5.5.4",
19
- "webpack": "^5.93.0",
17
+ "typescript": "^5.6.2",
18
+ "webpack": "^5.94.0",
20
19
  "webpack-cli": "^5.1.4"
21
20
  },
22
21
  "bugs": {