copper3d 1.15.15 → 1.15.16

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.
@@ -11,10 +11,6 @@ export default class copperRenderer extends baseRenderer {
11
11
  this.interval = 1 / this.fps;
12
12
  this.preRenderCallbackFunctions = [];
13
13
  this.animate = (time) => {
14
- // if (this.start) {
15
- // this.fpsCap = createFpsCap(this.render, 10);
16
- // this.start = false;
17
- // }
18
14
  var _a, _b, _c;
19
15
  switch ((_a = this.options) === null || _a === void 0 ? void 0 : _a.fpsMode) {
20
16
  case "1":
@@ -1 +1 @@
1
- {"version":3,"file":"copperRenderer.js","sourceRoot":"","sources":["../../src/Renderer/copperRenderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copperRenderer.js","sourceRoot":"","sources":["../../src/Renderer/copperRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import * as THREE from "three";
2
+ import { IMeshNodes } from "../types/types";
3
+ export declare class Node {
4
+ id: string;
5
+ p: number[];
6
+ elements: Array<Element>;
7
+ constructor(id: string, p: number[]);
8
+ }
9
+ export declare class Element {
10
+ id: string;
11
+ basis: string[];
12
+ nodes: Array<Node>;
13
+ constructor(id: string, basis: string[], nodes: Array<Node>);
14
+ }
15
+ export declare class MeshNodeTool {
16
+ nodes: {
17
+ [key: string]: Node;
18
+ };
19
+ elements: {
20
+ [key: string]: Element;
21
+ };
22
+ addNode(id: string, p: number[]): void;
23
+ addElement(id: string, basis: string[], nodeIds: string[]): void;
24
+ loadMesh(json: IMeshNodes): void;
25
+ evaluate(elementId: string, xi: number[]): number[];
26
+ find(point: THREE.Vector3, startingNodeId: string): {
27
+ [key: string]: any;
28
+ elementId: string;
29
+ xi: number[];
30
+ };
31
+ search(point: THREE.Vector3, startingNodeId: string, tol: number): {
32
+ [key: string]: any;
33
+ elementId: string;
34
+ xi: number[];
35
+ };
36
+ getNodeMaterialPoints(nodeId: string): {
37
+ [key: string]: any;
38
+ elementId: string;
39
+ xi: number[];
40
+ }[];
41
+ }
@@ -0,0 +1,211 @@
1
+ import { getWightsL3L3L3, calcDistance, perturbRandom } from "./utils";
2
+ export class Node {
3
+ constructor(id, p) {
4
+ this.elements = [];
5
+ this.id = id;
6
+ this.p = p;
7
+ }
8
+ }
9
+ export class Element {
10
+ constructor(id, basis, nodes) {
11
+ this.id = id;
12
+ this.basis = basis;
13
+ this.nodes = nodes;
14
+ }
15
+ }
16
+ export class MeshNodeTool {
17
+ constructor() {
18
+ this.nodes = {};
19
+ this.elements = {};
20
+ }
21
+ addNode(id, p) {
22
+ this.nodes[id] = new Node(id, p);
23
+ }
24
+ addElement(id, basis, nodeIds) {
25
+ let nodes = [];
26
+ for (let nid in nodeIds) {
27
+ let enid = nodeIds[nid];
28
+ nodes.push(this.nodes[enid]);
29
+ }
30
+ let element = new Element(id, basis, nodes);
31
+ this.elements[id] = element;
32
+ for (let idx in element.nodes) {
33
+ element.nodes[idx].elements.push(element);
34
+ }
35
+ }
36
+ loadMesh(json) {
37
+ for (let nid in json.nodes) {
38
+ this.addNode(nid, json.nodes[nid]);
39
+ }
40
+ for (let eid in json.elements) {
41
+ let elem = json.elements[eid];
42
+ this.addElement(eid, elem.basis, elem.nodes);
43
+ }
44
+ }
45
+ evaluate(elementId, xi) {
46
+ let w = getWightsL3L3L3(xi);
47
+ return evaluateElement(this.elements[elementId], w);
48
+ }
49
+ find(point, startingNodeId) {
50
+ let pt = [point.x, point.y, point.z];
51
+ let nodeMaterialPoints = this.getNodeMaterialPoints(startingNodeId);
52
+ for (let i in nodeMaterialPoints) {
53
+ let mpt = nodeMaterialPoints[i];
54
+ let x = this.evaluate(mpt.elementId, mpt.xi);
55
+ let r = calcDistance(x, pt);
56
+ mpt.error = r;
57
+ }
58
+ let t0 = new Date().getTime();
59
+ let n = 0;
60
+ for (let step = 0; step < 10000; step++) {
61
+ for (let i in nodeMaterialPoints) {
62
+ let mpt = nodeMaterialPoints[i];
63
+ let xi = perturbRandom(mpt.xi, 0.1);
64
+ let x = this.evaluate(mpt.elementId, xi);
65
+ let r = calcDistance(x, pt);
66
+ if (r < mpt.error) {
67
+ mpt.error = r;
68
+ mpt.xi = xi;
69
+ if (r < 1.0) {
70
+ console.log("Time: (" +
71
+ n +
72
+ ") " +
73
+ (new Date().getTime() - t0) +
74
+ "ms Error: " +
75
+ r);
76
+ return mpt;
77
+ }
78
+ }
79
+ }
80
+ n = step;
81
+ }
82
+ let bestIndex = 0;
83
+ let bestError = nodeMaterialPoints[0].error;
84
+ for (let i in nodeMaterialPoints) {
85
+ let mpt = nodeMaterialPoints[i];
86
+ if (mpt.error < bestError) {
87
+ bestIndex = Number(i);
88
+ bestError = mpt.error;
89
+ }
90
+ }
91
+ let mpt = nodeMaterialPoints[bestIndex];
92
+ console.log("Time: (" +
93
+ n +
94
+ ") " +
95
+ (new Date().getTime() - t0) +
96
+ "ms Error: " +
97
+ mpt.error);
98
+ return mpt;
99
+ }
100
+ search(point, startingNodeId, tol) {
101
+ let pt = [point.x, point.y, point.z];
102
+ let nodeMaterialPoints = this.getNodeMaterialPoints(startingNodeId);
103
+ for (let i in nodeMaterialPoints) {
104
+ let mpt = nodeMaterialPoints[i];
105
+ let x = this.evaluate(mpt.elementId, mpt.xi);
106
+ mpt.error = calcDistance(x, pt);
107
+ }
108
+ let t0 = new Date().getTime();
109
+ let xiStepSize = [0.1, 0.01, 0.001];
110
+ for (let i in nodeMaterialPoints) {
111
+ let mpt = nodeMaterialPoints[i];
112
+ let numDims = mpt.xi.length;
113
+ let nIter = 0;
114
+ let go = true;
115
+ while (go || nIter < 10) {
116
+ let minErr = 1 * mpt.error;
117
+ let minXi;
118
+ for (let xiIdx in xiStepSize) {
119
+ let dXi = xiStepSize[xiIdx];
120
+ for (let dim = 0; dim < numDims; dim++) {
121
+ let xi = mpt.xi.slice();
122
+ xi[dim] += dXi;
123
+ if (xi[dim] >= 0 && xi[dim] <= 1) {
124
+ let x = this.evaluate(mpt.elementId, mpt.xi);
125
+ let err = calcDistance(x, pt);
126
+ if (err < minErr) {
127
+ minErr = err;
128
+ minXi = xi;
129
+ if (err < tol) {
130
+ mpt.error = err;
131
+ mpt.xi = xi;
132
+ console.log("Time 1: " +
133
+ (new Date().getTime() - t0) +
134
+ "ms Error: " +
135
+ mpt.error);
136
+ return mpt;
137
+ }
138
+ }
139
+ }
140
+ else {
141
+ }
142
+ xi = mpt.xi.slice();
143
+ xi[dim] -= dXi;
144
+ if (xi[dim] >= 0 && xi[dim] <= 1) {
145
+ let x = this.evaluate(mpt.elementId, mpt.xi);
146
+ let err = calcDistance(x, pt);
147
+ if (err < minErr) {
148
+ minErr = err;
149
+ minXi = xi;
150
+ if (err < tol) {
151
+ mpt.error = err;
152
+ mpt.xi = xi;
153
+ console.log("Time 2: " +
154
+ (new Date().getTime() - t0) +
155
+ "ms Error: " +
156
+ mpt.error);
157
+ return mpt;
158
+ }
159
+ }
160
+ }
161
+ else {
162
+ }
163
+ }
164
+ }
165
+ if (minXi === null || minXi === undefined) {
166
+ go = false;
167
+ }
168
+ else {
169
+ mpt.xi = minXi;
170
+ mpt.error = minErr;
171
+ }
172
+ nIter++;
173
+ }
174
+ }
175
+ let bestIndex = 0;
176
+ let bestError = nodeMaterialPoints[0].error;
177
+ for (let i in nodeMaterialPoints) {
178
+ let mpt = nodeMaterialPoints[i];
179
+ if (mpt.error < bestError) {
180
+ bestIndex = Number(i);
181
+ bestError = mpt.error;
182
+ }
183
+ }
184
+ let mpt = nodeMaterialPoints[bestIndex];
185
+ console.log("Time 3: " + (new Date().getTime() - t0) + "ms Error: " + mpt.error);
186
+ return mpt;
187
+ }
188
+ getNodeMaterialPoints(nodeId) {
189
+ let materialPoints = [];
190
+ let node = this.nodes[nodeId];
191
+ for (let eid in node.elements) {
192
+ let element = node.elements[eid];
193
+ let nodeIdx = element.nodes.indexOf(node);
194
+ let xi0 = (nodeIdx % 4) / 3;
195
+ let xi1 = Math.floor((nodeIdx % 16) / 4) / 3;
196
+ let xi2 = Math.floor(nodeIdx / 16) / 3;
197
+ materialPoints.push({ elementId: element.id, xi: [xi0, xi1, xi2] });
198
+ }
199
+ return materialPoints;
200
+ }
201
+ }
202
+ function evaluateElement(element, weights) {
203
+ let x = [0, 0, 0];
204
+ for (let f = 0; f < 3; f++) {
205
+ for (let i = 0; i < weights.length; i++) {
206
+ x[f] += weights[i] * element.nodes[i].p[f];
207
+ }
208
+ }
209
+ return x;
210
+ }
211
+ //# sourceMappingURL=MeshNodeTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeshNodeTool.js","sourceRoot":"","sources":["../../src/Utils/MeshNodeTool.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,30 @@ export declare function loading(): {
6
6
  progress: HTMLDivElement;
7
7
  };
8
8
  export declare function switchEraserSize(size: number, urls?: string[]): string;
9
- export declare function createFpsCap(loop: Function, fps?: number): {
10
- fps: number;
11
- loop: (_scope: any, time: number) => any;
12
- };
9
+ /**
10
+ * Cubic-Lagrange basis function
11
+ * @param x
12
+ * @returns
13
+ */
14
+ export declare function L3(x: number): number[];
15
+ /**
16
+ * Cubic-Hermite basis function.
17
+ * @param x
18
+ * @returns
19
+ */
20
+ export declare function H3(x: number): number[];
21
+ /**
22
+ * To calculate the weights for each element of Xi using the cubic Lagrange basis functions.
23
+ * @param Xi
24
+ * @returns
25
+ */
26
+ export declare function getWightsL3L3L3(Xi: number[]): number[];
27
+ export declare function getWightsH3H3H3(Xi: number[][]): number[][];
28
+ /**
29
+ * Euclidean distance n dimensions
30
+ * @param x0
31
+ * @param x1
32
+ * @returns
33
+ */
34
+ export declare function calcDistance(x0: number[], x1: number[]): number;
35
+ export declare function perturbRandom(x: number[], dx: number): number[];
@@ -138,39 +138,113 @@ export function switchEraserSize(size, urls) {
138
138
  }
139
139
  return url;
140
140
  }
141
- export function createFpsCap(loop, fps = 60) {
142
- let targetFps = 0, fpsInterval = 0;
143
- let lastTime = 0, lastOverTime = 0, prevOverTime = 0, deltaTime = 0;
144
- function updateFps(value) {
145
- targetFps = value;
146
- fpsInterval = 1000 / targetFps;
147
- }
148
- updateFps(fps);
149
- return {
150
- // the targeted frame rate
151
- get fps() {
152
- return targetFps;
153
- },
154
- set fps(value) {
155
- updateFps(value);
156
- },
157
- // the frame-capped loop function
158
- loop: function (_scope, time) {
159
- if (!!time) {
160
- console.log(time, lastTime);
161
- console.log(deltaTime);
162
- deltaTime = time - lastTime;
163
- console.log(deltaTime);
164
- if (deltaTime < fpsInterval) {
165
- return;
166
- }
167
- prevOverTime = lastOverTime;
168
- lastOverTime = deltaTime % fpsInterval;
169
- lastTime = time - lastOverTime;
170
- deltaTime -= prevOverTime;
141
+ /**
142
+ * Cubic-Lagrange basis function
143
+ * @param x
144
+ * @returns
145
+ */
146
+ export function L3(x) {
147
+ let L1 = 1 - x;
148
+ let L2 = x;
149
+ let sc = 9 / 2;
150
+ return [
151
+ 0.5 * L1 * (3 * L1 - 1) * (3 * L1 - 2),
152
+ sc * L1 * L2 * (3 * L1 - 1),
153
+ sc * L1 * L2 * (3 * L2 - 1),
154
+ 0.5 * L2 * (3 * L2 - 1) * (3 * L2 - 2),
155
+ ];
156
+ }
157
+ /**
158
+ * Cubic-Hermite basis function.
159
+ * @param x
160
+ * @returns
161
+ */
162
+ export function H3(x) {
163
+ let x2 = x * x;
164
+ return [
165
+ 1 - 3 * x2 + 2 * x * x2,
166
+ x * (x - 1) * (x - 1),
167
+ x2 * (3 - 2 * x),
168
+ x2 * (x - 1),
169
+ ];
170
+ }
171
+ /**
172
+ * To calculate the weights for each element of Xi using the cubic Lagrange basis functions.
173
+ * @param Xi
174
+ * @returns
175
+ */
176
+ export function getWightsL3L3L3(Xi) {
177
+ let W0, W1, W2;
178
+ W0 = L3(Xi[0]);
179
+ W1 = L3(Xi[1]);
180
+ W2 = L3(Xi[2]);
181
+ let w = [];
182
+ for (let k2 in W2) {
183
+ for (let k1 in W1) {
184
+ for (let k0 in W0) {
185
+ w.push(W0[k0] * W1[k1] * W2[k2]);
171
186
  }
172
- return loop(_scope, deltaTime);
173
- },
174
- };
187
+ }
188
+ }
189
+ return w;
190
+ }
191
+ export function getWightsH3H3H3(Xi) {
192
+ let mixIdx = [
193
+ [0, 0],
194
+ [1, 0],
195
+ [0, 1],
196
+ [1, 1],
197
+ [2, 0],
198
+ [3, 0],
199
+ [2, 1],
200
+ [3, 1],
201
+ [0, 2],
202
+ [1, 2],
203
+ [0, 3],
204
+ [1, 3],
205
+ [2, 2],
206
+ [3, 2],
207
+ [2, 3],
208
+ [3, 3],
209
+ ];
210
+ let weights = [];
211
+ let W0, W1;
212
+ for (let idx in Xi) {
213
+ W0 = H3(Xi[idx][0]);
214
+ W1 = H3(Xi[idx][1]);
215
+ let w = [];
216
+ for (let k in mixIdx) {
217
+ w.push(W0[mixIdx[k][0]] * W1[mixIdx[k][1]]);
218
+ }
219
+ weights.push(w);
220
+ }
221
+ return weights;
222
+ }
223
+ /**
224
+ * Euclidean distance n dimensions
225
+ * @param x0
226
+ * @param x1
227
+ * @returns
228
+ */
229
+ export function calcDistance(x0, x1) {
230
+ let dx2 = 0;
231
+ for (let i = 0; i < x0.length; i++) {
232
+ let dx = x0[i] - x1[i];
233
+ dx2 += dx * dx;
234
+ }
235
+ return Math.sqrt(dx2);
236
+ }
237
+ export function perturbRandom(x, dx) {
238
+ let xp = [];
239
+ for (let i = 0; i < x.length; i++) {
240
+ xp.push(x[i] + 2 * dx * (Math.random() - 0.5));
241
+ if (xp[i] < 0) {
242
+ xp[i] = 0;
243
+ }
244
+ else if (xp[i] > 1) {
245
+ xp[i] = 1;
246
+ }
247
+ }
248
+ return xp;
175
249
  }
176
250
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/Utils/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/Utils/utils.ts"],"names":[],"mappings":"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"}
@@ -38478,6 +38478,69 @@ function switchEraserSize(size, urls) {
38478
38478
  }
38479
38479
  }
38480
38480
  return url;
38481
+ }
38482
+ /**
38483
+ * Cubic-Lagrange basis function
38484
+ * @param x
38485
+ * @returns
38486
+ */
38487
+ function L3(x) {
38488
+ let L1 = 1 - x;
38489
+ let L2 = x;
38490
+ let sc = 9 / 2;
38491
+ return [
38492
+ 0.5 * L1 * (3 * L1 - 1) * (3 * L1 - 2),
38493
+ sc * L1 * L2 * (3 * L1 - 1),
38494
+ sc * L1 * L2 * (3 * L2 - 1),
38495
+ 0.5 * L2 * (3 * L2 - 1) * (3 * L2 - 2),
38496
+ ];
38497
+ }
38498
+ /**
38499
+ * To calculate the weights for each element of Xi using the cubic Lagrange basis functions.
38500
+ * @param Xi
38501
+ * @returns
38502
+ */
38503
+ function getWightsL3L3L3(Xi) {
38504
+ let W0, W1, W2;
38505
+ W0 = L3(Xi[0]);
38506
+ W1 = L3(Xi[1]);
38507
+ W2 = L3(Xi[2]);
38508
+ let w = [];
38509
+ for (let k2 in W2) {
38510
+ for (let k1 in W1) {
38511
+ for (let k0 in W0) {
38512
+ w.push(W0[k0] * W1[k1] * W2[k2]);
38513
+ }
38514
+ }
38515
+ }
38516
+ return w;
38517
+ }
38518
+ /**
38519
+ * Euclidean distance n dimensions
38520
+ * @param x0
38521
+ * @param x1
38522
+ * @returns
38523
+ */
38524
+ function calcDistance(x0, x1) {
38525
+ let dx2 = 0;
38526
+ for (let i = 0; i < x0.length; i++) {
38527
+ let dx = x0[i] - x1[i];
38528
+ dx2 += dx * dx;
38529
+ }
38530
+ return Math.sqrt(dx2);
38531
+ }
38532
+ function perturbRandom(x, dx) {
38533
+ let xp = [];
38534
+ for (let i = 0; i < x.length; i++) {
38535
+ xp.push(x[i] + 2 * dx * (Math.random() - 0.5));
38536
+ if (xp[i] < 0) {
38537
+ xp[i] = 0;
38538
+ }
38539
+ else if (xp[i] > 1) {
38540
+ xp[i] = 1;
38541
+ }
38542
+ }
38543
+ return xp;
38481
38544
  }
38482
38545
 
38483
38546
  /* eslint no-bitwise: 0 */
@@ -56552,10 +56615,6 @@ class copperRenderer extends baseRenderer {
56552
56615
  this.interval = 1 / this.fps;
56553
56616
  this.preRenderCallbackFunctions = [];
56554
56617
  this.animate = (time) => {
56555
- // if (this.start) {
56556
- // this.fpsCap = createFpsCap(this.render, 10);
56557
- // this.start = false;
56558
- // }
56559
56618
  var _a, _b, _c;
56560
56619
  switch ((_a = this.options) === null || _a === void 0 ? void 0 : _a.fpsMode) {
56561
56620
  case "1":
@@ -70101,8 +70160,214 @@ class nrrd_tools {
70101
70160
  }
70102
70161
  }
70103
70162
 
70163
+ class Node {
70164
+ constructor(id, p) {
70165
+ this.elements = [];
70166
+ this.id = id;
70167
+ this.p = p;
70168
+ }
70169
+ }
70170
+ class Element {
70171
+ constructor(id, basis, nodes) {
70172
+ this.id = id;
70173
+ this.basis = basis;
70174
+ this.nodes = nodes;
70175
+ }
70176
+ }
70177
+ class MeshNodeTool {
70178
+ constructor() {
70179
+ this.nodes = {};
70180
+ this.elements = {};
70181
+ }
70182
+ addNode(id, p) {
70183
+ this.nodes[id] = new Node(id, p);
70184
+ }
70185
+ addElement(id, basis, nodeIds) {
70186
+ let nodes = [];
70187
+ for (let nid in nodeIds) {
70188
+ let enid = nodeIds[nid];
70189
+ nodes.push(this.nodes[enid]);
70190
+ }
70191
+ let element = new Element(id, basis, nodes);
70192
+ this.elements[id] = element;
70193
+ for (let idx in element.nodes) {
70194
+ element.nodes[idx].elements.push(element);
70195
+ }
70196
+ }
70197
+ loadMesh(json) {
70198
+ for (let nid in json.nodes) {
70199
+ this.addNode(nid, json.nodes[nid]);
70200
+ }
70201
+ for (let eid in json.elements) {
70202
+ let elem = json.elements[eid];
70203
+ this.addElement(eid, elem.basis, elem.nodes);
70204
+ }
70205
+ }
70206
+ evaluate(elementId, xi) {
70207
+ let w = getWightsL3L3L3(xi);
70208
+ return evaluateElement(this.elements[elementId], w);
70209
+ }
70210
+ find(point, startingNodeId) {
70211
+ let pt = [point.x, point.y, point.z];
70212
+ let nodeMaterialPoints = this.getNodeMaterialPoints(startingNodeId);
70213
+ for (let i in nodeMaterialPoints) {
70214
+ let mpt = nodeMaterialPoints[i];
70215
+ let x = this.evaluate(mpt.elementId, mpt.xi);
70216
+ let r = calcDistance(x, pt);
70217
+ mpt.error = r;
70218
+ }
70219
+ let t0 = new Date().getTime();
70220
+ let n = 0;
70221
+ for (let step = 0; step < 10000; step++) {
70222
+ for (let i in nodeMaterialPoints) {
70223
+ let mpt = nodeMaterialPoints[i];
70224
+ let xi = perturbRandom(mpt.xi, 0.1);
70225
+ let x = this.evaluate(mpt.elementId, xi);
70226
+ let r = calcDistance(x, pt);
70227
+ if (r < mpt.error) {
70228
+ mpt.error = r;
70229
+ mpt.xi = xi;
70230
+ if (r < 1.0) {
70231
+ console.log("Time: (" +
70232
+ n +
70233
+ ") " +
70234
+ (new Date().getTime() - t0) +
70235
+ "ms Error: " +
70236
+ r);
70237
+ return mpt;
70238
+ }
70239
+ }
70240
+ }
70241
+ n = step;
70242
+ }
70243
+ let bestIndex = 0;
70244
+ let bestError = nodeMaterialPoints[0].error;
70245
+ for (let i in nodeMaterialPoints) {
70246
+ let mpt = nodeMaterialPoints[i];
70247
+ if (mpt.error < bestError) {
70248
+ bestIndex = Number(i);
70249
+ bestError = mpt.error;
70250
+ }
70251
+ }
70252
+ let mpt = nodeMaterialPoints[bestIndex];
70253
+ console.log("Time: (" +
70254
+ n +
70255
+ ") " +
70256
+ (new Date().getTime() - t0) +
70257
+ "ms Error: " +
70258
+ mpt.error);
70259
+ return mpt;
70260
+ }
70261
+ search(point, startingNodeId, tol) {
70262
+ let pt = [point.x, point.y, point.z];
70263
+ let nodeMaterialPoints = this.getNodeMaterialPoints(startingNodeId);
70264
+ for (let i in nodeMaterialPoints) {
70265
+ let mpt = nodeMaterialPoints[i];
70266
+ let x = this.evaluate(mpt.elementId, mpt.xi);
70267
+ mpt.error = calcDistance(x, pt);
70268
+ }
70269
+ let t0 = new Date().getTime();
70270
+ let xiStepSize = [0.1, 0.01, 0.001];
70271
+ for (let i in nodeMaterialPoints) {
70272
+ let mpt = nodeMaterialPoints[i];
70273
+ let numDims = mpt.xi.length;
70274
+ let nIter = 0;
70275
+ let go = true;
70276
+ while (go || nIter < 10) {
70277
+ let minErr = 1 * mpt.error;
70278
+ let minXi;
70279
+ for (let xiIdx in xiStepSize) {
70280
+ let dXi = xiStepSize[xiIdx];
70281
+ for (let dim = 0; dim < numDims; dim++) {
70282
+ let xi = mpt.xi.slice();
70283
+ xi[dim] += dXi;
70284
+ if (xi[dim] >= 0 && xi[dim] <= 1) {
70285
+ let x = this.evaluate(mpt.elementId, mpt.xi);
70286
+ let err = calcDistance(x, pt);
70287
+ if (err < minErr) {
70288
+ minErr = err;
70289
+ minXi = xi;
70290
+ if (err < tol) {
70291
+ mpt.error = err;
70292
+ mpt.xi = xi;
70293
+ console.log("Time 1: " +
70294
+ (new Date().getTime() - t0) +
70295
+ "ms Error: " +
70296
+ mpt.error);
70297
+ return mpt;
70298
+ }
70299
+ }
70300
+ }
70301
+ xi = mpt.xi.slice();
70302
+ xi[dim] -= dXi;
70303
+ if (xi[dim] >= 0 && xi[dim] <= 1) {
70304
+ let x = this.evaluate(mpt.elementId, mpt.xi);
70305
+ let err = calcDistance(x, pt);
70306
+ if (err < minErr) {
70307
+ minErr = err;
70308
+ minXi = xi;
70309
+ if (err < tol) {
70310
+ mpt.error = err;
70311
+ mpt.xi = xi;
70312
+ console.log("Time 2: " +
70313
+ (new Date().getTime() - t0) +
70314
+ "ms Error: " +
70315
+ mpt.error);
70316
+ return mpt;
70317
+ }
70318
+ }
70319
+ }
70320
+ }
70321
+ }
70322
+ if (minXi === null || minXi === undefined) {
70323
+ go = false;
70324
+ }
70325
+ else {
70326
+ mpt.xi = minXi;
70327
+ mpt.error = minErr;
70328
+ }
70329
+ nIter++;
70330
+ }
70331
+ }
70332
+ let bestIndex = 0;
70333
+ let bestError = nodeMaterialPoints[0].error;
70334
+ for (let i in nodeMaterialPoints) {
70335
+ let mpt = nodeMaterialPoints[i];
70336
+ if (mpt.error < bestError) {
70337
+ bestIndex = Number(i);
70338
+ bestError = mpt.error;
70339
+ }
70340
+ }
70341
+ let mpt = nodeMaterialPoints[bestIndex];
70342
+ console.log("Time 3: " + (new Date().getTime() - t0) + "ms Error: " + mpt.error);
70343
+ return mpt;
70344
+ }
70345
+ getNodeMaterialPoints(nodeId) {
70346
+ let materialPoints = [];
70347
+ let node = this.nodes[nodeId];
70348
+ for (let eid in node.elements) {
70349
+ let element = node.elements[eid];
70350
+ let nodeIdx = element.nodes.indexOf(node);
70351
+ let xi0 = (nodeIdx % 4) / 3;
70352
+ let xi1 = Math.floor((nodeIdx % 16) / 4) / 3;
70353
+ let xi2 = Math.floor(nodeIdx / 16) / 3;
70354
+ materialPoints.push({ elementId: element.id, xi: [xi0, xi1, xi2] });
70355
+ }
70356
+ return materialPoints;
70357
+ }
70358
+ }
70359
+ function evaluateElement(element, weights) {
70360
+ let x = [0, 0, 0];
70361
+ for (let f = 0; f < 3; f++) {
70362
+ for (let i = 0; i < weights.length; i++) {
70363
+ x[f] += weights[i] * element.nodes[i].p[f];
70364
+ }
70365
+ }
70366
+ return x;
70367
+ }
70368
+
70104
70369
  // import * as kiwrious from "copper3d_plugin_heart_k";
70105
- const REVISION = "v1.15.15";
70106
- console.log("%cCopper3D Visualisation %cBeta:v1.15.15", "padding: 3px;color:white; background:#023047", "padding: 3px;color:white; background:#f50a25");
70370
+ const REVISION = "v1.15.16";
70371
+ console.log("%cCopper3D Visualisation %cBeta:v1.15.16", "padding: 3px;color:white; background:#023047", "padding: 3px;color:white; background:#f50a25");
70107
70372
 
70108
- export { CameraViewPoint, Copper3dTrackballControls, REVISION, addBoxHelper, addLabelToScene, configKiwriousHeart, convert3DPostoScreenPos, convertScreenPosto3DPos, copperMScene, copperMSceneRenderer, copperRenderer, copperRendererOnDemond, copperScene, copperSceneOnDemond, createTexture2D_NRRD, fullScreenListenner, kiwrious, loading, nrrd_tools, setHDRFilePath };
70373
+ export { CameraViewPoint, Copper3dTrackballControls, MeshNodeTool, REVISION, addBoxHelper, addLabelToScene, configKiwriousHeart, convert3DPostoScreenPos, convertScreenPosto3DPos, copperMScene, copperMSceneRenderer, copperRenderer, copperRendererOnDemond, copperScene, copperSceneOnDemond, createTexture2D_NRRD, fullScreenListenner, kiwrious, loading, nrrd_tools, setHDRFilePath };
@@ -38486,6 +38486,69 @@
38486
38486
  }
38487
38487
  }
38488
38488
  return url;
38489
+ }
38490
+ /**
38491
+ * Cubic-Lagrange basis function
38492
+ * @param x
38493
+ * @returns
38494
+ */
38495
+ function L3(x) {
38496
+ let L1 = 1 - x;
38497
+ let L2 = x;
38498
+ let sc = 9 / 2;
38499
+ return [
38500
+ 0.5 * L1 * (3 * L1 - 1) * (3 * L1 - 2),
38501
+ sc * L1 * L2 * (3 * L1 - 1),
38502
+ sc * L1 * L2 * (3 * L2 - 1),
38503
+ 0.5 * L2 * (3 * L2 - 1) * (3 * L2 - 2),
38504
+ ];
38505
+ }
38506
+ /**
38507
+ * To calculate the weights for each element of Xi using the cubic Lagrange basis functions.
38508
+ * @param Xi
38509
+ * @returns
38510
+ */
38511
+ function getWightsL3L3L3(Xi) {
38512
+ let W0, W1, W2;
38513
+ W0 = L3(Xi[0]);
38514
+ W1 = L3(Xi[1]);
38515
+ W2 = L3(Xi[2]);
38516
+ let w = [];
38517
+ for (let k2 in W2) {
38518
+ for (let k1 in W1) {
38519
+ for (let k0 in W0) {
38520
+ w.push(W0[k0] * W1[k1] * W2[k2]);
38521
+ }
38522
+ }
38523
+ }
38524
+ return w;
38525
+ }
38526
+ /**
38527
+ * Euclidean distance n dimensions
38528
+ * @param x0
38529
+ * @param x1
38530
+ * @returns
38531
+ */
38532
+ function calcDistance(x0, x1) {
38533
+ let dx2 = 0;
38534
+ for (let i = 0; i < x0.length; i++) {
38535
+ let dx = x0[i] - x1[i];
38536
+ dx2 += dx * dx;
38537
+ }
38538
+ return Math.sqrt(dx2);
38539
+ }
38540
+ function perturbRandom(x, dx) {
38541
+ let xp = [];
38542
+ for (let i = 0; i < x.length; i++) {
38543
+ xp.push(x[i] + 2 * dx * (Math.random() - 0.5));
38544
+ if (xp[i] < 0) {
38545
+ xp[i] = 0;
38546
+ }
38547
+ else if (xp[i] > 1) {
38548
+ xp[i] = 1;
38549
+ }
38550
+ }
38551
+ return xp;
38489
38552
  }
38490
38553
 
38491
38554
  /* eslint no-bitwise: 0 */
@@ -56560,10 +56623,6 @@
56560
56623
  this.interval = 1 / this.fps;
56561
56624
  this.preRenderCallbackFunctions = [];
56562
56625
  this.animate = (time) => {
56563
- // if (this.start) {
56564
- // this.fpsCap = createFpsCap(this.render, 10);
56565
- // this.start = false;
56566
- // }
56567
56626
  var _a, _b, _c;
56568
56627
  switch ((_a = this.options) === null || _a === void 0 ? void 0 : _a.fpsMode) {
56569
56628
  case "1":
@@ -70109,12 +70168,219 @@
70109
70168
  }
70110
70169
  }
70111
70170
 
70171
+ class Node {
70172
+ constructor(id, p) {
70173
+ this.elements = [];
70174
+ this.id = id;
70175
+ this.p = p;
70176
+ }
70177
+ }
70178
+ class Element {
70179
+ constructor(id, basis, nodes) {
70180
+ this.id = id;
70181
+ this.basis = basis;
70182
+ this.nodes = nodes;
70183
+ }
70184
+ }
70185
+ class MeshNodeTool {
70186
+ constructor() {
70187
+ this.nodes = {};
70188
+ this.elements = {};
70189
+ }
70190
+ addNode(id, p) {
70191
+ this.nodes[id] = new Node(id, p);
70192
+ }
70193
+ addElement(id, basis, nodeIds) {
70194
+ let nodes = [];
70195
+ for (let nid in nodeIds) {
70196
+ let enid = nodeIds[nid];
70197
+ nodes.push(this.nodes[enid]);
70198
+ }
70199
+ let element = new Element(id, basis, nodes);
70200
+ this.elements[id] = element;
70201
+ for (let idx in element.nodes) {
70202
+ element.nodes[idx].elements.push(element);
70203
+ }
70204
+ }
70205
+ loadMesh(json) {
70206
+ for (let nid in json.nodes) {
70207
+ this.addNode(nid, json.nodes[nid]);
70208
+ }
70209
+ for (let eid in json.elements) {
70210
+ let elem = json.elements[eid];
70211
+ this.addElement(eid, elem.basis, elem.nodes);
70212
+ }
70213
+ }
70214
+ evaluate(elementId, xi) {
70215
+ let w = getWightsL3L3L3(xi);
70216
+ return evaluateElement(this.elements[elementId], w);
70217
+ }
70218
+ find(point, startingNodeId) {
70219
+ let pt = [point.x, point.y, point.z];
70220
+ let nodeMaterialPoints = this.getNodeMaterialPoints(startingNodeId);
70221
+ for (let i in nodeMaterialPoints) {
70222
+ let mpt = nodeMaterialPoints[i];
70223
+ let x = this.evaluate(mpt.elementId, mpt.xi);
70224
+ let r = calcDistance(x, pt);
70225
+ mpt.error = r;
70226
+ }
70227
+ let t0 = new Date().getTime();
70228
+ let n = 0;
70229
+ for (let step = 0; step < 10000; step++) {
70230
+ for (let i in nodeMaterialPoints) {
70231
+ let mpt = nodeMaterialPoints[i];
70232
+ let xi = perturbRandom(mpt.xi, 0.1);
70233
+ let x = this.evaluate(mpt.elementId, xi);
70234
+ let r = calcDistance(x, pt);
70235
+ if (r < mpt.error) {
70236
+ mpt.error = r;
70237
+ mpt.xi = xi;
70238
+ if (r < 1.0) {
70239
+ console.log("Time: (" +
70240
+ n +
70241
+ ") " +
70242
+ (new Date().getTime() - t0) +
70243
+ "ms Error: " +
70244
+ r);
70245
+ return mpt;
70246
+ }
70247
+ }
70248
+ }
70249
+ n = step;
70250
+ }
70251
+ let bestIndex = 0;
70252
+ let bestError = nodeMaterialPoints[0].error;
70253
+ for (let i in nodeMaterialPoints) {
70254
+ let mpt = nodeMaterialPoints[i];
70255
+ if (mpt.error < bestError) {
70256
+ bestIndex = Number(i);
70257
+ bestError = mpt.error;
70258
+ }
70259
+ }
70260
+ let mpt = nodeMaterialPoints[bestIndex];
70261
+ console.log("Time: (" +
70262
+ n +
70263
+ ") " +
70264
+ (new Date().getTime() - t0) +
70265
+ "ms Error: " +
70266
+ mpt.error);
70267
+ return mpt;
70268
+ }
70269
+ search(point, startingNodeId, tol) {
70270
+ let pt = [point.x, point.y, point.z];
70271
+ let nodeMaterialPoints = this.getNodeMaterialPoints(startingNodeId);
70272
+ for (let i in nodeMaterialPoints) {
70273
+ let mpt = nodeMaterialPoints[i];
70274
+ let x = this.evaluate(mpt.elementId, mpt.xi);
70275
+ mpt.error = calcDistance(x, pt);
70276
+ }
70277
+ let t0 = new Date().getTime();
70278
+ let xiStepSize = [0.1, 0.01, 0.001];
70279
+ for (let i in nodeMaterialPoints) {
70280
+ let mpt = nodeMaterialPoints[i];
70281
+ let numDims = mpt.xi.length;
70282
+ let nIter = 0;
70283
+ let go = true;
70284
+ while (go || nIter < 10) {
70285
+ let minErr = 1 * mpt.error;
70286
+ let minXi;
70287
+ for (let xiIdx in xiStepSize) {
70288
+ let dXi = xiStepSize[xiIdx];
70289
+ for (let dim = 0; dim < numDims; dim++) {
70290
+ let xi = mpt.xi.slice();
70291
+ xi[dim] += dXi;
70292
+ if (xi[dim] >= 0 && xi[dim] <= 1) {
70293
+ let x = this.evaluate(mpt.elementId, mpt.xi);
70294
+ let err = calcDistance(x, pt);
70295
+ if (err < minErr) {
70296
+ minErr = err;
70297
+ minXi = xi;
70298
+ if (err < tol) {
70299
+ mpt.error = err;
70300
+ mpt.xi = xi;
70301
+ console.log("Time 1: " +
70302
+ (new Date().getTime() - t0) +
70303
+ "ms Error: " +
70304
+ mpt.error);
70305
+ return mpt;
70306
+ }
70307
+ }
70308
+ }
70309
+ xi = mpt.xi.slice();
70310
+ xi[dim] -= dXi;
70311
+ if (xi[dim] >= 0 && xi[dim] <= 1) {
70312
+ let x = this.evaluate(mpt.elementId, mpt.xi);
70313
+ let err = calcDistance(x, pt);
70314
+ if (err < minErr) {
70315
+ minErr = err;
70316
+ minXi = xi;
70317
+ if (err < tol) {
70318
+ mpt.error = err;
70319
+ mpt.xi = xi;
70320
+ console.log("Time 2: " +
70321
+ (new Date().getTime() - t0) +
70322
+ "ms Error: " +
70323
+ mpt.error);
70324
+ return mpt;
70325
+ }
70326
+ }
70327
+ }
70328
+ }
70329
+ }
70330
+ if (minXi === null || minXi === undefined) {
70331
+ go = false;
70332
+ }
70333
+ else {
70334
+ mpt.xi = minXi;
70335
+ mpt.error = minErr;
70336
+ }
70337
+ nIter++;
70338
+ }
70339
+ }
70340
+ let bestIndex = 0;
70341
+ let bestError = nodeMaterialPoints[0].error;
70342
+ for (let i in nodeMaterialPoints) {
70343
+ let mpt = nodeMaterialPoints[i];
70344
+ if (mpt.error < bestError) {
70345
+ bestIndex = Number(i);
70346
+ bestError = mpt.error;
70347
+ }
70348
+ }
70349
+ let mpt = nodeMaterialPoints[bestIndex];
70350
+ console.log("Time 3: " + (new Date().getTime() - t0) + "ms Error: " + mpt.error);
70351
+ return mpt;
70352
+ }
70353
+ getNodeMaterialPoints(nodeId) {
70354
+ let materialPoints = [];
70355
+ let node = this.nodes[nodeId];
70356
+ for (let eid in node.elements) {
70357
+ let element = node.elements[eid];
70358
+ let nodeIdx = element.nodes.indexOf(node);
70359
+ let xi0 = (nodeIdx % 4) / 3;
70360
+ let xi1 = Math.floor((nodeIdx % 16) / 4) / 3;
70361
+ let xi2 = Math.floor(nodeIdx / 16) / 3;
70362
+ materialPoints.push({ elementId: element.id, xi: [xi0, xi1, xi2] });
70363
+ }
70364
+ return materialPoints;
70365
+ }
70366
+ }
70367
+ function evaluateElement(element, weights) {
70368
+ let x = [0, 0, 0];
70369
+ for (let f = 0; f < 3; f++) {
70370
+ for (let i = 0; i < weights.length; i++) {
70371
+ x[f] += weights[i] * element.nodes[i].p[f];
70372
+ }
70373
+ }
70374
+ return x;
70375
+ }
70376
+
70112
70377
  // import * as kiwrious from "copper3d_plugin_heart_k";
70113
- const REVISION = "v1.15.15";
70114
- console.log("%cCopper3D Visualisation %cBeta:v1.15.15", "padding: 3px;color:white; background:#023047", "padding: 3px;color:white; background:#f50a25");
70378
+ const REVISION = "v1.15.16";
70379
+ console.log("%cCopper3D Visualisation %cBeta:v1.15.16", "padding: 3px;color:white; background:#023047", "padding: 3px;color:white; background:#f50a25");
70115
70380
 
70116
70381
  exports.CameraViewPoint = CameraViewPoint;
70117
70382
  exports.Copper3dTrackballControls = Copper3dTrackballControls;
70383
+ exports.MeshNodeTool = MeshNodeTool;
70118
70384
  exports.REVISION = REVISION;
70119
70385
  exports.addBoxHelper = addBoxHelper;
70120
70386
  exports.addLabelToScene = addLabelToScene;
package/dist/index.d.ts CHANGED
@@ -14,8 +14,9 @@ import { configKiwriousHeart } from "./Utils/kiwrious/configKiwrious";
14
14
  import kiwrious from "./Utils/kiwrious/configKiwrious";
15
15
  import { nrrd_tools } from "./Utils/nrrd_tool";
16
16
  import { Copper3dTrackballControls } from "./Controls/Copper3dTrackballControls";
17
+ import { MeshNodeTool } from "./Utils/MeshNodeTool";
17
18
  import { nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, paintImageType, exportPaintImageType, IOptVTKLoader } from "./types/types";
18
19
  import "./css/style.css";
19
- export declare const REVISION = "v1.15.15";
20
- export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, nrrd_tools, loading, Copper3dTrackballControls, createTexture2D_NRRD, };
20
+ export declare const REVISION = "v1.15.16";
21
+ export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, nrrd_tools, loading, Copper3dTrackballControls, createTexture2D_NRRD, MeshNodeTool, };
21
22
  export type { positionType, screenPosType, optsType, nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, paintImageType, exportPaintImageType, IOptVTKLoader, };
package/dist/index.js CHANGED
@@ -15,8 +15,9 @@ import { configKiwriousHeart } from "./Utils/kiwrious/configKiwrious";
15
15
  import kiwrious from "./Utils/kiwrious/configKiwrious";
16
16
  import { nrrd_tools } from "./Utils/nrrd_tool";
17
17
  import { Copper3dTrackballControls } from "./Controls/Copper3dTrackballControls";
18
+ import { MeshNodeTool } from "./Utils/MeshNodeTool";
18
19
  import "./css/style.css";
19
- export const REVISION = "v1.15.15";
20
- console.log("%cCopper3D Visualisation %cBeta:v1.15.15", "padding: 3px;color:white; background:#023047", "padding: 3px;color:white; background:#f50a25");
21
- export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, nrrd_tools, loading, Copper3dTrackballControls, createTexture2D_NRRD, };
20
+ export const REVISION = "v1.15.16";
21
+ console.log("%cCopper3D Visualisation %cBeta:v1.15.16", "padding: 3px;color:white; background:#023047", "padding: 3px;color:white; background:#f50a25");
22
+ export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, nrrd_tools, loading, Copper3dTrackballControls, createTexture2D_NRRD, MeshNodeTool, };
22
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,eAAe,EAGf,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAY,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,sBAAsB,MAAM,mCAAmC,CAAC;AACvE,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,QAAQ,MAAM,iCAAiC,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAcjF,OAAO,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,OAAO,CAAC,GAAG,CACT,0CAA0C,EAC1C,8CAA8C,EAC9C,8CAA8C,CAC/C,CAAC;AAEF,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,UAAU,EACV,OAAO,EACP,yBAAyB,EACzB,oBAAoB,GACrB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,eAAe,EAGf,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAY,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,sBAAsB,MAAM,mCAAmC,CAAC;AACvE,OAAO,mBAAmB,MAAM,6BAA6B,CAAC;AAC9D,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,QAAQ,MAAM,iCAAiC,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAcpD,OAAO,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,OAAO,CAAC,GAAG,CACT,0CAA0C,EAC1C,8CAA8C,EAC9C,8CAA8C,CAC/C,CAAC;AAEF,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,UAAU,EACV,OAAO,EACP,yBAAyB,EACzB,oBAAoB,EACpB,YAAY,GACb,CAAC"}
@@ -0,0 +1,41 @@
1
+ import * as THREE from "three";
2
+ import { IMeshNodes } from "../types/types";
3
+ export declare class Node {
4
+ id: string;
5
+ p: number[];
6
+ elements: Array<Element>;
7
+ constructor(id: string, p: number[]);
8
+ }
9
+ export declare class Element {
10
+ id: string;
11
+ basis: string[];
12
+ nodes: Array<Node>;
13
+ constructor(id: string, basis: string[], nodes: Array<Node>);
14
+ }
15
+ export declare class MeshNodeTool {
16
+ nodes: {
17
+ [key: string]: Node;
18
+ };
19
+ elements: {
20
+ [key: string]: Element;
21
+ };
22
+ addNode(id: string, p: number[]): void;
23
+ addElement(id: string, basis: string[], nodeIds: string[]): void;
24
+ loadMesh(json: IMeshNodes): void;
25
+ evaluate(elementId: string, xi: number[]): number[];
26
+ find(point: THREE.Vector3, startingNodeId: string): {
27
+ [key: string]: any;
28
+ elementId: string;
29
+ xi: number[];
30
+ };
31
+ search(point: THREE.Vector3, startingNodeId: string, tol: number): {
32
+ [key: string]: any;
33
+ elementId: string;
34
+ xi: number[];
35
+ };
36
+ getNodeMaterialPoints(nodeId: string): {
37
+ [key: string]: any;
38
+ elementId: string;
39
+ xi: number[];
40
+ }[];
41
+ }
@@ -6,7 +6,30 @@ export declare function loading(): {
6
6
  progress: HTMLDivElement;
7
7
  };
