okgeometry-api 1.2.0 → 1.4.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/dist/Line.d.ts +10 -1
- package/dist/Line.d.ts.map +1 -1
- package/dist/Line.js +11 -0
- package/dist/Line.js.map +1 -1
- package/dist/Mesh.d.ts +123 -9
- package/dist/Mesh.d.ts.map +1 -1
- package/dist/Mesh.js +401 -26
- package/dist/Mesh.js.map +1 -1
- package/dist/MeshSurface.d.ts +32 -0
- package/dist/MeshSurface.d.ts.map +1 -0
- package/dist/MeshSurface.js +51 -0
- package/dist/MeshSurface.js.map +1 -0
- package/dist/NurbsCurve.d.ts +50 -2
- package/dist/NurbsCurve.d.ts.map +1 -1
- package/dist/NurbsCurve.js +76 -2
- package/dist/NurbsCurve.js.map +1 -1
- package/dist/NurbsSurface.d.ts +9 -1
- package/dist/NurbsSurface.d.ts.map +1 -1
- package/dist/NurbsSurface.js +12 -3
- package/dist/NurbsSurface.js.map +1 -1
- package/dist/PolyCurve.d.ts +21 -3
- package/dist/PolyCurve.d.ts.map +1 -1
- package/dist/PolyCurve.js +82 -38
- package/dist/PolyCurve.js.map +1 -1
- package/dist/Polygon.d.ts +13 -2
- package/dist/Polygon.d.ts.map +1 -1
- package/dist/Polygon.js +21 -3
- package/dist/Polygon.js.map +1 -1
- package/dist/Polyline.d.ts +19 -2
- package/dist/Polyline.d.ts.map +1 -1
- package/dist/Polyline.js +38 -6
- package/dist/Polyline.js.map +1 -1
- package/dist/Surface.d.ts +17 -0
- package/dist/Surface.d.ts.map +1 -0
- package/dist/Surface.js +2 -0
- package/dist/Surface.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wasm-base64.d.ts +1 -1
- package/dist/wasm-base64.d.ts.map +1 -1
- package/dist/wasm-base64.js +1 -1
- package/dist/wasm-base64.js.map +1 -1
- package/dist/wasm-bindings.d.ts +132 -2
- package/dist/wasm-bindings.d.ts.map +1 -1
- package/dist/wasm-bindings.js +207 -2
- package/dist/wasm-bindings.js.map +1 -1
- package/package.json +1 -1
- package/src/Line.ts +38 -20
- package/src/Mesh.ts +909 -464
- package/src/MeshSurface.ts +72 -0
- package/src/NurbsCurve.ts +103 -3
- package/src/NurbsSurface.ts +28 -13
- package/src/PolyCurve.ts +157 -85
- package/src/Polygon.ts +34 -4
- package/src/Polyline.ts +74 -24
- package/src/Surface.ts +18 -0
- package/src/index.ts +5 -0
- package/src/types.ts +15 -0
- package/src/wasm-base64.ts +1 -1
- package/src/wasm-bindings.d.ts +101 -2
- package/src/wasm-bindings.js +218 -2
package/src/wasm-bindings.d.ts
CHANGED
|
@@ -12,6 +12,21 @@ export function arc_length(radius: number, start_angle: number, end_angle: numbe
|
|
|
12
12
|
*/
|
|
13
13
|
export function arc_point_at(cx: number, cy: number, cz: number, nx: number, ny: number, nz: number, radius: number, start_angle: number, end_angle: number, t: number): Float64Array;
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Build a NURBS curve from raw control points with kernel-managed knots and weights.
|
|
17
|
+
*
|
|
18
|
+
* * `degree` - Requested degree (clamped to the valid range for the point count)
|
|
19
|
+
* * `coords` - Flat control points [x,y,z, x,y,z, ...]. For closed curves the
|
|
20
|
+
* first point must NOT be repeated at the end.
|
|
21
|
+
* * `closed` - When true, builds a periodic (C^{degree-1}) closed loop;
|
|
22
|
+
* otherwise a clamped curve interpolating the first/last control points.
|
|
23
|
+
*
|
|
24
|
+
* Returns the encoded curve [degree, num_cp, cp_xyz..., weights..., knots...]
|
|
25
|
+
* (the same format consumed by `sample_nurbs_curve` / `evaluate_nurbs_curve_at`),
|
|
26
|
+
* or an empty buffer on failure.
|
|
27
|
+
*/
|
|
28
|
+
export function build_nurbs_curve(degree: number, coords: Float64Array, closed: boolean): Float64Array;
|
|
29
|
+
|
|
15
30
|
/**
|
|
16
31
|
* Chamfer corners of a polyline by cutting each corner with a straight segment.
|
|
17
32
|
* Input: flat coords [x1,y1,z1, ...], distance from corner to cut.
|
|
@@ -145,6 +160,23 @@ export function loft_nurbs_surface(data: Float64Array): Float64Array;
|
|
|
145
160
|
*/
|
|
146
161
|
export function loft_polylines(polyline_data: Float64Array, _segments: number, with_caps: boolean): Float64Array;
|
|
147
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Loft between raw profile polylines with kernel-managed compatibility
|
|
165
|
+
* (resampling to a common count, seam alignment, direction matching).
|
|
166
|
+
*
|
|
167
|
+
* # Parameters
|
|
168
|
+
* * `profile_data` - Flat array where each profile is prefixed by its point count:
|
|
169
|
+
* [count1, x1, y1, z1, ..., count2, x1, y1, z1, ...]
|
|
170
|
+
* * `closed` - Whether profiles are closed loops (input must NOT repeat the
|
|
171
|
+
* first point). Closed profiles loft into a tube, open profiles into a sheet.
|
|
172
|
+
* * `with_caps` - Cap the first/last profiles (closed profiles only) to produce
|
|
173
|
+
* a watertight solid ready for booleans.
|
|
174
|
+
*
|
|
175
|
+
* # Returns
|
|
176
|
+
* Mesh buffers for the lofted surface (empty on failure)
|
|
177
|
+
*/
|
|
178
|
+
export function loft_profiles(profile_data: Float64Array, closed: boolean, with_caps: boolean): Float64Array;
|
|
179
|
+
|
|
148
180
|
/**
|
|
149
181
|
* Make multiple NURBS curves compatible (same knot vectors, same CP count).
|
|
150
182
|
* Input: [curve_count, curve1_data..., curve2_data..., ...]
|
|
@@ -249,6 +281,19 @@ export function mesh_boundary_polylines(vertex_count: number, buffer: Float64Arr
|
|
|
249
281
|
*/
|
|
250
282
|
export function mesh_build_coplanar_connected_face_groups(vertex_count: number, buffer: Float64Array): Float64Array;
|
|
251
283
|
|
|
284
|
+
/**
|
|
285
|
+
* Display-ready render buffers: creased (split) vertex normals plus feature
|
|
286
|
+
* edges, computed in one pass. Replaces THREE's toCreasedNormals +
|
|
287
|
+
* EdgesGeometry in app layers (orders of magnitude faster on large meshes).
|
|
288
|
+
*
|
|
289
|
+
* Output (f32-packed):
|
|
290
|
+
* [vertexCount, positions (vertexCount*3), normals (vertexCount*3),
|
|
291
|
+
* edgeSegmentCount, edgePositions (edgeSegmentCount*6)]
|
|
292
|
+
* Vertices are non-indexed in input triangle order, so raycast face indices
|
|
293
|
+
* against the source mesh stay valid.
|
|
294
|
+
*/
|
|
295
|
+
export function mesh_build_render_buffers(vertex_count: number, buffer: Float64Array, crease_angle_deg: number): Float32Array;
|
|
296
|
+
|
|
252
297
|
/**
|
|
253
298
|
* Chamfer all edges of a primitive mesh (flat bevel)
|
|
254
299
|
*
|
|
@@ -378,6 +423,15 @@ export function mesh_get_face_centroid(vertex_count: number, buffer: Float64Arra
|
|
|
378
423
|
*/
|
|
379
424
|
export function mesh_get_face_normal(vertex_count: number, buffer: Float64Array, face_index: number): Float64Array;
|
|
380
425
|
|
|
426
|
+
/**
|
|
427
|
+
* Edge-connected smooth face group (dihedral angle below `max_angle_deg`).
|
|
428
|
+
* Output format: [count, isPlanar (0|1), tri0, tri1, ...]
|
|
429
|
+
* `isPlanar` is 1 when every triangle normal in the group aligns with the
|
|
430
|
+
* seed triangle's normal (i.e. the group is a flat face), 0 for curved
|
|
431
|
+
* regions such as cylinder walls or lofted patches.
|
|
432
|
+
*/
|
|
433
|
+
export function mesh_get_smooth_face_group(vertex_count: number, buffer: Float64Array, face_index: number, max_angle_deg: number): Float64Array;
|
|
434
|
+
|
|
381
435
|
/**
|
|
382
436
|
* Get mesh statistics
|
|
383
437
|
* Returns [vertex_count, face_count, edge_count]
|
|
@@ -424,6 +478,13 @@ export function mesh_mesh_intersect(va_count: number, buffer_a: Float64Array, vb
|
|
|
424
478
|
*/
|
|
425
479
|
export function mesh_patch_from_points(coords: Float64Array): Float64Array;
|
|
426
480
|
|
|
481
|
+
/**
|
|
482
|
+
* Evaluate a point on a planar mesh-face surface at normalized parameters.
|
|
483
|
+
* Parameters map across the face group's local 2D bounds.
|
|
484
|
+
* Returns [x, y, z] or [NaN, NaN, NaN] when the query falls outside the face region.
|
|
485
|
+
*/
|
|
486
|
+
export function mesh_planar_face_evaluate(vertex_count: number, buffer: Float64Array, face_index: number, u: number, v: number): Float64Array;
|
|
487
|
+
|
|
427
488
|
/**
|
|
428
489
|
* Intersect a mesh with a plane, returning polyline points.
|
|
429
490
|
* Input: vertex_count, mesh_buffer..., nx, ny, nz, d
|
|
@@ -508,12 +569,17 @@ export function nurbs_curve_curve_intersect(data_a: Float64Array, data_b: Float6
|
|
|
508
569
|
export function nurbs_curve_plane_intersect(data: Float64Array, nx: number, ny: number, nz: number, d: number): Float64Array;
|
|
509
570
|
|
|
510
571
|
/**
|
|
511
|
-
* Evaluate a NURBS surface at (u, v)
|
|
512
|
-
* Input format: same as tessellate but last 2 values are u, v instead of u_segs, v_segs
|
|
572
|
+
* Evaluate a NURBS surface at normalized parameters (u, v) in [0,1].
|
|
513
573
|
* Returns [x, y, z]
|
|
514
574
|
*/
|
|
515
575
|
export function nurbs_surface_evaluate(data: Float64Array, u: number, v: number): Float64Array;
|
|
516
576
|
|
|
577
|
+
/**
|
|
578
|
+
* Evaluate a NURBS surface unit normal at normalized parameters (u, v) in [0,1].
|
|
579
|
+
* Returns [x, y, z]
|
|
580
|
+
*/
|
|
581
|
+
export function nurbs_surface_normal(data: Float64Array, u: number, v: number): Float64Array;
|
|
582
|
+
|
|
517
583
|
/**
|
|
518
584
|
* Intersect a NURBS surface with a plane.
|
|
519
585
|
* Input: same surface format as tessellate_nurbs_surface, then plane (nx,ny,nz,d) appended.
|
|
@@ -527,6 +593,21 @@ export function nurbs_surface_plane_intersect(surface_data: Float64Array, nx: nu
|
|
|
527
593
|
*/
|
|
528
594
|
export function nurbs_surface_surface_intersect(data_a: Float64Array, data_b: Float64Array, tess: number): Float64Array;
|
|
529
595
|
|
|
596
|
+
/**
|
|
597
|
+
* Offset a polycurve made of line and arc segments.
|
|
598
|
+
* Input format: [segment_count, type, ...data, ...]
|
|
599
|
+
* type 0 = Line: [sx,sy,sz, ex,ey,ez]
|
|
600
|
+
* type 1 = Arc: [cx,cy,cz, nx,ny,nz, radius, start_angle, end_angle]
|
|
601
|
+
* Output uses the same encoded segment format.
|
|
602
|
+
*/
|
|
603
|
+
export function offset_polycurve(segment_data: Float64Array, distance: number, nx: number, ny: number, nz: number, join_style_code: number): Float64Array;
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
* Offset a polycurve and return every exact result curve.
|
|
607
|
+
* Output format: [curve_count, curve_len, curve_data..., curve_len, curve_data..., ...]
|
|
608
|
+
*/
|
|
609
|
+
export function offset_polycurve_all(segment_data: Float64Array, distance: number, nx: number, ny: number, nz: number, join_style_code: number): Float64Array;
|
|
610
|
+
|
|
530
611
|
/**
|
|
531
612
|
* Offset a polyline by a distance in a given plane.
|
|
532
613
|
* If nx=ny=nz=0, the plane normal is auto-detected.
|
|
@@ -617,6 +698,15 @@ export function tessellate_nurbs_surface(data: Float64Array): Float64Array;
|
|
|
617
698
|
*/
|
|
618
699
|
export function test_wasm(): string;
|
|
619
700
|
|
|
701
|
+
/**
|
|
702
|
+
* Thicken an open polycurve into a single closed loop.
|
|
703
|
+
* Input format: [segment_count, type, ...data, ...]
|
|
704
|
+
* type 0 = Line: [sx,sy,sz, ex,ey,ez]
|
|
705
|
+
* type 1 = Arc: [cx,cy,cz, nx,ny,nz, radius, start_angle, end_angle]
|
|
706
|
+
* Output uses the same encoded segment format.
|
|
707
|
+
*/
|
|
708
|
+
export function thicken_polycurve(segment_data: Float64Array, distance: number, both_sides: boolean, nx: number, ny: number, nz: number, join_style_code: number): Float64Array;
|
|
709
|
+
|
|
620
710
|
/**
|
|
621
711
|
* Get version info
|
|
622
712
|
*/
|
|
@@ -628,6 +718,7 @@ export interface InitOutput {
|
|
|
628
718
|
readonly memory: WebAssembly.Memory;
|
|
629
719
|
readonly arc_length: (a: number, b: number, c: number) => number;
|
|
630
720
|
readonly arc_point_at: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
|
|
721
|
+
readonly build_nurbs_curve: (a: number, b: number, c: number, d: number) => [number, number];
|
|
631
722
|
readonly chamfer_polycurve: (a: number, b: number, c: number) => [number, number];
|
|
632
723
|
readonly circle_length: (a: number) => number;
|
|
633
724
|
readonly circle_point_at: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
@@ -648,6 +739,7 @@ export interface InitOutput {
|
|
|
648
739
|
readonly loft_circles: (a: number, b: number, c: number, d: number) => [number, number];
|
|
649
740
|
readonly loft_nurbs_surface: (a: number, b: number) => [number, number];
|
|
650
741
|
readonly loft_polylines: (a: number, b: number, c: number, d: number) => [number, number];
|
|
742
|
+
readonly loft_profiles: (a: number, b: number, c: number, d: number) => [number, number];
|
|
651
743
|
readonly make_nurbs_curves_compatible: (a: number, b: number) => [number, number];
|
|
652
744
|
readonly mesh_apply_matrix: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
653
745
|
readonly mesh_boolean_intersection: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
@@ -676,6 +768,7 @@ export interface InitOutput {
|
|
|
676
768
|
readonly mesh_boolean_union: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
677
769
|
readonly mesh_boundary_polylines: (a: number, b: number, c: number) => [number, number];
|
|
678
770
|
readonly mesh_build_coplanar_connected_face_groups: (a: number, b: number, c: number) => [number, number];
|
|
771
|
+
readonly mesh_build_render_buffers: (a: number, b: number, c: number, d: number) => [number, number];
|
|
679
772
|
readonly mesh_chamfer_all_edges: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
680
773
|
readonly mesh_compute_planar_curve_normal: (a: number, b: number, c: number) => [number, number];
|
|
681
774
|
readonly mesh_contains_point: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
|
|
@@ -698,6 +791,7 @@ export interface InitOutput {
|
|
|
698
791
|
readonly mesh_get_face_area: (a: number, b: number, c: number, d: number) => number;
|
|
699
792
|
readonly mesh_get_face_centroid: (a: number, b: number, c: number, d: number) => [number, number];
|
|
700
793
|
readonly mesh_get_face_normal: (a: number, b: number, c: number, d: number) => [number, number];
|
|
794
|
+
readonly mesh_get_smooth_face_group: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
701
795
|
readonly mesh_get_stats: (a: number, b: number, c: number) => [number, number];
|
|
702
796
|
readonly mesh_import_obj: (a: number, b: number) => [number, number];
|
|
703
797
|
readonly mesh_is_closed_volume: (a: number, b: number, c: number) => number;
|
|
@@ -707,6 +801,7 @@ export interface InitOutput {
|
|
|
707
801
|
readonly mesh_merge: (a: number, b: number) => [number, number];
|
|
708
802
|
readonly mesh_mesh_intersect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
709
803
|
readonly mesh_patch_from_points: (a: number, b: number) => [number, number];
|
|
804
|
+
readonly mesh_planar_face_evaluate: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
710
805
|
readonly mesh_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
711
806
|
readonly mesh_prepare_boolean_cutter_curve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
712
807
|
readonly mesh_raycast: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
|
|
@@ -723,8 +818,11 @@ export interface InitOutput {
|
|
|
723
818
|
readonly nurbs_curve_curve_intersect: (a: number, b: number, c: number, d: number) => [number, number];
|
|
724
819
|
readonly nurbs_curve_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
725
820
|
readonly nurbs_surface_evaluate: (a: number, b: number, c: number, d: number) => [number, number];
|
|
821
|
+
readonly nurbs_surface_normal: (a: number, b: number, c: number, d: number) => [number, number];
|
|
726
822
|
readonly nurbs_surface_plane_intersect: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
727
823
|
readonly nurbs_surface_surface_intersect: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
824
|
+
readonly offset_polycurve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
825
|
+
readonly offset_polycurve_all: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
|
|
728
826
|
readonly offset_polyline_curve: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
729
827
|
readonly polycurve_to_nurbs: (a: number, b: number) => [number, number];
|
|
730
828
|
readonly polyline_length: (a: number, b: number) => number;
|
|
@@ -737,6 +835,7 @@ export interface InitOutput {
|
|
|
737
835
|
readonly sweep_polylines: (a: number, b: number, c: number, d: number, e: number) => [number, number];
|
|
738
836
|
readonly tessellate_nurbs_surface: (a: number, b: number) => [number, number];
|
|
739
837
|
readonly test_wasm: () => [number, number];
|
|
838
|
+
readonly thicken_polycurve: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
|
|
740
839
|
readonly version: () => [number, number];
|
|
741
840
|
readonly ray_distance_to_point: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number;
|
|
742
841
|
readonly __wbindgen_externrefs: WebAssembly.Table;
|
package/src/wasm-bindings.js
CHANGED
|
@@ -34,6 +34,32 @@ export function arc_point_at(cx, cy, cz, nx, ny, nz, radius, start_angle, end_an
|
|
|
34
34
|
return v1;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Build a NURBS curve from raw control points with kernel-managed knots and weights.
|
|
39
|
+
*
|
|
40
|
+
* * `degree` - Requested degree (clamped to the valid range for the point count)
|
|
41
|
+
* * `coords` - Flat control points [x,y,z, x,y,z, ...]. For closed curves the
|
|
42
|
+
* first point must NOT be repeated at the end.
|
|
43
|
+
* * `closed` - When true, builds a periodic (C^{degree-1}) closed loop;
|
|
44
|
+
* otherwise a clamped curve interpolating the first/last control points.
|
|
45
|
+
*
|
|
46
|
+
* Returns the encoded curve [degree, num_cp, cp_xyz..., weights..., knots...]
|
|
47
|
+
* (the same format consumed by `sample_nurbs_curve` / `evaluate_nurbs_curve_at`),
|
|
48
|
+
* or an empty buffer on failure.
|
|
49
|
+
* @param {number} degree
|
|
50
|
+
* @param {Float64Array} coords
|
|
51
|
+
* @param {boolean} closed
|
|
52
|
+
* @returns {Float64Array}
|
|
53
|
+
*/
|
|
54
|
+
export function build_nurbs_curve(degree, coords, closed) {
|
|
55
|
+
const ptr0 = passArrayF64ToWasm0(coords, wasm.__wbindgen_malloc);
|
|
56
|
+
const len0 = WASM_VECTOR_LEN;
|
|
57
|
+
const ret = wasm.build_nurbs_curve(degree, ptr0, len0, closed);
|
|
58
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
59
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
60
|
+
return v2;
|
|
61
|
+
}
|
|
62
|
+
|
|
37
63
|
/**
|
|
38
64
|
* Chamfer corners of a polyline by cutting each corner with a straight segment.
|
|
39
65
|
* Input: flat coords [x1,y1,z1, ...], distance from corner to cut.
|
|
@@ -415,6 +441,34 @@ export function loft_polylines(polyline_data, _segments, with_caps) {
|
|
|
415
441
|
return v2;
|
|
416
442
|
}
|
|
417
443
|
|
|
444
|
+
/**
|
|
445
|
+
* Loft between raw profile polylines with kernel-managed compatibility
|
|
446
|
+
* (resampling to a common count, seam alignment, direction matching).
|
|
447
|
+
*
|
|
448
|
+
* # Parameters
|
|
449
|
+
* * `profile_data` - Flat array where each profile is prefixed by its point count:
|
|
450
|
+
* [count1, x1, y1, z1, ..., count2, x1, y1, z1, ...]
|
|
451
|
+
* * `closed` - Whether profiles are closed loops (input must NOT repeat the
|
|
452
|
+
* first point). Closed profiles loft into a tube, open profiles into a sheet.
|
|
453
|
+
* * `with_caps` - Cap the first/last profiles (closed profiles only) to produce
|
|
454
|
+
* a watertight solid ready for booleans.
|
|
455
|
+
*
|
|
456
|
+
* # Returns
|
|
457
|
+
* Mesh buffers for the lofted surface (empty on failure)
|
|
458
|
+
* @param {Float64Array} profile_data
|
|
459
|
+
* @param {boolean} closed
|
|
460
|
+
* @param {boolean} with_caps
|
|
461
|
+
* @returns {Float64Array}
|
|
462
|
+
*/
|
|
463
|
+
export function loft_profiles(profile_data, closed, with_caps) {
|
|
464
|
+
const ptr0 = passArrayF64ToWasm0(profile_data, wasm.__wbindgen_malloc);
|
|
465
|
+
const len0 = WASM_VECTOR_LEN;
|
|
466
|
+
const ret = wasm.loft_profiles(ptr0, len0, closed, with_caps);
|
|
467
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
468
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
469
|
+
return v2;
|
|
470
|
+
}
|
|
471
|
+
|
|
418
472
|
/**
|
|
419
473
|
* Make multiple NURBS curves compatible (same knot vectors, same CP count).
|
|
420
474
|
* Input: [curve_count, curve1_data..., curve2_data..., ...]
|
|
@@ -1084,6 +1138,30 @@ export function mesh_build_coplanar_connected_face_groups(vertex_count, buffer)
|
|
|
1084
1138
|
return v2;
|
|
1085
1139
|
}
|
|
1086
1140
|
|
|
1141
|
+
/**
|
|
1142
|
+
* Display-ready render buffers: creased (split) vertex normals plus feature
|
|
1143
|
+
* edges, computed in one pass. Replaces THREE's toCreasedNormals +
|
|
1144
|
+
* EdgesGeometry in app layers (orders of magnitude faster on large meshes).
|
|
1145
|
+
*
|
|
1146
|
+
* Output (f32-packed):
|
|
1147
|
+
* [vertexCount, positions (vertexCount*3), normals (vertexCount*3),
|
|
1148
|
+
* edgeSegmentCount, edgePositions (edgeSegmentCount*6)]
|
|
1149
|
+
* Vertices are non-indexed in input triangle order, so raycast face indices
|
|
1150
|
+
* against the source mesh stay valid.
|
|
1151
|
+
* @param {number} vertex_count
|
|
1152
|
+
* @param {Float64Array} buffer
|
|
1153
|
+
* @param {number} crease_angle_deg
|
|
1154
|
+
* @returns {Float32Array}
|
|
1155
|
+
*/
|
|
1156
|
+
export function mesh_build_render_buffers(vertex_count, buffer, crease_angle_deg) {
|
|
1157
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
1158
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1159
|
+
const ret = wasm.mesh_build_render_buffers(vertex_count, ptr0, len0, crease_angle_deg);
|
|
1160
|
+
var v2 = getArrayF32FromWasm0(ret[0], ret[1]).slice();
|
|
1161
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);
|
|
1162
|
+
return v2;
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1087
1165
|
/**
|
|
1088
1166
|
* Chamfer all edges of a primitive mesh (flat bevel)
|
|
1089
1167
|
*
|
|
@@ -1469,6 +1547,27 @@ export function mesh_get_face_normal(vertex_count, buffer, face_index) {
|
|
|
1469
1547
|
return v2;
|
|
1470
1548
|
}
|
|
1471
1549
|
|
|
1550
|
+
/**
|
|
1551
|
+
* Edge-connected smooth face group (dihedral angle below `max_angle_deg`).
|
|
1552
|
+
* Output format: [count, isPlanar (0|1), tri0, tri1, ...]
|
|
1553
|
+
* `isPlanar` is 1 when every triangle normal in the group aligns with the
|
|
1554
|
+
* seed triangle's normal (i.e. the group is a flat face), 0 for curved
|
|
1555
|
+
* regions such as cylinder walls or lofted patches.
|
|
1556
|
+
* @param {number} vertex_count
|
|
1557
|
+
* @param {Float64Array} buffer
|
|
1558
|
+
* @param {number} face_index
|
|
1559
|
+
* @param {number} max_angle_deg
|
|
1560
|
+
* @returns {Float64Array}
|
|
1561
|
+
*/
|
|
1562
|
+
export function mesh_get_smooth_face_group(vertex_count, buffer, face_index, max_angle_deg) {
|
|
1563
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
1564
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1565
|
+
const ret = wasm.mesh_get_smooth_face_group(vertex_count, ptr0, len0, face_index, max_angle_deg);
|
|
1566
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
1567
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
1568
|
+
return v2;
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1472
1571
|
/**
|
|
1473
1572
|
* Get mesh statistics
|
|
1474
1573
|
* Returns [vertex_count, face_count, edge_count]
|
|
@@ -1629,6 +1728,26 @@ export function mesh_patch_from_points(coords) {
|
|
|
1629
1728
|
return v2;
|
|
1630
1729
|
}
|
|
1631
1730
|
|
|
1731
|
+
/**
|
|
1732
|
+
* Evaluate a point on a planar mesh-face surface at normalized parameters.
|
|
1733
|
+
* Parameters map across the face group's local 2D bounds.
|
|
1734
|
+
* Returns [x, y, z] or [NaN, NaN, NaN] when the query falls outside the face region.
|
|
1735
|
+
* @param {number} vertex_count
|
|
1736
|
+
* @param {Float64Array} buffer
|
|
1737
|
+
* @param {number} face_index
|
|
1738
|
+
* @param {number} u
|
|
1739
|
+
* @param {number} v
|
|
1740
|
+
* @returns {Float64Array}
|
|
1741
|
+
*/
|
|
1742
|
+
export function mesh_planar_face_evaluate(vertex_count, buffer, face_index, u, v) {
|
|
1743
|
+
const ptr0 = passArrayF64ToWasm0(buffer, wasm.__wbindgen_malloc);
|
|
1744
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1745
|
+
const ret = wasm.mesh_planar_face_evaluate(vertex_count, ptr0, len0, face_index, u, v);
|
|
1746
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
1747
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
1748
|
+
return v2;
|
|
1749
|
+
}
|
|
1750
|
+
|
|
1632
1751
|
/**
|
|
1633
1752
|
* Intersect a mesh with a plane, returning polyline points.
|
|
1634
1753
|
* Input: vertex_count, mesh_buffer..., nx, ny, nz, d
|
|
@@ -1933,8 +2052,7 @@ export function nurbs_curve_plane_intersect(data, nx, ny, nz, d) {
|
|
|
1933
2052
|
}
|
|
1934
2053
|
|
|
1935
2054
|
/**
|
|
1936
|
-
* Evaluate a NURBS surface at (u, v)
|
|
1937
|
-
* Input format: same as tessellate but last 2 values are u, v instead of u_segs, v_segs
|
|
2055
|
+
* Evaluate a NURBS surface at normalized parameters (u, v) in [0,1].
|
|
1938
2056
|
* Returns [x, y, z]
|
|
1939
2057
|
* @param {Float64Array} data
|
|
1940
2058
|
* @param {number} u
|
|
@@ -1950,6 +2068,23 @@ export function nurbs_surface_evaluate(data, u, v) {
|
|
|
1950
2068
|
return v2;
|
|
1951
2069
|
}
|
|
1952
2070
|
|
|
2071
|
+
/**
|
|
2072
|
+
* Evaluate a NURBS surface unit normal at normalized parameters (u, v) in [0,1].
|
|
2073
|
+
* Returns [x, y, z]
|
|
2074
|
+
* @param {Float64Array} data
|
|
2075
|
+
* @param {number} u
|
|
2076
|
+
* @param {number} v
|
|
2077
|
+
* @returns {Float64Array}
|
|
2078
|
+
*/
|
|
2079
|
+
export function nurbs_surface_normal(data, u, v) {
|
|
2080
|
+
const ptr0 = passArrayF64ToWasm0(data, wasm.__wbindgen_malloc);
|
|
2081
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2082
|
+
const ret = wasm.nurbs_surface_normal(ptr0, len0, u, v);
|
|
2083
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2084
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2085
|
+
return v2;
|
|
2086
|
+
}
|
|
2087
|
+
|
|
1953
2088
|
/**
|
|
1954
2089
|
* Intersect a NURBS surface with a plane.
|
|
1955
2090
|
* Input: same surface format as tessellate_nurbs_surface, then plane (nx,ny,nz,d) appended.
|
|
@@ -1990,6 +2125,49 @@ export function nurbs_surface_surface_intersect(data_a, data_b, tess) {
|
|
|
1990
2125
|
return v3;
|
|
1991
2126
|
}
|
|
1992
2127
|
|
|
2128
|
+
/**
|
|
2129
|
+
* Offset a polycurve made of line and arc segments.
|
|
2130
|
+
* Input format: [segment_count, type, ...data, ...]
|
|
2131
|
+
* type 0 = Line: [sx,sy,sz, ex,ey,ez]
|
|
2132
|
+
* type 1 = Arc: [cx,cy,cz, nx,ny,nz, radius, start_angle, end_angle]
|
|
2133
|
+
* Output uses the same encoded segment format.
|
|
2134
|
+
* @param {Float64Array} segment_data
|
|
2135
|
+
* @param {number} distance
|
|
2136
|
+
* @param {number} nx
|
|
2137
|
+
* @param {number} ny
|
|
2138
|
+
* @param {number} nz
|
|
2139
|
+
* @param {number} join_style_code
|
|
2140
|
+
* @returns {Float64Array}
|
|
2141
|
+
*/
|
|
2142
|
+
export function offset_polycurve(segment_data, distance, nx, ny, nz, join_style_code) {
|
|
2143
|
+
const ptr0 = passArrayF64ToWasm0(segment_data, wasm.__wbindgen_malloc);
|
|
2144
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2145
|
+
const ret = wasm.offset_polycurve(ptr0, len0, distance, nx, ny, nz, join_style_code);
|
|
2146
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2147
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2148
|
+
return v2;
|
|
2149
|
+
}
|
|
2150
|
+
|
|
2151
|
+
/**
|
|
2152
|
+
* Offset a polycurve and return every exact result curve.
|
|
2153
|
+
* Output format: [curve_count, curve_len, curve_data..., curve_len, curve_data..., ...]
|
|
2154
|
+
* @param {Float64Array} segment_data
|
|
2155
|
+
* @param {number} distance
|
|
2156
|
+
* @param {number} nx
|
|
2157
|
+
* @param {number} ny
|
|
2158
|
+
* @param {number} nz
|
|
2159
|
+
* @param {number} join_style_code
|
|
2160
|
+
* @returns {Float64Array}
|
|
2161
|
+
*/
|
|
2162
|
+
export function offset_polycurve_all(segment_data, distance, nx, ny, nz, join_style_code) {
|
|
2163
|
+
const ptr0 = passArrayF64ToWasm0(segment_data, wasm.__wbindgen_malloc);
|
|
2164
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2165
|
+
const ret = wasm.offset_polycurve_all(ptr0, len0, distance, nx, ny, nz, join_style_code);
|
|
2166
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2167
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2168
|
+
return v2;
|
|
2169
|
+
}
|
|
2170
|
+
|
|
1993
2171
|
/**
|
|
1994
2172
|
* Offset a polyline by a distance in a given plane.
|
|
1995
2173
|
* If nx=ny=nz=0, the plane normal is auto-detected.
|
|
@@ -2232,6 +2410,30 @@ export function test_wasm() {
|
|
|
2232
2410
|
}
|
|
2233
2411
|
}
|
|
2234
2412
|
|
|
2413
|
+
/**
|
|
2414
|
+
* Thicken an open polycurve into a single closed loop.
|
|
2415
|
+
* Input format: [segment_count, type, ...data, ...]
|
|
2416
|
+
* type 0 = Line: [sx,sy,sz, ex,ey,ez]
|
|
2417
|
+
* type 1 = Arc: [cx,cy,cz, nx,ny,nz, radius, start_angle, end_angle]
|
|
2418
|
+
* Output uses the same encoded segment format.
|
|
2419
|
+
* @param {Float64Array} segment_data
|
|
2420
|
+
* @param {number} distance
|
|
2421
|
+
* @param {boolean} both_sides
|
|
2422
|
+
* @param {number} nx
|
|
2423
|
+
* @param {number} ny
|
|
2424
|
+
* @param {number} nz
|
|
2425
|
+
* @param {number} join_style_code
|
|
2426
|
+
* @returns {Float64Array}
|
|
2427
|
+
*/
|
|
2428
|
+
export function thicken_polycurve(segment_data, distance, both_sides, nx, ny, nz, join_style_code) {
|
|
2429
|
+
const ptr0 = passArrayF64ToWasm0(segment_data, wasm.__wbindgen_malloc);
|
|
2430
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2431
|
+
const ret = wasm.thicken_polycurve(ptr0, len0, distance, both_sides, nx, ny, nz, join_style_code);
|
|
2432
|
+
var v2 = getArrayF64FromWasm0(ret[0], ret[1]).slice();
|
|
2433
|
+
wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);
|
|
2434
|
+
return v2;
|
|
2435
|
+
}
|
|
2436
|
+
|
|
2235
2437
|
/**
|
|
2236
2438
|
* Get version info
|
|
2237
2439
|
* @returns {string}
|
|
@@ -2283,11 +2485,24 @@ function __wbg_get_imports() {
|
|
|
2283
2485
|
};
|
|
2284
2486
|
}
|
|
2285
2487
|
|
|
2488
|
+
function getArrayF32FromWasm0(ptr, len) {
|
|
2489
|
+
ptr = ptr >>> 0;
|
|
2490
|
+
return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
|
|
2491
|
+
}
|
|
2492
|
+
|
|
2286
2493
|
function getArrayF64FromWasm0(ptr, len) {
|
|
2287
2494
|
ptr = ptr >>> 0;
|
|
2288
2495
|
return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);
|
|
2289
2496
|
}
|
|
2290
2497
|
|
|
2498
|
+
let cachedFloat32ArrayMemory0 = null;
|
|
2499
|
+
function getFloat32ArrayMemory0() {
|
|
2500
|
+
if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) {
|
|
2501
|
+
cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer);
|
|
2502
|
+
}
|
|
2503
|
+
return cachedFloat32ArrayMemory0;
|
|
2504
|
+
}
|
|
2505
|
+
|
|
2291
2506
|
let cachedFloat64ArrayMemory0 = null;
|
|
2292
2507
|
function getFloat64ArrayMemory0() {
|
|
2293
2508
|
if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {
|
|
@@ -2386,6 +2601,7 @@ let wasmModule, wasm;
|
|
|
2386
2601
|
function __wbg_finalize_init(instance, module) {
|
|
2387
2602
|
wasm = instance.exports;
|
|
2388
2603
|
wasmModule = module;
|
|
2604
|
+
cachedFloat32ArrayMemory0 = null;
|
|
2389
2605
|
cachedFloat64ArrayMemory0 = null;
|
|
2390
2606
|
cachedUint8ArrayMemory0 = null;
|
|
2391
2607
|
wasm.__wbindgen_start();
|