p5bezier 0.3.2 → 0.5.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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2020 Peiling Jiang
3
+ Copyright (c) 2023 Peiling Jiang
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -6,12 +6,13 @@
6
6
  [![GitHub license](https://img.shields.io/github/license/peilingjiang/p5.bezier?style=flat-square)](https://github.com/peilingjiang/p5.bezier/blob/main/LICENSE)
7
7
  [![](https://data.jsdelivr.com/v1/package/npm/p5bezier/badge)](https://www.jsdelivr.com/package/npm/p5bezier)
8
8
 
9
- Let **p5.bezier**, a [p5.js](https://p5js.org) library, help you draw the smoothest curves like never before. You can regard the library as an advanced version of the original p5.js `bezier()` function which takes no less or more than 4 points while cannot draw higher level curves. The p5.bezier library allows you to draw continuous and closed Bézier curves easily.
9
+ Introducing **p5.bezier**, a [p5.js](https://p5js.org) library, engineered to assist you in creating Bézier curves with ease. This library is an enhancement of the original p5.js `bezier()` function, extending its capabilities beyond the limitation of four control points.
10
10
 
11
11
  <!-- [**Try it now on p5.js Web Editor!**](https://editor.p5js.org/peilingjiang/sketches/7Z2pRG-TB) -->
12
+
12
13
  [**Try it now on p5.js Web Editor!**](https://editor.p5js.org/peilingjiang/sketches/mVXzWEJbT)
13
14
 
14
- **0.2.0 NEW** The library is now independent of p5.js so that you can use it for a wider range of projects (untested). However, an extra `initBezier(canvas)` line is needed before the drawings.
15
+ While **p5.bezier** is designed to integrate with p5.js, it operates independently as well. It's necessary to initialize the library and specify the target canvas by invoking `initBezier(canvas)` at the start of your code.
15
16
 
16
17
  To draw a Bézier curve on canvas, you can simply use `newBezier()`:
17
18
 
@@ -25,41 +26,39 @@ newBezier([
25
26
  ])
26
27
  ```
27
28
 
28
- **What is Bézier Curve?**
29
+ **What is a Bézier Curve?**
29
30
 
30
- A Bézier curve is a parametric curve used in computer graphics and related fields. The curve, which is related to the Bernstein polynomial, is named after Pierre Bézier, who used it in the 1960s for designing curves for the bodywork of Renault cars. Its continuity creates beautiful textures and shapes. Nowadays, it is an essential part across design domains from products to visualization.
31
+ A Bézier curve is a type of curve that's widely used in computer graphics, design, etc. It was named after Pierre Bézier who employed it in car design during the 1960s. Due to its smooth and continuous nature, it's ideal for creating visually pleasing shapes and textures in various design fields.
31
32
 
32
33
  ## Getting Started
33
34
 
34
- To use p5.bezier library, download [p5.bezier.min.js](https://raw.githubusercontent.com/peilingjiang/p5.bezier/main/lib/p5.bezier.min.js) file into your project directory and add the following line into the your HTML file:
35
+ To use the p5.bezier library, first download the [p5.bezier.min.js](https://raw.githubusercontent.com/peilingjiang/p5.bezier/main/lib/p5.bezier.min.js) file and place it in your project directory. Then, include the following line in your HTML file:
35
36
 
36
37
  ```HTML
37
38
  <script src="p5.bezier.min.js"></script>
38
39
  ```
39
40
 
40
- Or you can also use the file through content delivery service by adding the following line:
41
+ Alternatively, you can use the library through a content delivery network (CDN):
41
42
 
42
43
  ```HTML
43
44
  <script src="https://cdn.jsdelivr.net/npm/p5bezier@latest/lib/p5.bezier.min.js"></script>
44
45
  ```
45
46
 
46
- This way the whole library will be wrapped into one `p5bezier` object and to use the functions, you need to put it in front of the function names like this:
47
+ Once included, the entire library is encapsulated within the `p5bezier` object. To call the functions provided by the library, prepend `p5bezier` to the function name:
47
48
 
48
49
  ```js
49
50
  p5bezier.initBezier(c)
50
51
  ```
51
52
 
52
- The library is still a work-in-progress project. Therefore, code tends to change from time to time. Please come back once a while to download the latest version of the library.
53
-
54
53
  ### NPM
55
54
 
56
- You can also install using the package manager NPM (recommended):
55
+ You can also install the library using the package manager NPM (recommended):
57
56
 
58
57
  ```
59
58
  npm install p5bezier
60
59
  ```
61
60
 
62
- And then import the modules into your project:
61
+ Then, import the modules into your project:
63
62
 
64
63
  ```js
65
64
  import { initBezier, newBezier, newBezierObject } from 'p5bezier'
@@ -67,7 +66,7 @@ import { initBezier, newBezier, newBezierObject } from 'p5bezier'
67
66
 
68
67
  ## Init for Bézier
69
68
 
70
- **0.2.0 NEW** You need to let the Bézier drawing system know the canvas you are drawing on. Let's use p5.js as an example:
69
+ You must initialize the Bézier drawing system with the canvas you are drawing on. Here's an example with p5.js:
71
70
 
72
71
  ```diff
73
72
  function setup() {
@@ -78,7 +77,7 @@ function setup() {
78
77
 
79
78
  ## Draw a Bézier Curve
80
79
 
81
- The most straightforward and easiest way to use the library is to put `newBezier()` in your `draw()` function. To control the style of the curve, use `fill()` or `strokeWeight()` functions as for other shapes.
80
+ The simplest way to use the library is to call `newBezier()` in your `draw()` function. You can adjust the curve's style using `fill()` or `strokeWeight()` just like other shapes.
82
81
 
83
82
  ```
84
83
  newBezier(pointsArray [, closeType] [, fidelity]);
@@ -86,21 +85,21 @@ newBezier(pointsArray [, closeType] [, fidelity]);
86
85
 
87
86
  **pointsArray**
88
87
 
89
- Takes an array of arrays of _x_ and _y_ locations of control points of the curve. e.g. `[[10, 30], [5, 100], [25, 60]]`.
88
+ This is an array of [x, y] pairs, each representing a control point for the curve. For example, `[[10, 30], [5, 100], [25, 60]]`.
90
89
 
91
90
  **closeType** (Optional)
92
91
 
93
- Takes a string, either `"OPEN"` or `"CLOSE"`. If you want the curve to close itself automatically, put `"CLOSE"` here. Otherwise, leave it as default or put `"OPEN"`. Currently, the close point of the curve cannot guarantee to be continuous.
92
+ This is a string, either `"OPEN"` or `"CLOSE"`. Use `"CLOSE"` to automatically close the curve. The default is `"OPEN"`.
94
93
 
95
94
  **fidelity** (Optional)
96
95
 
97
- Takes an integer from `0` to `10`, as default is `6`. How accurate you want the Bézier curve to be. The more inner vertices used to draw the curve, the more accurate it would be, however, the more computation would also be cost.
96
+ This is an integer between `0` and `10`, with a default value of `7`. This value determines the accuracy of the Bézier curve. Higher values mean more vertices are used, leading to a more accurate curve, but at the cost of additional computation.
98
97
 
99
98
  ## Create a Bézier Object
100
99
 
101
- If you want higher-level functions of a Bézier curve, like getting the shortest distance from a point to the curve, you can use `newBezierObj()`. It can also potentially save computation resources (when you put it in `setup()`) since the vertices will only be calculated once and then can be used repeatedly.
100
+ For advanced operations, such as computing the shortest distance from a point to the curve, use the `newBezierObj()` function. This method can also potentially optimize computation resources if placed within the `setup()` function, as vertices are calculated only once and can then be reused.
102
101
 
103
- The use of it is similar to the previous one, while `newBezierObj()` will return a _Bézier Curve Object_ that you can pass into a variable:
102
+ The usage of `newBezierObj()` is similar to `newBezier()`, but it returns a _Bézier Curve Object_ that can be stored in a variable:
104
103
 
105
104
  ```
106
105
  let bezierObject = newBezierObj(pointsArray [, closeType] [, fidelity]);
@@ -110,29 +109,29 @@ The call of `newBezierObj` will not draw the curve on canvas automatically. To d
110
109
 
111
110
  - `.draw([dash])`
112
111
 
113
- Draw the curve on canvas.
112
+ Renders the curve on the canvas.
114
113
 
115
114
  **dash** (Optional)
116
115
 
117
- Takes an array of two numbers indicating the length of solid and break parts in one period of the dash Bézier curve. e.g. `[10, 5]` means the first solid part is 10px long and then comes the break part which is 5px long.
116
+ Accepts an array of two numbers specifying the length of solid and broken sections of a dashed Bézier curve. For example, `[10, 5]` signifies a solid segment of 10px followed by a 5px break.
118
117
 
119
118
  - `.update(newPointsArray)`
120
119
 
121
- Update the locations of control points. The amount of control points must be the same as the time curve was created.
120
+ Updates the positions of control points. The number of control points should remain consistent with the initial curve configuration.
122
121
 
123
122
  - `.move(x, y [, z, toDraw, dash])`
124
123
 
125
- Alternatively, if you want to move the curve as a whole, you can use this function. The function will not mutate the original object but will draw and return a new one. Therefore, if you want to update the curve this way (which is faster than `.update()`), you can:
124
+ Translates the entire curve. This function does not modify the original object but instead generates and returns a new one. Hence, if you wish to update the curve using this method (which is faster than `.update()`), you may:
126
125
 
127
126
  ```js
128
127
  bezierObject = bezierObject.move(6, 17, -22, false)
129
128
  ```
130
129
 
131
- `toDraw` is `true` by default, but if you only want to update the curve while not drawing it simultaneously, you can set it to `false`.
130
+ By default, `toDraw` is set to `true`. However, if you wish to only update the curve without drawing it, you can set this parameter to `false`.
132
131
 
133
132
  - `.shortest(pointX, pointY [, pointZ])`
134
133
 
135
- Takes two numbers of _x_ and _y_ locations of an outside point. Returns an array of location of the point on the curve. e.g. To draw a line between this two points:
134
+ Requires the _x_ and _y_ coordinates of an external point as input. It returns an array containing the coordinates of the nearest point on the curve. For instance, to draw a line between these two points:
136
135
 
137
136
  ```js
138
137
  pointOnCurve = bezierObject.shortest(pointX, pointY)
@@ -141,44 +140,40 @@ The call of `newBezierObj` will not draw the curve on canvas automatically. To d
141
140
 
142
141
  ## Examples
143
142
 
144
- To run the examples locally, please download the repository on your computer. Then, use Terminal and change directory to `examples` folder. Run
143
+ To execute the examples locally, download the repository to your local machine. Then, navigate to the `examples` directory using your terminal. Execute the following command:
145
144
 
146
145
  ```
147
146
  npm install
148
147
  node server.js name_of_example
149
148
  ```
150
149
 
151
- For instance, if you want to run the example _basic_, simply type `node server.js basic`. Then, go to the browser of your choice and put `localhost:8000` in the address bar.
150
+ For instance, to run the _basic_ example, simply enter `node server.js basic`. Then, open your web browser and navigate to `localhost:8000`.
152
151
 
153
152
  Currently available examples:
154
153
 
155
154
  - **basic** draws a simple Bézier curve with 5 control points across the canvas.
156
155
  - **basic_object** create a simple Bézier object with 5 control points across the canvas.
157
- - **control_points** draws a curve and it's control points, which can be dragged around.
158
- - **fidelity** draws curves with different fidelities.
159
- - **basic_object** is similar to basic, while drew with Bézier object.
160
- - **shortest_point** draws the shortest line from mouse to curve.
161
-
162
- - **perlin** Use Perlin Noise (from p5.js) to control moving Bézier curves.
156
+ - **control_points** draws a curve and its control points, which can be dragged around.
157
+ - **fidelity** showcases curves drawn with varying levels of fidelity.
158
+ - **shortest_point** draws the shortest line from the mouse pointer to the curve.
159
+ - **animation** draws animated Bézier curves.
163
160
 
164
161
  More complex examples to be updated.
165
162
 
166
- ### Projects and Live Demo
163
+ ### Projects and Demos
167
164
 
168
165
  - [**Hair**](https://no-loss.netlify.app/), a visualization. See the source code here: https://github.com/peilingjiang/hair.
169
- - *p5.bezier Example - Basic* on [CodePen](https://codepen.io/peilingjiang/pen/ZEOLVPx).
170
- - *p5.bezier Example - Perlin* on [CodePen](https://codepen.io/peilingjiang/pen/eYMRJax).
166
+ - _p5.bezier Example - Basic_ on [CodePen](https://codepen.io/peilingjiang/pen/ZEOLVPx).
167
+ - _p5.bezier Example - Perlin_ on [CodePen](https://codepen.io/peilingjiang/pen/eYMRJax).
171
168
 
172
169
  Share your ideas and projects using the library!
173
170
 
174
- ## To-Dos
171
+ ## TODOs
175
172
 
176
173
  1. More examples.
177
174
  2. `offset()`, `intersection()`, and `curvature()`... functions for Bézier object.
178
- 3. Draw B-splines.
179
- 4. Continuous close point when close up a Bézier curve.
175
+ 3. Draw B-Spline curves.
180
176
 
181
177
  ## References
182
178
 
183
- 1. [Bézier curve - Wikipedia](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
184
- 2. [Bezier.js](https://pomax.github.io/bezierjs/) by [Pomax - GitHub](https://github.com/Pomax) (Concept)
179
+ - [Bézier curve - Wikipedia](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
@@ -0,0 +1,22 @@
1
+ export declare function initBezier(canvas: any, strictMode?: boolean): void;
2
+ export declare function newBezier(pointList: number[][], closeType?: string, accuracy?: number): void;
3
+ export declare function newBezierObj(pointList: Array<Array<number>>, closeType?: string, accuracy?: number): BezierCurve;
4
+ declare class BezierCurve {
5
+ controlPoints: any[];
6
+ closeType: string;
7
+ dimension: number;
8
+ increment: number;
9
+ vertexList: any[];
10
+ vertexListLen: number;
11
+ p: number;
12
+ n: number;
13
+ constructor(pL: any[], closeT: string, tI: number, bD: number, vL?: any[] | null);
14
+ private _buildVertexList;
15
+ private _addVertex;
16
+ private _distVertex;
17
+ draw(dash?: number[]): void;
18
+ update(newControlList: number[][]): void;
19
+ move(x: number, y: number, z?: number | null, toDraw?: boolean, dash?: number[]): BezierCurve;
20
+ shortest(pX: number, pY: number, pZ?: number): number[];
21
+ }
22
+ export {};
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see p5.bezier.min.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.p5bezier=t():e.p5bezier=t()}(self,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var i in r)e.o(r,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:r[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{initBezier:()=>f,newBezier:()=>d,newBezierObj:()=>u});const r=[.2,.1,.05,.04,.02,.01,.008,.002,.001,5e-4,1e-4];let i,o,n,s,h,l,a,p,c;function f(e,t=!1){if(i=e,o=i.drawingContext,p5&&e instanceof p5.Graphics)h=!0,n="WebGLRenderingContext"===o.constructor.name?3:2,l=i.beginShape,a=i.vertex,p=i.vertex,c=i.endShape;else{if(!(p5&&e instanceof p5.Renderer||e.drawingContext))throw new Error("[p5.bezier] Canvas is not supported.");p5&&(!p5||e instanceof p5.Renderer)?n="WebGLRenderingContext"===o.constructor.name?3:2:(window.console.warn("[p5.bezier] Support for non-p5 canvas is not tested."),n=e.isP3D?3:2),h=!1,n="WebGLRenderingContext"===o.constructor.name?3:2,l=o.beginPath.bind(o),a=o.moveTo.bind(o),p=o.lineTo.bind(o),c=o.closePath.bind(o)}s=t}function d(e,t="OPEN",i=6){if(s&&!Array.isArray(e))throw new Error(`[p5.bezier] newBezier() function expects an array, got ${typeof e}.`);const o=r[i];if(0===n);else{if(s)for(let t of e)if(!Array.isArray(e)||t.length!==n)throw new Error("[p5.bezier] One or more points in the array are not input correctly.");"CLOSE"===t&&e.push(e[0]);let r=e.length-1;if(l(),a(...e[0]),2===n){let t,i,n,s;for(n=0;n<=1;n+=o){for(t=0,i=0,s=0;s<=r;s++)t+=w(r)/(w(s)*w(r-s))*Math.pow(1-n,r-s)*Math.pow(n,s)*e[s][0],i+=w(r)/(w(s)*w(r-s))*Math.pow(1-n,r-s)*Math.pow(n,s)*e[s][1];p(t,i)}p(...e.slice(-1)[0])}else if(3===n){let t,i,n,s=[0,0,0];for(t=0;t<=1;t+=o){for(s=[0,0,0],i=0;i<=r;i++)for(n=0;n<3;n++)s[n]+=w(r)/(w(i)*w(r-i))*Math.pow(1-t,r-i)*Math.pow(t,i)*e[i][n];p(...s)}p(...e.slice(-1)[0])}if(h)c(t);else if("CLOSE"===t)c();else if(s&&"OPEN"!==t)throw new Error("[p5.bezier] Close type error. A bezier curve can only be either OPEN or CLOSE.");x()}}function u(e,t="OPEN",i=6){const o=r[i];if(s&&!Array.isArray(e))throw new Error(`[p5.bezier] newBezierObj() function expects an array, got ${typeof e}.`);if(s)for(let t of e)if(!Array.isArray(e)||t.length!==n)throw new Error("[p5.bezier] One or more points in the array are not input correctly.");return new b(e,t,o,n)}function w(e){return e>1?e*w(e-1):1}function y(){return 4===arguments.length?Math.hypot(arguments[0]-arguments[2],arguments[1]-arguments[3]):6===arguments.length?Math.hypot(arguments[0]-arguments[3],arguments[1]-arguments[4],arguments[2]-arguments[5]):0}function x(){i._doFill&&o.fill(),i._doStroke&&o.stroke()}class b{constructor(e,t,r,i,o=null){if(s&&2!==i&&3!==i)throw new Error(`Dimension error. The bezier curve is ${i}-dimensional and doesn't belong to our world.`);if(this.controlPoints=e,"CLOSE"===t)this.controlPoints.push(e[0]),this.closeType="CLOSE";else{if("OPEN"!==t)throw new Error("[p5.bezier] Close type error. A bezier curve can only be either OPEN or CLOSE.");this.closeType="OPEN"}this.dimension=i,this.increment=r,this.vertexList=[],this.vertexListLen=0,this.p=this.controlPoints.length,this.n=this.p-1,null===o?this._buildVertexList():(this.vertexList=o,this.vertexListLen=this.vertexList.length)}_buildVertexList(){if(this.vertexList=[],2===this.dimension){let e,t,r,i;for(r=0;r<=1;r+=this.increment){for(e=0,t=0,i=0;i<=this.n;i++)e+=w(this.n)/(w(i)*w(this.n-i))*Math.pow(1-r,this.n-i)*Math.pow(r,i)*this.controlPoints[i][0],t+=w(this.n)/(w(i)*w(this.n-i))*Math.pow(1-r,this.n-i)*Math.pow(r,i)*this.controlPoints[i][1];this.vertexList.push([e,t])}}else if(3===this.dimension){let e,t,r,i=[0,0,0];for(e=0;e<=1;e+=this.increment){for(i[0]=0,i[1]=0,i[2]=0,t=0;t<=this.n;t++)for(r=0;r<3;r++)i[r]+=w(this.n)/(w(t)*w(this.n-t))*Math.pow(1-e,this.n-t)*Math.pow(e,t)*this.controlPoints[t][r];this.vertexList.push(i)}}return this._addVertex(this.controlPoints.slice(-1)[0]),this.dimension=this.vertexList[0].length,this.vertexListLen=this.vertexList.length,this.vertexList}_addVertex(e){if(2!==this.dimension&&3!==this.dimension)throw new Error("Vertices can only be in 2D or 3D space.");p(...e)}_distVertex(e,t){return 2===this.dimension?y(e[0],e[1],t[0],t[1]):3===this.dimension?y(e[0],e[1],e[2],t[0],t[1],t[2]):void 0}draw(e){if(e){if(!(Array.isArray(e)&&2===e.length&&this.increment<=.008))throw this.increment>.008?new Error("Fidelity is too low for a dash line. It should be at least 6."):new Error("Your dash array input is not valid. Make sure it's an array of two numbers.");{let t=Math.abs(e[0]),r=t+Math.abs(e[1]),i=0,n=0,s=this.vertexList[0],h=!0;o.save(),o.fillStyle="rgba(0, 0, 0, 0)",l(),a(...this.vertexList[0]);for(let e=1;e<this.vertexListLen;e++)i+=this._distVertex(s,this.vertexList[e]),n=i%r,n<=t&&h?this._addVertex(this.vertexList[e]):n>t&&n<=r&&h?h=!1:n<=t&&!h&&(a(...this.vertexList[e]),h=!0),s=this.vertexList[e];x(),o.restore()}}else{l();for(let e of this.vertexList)this._addVertex(e);"CLOSE"===this.closeType&&o.closePath(),h?c(this.closeType):"CLOSE"===this.closeType&&c(),x()}}update(e){if(e.length!==this.controlPoints.length)throw new Error("The number of points changed. (Keep the length of the point array the same.)");L(this.controlPoints,e)||(this.controlPoints=e,this._buildVertexList())}move(e,t,r=null,i=!0,o=0){if(null===r&&3===this.dimension)throw new Error("To move a 3D curve, please specify (x, y, z).");{let n=[e,t];null!==r&&n.push(r);let s=[];for(let e=0;e<this.vertexListLen;e++)s.push(this.vertexList[e].slice());let h=new b(this.controlPoints,this.closeType,this.increment,this.dimension,s);for(let e=0;e<h.vertexListLen;e++)for(let t=0;t<h.dimension;t++)h.vertexList[e][t]+=n[t];return i&&h.draw(o),h}}shortest(e,t,r=0){let i,o=-1,n=0;for(let s of this.vertexList)-1===o?(o=this._distVertex(s,[e,t,r]),i=s):(n=this._distVertex(s,[e,t,r]),o>n&&(o=n,i=s));return i}}const L=(e,t)=>e.length===t.length&&e.every(((e,r)=>e===t[r]));return t})()));
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.p5bezier=t():e.p5bezier=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var i in r)e.o(r,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:r[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{initBezier:()=>m,newBezier:()=>E,newBezierObj:()=>P});var r=function(e,t,r){if(r||2===arguments.length)for(var i,n=0,o=t.length;n<o;n++)!i&&n in t||(i||(i=Array.prototype.slice.call(t,0,n)),i[n]=t[n]);return e.concat(i||Array.prototype.slice.call(t))};window.console.log("[p5.bezier]");var i,n,o,s,h,a,p,l,f,c=[.2,.1,.05,.04,.02,.01,.008,.002,.001,5e-4,1e-4],d=[1];function u(e,t){return"WebGLRenderingContext"===e.constructor.name||t?3:2}function v(e){for(var t=d.length;t<=e;t++)d[t]=t*d[t-1]}function y(e){return v(e),d[e]}function b(e,t){return v(e),y(e)/(y(t)*y(e-t))}function w(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 4===e.length?Math.hypot(e[0]-e[2],e[1]-e[3]):6===e.length?Math.hypot(e[0]-e[3],e[1]-e[4],e[2]-e[5]):0}function x(){i._doFill&&n.fill(),i._doStroke&&n.stroke()}function g(e){return e.map((function(e){return r([],e,!0)}))}function L(e){var t=e[0],r=e[e.length-1],i=e[1],n=e[e.length-2];return[[2*r[0]-n[0],2*r[1]-n[1]],[2*t[0]-i[0],2*t[1]-i[1]],t]}function m(e,t){if(void 0===t&&(t=!1),n=(i=e).drawingContext,"undefined"!=typeof p5&&e instanceof p5.Graphics)h=!0,o=u(n,!1);else{if(!("undefined"!=typeof p5&&e instanceof p5.Renderer||e.drawingContext))throw new Error("[p5.bezier] Canvas is not supported.");h=!1,"undefined"!=typeof p5&&("undefined"==typeof p5||e instanceof p5.Renderer)||window.console.warn("[p5.bezier] Support for non-p5 canvas is not tested."),o=u(n,e.isP3D)}!function(e,t,r){e?(a=t.beginShape,p=t.vertex,l=t.vertex,f=t.endShape):(a=r.beginPath.bind(r),p=r.moveTo.bind(r),l=r.lineTo.bind(r),f=r.closePath.bind(r))}(h,i,n),s=t}function E(e,t,r){if(void 0===t&&(t="OPEN"),void 0===r&&(r=7),s&&!Array.isArray(e))throw new Error("[p5.bezier] newBezier() function expects an array, got ".concat(typeof e,"."));if(e=g(e),"CLOSE"===t){var i=L(e);e.push.apply(e,i)}var n=c[r],d=e.length-1;if(0!==o){if(s)for(var u=0,y=e;u<y.length;u++){var w=y[u];if(!Array.isArray(e)||w.length!==o)throw new Error("[p5.bezier] One or more points in the array are not input correctly.")}if(v(d),a(),p.apply(void 0,e[0]),2===o){var m=void 0,E=void 0,P=void 0;for(P=0;P<=1;P+=n){m=E=0;for(var z=0;z<=d;z++){m+=(S=b(d,z)*Math.pow(1-P,d-z)*Math.pow(P,z))*e[z][0],E+=S*e[z][1]}l(m,E)}}else if(3===o){P=void 0;for(P=0;P<=1;P+=n){var O=[0,0,0];for(z=0;z<=d;z++)for(var S=b(d,z)*Math.pow(1-P,d-z)*Math.pow(P,z),M=0;M<3;M++)O[M]+=S*e[z][M];l.apply(void 0,O)}}if(l.apply(void 0,e.slice(-1)[0]),h)f(t);else if("CLOSE"===t)f();else if(s&&"OPEN"!==t)throw new Error("[p5.bezier] Close type error. A bezier curve can only be either OPEN or CLOSE.");x()}}function P(e,t,r){void 0===t&&(t="OPEN"),void 0===r&&(r=7);var i=c[r];if(s){if(!Array.isArray(e))throw new Error("[p5.bezier] newBezierObj() function expects an array, got ".concat(typeof e,"."));for(var n=0,h=e;n<h.length;n++){var a=h[n];if(!Array.isArray(a)||a.length!==o)throw new Error("[p5.bezier] One or more points in the array are not input correctly.")}}return new z(e,t,i,o)}var z=function(){function e(e,t,i,n,o){var h;if(void 0===o&&(o=null),s&&2!==n&&3!==n)throw new Error("[p5.bezier] Dimension error. The bezier curve is ".concat(n,"-dimensional and doesn't belong to our world."));if(this.controlPoints=g(e),"CLOSE"===t)(h=this.controlPoints).push.apply(h,L(this.controlPoints)),this.closeType="CLOSE";else{if("OPEN"!==t)throw new Error("[p5.bezier] Close type error. A bezier curve can only be either OPEN or CLOSE.");this.closeType="OPEN"}this.dimension=n,this.increment=i,this.vertexList=[],this.vertexListLen=0,this.p=this.controlPoints.length,this.n=this.p-1,v(this.n),null===o?this._buildVertexList():(this.vertexList=r([],o,!0),this.vertexListLen=this.vertexList.length)}return e.prototype._buildVertexList=function(){if(this.vertexList=[],2===this.dimension)for(var e=0;e<=1;e+=this.increment){for(var t=0,r=0,i=0;i<=this.n;i++){t+=(o=b(this.n,i)*Math.pow(1-e,this.n-i)*Math.pow(e,i))*this.controlPoints[i][0],r+=o*this.controlPoints[i][1]}this.vertexList.push([t,r])}else if(3===this.dimension)for(e=0;e<=1;e+=this.increment){var n=[0,0,0];for(i=0;i<=this.n;i++)for(var o=b(this.n,i)*Math.pow(1-e,this.n-i)*Math.pow(e,i),s=0;s<3;s++)n[s]+=o*this.controlPoints[i][s];this.vertexList.push(n)}return this._addVertex(this.controlPoints[this.controlPoints.length-1]),this.dimension=this.vertexList[0].length,this.vertexListLen=this.vertexList.length,this.vertexList},e.prototype._addVertex=function(e){if(2!==this.dimension&&3!==this.dimension)throw new Error("[p5.bezier] Vertices can only be in 2D or 3D space.");l.apply(void 0,e)},e.prototype._distVertex=function(e,t){return 2===this.dimension?w(e[0],e[1],t[0],t[1]):3===this.dimension?w(e[0],e[1],e[2],t[0],t[1],t[2]):0},e.prototype.draw=function(e){if(e){if(!(Array.isArray(e)&&2===e.length&&this.increment<=.008))throw this.increment>.008?new Error("[p5.bezier] Fidelity is too low for a dash line. It should be at least 6."):new Error("[p5.bezier] Your dash array input is not valid. Make sure it's an array of two numbers.");var t=Math.abs(e[0]),r=t+Math.abs(e[1]),i=0,o=0,s=this.vertexList[0],l=!0;n.save(),n.fillStyle="rgba(0, 0, 0, 0)",a(),p.apply(void 0,this.vertexList[0]);for(u=1;u<this.vertexListLen;u++)(o=(i+=this._distVertex(s,this.vertexList[u]))%r)<=t&&l?this._addVertex(this.vertexList[u]):o>t&&o<=r&&l?l=!1:o<=t&&!l&&(p.apply(void 0,this.vertexList[u]),l=!0),s=this.vertexList[u];x(),n.restore()}else{a();for(var c=0,d=this.vertexList;c<d.length;c++){var u=d[c];this._addVertex(u)}"CLOSE"===this.closeType&&n.closePath(),h?f(this.closeType):"CLOSE"===this.closeType&&f(),x()}},e.prototype.update=function(e){if(e.length!==this.controlPoints.length)throw new Error("[p5.bezier] The number of points changed. (Keep the length of the point array the same.)");this.controlPoints.every((function(t,r){return t===e[r]}))||(this.controlPoints=e,this._buildVertexList())},e.prototype.move=function(t,r,i,n,o){if(void 0===i&&(i=null),void 0===n&&(n=!0),void 0===o&&(o=[0]),null===i&&3===this.dimension)throw new Error("[p5.bezier] To move a 3D curve, please specify (x, y, z).");var s=[t,r];null!==i&&s.push(i);var h=this.vertexList.map((function(e){return e.slice()})),a=new e(this.controlPoints,this.closeType,this.increment,this.dimension,h);return a.vertexList=a.vertexList.map((function(e){return e.map((function(e,t){return e+s[t]}))})),n&&a.draw(o),a},e.prototype.shortest=function(e,t,r){void 0===r&&(r=0);for(var i=[],n=1/0,o=0,s=this.vertexList;o<s.length;o++){var h=s[o],a=this._distVertex(h,[e,t,r]);n>a&&(n=a,i=h)}return i},e}();return t})()));
3
3
  //# sourceMappingURL=p5.bezier.min.js.map
@@ -1,10 +1,10 @@
1
1
  /*!
2
2
  *
3
3
  * @license
4
- * p5bezier Version 0.3.2
4
+ * p5bezier Version 0.5.0
5
5
  * https://github.com/peilingjiang/p5.bezier
6
6
  *
7
- * Copyright 2018-2022 Peiling Jiang
7
+ * Copyright 2018-2023 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://p5bezier/webpack/universalModuleDefinition","webpack://p5bezier/webpack/bootstrap","webpack://p5bezier/webpack/runtime/define property getters","webpack://p5bezier/webpack/runtime/hasOwnProperty shorthand","webpack://p5bezier/webpack/runtime/make namespace object","webpack://p5bezier/./src/p5.bezier.js"],"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[\"p5bezier\"] = factory();\n\telse\n\t\troot[\"p5bezier\"] = factory();\n})(self, () => {\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))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\np5.bezier library by Peiling Jiang\n2020\n*/\n\nconst p5bezierAccuracyListAll = [\n 0.2, 0.1, 0.05, 0.04, 0.02, 0.01, 0.008, 0.002, 0.001, 0.0005, 0.0001,\n]\n\nlet _canvas,\n _ctx,\n _dimension,\n _strict,\n _useP5,\n _beginPath,\n _moveTo,\n _lineTo,\n _closePath\n\nexport function initBezier(canvas, strictMode = false) {\n _canvas = canvas\n _ctx = _canvas.drawingContext\n\n // eslint-disable-next-line no-undef\n if (p5 && canvas instanceof p5.Graphics) {\n // p5 graphics\n _useP5 = true\n _dimension = _ctx.constructor.name === 'WebGLRenderingContext' ? 3 : 2\n\n _beginPath = _canvas.beginShape\n _moveTo = _canvas.vertex\n _lineTo = _canvas.vertex\n _closePath = _canvas.endShape\n // eslint-disable-next-line no-undef\n } else if ((p5 && canvas instanceof p5.Renderer) || canvas.drawingContext) {\n // p5 canvas or other canvas\n // eslint-disable-next-line no-undef\n if (!p5 || (p5 && !(canvas instanceof p5.Renderer))) {\n window.console.warn(\n '[p5.bezier] Support for non-p5 canvas is not tested.'\n )\n _dimension = canvas.isP3D ? 3 : 2\n } else {\n _dimension = _ctx.constructor.name === 'WebGLRenderingContext' ? 3 : 2\n }\n _useP5 = false\n _dimension = _ctx.constructor.name === 'WebGLRenderingContext' ? 3 : 2\n\n _beginPath = _ctx.beginPath.bind(_ctx)\n _moveTo = _ctx.moveTo.bind(_ctx)\n _lineTo = _ctx.lineTo.bind(_ctx)\n _closePath = _ctx.closePath.bind(_ctx)\n } else {\n throw new Error('[p5.bezier] Canvas is not supported.')\n }\n\n _strict = strictMode // Always check and throw errors or not\n}\n\nexport function newBezier(pointList, closeType = 'OPEN', accuracy = 6) {\n if (_strict && !Array.isArray(pointList))\n throw new Error(\n `[p5.bezier] newBezier() function expects an array, got ${typeof pointList}.`\n )\n\n // Define the increment of t based on accuracy\n const tIncrement = p5bezierAccuracyListAll[accuracy]\n\n if (_dimension !== 0) {\n // Check if all points are valid\n if (_strict)\n for (let point of pointList)\n if (!Array.isArray(pointList) || point.length !== _dimension)\n throw new Error(\n '[p5.bezier] One or more points in the array are not input correctly.'\n )\n\n // Add the first point as the last point to close the curve\n if (closeType === 'CLOSE') pointList.push(pointList[0])\n let p = pointList.length // pointList has p points for (p - 1) degree curves\n let n = p - 1\n\n _beginPath()\n _moveTo(...pointList[0])\n // Are we drawing 2D or 3D curves\n if (_dimension === 2) {\n // 2-Dimensional bezier curve\n let x, y, t, i\n for (t = 0; t <= 1; t += tIncrement) {\n x = 0\n y = 0\n for (i = 0; i <= n; i++) {\n // i point in pointList\n x +=\n (_helper_factorial(n) /\n (_helper_factorial(i) * _helper_factorial(n - i))) *\n Math.pow(1 - t, n - i) *\n Math.pow(t, i) *\n pointList[i][0]\n y +=\n (_helper_factorial(n) /\n (_helper_factorial(i) * _helper_factorial(n - i))) *\n Math.pow(1 - t, n - i) *\n Math.pow(t, i) *\n pointList[i][1]\n }\n _lineTo(x, y)\n }\n _lineTo(...pointList.slice(-1)[0])\n } else if (_dimension === 3) {\n // 3-Dimensional bezier curve\n let xyz = [0, 0, 0],\n t,\n i,\n d\n for (t = 0; t <= 1; t += tIncrement) {\n xyz = [0, 0, 0]\n for (i = 0; i <= n; i++) {\n for (d = 0; d < 3; d++) {\n xyz[d] +=\n (_helper_factorial(n) /\n (_helper_factorial(i) * _helper_factorial(n - i))) *\n Math.pow(1 - t, n - i) *\n Math.pow(t, i) *\n pointList[i][d]\n }\n }\n _lineTo(...xyz)\n }\n _lineTo(...pointList.slice(-1)[0])\n }\n\n if (_useP5) _closePath(closeType)\n else if (closeType === 'CLOSE') _closePath()\n else if (_strict && closeType !== 'OPEN')\n throw new Error(\n '[p5.bezier] Close type error. A bezier curve can only be either OPEN or CLOSE.'\n )\n\n _helper_style()\n\n return\n }\n}\n\nexport function newBezierObj(pointList, closeType = 'OPEN', accuracy = 6) {\n // Define the increment of t based on accuracy\n const tIncrement = p5bezierAccuracyListAll[accuracy]\n\n if (_strict && !Array.isArray(pointList))\n throw new Error(\n `[p5.bezier] newBezierObj() function expects an array, got ${typeof pointList}.`\n )\n\n // Check if all points are valid\n if (_strict)\n for (let point of pointList)\n if (!Array.isArray(pointList) || point.length !== _dimension)\n throw new Error(\n '[p5.bezier] One or more points in the array are not input correctly.'\n )\n\n // All checks done\n let bObj = new BezierCurve(pointList, closeType, tIncrement, _dimension)\n return bObj\n}\n\nfunction _helper_factorial(a) {\n // Factorial function for binomial coefficient calculation\n return a > 1 ? a * _helper_factorial(a - 1) : 1\n}\n\nfunction _helper_dist() {\n if (arguments.length === 4)\n return Math.hypot(arguments[0] - arguments[2], arguments[1] - arguments[3])\n else if (arguments.length === 6)\n return Math.hypot(\n arguments[0] - arguments[3],\n arguments[1] - arguments[4],\n arguments[2] - arguments[5]\n )\n return 0\n}\n\nfunction _helper_style() {\n if (_canvas._doFill) _ctx.fill()\n if (_canvas._doStroke) _ctx.stroke()\n}\n\nclass BezierCurve {\n // Take pointList, closeType, tIncrement, bezierDimension into constructor\n constructor(pL, closeT, tI, bD, vL = null) {\n if (_strict && bD !== 2 && bD !== 3)\n throw new Error(\n `Dimension error. The bezier curve is ${bD}-dimensional and doesn't belong to our world.`\n )\n\n this.controlPoints = pL\n\n if (closeT === 'CLOSE') {\n this.controlPoints.push(pL[0])\n this.closeType = 'CLOSE'\n } else if (closeT === 'OPEN') {\n this.closeType = 'OPEN'\n } else {\n throw new Error(\n '[p5.bezier] Close type error. A bezier curve can only be either OPEN or CLOSE.'\n )\n }\n\n this.dimension = bD\n this.increment = tI\n this.vertexList = []\n this.vertexListLen = 0\n this.p = this.controlPoints.length // Has p points for (p - 1) degree curves\n this.n = this.p - 1 // Degree\n // Calculate thr vertex\n if (vL === null) {\n this._buildVertexList()\n } else {\n this.vertexList = vL\n this.vertexListLen = this.vertexList.length\n }\n }\n\n _buildVertexList() {\n /*\n Return vertexList\n */\n this.vertexList = []\n if (this.dimension === 2) {\n // 2-Dimensional bezier curve\n let x, y, t, i\n for (t = 0; t <= 1; t += this.increment) {\n x = 0\n y = 0\n for (i = 0; i <= this.n; i++) {\n // i point in pointList\n x +=\n (_helper_factorial(this.n) /\n (_helper_factorial(i) * _helper_factorial(this.n - i))) *\n Math.pow(1 - t, this.n - i) *\n Math.pow(t, i) *\n this.controlPoints[i][0]\n y +=\n (_helper_factorial(this.n) /\n (_helper_factorial(i) * _helper_factorial(this.n - i))) *\n Math.pow(1 - t, this.n - i) *\n Math.pow(t, i) *\n this.controlPoints[i][1]\n }\n this.vertexList.push([x, y])\n }\n } else if (this.dimension === 3) {\n // 3-Dimensional bezier curve\n let xyz = [0, 0, 0],\n t,\n i,\n d\n for (t = 0; t <= 1; t += this.increment) {\n xyz[0] = 0\n xyz[1] = 0\n xyz[2] = 0\n for (i = 0; i <= this.n; i++) {\n for (d = 0; d < 3; d++) {\n xyz[d] +=\n (_helper_factorial(this.n) /\n (_helper_factorial(i) * _helper_factorial(this.n - i))) *\n Math.pow(1 - t, this.n - i) *\n Math.pow(t, i) *\n this.controlPoints[i][d]\n }\n }\n this.vertexList.push(xyz)\n }\n }\n // Ending fix\n this._addVertex(this.controlPoints.slice(-1)[0])\n\n this.dimension = this.vertexList[0].length // Update dimension\n this.vertexListLen = this.vertexList.length // Update vertexListLen\n return this.vertexList\n }\n\n _addVertex(vArray) {\n // vArray is an array of [x, y] position or [x, y, z] position\n if (this.dimension === 2 || this.dimension === 3) _lineTo(...vArray)\n else throw new Error('Vertices can only be in 2D or 3D space.')\n }\n\n _distVertex(vArray1, vArray2) {\n // Calculate the distance between\n // vertex_array_1 and vertex_array_2\n if (this.dimension === 2) {\n return _helper_dist(vArray1[0], vArray1[1], vArray2[0], vArray2[1])\n } else if (this.dimension === 3) {\n return _helper_dist(\n vArray1[0],\n vArray1[1],\n vArray1[2],\n vArray2[0],\n vArray2[1],\n vArray2[2]\n )\n }\n }\n\n draw(dash) {\n if (!dash) {\n _beginPath()\n for (let v of this.vertexList) {\n this._addVertex(v)\n }\n\n if (this.closeType === 'CLOSE') _ctx.closePath()\n\n if (_useP5) _closePath(this.closeType)\n else if (this.closeType === 'CLOSE') _closePath()\n\n _helper_style()\n } else if (\n Array.isArray(dash) &&\n dash.length === 2 &&\n this.increment <= 0.008\n ) {\n // Draw a dash curve\n let solidPart = Math.abs(dash[0]) // Length of one solid part\n let onePart = solidPart + Math.abs(dash[1]),\n nowLen = 0,\n modOnePart = 0\n let lastVertex = this.vertexList[0]\n let solid = true // true draw, false break\n\n _ctx.save() // push\n _ctx.fillStyle = 'rgba(0, 0, 0, 0)' // TODO: Enable fill\n _beginPath()\n _moveTo(...this.vertexList[0])\n for (let v = 1; v < this.vertexListLen; v++) {\n nowLen += this._distVertex(lastVertex, this.vertexList[v])\n modOnePart = nowLen % onePart\n if (modOnePart <= solidPart && solid) {\n this._addVertex(this.vertexList[v])\n } else if (modOnePart > solidPart && modOnePart <= onePart && solid) {\n // endShape()\n solid = false\n } else if (modOnePart <= solidPart && !solid) {\n _moveTo(...this.vertexList[v])\n solid = true\n }\n lastVertex = this.vertexList[v]\n }\n // if (solid) {\n // // Shape didn't end\n // endShape()\n // }\n _helper_style()\n _ctx.restore()\n } else if (this.increment > 0.008)\n throw new Error(\n 'Fidelity is too low for a dash line. It should be at least 6.'\n )\n else\n throw new Error(\n \"Your dash array input is not valid. Make sure it's an array of two numbers.\"\n )\n }\n\n update(newControlList) {\n /*\n Update the vertexList when control points change\n */\n if (newControlList.length !== this.controlPoints.length) {\n throw new Error(\n 'The number of points changed. (Keep the length of the point array the same.)'\n )\n } else if (equalArrays(this.controlPoints, newControlList)) {\n // Do we really need to update? No.\n // return ;\n } else {\n this.controlPoints = newControlList\n this._buildVertexList()\n }\n }\n\n move(x, y, z = null, toDraw = true, dash = 0) {\n /*\n Move the curve to another place\n Return a new object\n */\n if (z === null && this.dimension === 3) {\n // A 3D curve treated as 2D error\n throw new Error('To move a 3D curve, please specify (x, y, z).')\n } else {\n let toMove = [x, y]\n if (z !== null) toMove.push(z)\n // Copy to a new object\n let newCurveV = []\n for (let i = 0; i < this.vertexListLen; i++)\n newCurveV.push(this.vertexList[i].slice())\n let newCurveObj = new BezierCurve(\n this.controlPoints,\n this.closeType,\n this.increment,\n this.dimension,\n newCurveV\n )\n // Move\n for (let i = 0; i < newCurveObj.vertexListLen; i++) {\n for (let j = 0; j < newCurveObj.dimension; j++) {\n newCurveObj.vertexList[i][j] += toMove[j]\n }\n }\n if (toDraw) {\n newCurveObj.draw(dash)\n }\n return newCurveObj\n }\n }\n\n shortest(pX, pY, pZ = 0) {\n // Return the point on curve that is closest to the point outside\n // Always return array length of 3\n // Last position (z) be 0 for all 2D calculation\n let dMin = -1,\n nowMin = 0\n let minVertex\n for (let v of this.vertexList) {\n if (dMin === -1) {\n dMin = this._distVertex(v, [pX, pY, pZ])\n minVertex = v\n } else {\n nowMin = this._distVertex(v, [pX, pY, pZ])\n if (dMin > nowMin) {\n dMin = nowMin\n minVertex = v\n }\n }\n }\n return minVertex // An array of vertex position\n }\n}\n\n/* --------------------------------- HELPERS -------------------------------- */\n\n// https://www.30secondsofcode.org/blog/s/javascript-array-comparison\nconst equalArrays = (a, b) =>\n a.length === b.length && a.every((v, i) => v === b[i])\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","p5bezierAccuracyListAll","_canvas","_ctx","_dimension","_strict","_useP5","_beginPath","_moveTo","_lineTo","_closePath","initBezier","canvas","strictMode","drawingContext","p5","Graphics","constructor","name","beginShape","vertex","endShape","Renderer","Error","window","console","warn","isP3D","beginPath","bind","moveTo","lineTo","closePath","newBezier","pointList","closeType","accuracy","Array","isArray","tIncrement","point","length","push","n","x","y","t","i","_helper_factorial","Math","pow","slice","d","xyz","_helper_style","newBezierObj","BezierCurve","a","_helper_dist","arguments","hypot","_doFill","fill","_doStroke","stroke","pL","closeT","tI","bD","vL","this","controlPoints","dimension","increment","vertexList","vertexListLen","p","_buildVertexList","_addVertex","vArray","_distVertex","vArray1","vArray2","draw","dash","solidPart","abs","onePart","nowLen","modOnePart","lastVertex","solid","save","fillStyle","v","restore","update","newControlList","equalArrays","move","z","toDraw","toMove","newCurveV","newCurveObj","j","shortest","pX","pY","pZ","minVertex","dMin","nowMin","b","every"],"sourceRoot":""}
1
+ {"version":3,"file":"p5.bezier.min.js","mappings":"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","sources":["webpack://p5bezier/webpack/universalModuleDefinition","webpack://p5bezier/webpack/bootstrap","webpack://p5bezier/webpack/runtime/define property getters","webpack://p5bezier/webpack/runtime/hasOwnProperty shorthand","webpack://p5bezier/webpack/runtime/make namespace object","webpack://p5bezier/./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[\"p5bezier\"] = factory();\n\telse\n\t\troot[\"p5bezier\"] = 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))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\np5.bezier library by Peiling Jiang\n2020\n\nupdated May 2023\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};\nwindow.console.log('[p5.bezier]');\n// fidelity 0-10\nvar p5bezierAccuracyListAll = [\n 0.2, 0.1, 0.05, 0.04, 0.02, 0.01, 0.008, 0.002, 0.001, 0.0005, 0.0001,\n];\nvar _canvas, _ctx, _dimension, _strict, _useP5, _beginPath, _moveTo, _lineTo, _closePath;\nvar _precalculatedFactorials = [1];\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n// helpers\nfunction _determineDimension(context, isP3D) {\n return context.constructor.name === 'WebGLRenderingContext' || isP3D ? 3 : 2;\n}\nfunction _setCanvasFunctions(useP5, canvas, context) {\n if (useP5) {\n _beginPath = canvas.beginShape;\n _moveTo = canvas.vertex;\n _lineTo = canvas.vertex;\n _closePath = canvas.endShape;\n }\n else {\n _beginPath = context.beginPath.bind(context);\n _moveTo = context.moveTo.bind(context);\n _lineTo = context.lineTo.bind(context);\n _closePath = context.closePath.bind(context);\n }\n}\nfunction _ensureFactorials(n) {\n for (var i = _precalculatedFactorials.length; i <= n; i++) {\n _precalculatedFactorials[i] = i * _precalculatedFactorials[i - 1];\n }\n}\nfunction _helper_factorial(i) {\n _ensureFactorials(i);\n return _precalculatedFactorials[i];\n}\nfunction _binomialCoefficient(n, i) {\n _ensureFactorials(n);\n return (_helper_factorial(n) / (_helper_factorial(i) * _helper_factorial(n - i)));\n}\nfunction _helper_dist() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length === 4)\n return Math.hypot(args[0] - args[2], args[1] - args[3]);\n else if (args.length === 6)\n return Math.hypot(args[0] - args[3], args[1] - args[4], args[2] - args[5]);\n return 0;\n}\nfunction _helper_style() {\n if (_canvas._doFill)\n _ctx.fill();\n if (_canvas._doStroke)\n _ctx.stroke();\n}\nfunction _deepCopyArray(arr) {\n return arr.map(function (v) { return __spreadArray([], v, true); });\n}\nfunction _findCloseCurveExtraPoints(pointList) {\n var first = pointList[0];\n var last = pointList[pointList.length - 1];\n var second = pointList[1];\n var secondLast = pointList[pointList.length - 2];\n var point1 = [2 * last[0] - secondLast[0], 2 * last[1] - secondLast[1]];\n var point2 = [2 * first[0] - second[0], 2 * first[1] - second[1]];\n return [point1, point2, first];\n}\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\n/* -------------------------------------------------------------------------- */\nexport function initBezier(canvas, strictMode) {\n if (strictMode === void 0) { strictMode = false; }\n _canvas = canvas;\n _ctx = _canvas.drawingContext;\n if (typeof p5 !== 'undefined' && canvas instanceof p5.Graphics) {\n _useP5 = true;\n _dimension = _determineDimension(_ctx, false);\n }\n else if ((typeof p5 !== 'undefined' && canvas instanceof p5.Renderer) ||\n canvas.drawingContext) {\n _useP5 = false;\n if (typeof p5 === 'undefined' ||\n (typeof p5 !== 'undefined' && !(canvas instanceof p5.Renderer))) {\n window.console.warn('[p5.bezier] Support for non-p5 canvas is not tested.');\n }\n _dimension = _determineDimension(_ctx, canvas.isP3D);\n }\n else {\n throw new Error('[p5.bezier] Canvas is not supported.');\n }\n _setCanvasFunctions(_useP5, _canvas, _ctx);\n _strict = strictMode;\n}\nexport function newBezier(pointList, closeType, accuracy) {\n if (closeType === void 0) { closeType = 'OPEN'; }\n if (accuracy === void 0) { accuracy = 7; }\n if (_strict && !Array.isArray(pointList)) {\n throw new Error(\"[p5.bezier] newBezier() function expects an array, got \".concat(typeof pointList, \".\"));\n }\n pointList = _deepCopyArray(pointList);\n if (closeType === 'CLOSE') {\n var closeCurveExtraPoints = _findCloseCurveExtraPoints(pointList);\n pointList.push.apply(pointList, closeCurveExtraPoints);\n }\n var tIncrement = p5bezierAccuracyListAll[accuracy];\n var p = pointList.length; // pointList has p points for (p - 1) degree curves\n var n = p - 1;\n if (_dimension !== 0) {\n if (_strict) {\n for (var _i = 0, pointList_1 = pointList; _i < pointList_1.length; _i++) {\n var point = pointList_1[_i];\n if (!Array.isArray(pointList) || point.length !== _dimension) {\n throw new Error('[p5.bezier] One or more points in the array are not input correctly.');\n }\n }\n }\n _ensureFactorials(n);\n _beginPath();\n _moveTo.apply(void 0, pointList[0]);\n if (_dimension === 2) {\n var x = void 0, y = void 0, t = void 0;\n for (t = 0; t <= 1; t += tIncrement) {\n x = y = 0;\n for (var i = 0; i <= n; i++) {\n var coefficient = _binomialCoefficient(n, i) * Math.pow(1 - t, n - i) * Math.pow(t, i);\n x += coefficient * pointList[i][0];\n y += coefficient * pointList[i][1];\n }\n _lineTo(x, y);\n }\n }\n else if (_dimension === 3) {\n var t = void 0;\n for (t = 0; t <= 1; t += tIncrement) {\n var xyz = [0, 0, 0];\n for (var i = 0; i <= n; i++) {\n var coefficient = _binomialCoefficient(n, i) * Math.pow(1 - t, n - i) * Math.pow(t, i);\n for (var d = 0; d < 3; d++) {\n xyz[d] += coefficient * pointList[i][d];\n }\n }\n _lineTo.apply(void 0, xyz);\n }\n }\n _lineTo.apply(void 0, pointList.slice(-1)[0]);\n if (_useP5) {\n _closePath(closeType);\n }\n else if (closeType === 'CLOSE') {\n _closePath();\n }\n else if (_strict && closeType !== 'OPEN') {\n throw new Error('[p5.bezier] Close type error. A bezier curve can only be either OPEN or CLOSE.');\n }\n _helper_style();\n }\n}\nexport function newBezierObj(pointList, closeType, accuracy) {\n if (closeType === void 0) { closeType = 'OPEN'; }\n if (accuracy === void 0) { accuracy = 7; }\n var tIncrement = p5bezierAccuracyListAll[accuracy];\n if (_strict) {\n if (!Array.isArray(pointList)) {\n throw new Error(\"[p5.bezier] newBezierObj() function expects an array, got \".concat(typeof pointList, \".\"));\n }\n for (var _i = 0, pointList_2 = pointList; _i < pointList_2.length; _i++) {\n var point = pointList_2[_i];\n if (!Array.isArray(point) || point.length !== _dimension) {\n throw new Error('[p5.bezier] One or more points in the array are not input correctly.');\n }\n }\n }\n return new BezierCurve(pointList, closeType, tIncrement, _dimension);\n}\nvar BezierCurve = /** @class */ (function () {\n // take pointList, closeType, tIncrement, bezierDimension into constructor\n function BezierCurve(pL, closeT, tI, bD, vL) {\n var _a;\n if (vL === void 0) { vL = null; }\n if (_strict && bD !== 2 && bD !== 3) {\n throw new Error(\"[p5.bezier] Dimension error. The bezier curve is \".concat(bD, \"-dimensional and doesn't belong to our world.\"));\n }\n this.controlPoints = _deepCopyArray(pL);\n if (closeT === 'CLOSE') {\n (_a = this.controlPoints).push.apply(_a, _findCloseCurveExtraPoints(this.controlPoints));\n this.closeType = 'CLOSE';\n }\n else if (closeT === 'OPEN') {\n this.closeType = 'OPEN';\n }\n else {\n throw new Error('[p5.bezier] Close type error. A bezier curve can only be either OPEN or CLOSE.');\n }\n this.dimension = bD;\n this.increment = tI;\n this.vertexList = [];\n this.vertexListLen = 0;\n this.p = this.controlPoints.length; // has p points for (p - 1) degree curves\n this.n = this.p - 1; // degree\n // ensure enough factorials are calculated up to this.n\n _ensureFactorials(this.n);\n if (vL === null) {\n this._buildVertexList();\n }\n else {\n this.vertexList = __spreadArray([], vL, true);\n this.vertexListLen = this.vertexList.length;\n }\n }\n BezierCurve.prototype._buildVertexList = function () {\n this.vertexList = [];\n if (this.dimension === 2) {\n for (var t = 0; t <= 1; t += this.increment) {\n var x = 0;\n var y = 0;\n for (var i = 0; i <= this.n; i++) {\n var binomialCoefficient = _binomialCoefficient(this.n, i);\n var term = binomialCoefficient * Math.pow(1 - t, this.n - i) * Math.pow(t, i);\n x += term * this.controlPoints[i][0];\n y += term * this.controlPoints[i][1];\n }\n this.vertexList.push([x, y]);\n }\n }\n else if (this.dimension === 3) {\n for (var t = 0; t <= 1; t += this.increment) {\n var xyz = [0, 0, 0];\n for (var i = 0; i <= this.n; i++) {\n var binomialCoefficient = _binomialCoefficient(this.n, i);\n var term = binomialCoefficient * Math.pow(1 - t, this.n - i) * Math.pow(t, i);\n for (var d = 0; d < 3; d++) {\n xyz[d] += term * this.controlPoints[i][d];\n }\n }\n this.vertexList.push(xyz);\n }\n }\n this._addVertex(this.controlPoints[this.controlPoints.length - 1]);\n this.dimension = this.vertexList[0].length; // update dimension\n this.vertexListLen = this.vertexList.length; // update vertexListLen\n return this.vertexList;\n };\n BezierCurve.prototype._addVertex = function (vArray) {\n // vArray is an array of [x, y] position or [x, y, z] position\n if (this.dimension === 2 || this.dimension === 3)\n _lineTo.apply(void 0, vArray);\n else\n throw new Error('[p5.bezier] Vertices can only be in 2D or 3D space.');\n };\n BezierCurve.prototype._distVertex = function (vArray1, vArray2) {\n // calculate the distance between\n // vertex_array_1 and vertex_array_2\n if (this.dimension === 2) {\n return _helper_dist(vArray1[0], vArray1[1], vArray2[0], vArray2[1]);\n }\n else if (this.dimension === 3) {\n return _helper_dist(vArray1[0], vArray1[1], vArray1[2], vArray2[0], vArray2[1], vArray2[2]);\n }\n return 0;\n };\n BezierCurve.prototype.draw = function (dash) {\n if (!dash) {\n _beginPath();\n for (var _i = 0, _a = this.vertexList; _i < _a.length; _i++) {\n var v = _a[_i];\n this._addVertex(v);\n }\n if (this.closeType === 'CLOSE')\n _ctx.closePath();\n if (_useP5)\n _closePath(this.closeType);\n else if (this.closeType === 'CLOSE')\n _closePath();\n _helper_style();\n }\n else if (Array.isArray(dash) &&\n dash.length === 2 &&\n this.increment <= 0.008) {\n // draw a dash curve\n var solidPart = Math.abs(dash[0]); // length of one solid part\n var onePart = solidPart + Math.abs(dash[1]), nowLen = 0, modOnePart = 0;\n var lastVertex = this.vertexList[0];\n var solid = true; // true draw, false break\n _ctx.save(); // push\n _ctx.fillStyle = 'rgba(0, 0, 0, 0)'; // TODO enable fill\n _beginPath();\n _moveTo.apply(void 0, this.vertexList[0]);\n for (var v = 1; v < this.vertexListLen; v++) {\n nowLen += this._distVertex(lastVertex, this.vertexList[v]);\n modOnePart = nowLen % onePart;\n if (modOnePart <= solidPart && solid) {\n this._addVertex(this.vertexList[v]);\n }\n else if (modOnePart > solidPart && modOnePart <= onePart && solid) {\n // endShape();\n solid = false;\n }\n else if (modOnePart <= solidPart && !solid) {\n _moveTo.apply(void 0, this.vertexList[v]);\n solid = true;\n }\n lastVertex = this.vertexList[v];\n }\n _helper_style();\n _ctx.restore();\n }\n else if (this.increment > 0.008)\n throw new Error('[p5.bezier] Fidelity is too low for a dash line. It should be at least 6.');\n else\n throw new Error(\"[p5.bezier] Your dash array input is not valid. Make sure it's an array of two numbers.\");\n };\n BezierCurve.prototype.update = function (newControlList) {\n if (newControlList.length !== this.controlPoints.length) {\n throw new Error('[p5.bezier] The number of points changed. (Keep the length of the point array the same.)');\n }\n else if (this.controlPoints.every(function (v, i) { return v === newControlList[i]; })) {\n return;\n }\n else {\n this.controlPoints = newControlList;\n this._buildVertexList();\n }\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 (dash === void 0) { dash = [0]; }\n if (z === null && this.dimension === 3) {\n throw new Error('[p5.bezier] To move a 3D curve, please specify (x, y, z).');\n }\n else {\n var toMove_1 = [x, y];\n if (z !== null)\n toMove_1.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.dimension, newCurveV);\n newCurveObj.vertexList = newCurveObj.vertexList.map(function (v) {\n return v.map(function (val, i) { return val + toMove_1[i]; });\n });\n if (toDraw) {\n newCurveObj.draw(dash);\n }\n return newCurveObj;\n }\n };\n BezierCurve.prototype.shortest = function (pX, pY, pZ) {\n if (pZ === void 0) { pZ = 0; }\n var minVertex = [];\n var dMin = Infinity;\n for (var _i = 0, _a = this.vertexList; _i < _a.length; _i++) {\n var v = _a[_i];\n var nowMin = this._distVertex(v, [pX, pY, pZ]);\n if (dMin > nowMin) {\n dMin = nowMin;\n minVertex = v;\n }\n }\n return minVertex;\n };\n return BezierCurve;\n}());\n"],"names":["root","factory","exports","module","define","amd","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","__spreadArray","to","from","pack","arguments","length","ar","i","l","Array","slice","concat","window","console","log","_canvas","_ctx","_dimension","_strict","_useP5","_beginPath","_moveTo","_lineTo","_closePath","p5bezierAccuracyListAll","_precalculatedFactorials","_determineDimension","context","isP3D","constructor","name","_ensureFactorials","n","_helper_factorial","_binomialCoefficient","_helper_dist","args","_i","Math","hypot","_helper_style","_doFill","fill","_doStroke","stroke","_deepCopyArray","arr","map","v","_findCloseCurveExtraPoints","pointList","first","last","second","secondLast","initBezier","canvas","strictMode","drawingContext","p5","Graphics","Renderer","Error","warn","useP5","beginShape","vertex","endShape","beginPath","bind","moveTo","lineTo","closePath","_setCanvasFunctions","newBezier","closeType","accuracy","isArray","closeCurveExtraPoints","push","apply","tIncrement","pointList_1","point","x","y","t","coefficient","pow","xyz","d","newBezierObj","pointList_2","BezierCurve","pL","closeT","tI","bD","vL","_a","controlPoints","dimension","increment","vertexList","vertexListLen","p","_buildVertexList","term","_addVertex","vArray","_distVertex","vArray1","vArray2","draw","dash","solidPart","abs","onePart","nowLen","modOnePart","lastVertex","solid","save","fillStyle","restore","update","newControlList","every","move","z","toDraw","toMove_1","newCurveV","newCurveObj","val","shortest","pX","pY","pZ","minVertex","dMin","Infinity","nowMin"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "p5bezier",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "description": "Bezier library for canvas-based graphics on the web, built to work with p5.js.",
5
5
  "main": "lib/p5.bezier.min.js",
6
6
  "keywords": [
@@ -19,13 +19,15 @@
19
19
  },
20
20
  "homepage": "https://github.com/peilingjiang/p5.bezier#readme",
21
21
  "devDependencies": {
22
- "eslint": "^8.20.0",
23
- "husky": "^8.0.1",
24
- "lint-staged": "^13.0.3",
25
- "prettier": "^2.7.1",
26
- "terser-webpack-plugin": "^5.3.3",
27
- "webpack": "^5.73.0",
28
- "webpack-cli": "^4.10.0"
22
+ "eslint": "^8.41.0",
23
+ "husky": "^8.0.3",
24
+ "lint-staged": "^13.2.2",
25
+ "prettier": "^2.8.8",
26
+ "terser-webpack-plugin": "^5.3.9",
27
+ "ts-loader": "^9.4.2",
28
+ "typescript": "^5.0.4",
29
+ "webpack": "^5.83.1",
30
+ "webpack-cli": "^5.1.1"
29
31
  },
30
32
  "scripts": {
31
33
  "format": "prettier --write \"**/*.{js,json,md,html,css}\"",