frenet-serret-frames 3.0.2 → 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 +19 -1
- package/README.md +17 -17
- package/index.js +12 -12
- package/package.json +7 -7
- package/types/types.d.ts +12 -12
- package/types.js +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to this project will be documented in this file. See [
|
|
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
|
+
|
|
13
|
+
|
|
14
|
+
## [3.0.3](https://github.com/dmnsgn/frenet-serret-frames/compare/v3.0.2...v3.0.3) (2023-07-31)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* missing path-tangents dependency ([9f7543b](https://github.com/dmnsgn/frenet-serret-frames/commit/9f7543bd52663c7f72e87578c4e29b0d486159aa))
|
|
20
|
+
|
|
21
|
+
|
|
4
22
|
|
|
5
23
|
## [3.0.2](https://github.com/dmnsgn/frenet-serret-frames/compare/v3.0.1...v3.0.2) (2023-07-31)
|
|
6
24
|
|
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
|
|
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.<vec3></code>](#vec3) |
|
|
113
|
-
| [tangents] | <code>Float32Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
114
|
-
| [normals] | <code>Float32Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
115
|
-
| [uvs] | <code>Float32Array</code> \| [<code>Array.<vec2></code>](#vec2) |
|
|
116
|
-
| [cells] | <code>Uint8Array</code> \| <code>Uint16Array</code> \| <code>Uint32Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
110
|
+
| Name | Type |
|
|
111
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
112
|
+
| positions | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
113
|
+
| [tangents] | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
114
|
+
| [normals] | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
115
|
+
| [uvs] | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec2></code>](#vec2) |
|
|
116
|
+
| [cells] | <code>Uint8Array</code> \| <code>Uint16Array</code> \| <code>Uint32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></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
|
|
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.<vec3></code>](#vec3) |
|
|
130
|
-
| tangents | <code>Float32Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
131
|
-
| normals | <code>Float32Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
132
|
-
| binormals | <code>Float32Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
133
|
-
| [uvs] | <code>Float32Array</code> \| [<code>Array.<vec2></code>](#vec2) |
|
|
134
|
-
| [cells] | <code>Uint8Array</code> \| <code>Uint16Array</code> \| <code>Uint32Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
127
|
+
| Name | Type |
|
|
128
|
+
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
129
|
+
| positions | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
130
|
+
| tangents | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
131
|
+
| normals | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
132
|
+
| binormals | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></code>](#vec3) |
|
|
133
|
+
| [uvs] | <code>Float32Array</code> \| <code>Array</code> \| [<code>Array.<vec2></code>](#vec2) |
|
|
134
|
+
| [cells] | <code>Uint8Array</code> \| <code>Uint16Array</code> \| <code>Uint32Array</code> \| <code>Array</code> \| [<code>Array.<vec3></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
|
|
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 / (
|
|
23
|
+
const size = geometry.positions.length / (isFlatArray ? 3 : 1);
|
|
24
24
|
geometry.tangents ||= computePathTangents(geometry.positions, closed);
|
|
25
|
-
geometry.normals ||=
|
|
26
|
-
geometry.binormals ||=
|
|
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 =
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 =
|
|
103
|
+
const firstNormal = isFlatArray
|
|
104
104
|
? geometry.normals.slice(0, 3)
|
|
105
105
|
: geometry.normals[0];
|
|
106
|
-
const lastNormal =
|
|
106
|
+
const lastNormal = isFlatArray
|
|
107
107
|
? geometry.normals.slice(-3)
|
|
108
108
|
: geometry.normals.at(-1);
|
|
109
|
-
const firstTangent =
|
|
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 (
|
|
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
|
+
"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
|
-
"
|
|
36
|
+
"path-tangents": "^3.1.0",
|
|
37
|
+
"pex-math": "^4.1.0"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
|
-
"es-module-shims": "^1.8.
|
|
40
|
-
"path-tangents": "^3.0.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": "^
|
|
43
|
+
"tweakpane": "^4.0.3"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
|
46
|
-
"node": ">=
|
|
47
|
-
"npm": ">=
|
|
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
|
|
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
|
|
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
|
/**
|