8
8
  export declare function switchEraserSize(size: number, urls?: string[]): string;
9
- export declare function createFpsCap(loop: Function, fps?: number): {
10
- fps: number;
11
- loop: (_scope: any, time: number) => any;
12
- };
9
+ /**
10
+ * Cubic-Lagrange basis function
11
+ * @param x
12
+ * @returns
13
+ */
14
+ export declare function L3(x: number): number[];
15
+ /**
16
+ * Cubic-Hermite basis function.
17
+ * @param x
18
+ * @returns
19
+ */
20
+ export declare function H3(x: number): number[];
21
+ /**
22
+ * To calculate the weights for each element of Xi using the cubic Lagrange basis functions.
23
+ * @param Xi
24
+ * @returns
25
+ */
26
+ export declare function getWightsL3L3L3(Xi: number[]): number[];
27
+ export declare function getWightsH3H3H3(Xi: number[][]): number[][];
28
+ /**
29
+ * Euclidean distance n dimensions
30
+ * @param x0
31
+ * @param x1
32
+ * @returns
33
+ */
34
+ export declare function calcDistance(x0: number[], x1: number[]): number;
35
+ export declare function perturbRandom(x: number[], dx: number): number[];
@@ -14,8 +14,9 @@ import { configKiwriousHeart } from "./Utils/kiwrious/configKiwrious";
14
14
  import kiwrious from "./Utils/kiwrious/configKiwrious";
