xl-public-utils 1.0.23 → 1.0.24
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/index.d.ts +6 -125
- package/package.json +1 -5
- package/src/drcUtils.js +1 -2
- package/src/threeFont/index.js +0 -2
- package/src/vtkUtils.js +3 -221
- package/types/drcUtils.d.ts +3 -4
- package/types/exportPLY.d.ts +1 -2
- package/types/exportSTL.d.ts +2 -3
- package/types/vtkUtils.d.ts +5 -70
package/index.d.ts
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData";
|
|
2
|
-
import vtkRenderer from "@kitware/vtk.js/Rendering/Core/Renderer";
|
|
3
1
|
import { mat3, mat4, vec3 } from "gl-matrix";
|
|
4
|
-
import vtkInteractorStyleManipulator from "@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator.js"
|
|
5
|
-
import vtkRenderWindowInteractor from "@kitware/vtk.js/Rendering/Core/RenderWindowInteractor.js";
|
|
6
|
-
import { TypedArray } from "@kitware/vtk.js/types";
|
|
7
2
|
|
|
8
3
|
declare module "xl-public-utils" {
|
|
9
4
|
|
|
@@ -68,34 +63,6 @@ declare module "xl-public-utils" {
|
|
|
68
63
|
}
|
|
69
64
|
|
|
70
65
|
export namespace vtkUtils {
|
|
71
|
-
/**
|
|
72
|
-
* 计算屏幕坐标到三维坐标
|
|
73
|
-
* @param {vtkRenderer} renderer vtkRenderer
|
|
74
|
-
* @param {number} x display x position
|
|
75
|
-
* @param {number} y display y position
|
|
76
|
-
* @param {number} z display z position
|
|
77
|
-
* @returns {[number, number, number]} 三维坐标
|
|
78
|
-
*/
|
|
79
|
-
export function computeDisplayToWorld(
|
|
80
|
-
renderer: vtkRenderer,
|
|
81
|
-
x: number,
|
|
82
|
-
y: number,
|
|
83
|
-
z: number
|
|
84
|
-
): [number, number, number];
|
|
85
|
-
/**
|
|
86
|
-
* 计算三维坐标到屏幕坐标
|
|
87
|
-
* @param {vtkRenderer} renderer vtkRenderer
|
|
88
|
-
* @param {number} x 三维坐标 x值
|
|
89
|
-
* @param {number} y 三维坐标 y值
|
|
90
|
-
* @param {number} z 三维坐标 z值
|
|
91
|
-
* @returns {[number, number, number]} 屏幕坐标
|
|
92
|
-
*/
|
|
93
|
-
export function computeWorldToDisplay(
|
|
94
|
-
renderer: vtkRenderer,
|
|
95
|
-
x: number,
|
|
96
|
-
y: number,
|
|
97
|
-
z: number
|
|
98
|
-
): [number, number, number];
|
|
99
66
|
/**
|
|
100
67
|
* 计算 w2l(word 2 local, word to local) 的变换矩阵
|
|
101
68
|
* @param {vec3} center 中心点
|
|
@@ -124,29 +91,6 @@ declare module "xl-public-utils" {
|
|
|
124
91
|
yaxis: vec3,
|
|
125
92
|
zaxis: vec3
|
|
126
93
|
): mat4;
|
|
127
|
-
/**
|
|
128
|
-
* 返回交互的interactorStyle
|
|
129
|
-
* @returns {vtkInteractorStyleManipulator} 交互的interactorStyle
|
|
130
|
-
*/
|
|
131
|
-
export function make3DInteractorStyle(): vtkInteractorStyleManipulator;
|
|
132
|
-
/**
|
|
133
|
-
* 移除并返回当前renderWindow的所有鼠标交互设定
|
|
134
|
-
* @param {vtkRenderWindowInteractor} interactor vtkRenderWindowInteractor
|
|
135
|
-
* @returns {any[]} 当前鼠标的所有交互Manipulators
|
|
136
|
-
*/
|
|
137
|
-
export function removeMouseInteraction(
|
|
138
|
-
interactor: vtkRenderWindowInteractor
|
|
139
|
-
): any[];
|
|
140
|
-
/**
|
|
141
|
-
* 给当前窗口设置交互Maintainers
|
|
142
|
-
* @param {vtkRenderWindowInteractor} interactor vtkRenderWindowInteractor
|
|
143
|
-
* @param {any[]} mm 所有的交互Maintainers
|
|
144
|
-
* @returns {void}
|
|
145
|
-
*/
|
|
146
|
-
export function resetAllMouseMaintainers(
|
|
147
|
-
interactor: vtkRenderWindowInteractor,
|
|
148
|
-
mm: any[]
|
|
149
|
-
): void;
|
|
150
94
|
/**
|
|
151
95
|
* 将点投影到平面上
|
|
152
96
|
* @param {vec3} point 需要投影的点
|
|
@@ -242,12 +186,6 @@ declare module "xl-public-utils" {
|
|
|
242
186
|
origin: vec3,
|
|
243
187
|
normal: vec3
|
|
244
188
|
): number;
|
|
245
|
-
/**
|
|
246
|
-
* 对一个polydata应用矩阵变化,直接改变点位置
|
|
247
|
-
* @param {mat4} mt4 变换矩阵
|
|
248
|
-
* @param {vtkPolyData} data 需要应用变换的polydata
|
|
249
|
-
*/
|
|
250
|
-
export function pointsApplyMat4(mt4: mat4, data: vtkPolyData): void;
|
|
251
189
|
/**
|
|
252
190
|
* 对一个polydata应用矩阵变化,直接改变点位置
|
|
253
191
|
* @param {mat4} mt4 变换矩阵
|
|
@@ -275,7 +213,7 @@ declare module "xl-public-utils" {
|
|
|
275
213
|
* @returns {Blob} 网格的ply文件Blob
|
|
276
214
|
*/
|
|
277
215
|
export function createPlyBlob(
|
|
278
|
-
mesh:
|
|
216
|
+
mesh: any,
|
|
279
217
|
format?: "ascii" | "binary"
|
|
280
218
|
): Blob;
|
|
281
219
|
/**
|
|
@@ -283,7 +221,7 @@ declare module "xl-public-utils" {
|
|
|
283
221
|
* @param {vtkPolyData} mesh 网格polydata
|
|
284
222
|
* @returns {Blob} 网格的BinarySTL文件Blob
|
|
285
223
|
*/
|
|
286
|
-
export function createStlBlob(mesh:
|
|
224
|
+
export function createStlBlob(mesh: any): Blob;
|
|
287
225
|
/**
|
|
288
226
|
* 将网格压缩为drc文件,导出drc需要先加载draco_encode.js,并调用initDrcCoder初始化
|
|
289
227
|
* @param {vtkPolyData} mesh 网格文件
|
|
@@ -291,7 +229,7 @@ declare module "xl-public-utils" {
|
|
|
291
229
|
* @returns {Blob} drc文件
|
|
292
230
|
*/
|
|
293
231
|
export function createDrcBlob(
|
|
294
|
-
mesh:
|
|
232
|
+
mesh: any,
|
|
295
233
|
byteLength?: number
|
|
296
234
|
): Blob;
|
|
297
235
|
/**
|
|
@@ -311,7 +249,7 @@ declare module "xl-public-utils" {
|
|
|
311
249
|
* @returns {Blob} 对应类型的Blob
|
|
312
250
|
*/
|
|
313
251
|
export function createMeshTypeBlob(
|
|
314
|
-
mesh:
|
|
252
|
+
mesh: any,
|
|
315
253
|
type: "ply" | "stl" | "drc"
|
|
316
254
|
): Blob;
|
|
317
255
|
/**
|
|
@@ -392,14 +330,6 @@ declare module "xl-public-utils" {
|
|
|
392
330
|
yangle: number,
|
|
393
331
|
zangle: number
|
|
394
332
|
): mat3;
|
|
395
|
-
/**
|
|
396
|
-
* 将polyData转换为Base64string
|
|
397
|
-
* @param {vtkPolyData} mesh 网格数据
|
|
398
|
-
* @param {mat4} [matrix] 变换矩阵
|
|
399
|
-
* @param {number} byteLength=14 压缩率
|
|
400
|
-
* @returns {string} drc压缩之后的网格base64
|
|
401
|
-
*/
|
|
402
|
-
export function enCodeMeshToBase64(mesh: vtkPolyData,matrix?: mat4,byteLength?: number): string;
|
|
403
333
|
/**
|
|
404
334
|
* 将polyData转换为Base64string
|
|
405
335
|
* @param {Mesh} mesh 网格数据
|
|
@@ -470,12 +400,6 @@ declare module "xl-public-utils" {
|
|
|
470
400
|
yaxis: vec3,
|
|
471
401
|
zaxis: vec3
|
|
472
402
|
): mat4;
|
|
473
|
-
/**
|
|
474
|
-
* vtkPolyData的顶点去重 用于3倍顶点的stl和老版本的vtkMarchingCube
|
|
475
|
-
* @param {vtkPolyData} data 网格的vtkPolyData
|
|
476
|
-
* @returns {vtkPolyData} 去重之后的vtkPolyData
|
|
477
|
-
*/
|
|
478
|
-
export function deduplicatePolyData(data: vtkPolyData): vtkPolyData;
|
|
479
403
|
/**
|
|
480
404
|
* 顶点去重,用于 STL
|
|
481
405
|
* @param {Float32Array} vertices 输入顶点数组 [x,y,z, x,y,z, ...]
|
|
@@ -483,31 +407,13 @@ declare module "xl-public-utils" {
|
|
|
483
407
|
* @param {number} [precision=1e-10] 精度,用于判断顶点相等(默认 1e-10)
|
|
484
408
|
* @returns {{ vertices: Float32Array, faces: Int32Array }} 去重后的网格数据
|
|
485
409
|
*/
|
|
486
|
-
export function deduplicateVF(vertices: Float32Array | number[], faces: Int32Array | number[], precision
|
|
410
|
+
export function deduplicateVF(vertices: Float32Array | number[], faces: Int32Array | number[], precision?: number): { vertices: Float32Array, faces: Int32Array };
|
|
487
411
|
/**
|
|
488
412
|
* 判断一个矩阵是否是正交矩阵
|
|
489
413
|
* @param {mat4} matrix 矩阵
|
|
490
414
|
* @returns {boolean} 是否是正交矩阵
|
|
491
415
|
*/
|
|
492
416
|
export function isRotationMatrix(matrix: mat4): boolean;
|
|
493
|
-
/**
|
|
494
|
-
* 将vtkPolyData进行三角化
|
|
495
|
-
* @param {vtkPolyData} _polydata 需要三角化的vtkPolydata
|
|
496
|
-
* @returns {vtkPolyData} 三角化之后的vtkPolydata
|
|
497
|
-
*/
|
|
498
|
-
export function trianglePolys(_polydata: vtkPolyData): vtkPolyData;
|
|
499
|
-
/**
|
|
500
|
-
* 加载网格
|
|
501
|
-
* @param {string | File | Blob} file 文件或者文件链接
|
|
502
|
-
* @param {'drc' | 'stl' | 'ply'} [type] 文件类型,当file为string | File的时候可以不传根据文件后缀自动获取,drc需要先进行初始化
|
|
503
|
-
* @param {boolean} [process] 是否需要预先对数据进行处理,stl默认(去重)
|
|
504
|
-
* @returns {Promise<vtkPolyData>} vtkPolyData
|
|
505
|
-
*/
|
|
506
|
-
export function loadMeshData(
|
|
507
|
-
file: string | File | Blob,
|
|
508
|
-
type?: "drc" | "stl" | "ply",
|
|
509
|
-
process?: boolean
|
|
510
|
-
): Promise<vtkPolyData>;
|
|
511
417
|
/**
|
|
512
418
|
* @typedef Plane
|
|
513
419
|
* @property {vec3} origin 对应vtk坐标系的x值
|
|
@@ -560,19 +466,6 @@ declare module "xl-public-utils" {
|
|
|
560
466
|
*/
|
|
561
467
|
normal: vec3;
|
|
562
468
|
};
|
|
563
|
-
/**
|
|
564
|
-
* 复制一个polydata,只复制点和面的数据
|
|
565
|
-
* @param {vtkPolyData} originalPolyData 原始的polydata
|
|
566
|
-
* @returns {vtkPolyData} 新的polydata
|
|
567
|
-
*/
|
|
568
|
-
export function clonePolyData(originalPolyData: vtkPolyData): vtkPolyData;
|
|
569
|
-
/**
|
|
570
|
-
* 根据点和面创建一个vtkPolydata
|
|
571
|
-
* @param {number[] | TypedArray} verts
|
|
572
|
-
* @param {number[] | TypedArray} faces
|
|
573
|
-
* @returns { vtkPolyData } 生成出来的vtkPolydata
|
|
574
|
-
*/
|
|
575
|
-
export function createPolyData(verts: number[] | TypedArray, faces: number[] | TypedArray): vtkPolyData
|
|
576
469
|
}
|
|
577
470
|
export namespace drcUtils {
|
|
578
471
|
export type AttrOption = {
|
|
@@ -688,18 +581,6 @@ declare module "xl-public-utils" {
|
|
|
688
581
|
* @property {number[][] | vec3[]} vertices 点信息
|
|
689
582
|
* @property {number[][] | vec3[]} faces 面信息
|
|
690
583
|
*/
|
|
691
|
-
/**
|
|
692
|
-
* 使用drc压缩网格信息
|
|
693
|
-
* @param {vtkPolyData} mesh
|
|
694
|
-
* @param {number} byteLength=14 压缩率
|
|
695
|
-
* @param {AttrOption} [attr] 其他需要压缩的属性
|
|
696
|
-
* @returns {Int8Array} 压缩之后的DRC数据
|
|
697
|
-
*/
|
|
698
|
-
export function enCodeMesh(
|
|
699
|
-
mesh: vtkPolyData,
|
|
700
|
-
byteLength?: number,
|
|
701
|
-
attr?: AttrOption
|
|
702
|
-
): Int8Array;
|
|
703
584
|
/**
|
|
704
585
|
* 使用drc压缩网格信息
|
|
705
586
|
* @param {Mesh} mesh
|
|
@@ -1056,7 +937,7 @@ declare module "xl-public-utils" {
|
|
|
1056
937
|
private constructor(); // 使用单例模式
|
|
1057
938
|
static Mgr(): FontManager;
|
|
1058
939
|
|
|
1059
|
-
private cacheFontMap: Record<string,
|
|
940
|
+
private cacheFontMap: Record<string, {vertices: ArrayLike<number>, faces: ArrayLike<number>}>;
|
|
1060
941
|
private cacheFontPointMap: Record<string, IndexData>;
|
|
1061
942
|
private fontJsonMap: Record<string, any>;
|
|
1062
943
|
private parameters: FontParameters & { font: Record<string, any> };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xl-public-utils",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "index.js",
|
|
@@ -14,13 +14,9 @@
|
|
|
14
14
|
"tsconfig.json"
|
|
15
15
|
],
|
|
16
16
|
"peerDependencies": {
|
|
17
|
-
"@kitware/vtk.js": ">=25.7.2",
|
|
18
17
|
"gl-matrix": ">=3.4.3"
|
|
19
18
|
},
|
|
20
19
|
"peerDependenciesMeta": {
|
|
21
|
-
"@kitware/vtk.js": {
|
|
22
|
-
"optional": true
|
|
23
|
-
},
|
|
24
20
|
"gl-matrix": {
|
|
25
21
|
"optional": true
|
|
26
22
|
}
|
package/src/drcUtils.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { vec3 } from "gl-matrix";
|
|
2
2
|
import { int8ArrayToBase64 } from './utils.js'
|
|
3
|
-
import vtkDracoReader from "@kitware/vtk.js/IO/Geometry/DracoReader";
|
|
4
3
|
/**
|
|
5
4
|
* @typedef {Object} AttrOption
|
|
6
5
|
* @property {number[]} [colors] 颜色数组
|
|
@@ -349,7 +348,7 @@ export function initDrcCoder() {
|
|
|
349
348
|
return res;
|
|
350
349
|
}
|
|
351
350
|
// show.value = true;
|
|
352
|
-
vtkDracoReader.setDracoDecoder(a);
|
|
351
|
+
// vtkDracoReader.setDracoDecoder(a);
|
|
353
352
|
});
|
|
354
353
|
clearInterval(timerDecoder);
|
|
355
354
|
}
|
package/src/threeFont/index.js
CHANGED
|
@@ -2,10 +2,8 @@ import { Font } from './TextGeometry/FontLoader.js';
|
|
|
2
2
|
import { ExtrudeGeometry } from './TextGeometry/ExtrudeGeometry.js';
|
|
3
3
|
import { mat4, vec3 } from 'gl-matrix';
|
|
4
4
|
|
|
5
|
-
import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData.js';
|
|
6
5
|
|
|
7
6
|
import {
|
|
8
|
-
clonePolyData,
|
|
9
7
|
deduplicateVF,
|
|
10
8
|
verticesApplyMat4
|
|
11
9
|
} from '../vtkUtils.js';
|
package/src/vtkUtils.js
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
|
-
import vtkRenderer from "@kitware/vtk.js/Rendering/Core/Renderer.js";
|
|
2
|
-
import vtkRenderWindowInteractor from "@kitware/vtk.js/Rendering/Core/RenderWindowInteractor.js";
|
|
3
|
-
import vtkMatrixBuilder from "@kitware/vtk.js/Common/Core/MatrixBuilder.js";
|
|
4
|
-
import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData.js";
|
|
5
|
-
import vtkPLYReader from '@kitware/vtk.js/IO/Geometry/PLYReader';
|
|
6
|
-
import vtkSTLReader from '@kitware/vtk.js/IO/Geometry/STLReader';
|
|
7
|
-
import vtkDracoReader from '@kitware/vtk.js/IO/Geometry/DracoReader';
|
|
8
|
-
import vtkTriangleFilter from "@kitware/vtk.js/Filters/General/TriangleFilter";
|
|
9
|
-
import vtkPoints from '@kitware/vtk.js/Common/Core/Points';
|
|
10
|
-
import vtkCellArray from '@kitware/vtk.js/Common/Core/CellArray';
|
|
11
|
-
import vtkAppendPolyData from '@kitware/vtk.js/Filters/General/AppendPolyData';
|
|
12
1
|
import { vec3, mat4, mat3, quat } from 'gl-matrix';
|
|
13
2
|
import { exportBinarySTL } from './exportSTL.js';
|
|
14
3
|
import { writePLY } from "./exportPLY.js";
|
|
15
4
|
import { enCodeMesh } from './drcUtils.js';
|
|
16
|
-
import {
|
|
5
|
+
import { int8ArrayToBase64 } from "./utils.js";
|
|
17
6
|
/**
|
|
18
7
|
* 计算屏幕坐标到三维坐标
|
|
19
8
|
* @param {vtkRenderer} renderer vtkRenderer
|
|
@@ -348,19 +337,6 @@ export function getPointToPlaneDist(point, origin, normal) { // 如果法向量
|
|
|
348
337
|
}
|
|
349
338
|
|
|
350
339
|
|
|
351
|
-
/**
|
|
352
|
-
* 对一个polydata应用矩阵变化,直接改变点位置
|
|
353
|
-
* @param {mat4} mt4 变换矩阵
|
|
354
|
-
* @param {vtkPolyData} data 需要应用变换的polydata
|
|
355
|
-
*/
|
|
356
|
-
|
|
357
|
-
export function pointsApplyMat4(mt4, data) {
|
|
358
|
-
vtkMatrixBuilder
|
|
359
|
-
.buildFromDegree()
|
|
360
|
-
.multiply(mt4)
|
|
361
|
-
.apply(data.getPoints().getData());
|
|
362
|
-
}
|
|
363
|
-
|
|
364
340
|
/**
|
|
365
341
|
* 对点集合应用 4x4 变换矩阵
|
|
366
342
|
* @param {mat4} mt4 变换矩阵
|
|
@@ -471,65 +447,6 @@ export function createMeshTypeBlob(
|
|
|
471
447
|
}
|
|
472
448
|
}
|
|
473
449
|
|
|
474
|
-
|
|
475
|
-
/**
|
|
476
|
-
* vtkPolyData的顶点去重 用于3倍顶点的stl和老版本的vtkMarchingCube
|
|
477
|
-
* @param {vtkPolyData} data 网格的vtkPolyData
|
|
478
|
-
* @returns {vtkPolyData} 去重之后的vtkPolyData
|
|
479
|
-
*/
|
|
480
|
-
export function deduplicatePolyData(data) {
|
|
481
|
-
const OFFSET_BOUNDS = 10;
|
|
482
|
-
const vMap = new Map();
|
|
483
|
-
const vIndexMap = new Map();
|
|
484
|
-
const cMap = new Map();
|
|
485
|
-
const vertices = data.getPoints().getData();
|
|
486
|
-
const hasColorInfo = !!data.getPointData().getScalars();
|
|
487
|
-
const colors = hasColorInfo
|
|
488
|
-
? data.getPointData().getScalars().getData()
|
|
489
|
-
: new Uint8Array(vertices.length);
|
|
490
|
-
let vInc = 0; // 顶点新索引
|
|
491
|
-
// 更新顶点map:vMap和顶点映射map:vIndexMap
|
|
492
|
-
for (let i = 0; i < vertices.length; i += 3) {
|
|
493
|
-
// const key: string = `${vertices[i]},${vertices[i + 1]},${vertices[i + 2]}`
|
|
494
|
-
const key = `${(vertices[i] * Math.pow(10, OFFSET_BOUNDS)).toFixed(
|
|
495
|
-
0
|
|
496
|
-
)},${(vertices[i + 1] * Math.pow(10, OFFSET_BOUNDS)).toFixed(0)},${(
|
|
497
|
-
vertices[i + 2] * Math.pow(10, OFFSET_BOUNDS)
|
|
498
|
-
).toFixed(0)}`;
|
|
499
|
-
if (vMap.get(key) !== undefined) {
|
|
500
|
-
vIndexMap.set(i / 3, vMap.get(key));
|
|
501
|
-
} else {
|
|
502
|
-
vIndexMap.set(i / 3, vInc);
|
|
503
|
-
hasColorInfo && cMap.set(vInc, [colors[i], colors[i + 1], colors[i + 2]]);
|
|
504
|
-
vMap.set(key, vInc);
|
|
505
|
-
vInc++;
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
const tVertices = new Float32Array(vMap.size * 3);
|
|
509
|
-
const tColors = new Uint8Array(vMap.size * 3).fill(255);
|
|
510
|
-
|
|
511
|
-
for (let k of vMap.keys()) {
|
|
512
|
-
const j = vMap.get(k) * 3;
|
|
513
|
-
[tVertices[j], tVertices[j + 1], tVertices[j + 2]] = k
|
|
514
|
-
.split(",")
|
|
515
|
-
.map((e) => +e * Math.pow(10, -OFFSET_BOUNDS));
|
|
516
|
-
const t = cMap.get(vMap.get(k));
|
|
517
|
-
hasColorInfo && ([tColors[j], tColors[j + 1], tColors[j + 2]] = t);
|
|
518
|
-
}
|
|
519
|
-
const faces = data.getPolys().getData();
|
|
520
|
-
const tFaces = new Int32Array(faces);
|
|
521
|
-
for (let i = 0; i < faces.length; i += 4) {
|
|
522
|
-
tFaces[i] = 3;
|
|
523
|
-
tFaces[i + 1] = vIndexMap.get(faces[i + 1]);
|
|
524
|
-
tFaces[i + 2] = vIndexMap.get(faces[i + 2]);
|
|
525
|
-
tFaces[i + 3] = vIndexMap.get(faces[i + 3]);
|
|
526
|
-
}
|
|
527
|
-
const p = vtkPolyData.newInstance();
|
|
528
|
-
p.getPoints().setData(tVertices);
|
|
529
|
-
p.getPolys().setData(tFaces);
|
|
530
|
-
return p;
|
|
531
|
-
};
|
|
532
|
-
|
|
533
450
|
/**
|
|
534
451
|
* 顶点去重,用于 STL
|
|
535
452
|
* @param {Float32Array} vertices 输入顶点数组 [x,y,z, x,y,z, ...]
|
|
@@ -768,21 +685,13 @@ export function convEular2matrixZYX(rmat, xangle, yangle, zangle) {
|
|
|
768
685
|
|
|
769
686
|
/**
|
|
770
687
|
* 将polyData转换为Base64string
|
|
771
|
-
* @param {
|
|
688
|
+
* @param {Mesh} mesh 网格数据
|
|
772
689
|
* @param {mat4} [matrix] 变换矩阵
|
|
773
690
|
* @param {number} byteLength=14 压缩率
|
|
774
691
|
* @returns {string} drc压缩之后的网格base64
|
|
775
692
|
*/
|
|
776
693
|
export function enCodeMeshToBase64(mesh, matrix = undefined, byteLength = 14) {
|
|
777
|
-
|
|
778
|
-
const encodePolydata = vtkPolyData.newInstance();
|
|
779
|
-
encodePolydata.getPoints().setData([...mesh.getPoints().getData()]);
|
|
780
|
-
encodePolydata.getPolys().setData([...mesh.getPolys().getData()]);
|
|
781
|
-
pointsApplyMat4(matrix, encodePolydata);
|
|
782
|
-
return int8ArrayToBase64(enCodeMesh(encodePolydata, byteLength))
|
|
783
|
-
} else {
|
|
784
|
-
return int8ArrayToBase64(enCodeMesh(mesh, byteLength))
|
|
785
|
-
}
|
|
694
|
+
return int8ArrayToBase64(enCodeMesh(mesh, byteLength))
|
|
786
695
|
}
|
|
787
696
|
|
|
788
697
|
/**
|
|
@@ -903,74 +812,6 @@ export function isRotationMatrix(matrix) {
|
|
|
903
812
|
return true;
|
|
904
813
|
}
|
|
905
814
|
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
/**
|
|
909
|
-
* 将vtkPolyData进行三角化
|
|
910
|
-
* @param {vtkPolyData} polydata 需要三角化的vtkPolydata
|
|
911
|
-
* @returns {vtkPolyData} 三角化之后的vtkPolydata
|
|
912
|
-
*/
|
|
913
|
-
export function trianglePolys(polydata) {
|
|
914
|
-
const triangleFilter = vtkTriangleFilter.newInstance();
|
|
915
|
-
triangleFilter.setInputData(polydata);
|
|
916
|
-
return triangleFilter.getOutputData();
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
/**
|
|
921
|
-
* 加载网格
|
|
922
|
-
* @param {string | File | Blob} file 文件或者文件链接
|
|
923
|
-
* @param {'drc' | 'stl' | 'ply'} [type] 文件类型,当file为string | File的时候可以不传根据文件后缀自动获取,drc需要先进行初始化
|
|
924
|
-
* @param {boolean} [process] 是否需要预先对数据进行处理,stl默认(去重)
|
|
925
|
-
* @returns {Promise<vtkPolyData>} vtkPolyData
|
|
926
|
-
*/
|
|
927
|
-
export async function loadMeshData(file, type = undefined, process = undefined) {
|
|
928
|
-
let _fileBuffer;
|
|
929
|
-
if(typeof file === 'string') {
|
|
930
|
-
type = getFileExtension(file);
|
|
931
|
-
const _file = await fetch(file)
|
|
932
|
-
_fileBuffer = await _file.arrayBuffer()
|
|
933
|
-
} else if(file instanceof Blob && type !== undefined) {
|
|
934
|
-
_fileBuffer = await file.arrayBuffer();
|
|
935
|
-
} else if(file instanceof File) {
|
|
936
|
-
_fileBuffer = await file.arrayBuffer();
|
|
937
|
-
if(!type) {
|
|
938
|
-
type = getFileExtension(file.name);
|
|
939
|
-
}
|
|
940
|
-
} else {
|
|
941
|
-
throw('error: file type error')
|
|
942
|
-
}
|
|
943
|
-
/** @type {vtkPLYReader | vtkSTLReader | vtkDracoReader} */
|
|
944
|
-
let reader;
|
|
945
|
-
switch (type) {
|
|
946
|
-
case 'ply':
|
|
947
|
-
reader = vtkPLYReader.newInstance();
|
|
948
|
-
if(process === undefined) {
|
|
949
|
-
process = false;
|
|
950
|
-
}
|
|
951
|
-
break;
|
|
952
|
-
case 'stl':
|
|
953
|
-
reader = vtkSTLReader.newInstance();
|
|
954
|
-
if(process === undefined) {
|
|
955
|
-
process = true;
|
|
956
|
-
}
|
|
957
|
-
break;
|
|
958
|
-
case 'drc':
|
|
959
|
-
reader = vtkDracoReader.newInstance();
|
|
960
|
-
break;
|
|
961
|
-
default:
|
|
962
|
-
throw('error: file type error')
|
|
963
|
-
}
|
|
964
|
-
reader.parseAsArrayBuffer(_fileBuffer);
|
|
965
|
-
let polyData = reader.getOutputData();
|
|
966
|
-
if(process) {
|
|
967
|
-
if(type === 'stl') {
|
|
968
|
-
return deduplicatePolyData(polyData);
|
|
969
|
-
}
|
|
970
|
-
}
|
|
971
|
-
return polyData;
|
|
972
|
-
}
|
|
973
|
-
|
|
974
815
|
/**
|
|
975
816
|
* @typedef Plane
|
|
976
817
|
* @property {vec3} origin 对应vtk坐标系的x值
|
|
@@ -1064,65 +905,6 @@ export function getCurvePointIndexByLength(points, dist, absDist = true) {
|
|
|
1064
905
|
const targetIndex = targetDistanceSubs.findIndex(i => i === minSub)
|
|
1065
906
|
return targetIndex;
|
|
1066
907
|
}
|
|
1067
|
-
|
|
1068
|
-
/**
|
|
1069
|
-
* 复制一个polydata,只复制点和面的数据
|
|
1070
|
-
* @param {vtkPolyData} originalPolyData 原始的polydata
|
|
1071
|
-
* @returns {vtkPolyData} 新的polydata
|
|
1072
|
-
*/
|
|
1073
|
-
export function clonePolyData(originalPolyData) {
|
|
1074
|
-
// 创建深拷贝的 PolyData 对象
|
|
1075
|
-
const clonedPolyData = vtkPolyData.newInstance();
|
|
1076
|
-
// 复制顶点数据
|
|
1077
|
-
const originalPoints = originalPolyData.getPoints().getData();
|
|
1078
|
-
clonedPolyData.getPoints().setData([...originalPoints]);
|
|
1079
|
-
// 复制单元数据
|
|
1080
|
-
const originalCells = originalPolyData.getPolys().getData();
|
|
1081
|
-
clonedPolyData.getPolys().setData([...originalCells]);
|
|
1082
|
-
return clonedPolyData;
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
/**
|
|
1086
|
-
* 根据点和面创建一个vtkPolydata
|
|
1087
|
-
* @param {number[] | TypedArray} verts
|
|
1088
|
-
* @param {number[] | TypedArray} faces
|
|
1089
|
-
* @returns { vtkPolyData } 生成出来的vtkPolydata
|
|
1090
|
-
*/
|
|
1091
|
-
export function createPolyData(verts, faces) {
|
|
1092
|
-
let values_v = Object.values(verts);
|
|
1093
|
-
let values_f = Object.values(faces);
|
|
1094
|
-
let _verts = [];
|
|
1095
|
-
let _faces = [];
|
|
1096
|
-
values_v.forEach((v) => _verts.push(parseFloat(v)));
|
|
1097
|
-
values_f.forEach((f) => _faces.push(parseInt(f)));
|
|
1098
|
-
|
|
1099
|
-
const vpoints = vtkPoints.newInstance();
|
|
1100
|
-
const cellArray = vtkCellArray.newInstance();
|
|
1101
|
-
|
|
1102
|
-
vpoints.setData(_verts, 3);
|
|
1103
|
-
cellArray.setNumberOfComponents(4);
|
|
1104
|
-
cellArray.setData(_faces);
|
|
1105
|
-
|
|
1106
|
-
const polyData = vtkPolyData.newInstance();
|
|
1107
|
-
polyData.setPoints(vpoints);
|
|
1108
|
-
polyData.setPolys(cellArray);
|
|
1109
|
-
return polyData;
|
|
1110
|
-
}
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
/**
|
|
1114
|
-
* 合并多个polydata
|
|
1115
|
-
* @param {vtkPolyData[]} params 多个polyData
|
|
1116
|
-
* @returns { vtkPolyData } 合并之后的polydata
|
|
1117
|
-
*/
|
|
1118
|
-
export function mergePolyData(params) {
|
|
1119
|
-
const appendPolyData = vtkAppendPolyData.newInstance();
|
|
1120
|
-
params.forEach(data => {
|
|
1121
|
-
appendPolyData.addInputData(data);
|
|
1122
|
-
});
|
|
1123
|
-
return appendPolyData.getOutputData();
|
|
1124
|
-
}
|
|
1125
|
-
|
|
1126
908
|
/**
|
|
1127
909
|
* 合并多个 mesh
|
|
1128
910
|
* @param {Array<{ vertices: Float32Array, faces: Uint32Array }>} meshes
|
package/types/drcUtils.d.ts
CHANGED
|
@@ -68,12 +68,12 @@ export function enCloudPointTobase64(points: vec3[] | number[]): string;
|
|
|
68
68
|
*/
|
|
69
69
|
/**
|
|
70
70
|
* 使用drc压缩网格信息
|
|
71
|
-
* @param {Mesh
|
|
71
|
+
* @param {Mesh} mesh
|
|
72
72
|
* @param {number} byteLength=14 压缩率
|
|
73
73
|
* @param {AttrOption} [attr] 其他需要压缩的属性
|
|
74
74
|
* @returns {Int8Array} 压缩之后的DRC数据
|
|
75
75
|
*/
|
|
76
|
-
export function enCodeMesh(mesh: Mesh
|
|
76
|
+
export function enCodeMesh(mesh: Mesh, byteLength?: number, attr?: AttrOption): Int8Array;
|
|
77
77
|
/**
|
|
78
78
|
* 初始化Draco文件
|
|
79
79
|
*/
|
|
@@ -125,5 +125,4 @@ export type Mesh = {
|
|
|
125
125
|
*/
|
|
126
126
|
faces: number[][] | vec3[];
|
|
127
127
|
};
|
|
128
|
-
import { vec3 } from "gl-matrix";
|
|
129
|
-
import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData.js";
|
|
128
|
+
import { vec3 } from "gl-matrix";
|
package/types/exportPLY.d.ts
CHANGED
|
@@ -12,5 +12,4 @@
|
|
|
12
12
|
* @param {boolean} withColors=true 面使用点索引
|
|
13
13
|
* @returns {string | DataView} 返回文件内容
|
|
14
14
|
*/
|
|
15
|
-
export function writePLY(polyData:
|
|
16
|
-
import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData.js";
|
|
15
|
+
export function writePLY(polyData: any, format: "ascii" | "binary", dataByteOrder?: 0 | 1, headerComments?: string[], textureFileName?: string, textureCoordinatesName?: ["u", "v"], withNormals?: boolean, withUVs?: boolean, withColors?: boolean, withIndices?: boolean): string | DataView;
|
package/types/exportSTL.d.ts
CHANGED
|
@@ -9,11 +9,10 @@ export function dispersedPoints2Stl(points: number[]): void;
|
|
|
9
9
|
* @param {boolean} colorMagic=false 颜色
|
|
10
10
|
* @returns {Blob} 网格的BinarySTL文件内容
|
|
11
11
|
*/
|
|
12
|
-
export function exportBinarySTL(polydata:
|
|
12
|
+
export function exportBinarySTL(polydata: any, colorMagic?: boolean): Blob;
|
|
13
13
|
/**
|
|
14
14
|
* 获取网格的AsciiSTL文件类容
|
|
15
15
|
* @param {vtkPolyData} polydata 网格
|
|
16
16
|
* @returns {string} 网格的asciiSTL文件内容
|
|
17
17
|
*/
|
|
18
|
-
export function exportAsciiSTL(polydata:
|
|
19
|
-
import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData.js';
|
|
18
|
+
export function exportAsciiSTL(polydata: any): string;
|
package/types/vtkUtils.d.ts
CHANGED
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 计算屏幕坐标到三维坐标
|
|
3
|
-
* @param {vtkRenderer} renderer vtkRenderer
|
|
4
|
-
* @param {number} x display x position
|
|
5
|
-
* @param {number} y display y position
|
|
6
|
-
* @param {number} z display z position
|
|
7
|
-
* @returns {[number, number, number]} 三维坐标
|
|
8
|
-
*/
|
|
9
|
-
export function computeDisplayToWorld(renderer: vtkRenderer, x: number, y: number, z: number): [number, number, number];
|
|
10
|
-
/**
|
|
11
|
-
* 计算三维坐标到屏幕坐标
|
|
12
|
-
* @param {vtkRenderer} renderer vtkRenderer
|
|
13
|
-
* @param {number} x 三维坐标 x值
|
|
14
|
-
* @param {number} y 三维坐标 y值
|
|
15
|
-
* @param {number} z 三维坐标 z值
|
|
16
|
-
* @returns {[number, number, number]} 屏幕坐标
|
|
17
|
-
*/
|
|
18
|
-
export function computeWorldToDisplay(renderer: vtkRenderer, x: number, y: number, z: number): [number, number, number];
|
|
19
1
|
/**
|
|
20
2
|
* 计算 w2l(word 2 local, word to local) 的变换矩阵
|
|
21
3
|
* @param {vec3} center 中心点
|
|
@@ -34,24 +16,6 @@ export function getW2LMatrix(center: vec3, xaxis: vec3, yaxis: vec3, zaxis: vec3
|
|
|
34
16
|
* @returns { mat4 } 变换矩阵
|
|
35
17
|
*/
|
|
36
18
|
export function getL2WMatrix(center: vec3, xaxis: vec3, yaxis: vec3, zaxis: vec3): mat4;
|
|
37
|
-
/**
|
|
38
|
-
* 返回交互的interactorStyle
|
|
39
|
-
* @returns {vtkInteractorStyleManipulator} 交互的interactorStyle
|
|
40
|
-
*/
|
|
41
|
-
export function make3DInteractorStyle(): vtkInteractorStyleManipulator;
|
|
42
|
-
/**
|
|
43
|
-
* 移除并返回当前renderWindow的所有鼠标交互设定
|
|
44
|
-
* @param {vtkRenderWindowInteractor} interactor vtkRenderWindowInteractor
|
|
45
|
-
* @returns {any[]} 当前鼠标的所有交互Manipulators
|
|
46
|
-
*/
|
|
47
|
-
export function removeMouseInteraction(interactor: vtkRenderWindowInteractor): any[];
|
|
48
|
-
/**
|
|
49
|
-
* 给当前窗口设置交互Maintainers
|
|
50
|
-
* @param {vtkRenderWindowInteractor} interactor vtkRenderWindowInteractor
|
|
51
|
-
* @param {any[]} mm 所有的交互Maintainers
|
|
52
|
-
* @returns {void}
|
|
53
|
-
*/
|
|
54
|
-
export function resetAllMouseMaintainers(interactor: vtkRenderWindowInteractor, mm: any[]): void;
|
|
55
19
|
/**
|
|
56
20
|
* 将点投影到平面上
|
|
57
21
|
* @param {vec3} point 需要投影的点
|
|
@@ -121,12 +85,6 @@ export function getPointToLineDist(point: vec3, begin: vec3, end: vec3): number;
|
|
|
121
85
|
* @returns {number}
|
|
122
86
|
*/
|
|
123
87
|
export function getPointToPlaneDist(point: vec3, origin: vec3, normal: vec3): number;
|
|
124
|
-
/**
|
|
125
|
-
* 对一个polydata应用矩阵变化,直接改变点位置
|
|
126
|
-
* @param {mat4} mt4 变换矩阵
|
|
127
|
-
* @param {vtkPolyData} data 需要应用变换的polydata
|
|
128
|
-
*/
|
|
129
|
-
export function pointsApplyMat4(mt4: mat4, data: vtkPolyData): void;
|
|
130
88
|
/**
|
|
131
89
|
* 将点应用矩阵变换
|
|
132
90
|
* @param {vec3} point 三维点
|
|
@@ -147,13 +105,13 @@ export function vecTransfromByMat4(vec: vec3, matrix: mat4): vec3;
|
|
|
147
105
|
* @param {'ascii' | 'binary'} [format='ascii'] format 导出文件格式
|
|
148
106
|
* @returns {Blob} 网格的ply文件Blob
|
|
149
107
|
*/
|
|
150
|
-
export function createPlyBlob(mesh:
|
|
108
|
+
export function createPlyBlob(mesh: any, format?: "ascii" | "binary"): Blob;
|
|
151
109
|
/**
|
|
152
110
|
* 获取mesh的stl文件Blob,由于STL文件过大,只使用Binary格式
|
|
153
111
|
* @param {vtkPolyData} mesh 网格polydata
|
|
154
112
|
* @returns {Blob} 网格的BinarySTL文件Blob
|
|
155
113
|
*/
|
|
156
|
-
export function createStlBlob(mesh:
|
|
114
|
+
export function createStlBlob(mesh: any): Blob;
|
|
157
115
|
/**
|
|
158
116
|
* @typedef {Object} Mesh
|
|
159
117
|
* @property {number[][] | vec3[]} vertices 点信息
|
|
@@ -165,20 +123,14 @@ export function createStlBlob(mesh: vtkPolyData): Blob;
|
|
|
165
123
|
* @param {number} byteLength=14 压缩率
|
|
166
124
|
* @returns {Blob} drc文件
|
|
167
125
|
*/
|
|
168
|
-
export function createDrcBlob(mesh:
|
|
126
|
+
export function createDrcBlob(mesh: Mesh, byteLength?: number): Blob;
|
|
169
127
|
/**
|
|
170
128
|
* 将网格输出为对应类型的Blob,均采用默认参数,导出drc需要先加载draco_encode.js,并调用initDrcCoder初始化
|
|
171
129
|
* @param {vtkPolyData} mesh 网格文件
|
|
172
130
|
* @param {'ply' | 'stl' | 'drc' } type 输出类型
|
|
173
131
|
* @returns {Blob} 对应类型的Blob
|
|
174
132
|
*/
|
|
175
|
-
export function createMeshTypeBlob(mesh:
|
|
176
|
-
/**
|
|
177
|
-
* vtkPolyData的顶点去重 用于3倍顶点的stl和老版本的vtkMarchingCube
|
|
178
|
-
* @param {vtkPolyData} data 网格的vtkPolyData
|
|
179
|
-
* @returns {vtkPolyData} 去重之后的vtkPolyData
|
|
180
|
-
*/
|
|
181
|
-
export function deduplicatePolyData(data: vtkPolyData): vtkPolyData;
|
|
133
|
+
export function createMeshTypeBlob(mesh: any, type: "ply" | "stl" | "drc"): Blob;
|
|
182
134
|
/**
|
|
183
135
|
* 计算一组三维点的中心点
|
|
184
136
|
* @param {vec3[]} points 三维点数组
|
|
@@ -247,7 +199,7 @@ export function convEular2matrixZYX(rmat: mat3, xangle: number, yangle: number,
|
|
|
247
199
|
* @param {number} byteLength=14 压缩率
|
|
248
200
|
* @returns {string} drc压缩之后的网格base64
|
|
249
201
|
*/
|
|
250
|
-
export function enCodeMeshToBase64(mesh:
|
|
202
|
+
export function enCodeMeshToBase64(mesh: any | Mesh, matrix?: mat4, byteLength?: number): string;
|
|
251
203
|
/**
|
|
252
204
|
* 将一圈有序点按指定size进行平滑
|
|
253
205
|
* @param {vec3[]} points 一圈有序点
|
|
@@ -281,20 +233,6 @@ export function getAxisFormMat4(matrix: mat4): AxisObject;
|
|
|
281
233
|
* @returns {boolean} 是否是正交矩阵
|
|
282
234
|
*/
|
|
283
235
|
export function isRotationMatrix(matrix: mat4): boolean;
|
|
284
|
-
/**
|
|
285
|
-
* 将vtkPolyData进行三角化
|
|
286
|
-
* @param {vtkPolyData} polydata 需要三角化的vtkPolydata
|
|
287
|
-
* @returns {vtkPolyData} 三角化之后的vtkPolydata
|
|
288
|
-
*/
|
|
289
|
-
export function trianglePolys(polydata: vtkPolyData): vtkPolyData;
|
|
290
|
-
/**
|
|
291
|
-
* 加载网格
|
|
292
|
-
* @param {string | File | Blob} file 文件或者文件链接
|
|
293
|
-
* @param {'drc' | 'stl' | 'ply'} [type] 文件类型,当file为string | File的时候可以不传根据文件后缀自动获取,drc需要先进行初始化
|
|
294
|
-
* @param {boolean} [process] 是否需要预先对数据进行处理,stl默认(去重)
|
|
295
|
-
* @returns {Promise<vtkPolyData>} vtkPolyData
|
|
296
|
-
*/
|
|
297
|
-
export function loadMeshData(file: string | File | Blob, type?: "drc" | "stl" | "ply", process?: boolean): Promise<vtkPolyData>;
|
|
298
236
|
/**
|
|
299
237
|
* @typedef Plane
|
|
300
238
|
* @property {vec3} origin 对应vtk坐标系的x值
|
|
@@ -389,9 +327,6 @@ export type Plane = {
|
|
|
389
327
|
*/
|
|
390
328
|
normal: vec3;
|
|
391
329
|
};
|
|
392
|
-
import vtkRenderer from "@kitware/vtk.js/Rendering/Core/Renderer.js";
|
|
393
330
|
import { vec3 } from 'gl-matrix';
|
|
394
331
|
import { mat4 } from 'gl-matrix';
|
|
395
|
-
import vtkRenderWindowInteractor from "@kitware/vtk.js/Rendering/Core/RenderWindowInteractor.js";
|
|
396
|
-
import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData.js";
|
|
397
332
|
import { mat3 } from 'gl-matrix';
|