xl-public-utils 1.0.6 → 1.0.8

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.
@@ -1,9 +1,3 @@
1
-
2
- import vtkInteractorStyleManipulator from "@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator"
3
- import { vec3, mat4, mat3 } from 'gl-matrix';
4
- import vtkRenderer from "@kitware/vtk.js/Rendering/Core/Renderer";
5
- import vtkRenderWindowInteractor from "@kitware/vtk.js/Rendering/Core/RenderWindowInteractor";
6
- import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData";
7
1
  /**
8
2
  * 计算屏幕坐标到三维坐标
9
3
  * @param {vtkRenderer} renderer vtkRenderer
@@ -160,12 +154,18 @@ export function createPlyBlob(mesh: vtkPolyData, format?: "ascii" | "binary"): B
160
154
  * @returns {Blob} 网格的BinarySTL文件Blob
161
155
  */
162
156
  export function createStlBlob(mesh: vtkPolyData): Blob;
157
+ /**
158
+ * @typedef {Object} Mesh
159
+ * @property {number[][] | vec3[]} vertices 点信息
160
+ * @property {number[][] | vec3[]} faces 面信息
161
+ */
163
162
  /**
164
163
  * 将网格压缩为drc文件,导出drc需要先加载draco_encode.js,并调用initDrcCoder初始化
165
- * @param {vtkPolyData} mesh 网格文件
164
+ * @param {vtkPolyData | Mesh} mesh 网格文件
165
+ * @param {number} byteLength=14 压缩率
166
166
  * @returns {Blob} drc文件
167
167
  */
168
- export function createDrcBlob(mesh: vtkPolyData): Blob;
168
+ export function createDrcBlob(mesh: vtkPolyData | Mesh, byteLength?: number): Blob;
169
169
  /**
170
170
  * 将网格输出为对应类型的Blob,均采用默认参数,导出drc需要先加载draco_encode.js,并调用initDrcCoder初始化
171
171
  * @param {vtkPolyData} mesh 网格文件
@@ -173,6 +173,12 @@ export function createDrcBlob(mesh: vtkPolyData): Blob;
173
173
  * @returns {Blob} 对应类型的Blob
174
174
  */
175
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;
176
182
  /**
177
183
  * 计算一组三维点的中心点
178
184
  * @param {vec3[]} points 三维点数组
@@ -235,12 +241,13 @@ export function convMatrix2EularZYX(rmat: mat3, eular: [number, number, number])
235
241
  */
236
242
  export function convEular2matrixZYX(rmat: mat3, xangle: number, yangle: number, zangle: number): mat3;
237
243
  /**
238
- * 将drc
239
- * @param {vtkPolyData} mesh 网格polyData
244
+ * 将polyData转换为Base64string
245
+ * @param {vtkPolyData | Mesh} mesh 网格数据
240
246
  * @param {mat4} [matrix] 变换矩阵
247
+ * @param {number} byteLength=14 压缩率
241
248
  * @returns {string} drc压缩之后的网格base64
242
249
  */
243
- export function enCodeMeshToBase64(mesh: vtkPolyData, matrix?: mat4): string;
250
+ export function enCodeMeshToBase64(mesh: vtkPolyData | Mesh, matrix?: mat4, byteLength?: number): string;
244
251
  /**
245
252
  * 将一圈有序点按指定size进行平滑
246
253
  * @param {vec3[]} points 一圈有序点
@@ -268,6 +275,43 @@ export function smaPointNotRound(points: vec3[], smaSize?: number): vec3[];
268
275
  * @returns {AxisObject} 三个轴向
269
276
  */
270
277
  export function getAxisFormMat4(matrix: mat4): AxisObject;
278
+ /**
279
+ * 判断一个矩阵是否是正交矩阵
280
+ * @param {mat4} matrix 矩阵
281
+ * @returns {boolean} 是否是正交矩阵
282
+ */
283
+ 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
+ /**
299
+ * @typedef Plane
300
+ * @property {vec3} origin 对应vtk坐标系的x值
301
+ * @property {vec3} normal 对应vtk坐标系的y值
302
+ */
303
+ /**
304
+ * 将一组离散的三维点是使用PCA拟合一个平面结果和最小二乘结果近似
305
+ * @param {vec3[]} points 三维点
306
+ * @returns {Plane| null} 拟合的平面
307
+ */
308
+ export function pcaFitPlane(points: vec3[]): Plane | null;
309
+ /**
310
+ * 计算一组 3D 点的最佳拟合平面(最小二乘法)。
311
+ * @param {Array<vec3>} points - 3D 点数组,每个点是一个 vec3 向量。
312
+ * @returns {Plane|null} - 返回平面的 origin(质心)和 normal(法向量),如果点数少于 3 个则返回 null。
313
+ */
314
+ export function leastSquaresFitPlane(points: Array<vec3>): Plane | null;
271
315
  /**
272
316
  * 计算 w2l(word 2 local, word to local) 的变换矩阵
273
317
  * @param {vec3} center 中心点
@@ -286,7 +330,16 @@ export function getmatw2l(center: vec3, xaxis: vec3, yaxis: vec3, zaxis: vec3):
286
330
  * @returns { mat4 } 变换矩阵
287
331
  */
288
332
  export function getmatofl2w(center: vec3, xaxis: vec3, yaxis: vec3, zaxis: vec3): mat4;
289
- export function deduplicatePolyData(data: vtkPolyData): vtkPolyData;
333
+ export type Mesh = {
334
+ /**
335
+ * 点信息
336
+ */
337
+ vertices: number[][] | vec3[];
338
+ /**
339
+ * 面信息
340
+ */
341
+ faces: number[][] | vec3[];
342
+ };
290
343
  export type Position = {
291
344
  /**
292
345
  * 对应vtk坐标系的x值
@@ -318,3 +371,19 @@ export type AxisObject = {
318
371
  */
319
372
  z: vec3;
320
373
  };
374
+ export type Plane = {
375
+ /**
376
+ * 对应vtk坐标系的x值
377
+ */
378
+ origin: vec3;
379
+ /**
380
+ * 对应vtk坐标系的y值
381
+ */
382
+ normal: vec3;
383
+ };
384
+ import vtkRenderer from "@kitware/vtk.js/Rendering/Core/Renderer.js";
385
+ import { vec3 } from 'gl-matrix';
386
+ import { mat4 } from 'gl-matrix';
387
+ import vtkRenderWindowInteractor from "@kitware/vtk.js/Rendering/Core/RenderWindowInteractor.js";
388
+ import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData.js";
389
+ import { mat3 } from 'gl-matrix';
File without changes
File without changes
File without changes