@meshioplusplus/wasm 16.21.0 → 16.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/meshioplusplus_wasm.mjs +1 -1
- package/dist/meshioplusplus_wasm.wasm +0 -0
- package/dist/meshioplusplus_wasm_mt.mjs +1 -1
- package/dist/meshioplusplus_wasm_mt.wasm +0 -0
- package/index.d.ts +200 -3
- package/package.json +2 -2
- package/src/index.mjs +37 -3
package/index.d.ts
CHANGED
|
@@ -20,6 +20,40 @@ export interface SurfaceQualityInfo {
|
|
|
20
20
|
watertight: boolean;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
/** Names one region: its name plus, optionally, its kind, dimension and tag. */
|
|
24
|
+
export interface RegionSelector {
|
|
25
|
+
name: string;
|
|
26
|
+
kind?: 'point' | 'cell' | 'side';
|
|
27
|
+
dim?: number;
|
|
28
|
+
tag?: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** One `editRegions` edit. */
|
|
32
|
+
export interface RegionEdit {
|
|
33
|
+
op: 'union' | 'intersection' | 'difference' | 'rename' | 'retag' | 'delete';
|
|
34
|
+
inputs: Array<string | RegionSelector>;
|
|
35
|
+
output?: string;
|
|
36
|
+
dim?: number;
|
|
37
|
+
tag?: number;
|
|
38
|
+
keepInputs?: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** `agglomerate`'s options (see doc/agglomerate.md). */
|
|
42
|
+
export interface AgglomerateOptions {
|
|
43
|
+
mergeCoplanarFaces?: boolean;
|
|
44
|
+
coplanarAngle?: number;
|
|
45
|
+
minSphericity?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** `resampleSequence`'s options: the settings document's `Resample` object. */
|
|
49
|
+
export interface ResampleOptions {
|
|
50
|
+
Times?: number[] | { Start: number; Stop: number; Step: number };
|
|
51
|
+
TimesFrom?: string;
|
|
52
|
+
Method?: 'linear' | 'nearest' | 'previous';
|
|
53
|
+
Extrapolate?: 'error' | 'clamp';
|
|
54
|
+
BlendPoints?: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
23
57
|
/**
|
|
24
58
|
* A `point_data`/`cell_data`/`field_data` array's JS type: it carries its
|
|
25
59
|
* source dtype crossing the WASM boundary instead of always widening to
|
|
@@ -1192,6 +1226,34 @@ export interface MeshioPlusPlusModule {
|
|
|
1192
1226
|
*
|
|
1193
1227
|
* @returns the number of steps written.
|
|
1194
1228
|
*/
|
|
1229
|
+
/**
|
|
1230
|
+
* Resample `source` onto new times and write it to `outPath`: one file per
|
|
1231
|
+
* target time when it carries `{step}`/`{index}`, else one series file.
|
|
1232
|
+
* `resample` is the settings document's `Resample` object. At most two
|
|
1233
|
+
* source meshes are alive at once. See doc/sequences.md.
|
|
1234
|
+
*
|
|
1235
|
+
* @returns the number of target times written.
|
|
1236
|
+
*/
|
|
1237
|
+
resampleSequence(
|
|
1238
|
+
source: string | string[],
|
|
1239
|
+
outPath: string,
|
|
1240
|
+
resample: ResampleOptions,
|
|
1241
|
+
outFormat?: string,
|
|
1242
|
+
options?: {
|
|
1243
|
+
format?: string;
|
|
1244
|
+
times?: number[];
|
|
1245
|
+
timeFrom?: 'auto' | 'file' | 'filename' | 'index';
|
|
1246
|
+
sort?: boolean;
|
|
1247
|
+
},
|
|
1248
|
+
): number;
|
|
1249
|
+
|
|
1250
|
+
/**
|
|
1251
|
+
* `a` with every floating-point data array replaced by `(1 - w) a + w b`
|
|
1252
|
+
* (integer data from the nearer step); both steps must share a topology.
|
|
1253
|
+
* `blendPoints` blends the coordinates too.
|
|
1254
|
+
*/
|
|
1255
|
+
blendSteps(a: Mesh, b: Mesh, w: number, blendPoints?: boolean): Mesh;
|
|
1256
|
+
|
|
1195
1257
|
sequenceToTimeseries(
|
|
1196
1258
|
source: string | string[],
|
|
1197
1259
|
outPath: string,
|
|
@@ -1942,6 +2004,125 @@ export interface MeshioPlusPlusModule {
|
|
|
1942
2004
|
quality: SurfaceQualityInfo;
|
|
1943
2005
|
};
|
|
1944
2006
|
|
|
2007
|
+
/**
|
|
2008
|
+
* Quality gate: score every cell and test the `require` thresholds (text
|
|
2009
|
+
* such as `'scaled_jacobian >= 0.2; aspect_ratio <= 5 @ 1%'`) plus the
|
|
2010
|
+
* inverted and degenerate cell counts (`maxInverted`/`maxDegenerate`,
|
|
2011
|
+
* default 0, negative disables). `summary` is the text both CLIs print. See
|
|
2012
|
+
* doc/mesh_quality.md.
|
|
2013
|
+
* @throws {Error} on a malformed specification or an unknown metric.
|
|
2014
|
+
*/
|
|
2015
|
+
checkQuality(
|
|
2016
|
+
mesh: Mesh,
|
|
2017
|
+
require?: string,
|
|
2018
|
+
maxInverted?: number,
|
|
2019
|
+
maxDegenerate?: number,
|
|
2020
|
+
): {
|
|
2021
|
+
passed: boolean;
|
|
2022
|
+
numCells: number;
|
|
2023
|
+
numInverted: number;
|
|
2024
|
+
numDegenerate: number;
|
|
2025
|
+
checks: Array<{
|
|
2026
|
+
name: string;
|
|
2027
|
+
metric: string;
|
|
2028
|
+
min: number;
|
|
2029
|
+
max: number;
|
|
2030
|
+
maxFraction: number;
|
|
2031
|
+
evaluated: number;
|
|
2032
|
+
violations: number;
|
|
2033
|
+
fraction: number;
|
|
2034
|
+
worst: number;
|
|
2035
|
+
worstCell: number;
|
|
2036
|
+
passed: boolean;
|
|
2037
|
+
}>;
|
|
2038
|
+
summary: string;
|
|
2039
|
+
};
|
|
2040
|
+
|
|
2041
|
+
/**
|
|
2042
|
+
* The sharp, open, non-manifold and inconsistently wound edges of a surface
|
|
2043
|
+
* (or of a volume mesh's skin) as a mesh of `line` cells over the input's
|
|
2044
|
+
* points, with cell data `feature:kind` (1 feature, 2 boundary,
|
|
2045
|
+
* 3 non-manifold, 4 inconsistent) and `feature:angle` (degrees). The counts
|
|
2046
|
+
* cover the whole surface, selected or not. See doc/feature_edges.md.
|
|
2047
|
+
* @throws {Error} on an angle outside [0, 180] or an unknown region.
|
|
2048
|
+
*/
|
|
2049
|
+
featureEdges(
|
|
2050
|
+
mesh: Mesh,
|
|
2051
|
+
featureAngle?: number,
|
|
2052
|
+
feature?: boolean,
|
|
2053
|
+
boundary?: boolean,
|
|
2054
|
+
nonManifold?: boolean,
|
|
2055
|
+
inconsistent?: boolean,
|
|
2056
|
+
region?: string,
|
|
2057
|
+
): {
|
|
2058
|
+
mesh: Mesh;
|
|
2059
|
+
numFeature: number;
|
|
2060
|
+
numBoundary: number;
|
|
2061
|
+
numNonManifold: number;
|
|
2062
|
+
numInconsistent: number;
|
|
2063
|
+
};
|
|
2064
|
+
|
|
2065
|
+
/**
|
|
2066
|
+
* The (sampled) Hausdorff distance between the surfaces of two meshes; a
|
|
2067
|
+
* volume mesh contributes its skin. `faceSamples = s > 0` also samples the
|
|
2068
|
+
* centroids of the `s*s` sub-triangles of every triangle (vertices alone
|
|
2069
|
+
* give a lower bound). See doc/hausdorff.md.
|
|
2070
|
+
* @throws {Error} when a mesh has no surface triangles.
|
|
2071
|
+
*/
|
|
2072
|
+
hausdorffDistance(
|
|
2073
|
+
a: Mesh,
|
|
2074
|
+
b: Mesh,
|
|
2075
|
+
faceSamples?: number,
|
|
2076
|
+
regionA?: string,
|
|
2077
|
+
regionB?: string,
|
|
2078
|
+
): {
|
|
2079
|
+
distance: number;
|
|
2080
|
+
aToB: number;
|
|
2081
|
+
bToA: number;
|
|
2082
|
+
meanAToB: number;
|
|
2083
|
+
rmsAToB: number;
|
|
2084
|
+
meanBToA: number;
|
|
2085
|
+
rmsBToA: number;
|
|
2086
|
+
numSamplesA: number;
|
|
2087
|
+
numSamplesB: number;
|
|
2088
|
+
worstPointA: Float64Array;
|
|
2089
|
+
worstPointB: Float64Array;
|
|
2090
|
+
};
|
|
2091
|
+
|
|
2092
|
+
/**
|
|
2093
|
+
* Apply region edits, in order, to a copy of `mesh` (points, cells and data
|
|
2094
|
+
* untouched): `union`, `intersection`, `difference` (two or more inputs of
|
|
2095
|
+
* one kind, result named `output`), `rename`, `retag` (`tag`/`dim`) and
|
|
2096
|
+
* `delete`. An input names exactly one region; pin `kind`/`dim`/`tag` when a
|
|
2097
|
+
* name is shared. See doc/regions.md.
|
|
2098
|
+
* @throws {Error} on a missing or ambiguous region, mixed kinds, or a result
|
|
2099
|
+
* that would replace an unrelated region.
|
|
2100
|
+
*/
|
|
2101
|
+
editRegions(mesh: Mesh, edits: RegionEdit | RegionEdit[]): Mesh;
|
|
2102
|
+
|
|
2103
|
+
/**
|
|
2104
|
+
* The master node each node of the `slave` region maps onto under the
|
|
2105
|
+
* row-major 4x4 affine `matrix` (16 numbers), within `atol`. `slave` is
|
|
2106
|
+
* ascending and `master` aligned with it (0-based point ids). See
|
|
2107
|
+
* doc/periodic.md.
|
|
2108
|
+
* @throws {Error} on a master claimed twice or, with `requireComplete`, an
|
|
2109
|
+
* unmatched slave node.
|
|
2110
|
+
*/
|
|
2111
|
+
matchPeriodicNodes(
|
|
2112
|
+
mesh: Mesh,
|
|
2113
|
+
slave: string | RegionSelector,
|
|
2114
|
+
master: string | RegionSelector,
|
|
2115
|
+
matrix: ArrayLike<number>,
|
|
2116
|
+
atol?: number,
|
|
2117
|
+
requireComplete?: boolean,
|
|
2118
|
+
): {
|
|
2119
|
+
slave: Int32Array;
|
|
2120
|
+
master: Int32Array;
|
|
2121
|
+
unmatched: Int32Array;
|
|
2122
|
+
numFixed: number;
|
|
2123
|
+
maxResidual: number;
|
|
2124
|
+
};
|
|
2125
|
+
|
|
1945
2126
|
/**
|
|
1946
2127
|
* Surface repair beyond `clean`: weld (opt-in) -> triangulate -> split
|
|
1947
2128
|
* bowties -> orient by the topological half-edge rule per connected
|
|
@@ -2090,10 +2271,26 @@ export interface MeshioPlusPlusModule {
|
|
|
2090
2271
|
*
|
|
2091
2272
|
* With `returnMaps: true`, returns `{mesh, cellMap}` instead of a bare
|
|
2092
2273
|
* mesh -- a single FLAT array (global input cell index -> global output
|
|
2093
|
-
* cell index), unlike the other ops' per-block `cellMaps
|
|
2274
|
+
* cell index), unlike the other ops' per-block `cellMaps` -- plus
|
|
2275
|
+
* `numFacesMerged` and `numRejected` for the `options` below.
|
|
2276
|
+
*
|
|
2277
|
+
* `options.mergeCoplanarFaces` fuses coplanar shared and boundary faces
|
|
2278
|
+
* (within `coplanarAngle` degrees, default 1) into one polygon;
|
|
2279
|
+
* `options.minSphericity` (0 = off) refuses an absorption that would drop a
|
|
2280
|
+
* group's sphericity below it. See doc/agglomerate.md.
|
|
2094
2281
|
*/
|
|
2095
|
-
agglomerate(
|
|
2096
|
-
|
|
2282
|
+
agglomerate(
|
|
2283
|
+
mesh: Mesh,
|
|
2284
|
+
targetGroupSize?: number,
|
|
2285
|
+
returnMaps?: false,
|
|
2286
|
+
options?: AgglomerateOptions,
|
|
2287
|
+
): Mesh;
|
|
2288
|
+
agglomerate(
|
|
2289
|
+
mesh: Mesh,
|
|
2290
|
+
targetGroupSize: number | undefined,
|
|
2291
|
+
returnMaps: true,
|
|
2292
|
+
options?: AgglomerateOptions,
|
|
2293
|
+
): { mesh: Mesh; cellMap: Int32Array; numFacesMerged: number; numRejected: number };
|
|
2097
2294
|
|
|
2098
2295
|
/**
|
|
2099
2296
|
* Refine a mesh, subdividing cells into same-type children (`line` → 2,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshioplusplus/wasm",
|
|
3
|
-
"version": "16.
|
|
4
|
-
"description": "meshio++ mesh I/O compiled to WebAssembly: read
|
|
3
|
+
"version": "16.25.0",
|
|
4
|
+
"description": "meshio++ mesh I/O compiled to WebAssembly: read 76 and write 68 mesh formats (incl. MED, CGNS, Exodus) in the browser or Node.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.mjs",
|
|
7
7
|
"module": "./src/index.mjs",
|
package/src/index.mjs
CHANGED
|
@@ -210,6 +210,8 @@ export class MeshioPlusPlusLoadError extends Error {
|
|
|
210
210
|
* sequenceEntries: (source: string|string[], options?: object) => object[],
|
|
211
211
|
* sequenceToTimeseries: (source: string|string[], outPath: string, outFormat?: string, options?: object) => number,
|
|
212
212
|
* timeseriesToSequence: (inPath: string, outPattern: string, inFormat?: string, outFormat?: string) => string[],
|
|
213
|
+
* resampleSequence: (source: string|string[], outPath: string, resample: object, outFormat?: string, options?: object) => number,
|
|
214
|
+
* blendSteps: (a: Mesh, b: Mesh, w: number, blendPoints?: boolean) => Mesh,
|
|
213
215
|
* numNodesPerCell: () => Object<string, number>,
|
|
214
216
|
* topologicalDimension: () => Object<string, number>,
|
|
215
217
|
* meshBackend: () => string,
|
|
@@ -250,13 +252,18 @@ export class MeshioPlusPlusLoadError extends Error {
|
|
|
250
252
|
* optimizeVolume: (mesh: Mesh, maxIterations?: number, relocate?: boolean, flip?: boolean, preserveBoundary?: boolean, minImprovement?: number) => {mesh: Mesh, numFlips: number, num23Flips: number, num32Flips: number, numVerticesMoved: number, numTets: number, minQualityBefore: number, minQualityAfter: number},
|
|
251
253
|
* computeCurvature: (mesh: Mesh, mean?: boolean, gaussian?: boolean, dualArea?: string, includeBoundary?: boolean, recordArea?: boolean, recordPrincipal?: boolean, region?: string) => {mesh: Mesh, numBoundary: number, numIsolated: number, numDegenerate: number, totalAngleDefect: number, quality: {boundaryEdges: number, nonManifoldEdges: number, inconsistentPairs: number, degenerateTriangles: number, watertight: boolean}},
|
|
252
254
|
* computeNormals: (mesh: Mesh, pointNormals?: boolean, cellNormals?: boolean, weight?: string, splitAngle?: number, recordParentIds?: boolean, region?: string) => {mesh: Mesh, numIsolated: number, numUndefined: number, numDegenerate: number, numSplitPoints: number, numAddedPoints: number, quality: {boundaryEdges: number, nonManifoldEdges: number, inconsistentPairs: number, degenerateTriangles: number, watertight: boolean}},
|
|
255
|
+
* checkQuality: (mesh: Mesh, require?: string, maxInverted?: number, maxDegenerate?: number) => {passed: boolean, numCells: number, numInverted: number, numDegenerate: number, checks: Array<object>, summary: string},
|
|
256
|
+
* featureEdges: (mesh: Mesh, featureAngle?: number, feature?: boolean, boundary?: boolean, nonManifold?: boolean, inconsistent?: boolean, region?: string) => {mesh: Mesh, numFeature: number, numBoundary: number, numNonManifold: number, numInconsistent: number},
|
|
257
|
+
* hausdorffDistance: (a: Mesh, b: Mesh, faceSamples?: number, regionA?: string, regionB?: string) => {distance: number, aToB: number, bToA: number, meanAToB: number, rmsAToB: number, meanBToA: number, rmsBToA: number, numSamplesA: number, numSamplesB: number, worstPointA: Float64Array, worstPointB: Float64Array},
|
|
258
|
+
* editRegions: (mesh: Mesh, edits: Array<{op: string, inputs: Array<string | {name: string, kind?: string, dim?: number, tag?: number}>, output?: string, dim?: number, tag?: number, keepInputs?: boolean}>) => Mesh,
|
|
259
|
+
* matchPeriodicNodes: (mesh: Mesh, slave: string | {name: string, kind?: string, dim?: number, tag?: number}, master: string | {name: string, kind?: string, dim?: number, tag?: number}, matrix: ArrayLike<number>, atol?: number, requireComplete?: boolean) => {slave: Int32Array, master: Int32Array, unmatched: Int32Array, numFixed: number, maxResidual: number},
|
|
253
260
|
* repair: (mesh: Mesh, fixOrientation?: boolean, orientOutward?: boolean, fillHoles?: boolean, splitNonManifold?: boolean, maxHoleEdges?: number, weldTolerance?: number, recordProvenance?: boolean) => {mesh: Mesh, qualityBefore: object, qualityAfter: object, numFlipped: number, numComponents: number, largestComponent: number, numOrientedOutward: number, numUnorientable: number, numVerticesSplit: number, numHolesDetected: number, numHolesFilled: number, numHolesSkipped: number, numFacesAdded: number, numPointsAdded: number, pointsWelded: number},
|
|
254
261
|
* shrinkwrap: (mesh: Mesh, target: Mesh, offset?: number, maxDistance?: number, weights?: string, targetRegion?: string, normalWeight?: string, recordDistance?: boolean, recordClosestCell?: boolean) => {mesh: Mesh, quality: object, numProjected: number, numMissed: number, numSkipped: number, maxDisplacement: number},
|
|
255
262
|
* sobolevDeform: (mesh: Mesh, array: string, lengthScale: number, fixedPointsArray?: string, fixBoundary?: boolean, recordFiltered?: boolean, maxIterations?: number, tolerance?: number) => {mesh: Mesh, numIterations: number, residual: number, converged: boolean, numFixed: number, numIsolated: number, maxDisplacement: number},
|
|
256
263
|
* split: (mesh: Mesh, by: string, tagName?: string, returnMaps?: boolean) => {key: string, mesh: Mesh, pointMap?: Int32Array, cellMaps?: Int32Array[]}[],
|
|
257
264
|
* convertCells: (mesh: Mesh, mode?: string, recordParentIds?: boolean, returnMaps?: boolean) => Mesh | {mesh: Mesh, pointMap: Int32Array, cellMaps: Int32Array[]},
|
|
258
265
|
* subdivide: (mesh: Mesh, recordParentIds?: boolean, returnMaps?: boolean) => Mesh | {mesh: Mesh, cellMaps: Int32Array[]},
|
|
259
|
-
* agglomerate: (mesh: Mesh, targetGroupSize?: number, returnMaps?: boolean) => Mesh | {mesh: Mesh, cellMap: Int32Array},
|
|
266
|
+
* agglomerate: (mesh: Mesh, targetGroupSize?: number, returnMaps?: boolean, options?: {mergeCoplanarFaces?: boolean, coplanarAngle?: number, minSphericity?: number}) => Mesh | {mesh: Mesh, cellMap: Int32Array, numFacesMerged: number, numRejected: number},
|
|
260
267
|
* refine: (mesh: Mesh, levels?: number, recordParentIds?: boolean,
|
|
261
268
|
* options?: object, returnMaps?: boolean) => Mesh | {mesh: Mesh, pointMap: Int32Array, cellMaps: Int32Array[]},
|
|
262
269
|
* decimate: (mesh: Mesh, ratio?: number, targetFaces?: number, maxError?: number, placement?: string, preserveBoundary?: boolean, preserveFeatures?: boolean, featureAngle?: number, frozen?: number[]|Int32Array|null, returnMaps?: boolean) => {mesh: Mesh, facesRemoved: number, pointsRemoved: number, collapsesRejected: number, maxErrorApplied: number, pointMap?: Int32Array, cellMaps?: Int32Array[]},
|
|
@@ -460,6 +467,12 @@ export async function loadMeshioPlusPlus(moduleOverrides = {}, { variant = 'auto
|
|
|
460
467
|
// Streams -- one mesh alive at a time, whatever the step count.
|
|
461
468
|
sequenceToTimeseries: (source, outPath, outFormat = '', options = undefined) =>
|
|
462
469
|
Module.sequenceToTimeseries(source, outPath, outFormat, options),
|
|
470
|
+
// Resample onto new times: `resample` is {Times | TimesFrom, Method,
|
|
471
|
+
// Extrapolate, BlendPoints}. At most two meshes alive at a time.
|
|
472
|
+
resampleSequence: (source, outPath, resample, outFormat = '', options = undefined) =>
|
|
473
|
+
Module.resampleSequence(source, outPath, resample, outFormat, options),
|
|
474
|
+
// `a` with its float data blended to (1 - w) a + w b; same topology.
|
|
475
|
+
blendSteps: (a, b, w, blendPoints = false) => Module.blendSteps(a, b, w, blendPoints),
|
|
463
476
|
// Fan-out: one multi-step file -> one file per step. `outPattern` must
|
|
464
477
|
// contain '{step}' or '{index}'; returns the MEMFS paths written.
|
|
465
478
|
timeseriesToSequence: (inPath, outPattern, inFormat = '', outFormat = '') =>
|
|
@@ -775,6 +788,26 @@ export async function loadMeshioPlusPlus(moduleOverrides = {}, { variant = 'auto
|
|
|
775
788
|
) =>
|
|
776
789
|
Module.computeNormals(mesh, pointNormals, cellNormals, weight, splitAngle,
|
|
777
790
|
recordParentIds, region),
|
|
791
|
+
checkQuality: (mesh, require = '', maxInverted = 0, maxDegenerate = 0) =>
|
|
792
|
+
Module.checkQuality(mesh, require, maxInverted, maxDegenerate),
|
|
793
|
+
featureEdges: (
|
|
794
|
+
mesh,
|
|
795
|
+
featureAngle = 30,
|
|
796
|
+
feature = true,
|
|
797
|
+
boundary = true,
|
|
798
|
+
nonManifold = true,
|
|
799
|
+
inconsistent = true,
|
|
800
|
+
region = '',
|
|
801
|
+
) =>
|
|
802
|
+
Module.featureEdges(mesh, featureAngle, feature, boundary, nonManifold,
|
|
803
|
+
inconsistent, region),
|
|
804
|
+
hausdorffDistance: (a, b, faceSamples = 0, regionA = '', regionB = '') =>
|
|
805
|
+
Module.hausdorffDistance(a, b, faceSamples, regionA, regionB),
|
|
806
|
+
editRegions: (mesh, edits) =>
|
|
807
|
+
Module.editRegions(mesh, Array.isArray(edits) ? edits : [edits]),
|
|
808
|
+
matchPeriodicNodes: (mesh, slave, master, matrix, atol = 1e-8, requireComplete = true) =>
|
|
809
|
+
Module.matchPeriodicNodes(mesh, slave, master, Array.from(matrix), atol,
|
|
810
|
+
requireComplete),
|
|
778
811
|
repair: (
|
|
779
812
|
mesh,
|
|
780
813
|
fixOrientation = true,
|
|
@@ -828,8 +861,9 @@ export async function loadMeshioPlusPlus(moduleOverrides = {}, { variant = 'auto
|
|
|
828
861
|
// `returnMaps` (default false): when true, returns `{mesh, cellMap}`
|
|
829
862
|
// instead of a bare mesh -- a single FLAT array (global cell index ->
|
|
830
863
|
// global cell index), unlike the other ops' per-block `cellMaps`.
|
|
831
|
-
|
|
832
|
-
|
|
864
|
+
// `options`: {mergeCoplanarFaces, coplanarAngle, minSphericity}.
|
|
865
|
+
agglomerate: (mesh, targetGroupSize = 8, returnMaps = false, options = undefined) =>
|
|
866
|
+
Module.agglomerate(mesh, targetGroupSize, returnMaps, options),
|
|
833
867
|
// `returnMaps` (default false): when true, returns
|
|
834
868
|
// `{mesh, pointMap, cellMaps}` instead of a bare mesh.
|
|
835
869
|
refine: (mesh, levels = 1, recordParentIds = false, options = undefined,
|