xl-public-utils 1.0.23 → 1.0.25

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 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: vtkPolyData,
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: vtkPolyData): Blob;
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: vtkPolyData,
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: vtkPolyData,
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 = 1e-10): { vertices: Float32Array, faces: Int32Array };
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, vtkPolyData>;
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.23",
3
+ "version": "1.0.25",
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] 颜色数组
@@ -19,7 +18,7 @@ import vtkDracoReader from "@kitware/vtk.js/IO/Geometry/DracoReader";
19
18
  export function enCodeMeshByVF(vertices, faces, byteLength = 14, attr =undefined) {
20
19
  const facesFlat = faces;
21
20
  const pointFlat = vertices;
22
- const encoderModule = window.encoderModule
21
+ const encoderModule = globalThis.encoderModule
23
22
  const encoder = new encoderModule.Encoder();
24
23
  const meshBuilder = new encoderModule.MeshBuilder();
25
24
  const dracoMesh = new encoderModule.Mesh();
@@ -61,7 +60,7 @@ export function enCodeMeshByVF(vertices, faces, byteLength = 14, attr =undefined
61
60
  * @returns {Int8Array} 压缩之后的drc data
62
61
  */
63
62
  export function enCodePointCloud(points) {
64
- const encoderModule = window.encoderModule
63
+ const encoderModule = globalThis.encoderModule
65
64
  const encoder = new encoderModule.Encoder();
66
65
  const pointCloudBuilder = new encoderModule.PointCloudBuilder();
67
66
  const dracoPointCloud = new encoderModule.PointCloud();
@@ -129,7 +128,7 @@ export function decodeDrcBufferArray(byteArray) {
129
128
  * @returns {Decoder} drc解压类
130
129
  */
131
130
  export function decodeBuffer(arrayBuffer) {
132
- const decoderModule = window.decoderModule;
131
+ const decoderModule = globalThis.decoderModule;
133
132
  var byteArray = new Int8Array(arrayBuffer);
134
133
  var decoder = new decoderModule.Decoder();
135
134
  var decoderBuffer = new decoderModule.DecoderBuffer();
@@ -164,7 +163,7 @@ export function decodeBuffer(arrayBuffer) {
164
163
  * @returns {DrcMeshData} decoder中的网格信息
165
164
  */
166
165
  function getPolyDataFromDracoGeometry(dracoGeometry) {
167
- const decoderModule = window.decoderModule;
166
+ const decoderModule = globalThis.decoderModule;
168
167
  var decoder = new decoderModule.Decoder(); // Get position attribute ID
169
168
 
170
169
  var positionAttributeId = decoder.GetAttributeId(dracoGeometry, decoderModule.POSITION);
@@ -232,7 +231,7 @@ function getPolyDataFromDracoGeometry(dracoGeometry) {
232
231
  * @returns {Float32Array} 点
233
232
  */
234
233
  function getPointCloudFromDracoGeometry(dracoGeometry) {
235
- const decoderModule = window.decoderModule;
234
+ const decoderModule = globalThis.decoderModule;
236
235
  var decoder = new decoderModule.Decoder(); // Get position attribute ID
237
236
 
238
237
  var positionAttributeId = decoder.GetAttributeId(dracoGeometry, decoderModule.POSITION);
@@ -255,7 +254,7 @@ function getPointCloudFromDracoGeometry(dracoGeometry) {
255
254
  * @returns {Float32Array} 对应decoder中的属性
256
255
  */
257
256
  export function getDracoAttributeAsFloat32Array(dracoGeometry, attributeId) {
258
- const decoderModule = window.decoderModule;
257
+ const decoderModule = globalThis.decoderModule;
259
258
  var decoder = new decoderModule.Decoder();
260
259
  var attribute = decoder.GetAttribute(dracoGeometry, attributeId);
261
260
  var numberOfComponents = attribute.num_components();
@@ -330,26 +329,26 @@ export function enCodeMesh(mesh, byteLength = 14, attr = undefined) {
330
329
  * 初始化Draco文件
331
330
  */
332
331
  export function initDrcCoder() {
333
- if (!window.encoderModule) {
332
+ if (!globalThis.encoderModule) {
334
333
  const timerEncoder = setInterval(() => {
335
- if (window.DracoEncoderModule) {
336
- window.DracoEncoderModule().then((res) => {
337
- window.encoderModule = res;
334
+ if (globalThis.DracoEncoderModule) {
335
+ globalThis.DracoEncoderModule().then((res) => {
336
+ globalThis.encoderModule = res;
338
337
  });
339
338
  clearInterval(timerEncoder);
340
339
  }
341
340
  }, 50);
342
341
  }
343
- if (!window.decoderModule) {
342
+ if (!globalThis.decoderModule) {
344
343
  const timerDecoder = setInterval(() => {
345
- if (window.DracoDecoderModule) {
346
- window.DracoDecoderModule().then((res) => {
347
- window.decoderModule = res;
344
+ if (globalThis.DracoDecoderModule) {
345
+ globalThis.DracoDecoderModule().then((res) => {
346
+ globalThis.decoderModule = res;
348
347
  function a() {
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
  }
@@ -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/utils.js CHANGED
@@ -38,7 +38,7 @@ export const detectZoom = getRatio;
38
38
  */
39
39
 
40
40
  export function base64ToArrayBuffer(base64String) {
41
- const binary_string = window.atob(base64String);
41
+ const binary_string = globalThis.atob(base64String);
42
42
  const len = binary_string.length;
43
43
  const bytes = new Uint8Array(len);
44
44
  for (var i = 0; i < len; i++) {
@@ -58,7 +58,7 @@ export function int8ArrayToBase64(int8) {
58
58
  for (let i = 0; i < data.length; i++) {
59
59
  base64String += String.fromCharCode(data[i])
60
60
  }
61
- return window.btoa(base64String)
61
+ return globalThis.btoa(base64String)
62
62
  }
63
63
 
64
64
 
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 { getFileExtension, int8ArrayToBase64 } from "./utils.js";
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 {vtkPolyData | Mesh} mesh 网格数据
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
- if(matrix) {
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
@@ -68,12 +68,12 @@ export function enCloudPointTobase64(points: vec3[] | number[]): string;
68
68
  */
69
69
  /**
70
70
  * 使用drc压缩网格信息
71
- * @param {Mesh | vtkPolyData} 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 | vtkPolyData, byteLength?: number, attr?: AttrOption): Int8Array;
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";
@@ -12,5 +12,4 @@
12
12
  * @param {boolean} withColors=true 面使用点索引
13
13
  * @returns {string | DataView} 返回文件内容
14
14
  */
15
- export function writePLY(polyData: vtkPolyData, format: "ascii" | "binary", dataByteOrder?: 0 | 1, headerComments?: string[], textureFileName?: string, textureCoordinatesName?: ["u", "v"], withNormals?: boolean, withUVs?: boolean, withColors?: boolean, withIndices?: boolean): string | DataView;
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;
@@ -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: vtkPolyData, colorMagic?: boolean): Blob;
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: vtkPolyData): string;
19
- import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData.js';
18
+ export function exportAsciiSTL(polydata: any): string;
@@ -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: vtkPolyData, format?: "ascii" | "binary"): Blob;
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: vtkPolyData): Blob;
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: vtkPolyData | Mesh, byteLength?: number): Blob;
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: vtkPolyData, type: "ply" | "stl" | "drc"): Blob;
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: vtkPolyData | Mesh, matrix?: mat4, byteLength?: number): string;
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';