15
15
  import { nrrd_tools } from "./Utils/nrrd_tool";
16
16
  import { Copper3dTrackballControls } from "./Controls/Copper3dTrackballControls";
17
+ import { MeshNodeTool } from "./Utils/MeshNodeTool";
17
18
  import { nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, paintImageType, exportPaintImageType, IOptVTKLoader } from "./types/types";
18
19
  import "./css/style.css";
19
- export declare const REVISION = "v1.15.15";
20
- export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, nrrd_tools, loading, Copper3dTrackballControls, createTexture2D_NRRD, };
20
+ export declare const REVISION = "v1.15.16";
21
+ export { copperRenderer, copperRendererOnDemond, copperMSceneRenderer, setHDRFilePath, addLabelToScene, convert3DPostoScreenPos, convertScreenPosto3DPos, addBoxHelper, fullScreenListenner, configKiwriousHeart, copperScene, copperSceneOnDemond, copperMScene, CameraViewPoint, kiwrious, nrrd_tools, loading, Copper3dTrackballControls, createTexture2D_NRRD, MeshNodeTool, };
21
22
  export type { positionType, screenPosType, optsType, nrrdMeshesType, nrrdSliceType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, loadingBarType, paintImageType, exportPaintImageType, IOptVTKLoader, };
@@ -203,4 +203,17 @@ interface IOptVTKLoader {
203
203
  transparent?: boolean;
204
204
  opacity?: number;
205
205
  }
