frenet-serret-frames 3.0.3 → 3.1.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/CHANGELOG.md CHANGED
@@ -1,6 +1,15 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
3
+ All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
+
5
+ # [3.1.0](https://github.com/dmnsgn/frenet-serret-frames/compare/v3.0.3...v3.1.0) (2024-03-15)
6
+
7
+
8
+ ### Features
9
+
10
+ * add support for flat arrays ([6fde6e4](https://github.com/dmnsgn/frenet-serret-frames/commit/6fde6e46b2417b6510c621047f20746dbeb86599))
11
+
12
+
4
13
 
5
14
  ## [3.0.3](https://github.com/dmnsgn/frenet-serret-frames/compare/v3.0.2...v3.0.3) (2023-07-31)
6
15
 
package/README.md CHANGED
@@ -67,7 +67,7 @@ console.log(geometry);
67
67
  <dd><p>Geometry definition.</p>
68
68
  </dd>
69
69
  <dt><a href="#SimplicialComplexWithTNB">SimplicialComplexWithTNB</a> : <code>object</code></dt>
70
- <dd><p>Geometry definition augmented with tangent, normals and binormals.</p>
70
+ <dd><p>Geometry definition augmented with tangents, normals and binormals.</p>
71
71
  </dd>
72
72
  <dt><a href="#Options">Options</a> : <code>object</code></dt>
73
73
  <dd><p>Options for frames computation. All optional.</p>
@@ -107,31 +107,31 @@ Geometry definition.
107
107
  **Kind**: global typedef
108
108
  **Properties**
109
109
 
110
- | Name | Type |
111
- | ---------- | --------------------------------------------------------------------------------------------------------------------------- |
112
- | positions | <code>Float32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
113
- | [tangents] | <code>Float32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
114
- | [normals] | <code>Float32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
115
- | [uvs] | <code>Float32Array</code> \| [<code>Array.&lt;vec2&gt;</code>](#vec2) |
116
- | [cells] | <code>Uint8Array</code> \| <code>Uint16Array</code> \| <code>Uint32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
110
+ | Name | Type |
111
+ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
112
+ | positions | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
113
+ | [tangents] | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
114
+ | [normals] | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
115
+ | [uvs] | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec2&gt;</code>](#vec2) |
116
+ | [cells] | <code>Uint8Array</code> \| <code>Uint16Array</code> \| <code>Uint32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
117
117
 
118
118
  <a name="SimplicialComplexWithTNB"></a>
119
119
 
120
120
  ## SimplicialComplexWithTNB : <code>object</code>
121
121
 
122
- Geometry definition augmented with tangent, normals and binormals.
122
+ Geometry definition augmented with tangents, normals and binormals.
123
123
 
124
124
  **Kind**: global typedef
125
125
  **Properties**
126
126
 
127
- | Name | Type |
128
- | --------- | --------------------------------------------------------------------------------------------------------------------------- |
129
- | positions | <code>Float32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
130
- | tangents | <code>Float32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
131
- | normals | <code>Float32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
132
- | binormals | <code>Float32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
133
- | [uvs] | <code>Float32Array</code> \| [<code>Array.&lt;vec2&gt;</code>](#vec2) |
134
- | [cells] | <code>Uint8Array</code> \| <code>Uint16Array</code> \| <code>Uint32Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
127
+ | Name | Type |
128
+ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
129
+ | positions | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
130
+ | tangents | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
131
+ | normals | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
132
+ | binormals | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
133
+ | [uvs] | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec2&gt;</code>](#vec2) |
134
+ | [cells] | <code>Uint8Array</code> \| <code>Uint16Array</code> \| <code>Uint32Array</code> \| <code>Array</code> \| [<code>Array.&lt;vec3&gt;</code>](#vec3) |
135
135
 
136
136
  <a name="Options"></a>
137
137
 
package/index.js CHANGED
@@ -15,20 +15,20 @@ const Z_UP = [0, 0, 1];
15
15
  * @see [Frenet–Serret formulas]{@link https://en.wikipedia.org/wiki/Frenet%E2%80%93Serret_formulas}
16
16
  */
17
17
  function frenetSerretFrames(geometry, options) {
18
- const isTypedArray = !Array.isArray(geometry.positions);
18
+ const isFlatArray = !geometry.positions[0]?.length;
19
19
 
20
20
  // Extends options
21
21
  const { closed = false, initialNormal = null } = { ...options };
22
22
 
23
- const size = geometry.positions.length / (isTypedArray ? 3 : 1);
23
+ const size = geometry.positions.length / (isFlatArray ? 3 : 1);
24
24
  geometry.tangents ||= computePathTangents(geometry.positions, closed);
25
- geometry.normals ||= isTypedArray ? new Float32Array(size * 3) : [];
26
- geometry.binormals ||= isTypedArray ? new Float32Array(size * 3) : [];
25
+ geometry.normals ||= isFlatArray ? new Float32Array(size * 3) : [];
26
+ geometry.binormals ||= isFlatArray ? new Float32Array(size * 3) : [];
27
27
 
28
28
  let v = vec3.create();
29
29
 
30
30
  // Compute initial frame
31
- let tangent = isTypedArray
31
+ let tangent = isFlatArray
32
32
  ? geometry.tangents.slice(0, 3)
33
33
  : geometry.tangents[0];
34
34
  let normal;
@@ -53,7 +53,7 @@ function frenetSerretFrames(geometry, options) {
53
53
 
54
54
  let binormal = vec3.normalize(vec3.cross([...tangent], normal));
55
55
 
56
- if (isTypedArray) {
56
+ if (isFlatArray) {
57
57
  geometry.normals.set(normal);
58
58
  geometry.binormals.set(binormal);
59
59
  } else {
@@ -66,7 +66,7 @@ function frenetSerretFrames(geometry, options) {
66
66
  let previousTangent = vec3.create();
67
67
 
68
68
  for (let i = 1; i < size; i++) {
69
- if (isTypedArray) {
69
+ if (isFlatArray) {
70
70
  avec3.set(previousTangent, 0, geometry.tangents, i - 1);
71
71
  avec3.set(tangent, 0, geometry.tangents, i);
72
72
  } else {
@@ -90,7 +90,7 @@ function frenetSerretFrames(geometry, options) {
90
90
  }
91
91
  binormal = vec3.cross([...tangent], normal);
92
92
 
93
- if (isTypedArray) {
93
+ if (isFlatArray) {
94
94
  avec3.set(geometry.normals, i, normal, 0);
95
95
  avec3.set(geometry.binormals, i, binormal, 0);
96
96
  } else {
@@ -100,13 +100,13 @@ function frenetSerretFrames(geometry, options) {
100
100
  }
101
101
 
102
102
  if (closed) {
103
- const firstNormal = isTypedArray
103
+ const firstNormal = isFlatArray
104
104
  ? geometry.normals.slice(0, 3)
105
105
  : geometry.normals[0];
106
- const lastNormal = isTypedArray
106
+ const lastNormal = isFlatArray
107
107
  ? geometry.normals.slice(-3)
108
108
  : geometry.normals.at(-1);
109
- const firstTangent = isTypedArray
109
+ const firstTangent = isFlatArray
110
110
  ? geometry.tangents.slice(0, 3)
111
111
  : geometry.tangents[0];
112
112
 
@@ -120,7 +120,7 @@ function frenetSerretFrames(geometry, options) {
120
120
  }
121
121
 
122
122
  for (let i = 0; i < size; i++) {
123
- if (isTypedArray) {
123
+ if (isFlatArray) {
124
124
  avec3.set(tangent, 0, geometry.tangents, i);
125
125
  avec3.set(normal, 0, geometry.normals, i);
126
126
  avec3.set(binormal, 0, geometry.binormals, i);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frenet-serret-frames",
3
- "version": "3.0.3",
3
+ "version": "3.1.0",
4
4
  "description": "Compute Frenet-Serret frames for a geometry of 3D positions and optionally provided tangents.",
5
5
  "keywords": [
6
6
  "path",
@@ -33,17 +33,17 @@
33
33
  "main": "index.js",
34
34
  "types": "types/index.d.ts",
35
35
  "dependencies": {
36
- "path-tangents": "^3.0.0",
37
- "pex-math": "^4.0.0-alpha.3"
36
+ "path-tangents": "^3.1.0",
37
+ "pex-math": "^4.1.0"
38
38
  },
39
39
  "devDependencies": {
40
- "es-module-shims": "^1.8.0",
40
+ "es-module-shims": "^1.8.3",
41
41
  "pex-cam": "^3.0.0-alpha.1",
42
42
  "pex-context": "^3.0.0-alpha.7",
43
- "tweakpane": "^3.1.10"
43
+ "tweakpane": "^4.0.3"
44
44
  },
45
45
  "engines": {
46
- "node": ">=18.0.0",
47
- "npm": ">=8.6.0"
46
+ "node": ">=20.0.0",
47
+ "npm": ">=9.6.4"
48
48
  }
49
49
  }
package/types/types.d.ts CHANGED
@@ -4,22 +4,22 @@ export type vec3 = number[];
4
4
  * Geometry definition.
5
5
  */
6
6
  export type SimplicialComplex = {
7
- positions: Float32Array | vec3[];
8
- tangents?: Float32Array | vec3[];
9
- normals?: Float32Array | vec3[];
10
- uvs?: Float32Array | vec2[];
11
- cells?: (Uint8Array | Uint16Array | Uint32Array | vec3[]);
7
+ positions: Float32Array | any[] | vec3[];
8
+ tangents?: Float32Array | any[] | vec3[];
9
+ normals?: Float32Array | any[] | vec3[];
10
+ uvs?: Float32Array | any[] | vec2[];
11
+ cells?: (Uint8Array | Uint16Array | Uint32Array | any[] | vec3[]);
12
12
  };
13
13
  /**
14
- * Geometry definition augmented with tangent, normals and binormals.
14
+ * Geometry definition augmented with tangents, normals and binormals.
15
15
  */
16
16
  export type SimplicialComplexWithTNB = {
17
- positions: Float32Array | vec3[];
18
- tangents: Float32Array | vec3[];
19
- normals: Float32Array | vec3[];
20
- binormals: Float32Array | vec3[];
21
- uvs?: Float32Array | vec2[];
22
- cells?: (Uint8Array | Uint16Array | Uint32Array | vec3[]);
17
+ positions: Float32Array | any[] | vec3[];
18
+ tangents: Float32Array | any[] | vec3[];
19
+ normals: Float32Array | any[] | vec3[];
20
+ binormals: Float32Array | any[] | vec3[];
21
+ uvs?: Float32Array | any[] | vec2[];
22
+ cells?: (Uint8Array | Uint16Array | Uint32Array | any[] | vec3[]);
23
23
  };
24
24
  /**
25
25
  * Options for frames computation. All optional.
package/types.js CHANGED
@@ -7,21 +7,21 @@
7
7
 
8
8
  /**
9
9
  * @typedef {object} SimplicialComplex Geometry definition.
10
- * @property {Float32Array | vec3[]} positions
11
- * @property {Float32Array | vec3[]} [tangents]
12
- * @property {Float32Array | vec3[]} [normals]
13
- * @property {Float32Array | vec2[]} [uvs]
14
- * @property {(Uint8Array | Uint16Array | Uint32Array | vec3[])} [cells]
10
+ * @property {Float32Array | Array | vec3[]} positions
11
+ * @property {Float32Array | Array | vec3[]} [tangents]
12
+ * @property {Float32Array | Array | vec3[]} [normals]
13
+ * @property {Float32Array | Array | vec2[]} [uvs]
14
+ * @property {(Uint8Array | Uint16Array | Uint32Array | Array | vec3[])} [cells]
15
15
  */
16
16
 
17
17
  /**
18
- * @typedef {object} SimplicialComplexWithTNB Geometry definition augmented with tangent, normals and binormals.
19
- * @property {Float32Array | vec3[]} positions
20
- * @property {Float32Array | vec3[]} tangents
21
- * @property {Float32Array | vec3[]} normals
22
- * @property {Float32Array | vec3[]} binormals
23
- * @property {Float32Array | vec2[]} [uvs]
24
- * @property {(Uint8Array | Uint16Array | Uint32Array | vec3[])} [cells]
18
+ * @typedef {object} SimplicialComplexWithTNB Geometry definition augmented with tangents, normals and binormals.
19
+ * @property {Float32Array | Array | vec3[]} positions
20
+ * @property {Float32Array | Array | vec3[]} tangents
21
+ * @property {Float32Array | Array | vec3[]} normals
22
+ * @property {Float32Array | Array | vec3[]} binormals
23
+ * @property {Float32Array | Array | vec2[]} [uvs]
24
+ * @property {(Uint8Array | Uint16Array | Uint32Array | Array | vec3[])} [cells]
25
25
  */
26
26
 
27
27
  /**