206
- export type { SceneMapType, ICopperRenderOpt, stateType, modelVisualisationDataType, preRenderCallbackFunctionType, baseStateType, nrrdMeshesType, nrrdSliceType, nrrdDragImageOptType, nrrdDrawImageOptType, loadingBarType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, SerialService_kiwrious, kiwriousType, mouseMovePositionType, positionType, paintImagesType, paintImageType, storedPaintImagesType, optionsGltfExporterType, vtkModels, undoType, copperVolumeType, dicomLoaderOptsType, skipSlicesDictType, exportPaintImagesType, exportPaintImageType, storeExportPaintImageType, IOptVTKLoader, ICopperSceneOpts, };
206
+ interface INodes {
207
+ [key: string]: number[];
208
+ }
209
+ interface IElements {
210
+ [key: string]: {
211
+ basis: string[];
212
+ nodes: string[];
213
+ };
214
+ }
215
+ interface IMeshNodes {
216
+ nodes: INodes;
217
+ elements: IElements;
218
+ }
219
+ export type { SceneMapType, ICopperRenderOpt, stateType, modelVisualisationDataType, preRenderCallbackFunctionType, baseStateType, nrrdMeshesType, nrrdSliceType, nrrdDragImageOptType, nrrdDrawImageOptType, loadingBarType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, SerialService_kiwrious, kiwriousType, mouseMovePositionType, positionType, paintImagesType, paintImageType, storedPaintImagesType, optionsGltfExporterType, vtkModels, undoType, copperVolumeType, dicomLoaderOptsType, skipSlicesDictType, exportPaintImagesType, exportPaintImageType, storeExportPaintImageType, IOptVTKLoader, ICopperSceneOpts, IMeshNodes, };
@@ -203,4 +203,17 @@ interface IOptVTKLoader {
203
203
  transparent?: boolean;
204
204
  opacity?: number;
205
205
  }
206
- export type { SceneMapType, ICopperRenderOpt, stateType, modelVisualisationDataType, preRenderCallbackFunctionType, baseStateType, nrrdMeshesType, nrrdSliceType, nrrdDragImageOptType, nrrdDrawImageOptType, loadingBarType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, SerialService_kiwrious, kiwriousType, mouseMovePositionType, positionType, paintImagesType, paintImageType, storedPaintImagesType, optionsGltfExporterType, vtkModels, undoType, copperVolumeType, dicomLoaderOptsType, skipSlicesDictType, exportPaintImagesType, exportPaintImageType, storeExportPaintImageType, IOptVTKLoader, ICopperSceneOpts, };
206
+ interface INodes {
207
+ [key: string]: number[];
208
+ }
209
+ interface IElements {
210
+ [key: string]: {
211
+ basis: string[];
212
+ nodes: string[];
213
+ };
214
+ }
215
+ interface IMeshNodes {
216
+ nodes: INodes;
217
+ elements: IElements;
218
+ }
219
+ export type { SceneMapType, ICopperRenderOpt, stateType, modelVisualisationDataType, preRenderCallbackFunctionType, baseStateType, nrrdMeshesType, nrrdSliceType, nrrdDragImageOptType, nrrdDrawImageOptType, loadingBarType, SensorDecodedValue_kiwrious, SensorReadResult_kiwrious, HeartRateResult_kiwrious, SerialService_kiwrious, kiwriousType, mouseMovePositionType, positionType, paintImagesType, paintImageType, storedPaintImagesType, optionsGltfExporterType, vtkModels, undoType, copperVolumeType, dicomLoaderOptsType, skipSlicesDictType, exportPaintImagesType, exportPaintImageType, storeExportPaintImageType, IOptVTKLoader, ICopperSceneOpts, IMeshNodes, };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "copper3d",
3
3
  "description": "A 3d visualisation package base on threejs provides multiple scenes and Nrrd image load funtion.",
4
- "version": "1.15.15",
4
+ "version": "1.15.16",
5
5
  "main": "dist/bundle.umd.js",
6
6
  "moudle": "dist/bundle.esm.js",
7
7
  "types": "dist/types/index.d.ts",