@faicad/faijs 0.31.1 → 0.32.3
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/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +9 -3
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/boolean-op/index.d.ts.map +1 -1
- package/dist/api/boolean-op/index.js +1 -0
- package/dist/api/boolean-op/index.js.map +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +4 -0
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/brep-operations/joinery-brep.js +10 -10
- package/dist/api/brep-operations/joinery-brep.js.map +1 -1
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +1 -0
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/curve-sketch/index.d.ts.map +1 -1
- package/dist/api/curve-sketch/index.js +3 -0
- package/dist/api/curve-sketch/index.js.map +1 -1
- package/dist/api/draft.d.ts.map +1 -1
- package/dist/api/draft.js +1 -0
- package/dist/api/draft.js.map +1 -1
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +1 -0
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +18 -17
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/feature-repair.d.ts.map +1 -1
- package/dist/api/feature-repair.js +6 -0
- package/dist/api/feature-repair.js.map +1 -1
- package/dist/api/fillet-variable.d.ts.map +1 -1
- package/dist/api/fillet-variable.js +1 -0
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +1 -0
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/operations.js +16 -16
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/sketching.js +1 -1
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/topology.js +18 -18
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/helix.d.ts.map +1 -1
- package/dist/api/helix.js +1 -0
- package/dist/api/helix.js.map +1 -1
- package/dist/api/import-brep.d.ts.map +1 -1
- package/dist/api/import-brep.js +1 -0
- package/dist/api/import-brep.js.map +1 -1
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +1 -0
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.d.ts +5 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/loft-advanced.d.ts +66 -0
- package/dist/api/loft-advanced.d.ts.map +1 -0
- package/dist/api/loft-advanced.js +112 -0
- package/dist/api/loft-advanced.js.map +1 -0
- package/dist/api/loft.d.ts +16 -23
- package/dist/api/loft.d.ts.map +1 -1
- package/dist/api/loft.js +22 -40
- package/dist/api/loft.js.map +1 -1
- package/dist/api/measure-query/index.d.ts.map +1 -1
- package/dist/api/measure-query/index.js +2 -0
- package/dist/api/measure-query/index.js.map +1 -1
- package/dist/api/pattern.d.ts.map +1 -1
- package/dist/api/pattern.js +1 -0
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/place.d.ts.map +1 -1
- package/dist/api/place.js +1 -0
- package/dist/api/place.js.map +1 -1
- package/dist/api/profile.d.ts.map +1 -1
- package/dist/api/profile.js +1 -0
- package/dist/api/profile.js.map +1 -1
- package/dist/api/punch-hole.d.ts.map +1 -1
- package/dist/api/punch-hole.js +1 -0
- package/dist/api/punch-hole.js.map +1 -1
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +6 -0
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/revolve.d.ts.map +1 -1
- package/dist/api/revolve.js +1 -0
- package/dist/api/revolve.js.map +1 -1
- package/dist/api/screw.d.ts.map +1 -1
- package/dist/api/screw.js +1 -0
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts.map +1 -1
- package/dist/api/sdf.js +1 -0
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/shell.d.ts.map +1 -1
- package/dist/api/shell.js +1 -0
- package/dist/api/shell.js.map +1 -1
- package/dist/api/sketch-on-face.d.ts +34 -30
- package/dist/api/sketch-on-face.d.ts.map +1 -1
- package/dist/api/sketch-on-face.js +41 -31
- package/dist/api/sketch-on-face.js.map +1 -1
- package/dist/api/sketch-on-plane.d.ts.map +1 -1
- package/dist/api/sketch-on-plane.js +1 -0
- package/dist/api/sketch-on-plane.js.map +1 -1
- package/dist/api/sketch-on-surface.d.ts +76 -0
- package/dist/api/sketch-on-surface.d.ts.map +1 -0
- package/dist/api/sketch-on-surface.js +99 -0
- package/dist/api/sketch-on-surface.js.map +1 -0
- package/dist/api/solid-offset/index.d.ts.map +1 -1
- package/dist/api/solid-offset/index.js +1 -0
- package/dist/api/solid-offset/index.js.map +1 -1
- package/dist/api/split.d.ts.map +1 -1
- package/dist/api/split.js +1 -0
- package/dist/api/split.js.map +1 -1
- package/dist/api/surface/arg-spec.d.ts +5 -4
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +2 -2
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/surface-face/index.d.ts.map +1 -1
- package/dist/api/surface-face/index.js +5 -0
- package/dist/api/surface-face/index.js.map +1 -1
- package/dist/api/surface.d.ts.map +1 -1
- package/dist/api/surface.js +1 -0
- package/dist/api/surface.js.map +1 -1
- package/dist/api/sweep-advanced.d.ts +117 -0
- package/dist/api/sweep-advanced.d.ts.map +1 -0
- package/dist/api/sweep-advanced.js +94 -0
- package/dist/api/sweep-advanced.js.map +1 -0
- package/dist/api/sweep.d.ts +18 -88
- package/dist/api/sweep.d.ts.map +1 -1
- package/dist/api/sweep.js +27 -30
- package/dist/api/sweep.js.map +1 -1
- package/dist/api/thicken.d.ts.map +1 -1
- package/dist/api/thicken.js +1 -0
- package/dist/api/thicken.js.map +1 -1
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +2 -0
- package/dist/api/transform.js.map +1 -1
- package/dist/api/wire.d.ts.map +1 -1
- package/dist/api/wire.js +1 -0
- package/dist/api/wire.js.map +1 -1
- package/dist/boolean/cross-section.d.ts +7 -6
- package/dist/boolean/cross-section.d.ts.map +1 -1
- package/dist/boolean/cross-section.js +38 -27
- package/dist/boolean/cross-section.js.map +1 -1
- package/dist/boolean/deriveNormals.d.ts +5 -5
- package/dist/boolean/deriveNormals.d.ts.map +1 -1
- package/dist/boolean/deriveNormals.js +18 -18
- package/dist/boolean/deriveNormals.js.map +1 -1
- package/dist/boolean/extrude-helpers.d.ts +6 -6
- package/dist/boolean/extrude-helpers.d.ts.map +1 -1
- package/dist/boolean/extrude-helpers.js +6 -6
- package/dist/boolean/extrude-helpers.js.map +1 -1
- package/dist/boolean/geo-convert.d.ts +11 -8
- package/dist/boolean/geo-convert.d.ts.map +1 -1
- package/dist/boolean/geo-convert.js +17 -73
- package/dist/boolean/geo-convert.js.map +1 -1
- package/dist/boolean/index.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +5 -5
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +42 -42
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +24 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +30 -0
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +138 -0
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +5 -2
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +16 -7
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +2 -0
- package/dist/define-op.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lang/codegen.d.ts +14 -3
- package/dist/lang/codegen.d.ts.map +1 -1
- package/dist/lang/codegen.js +80 -5
- package/dist/lang/codegen.js.map +1 -1
- package/dist/lang/metadata-extractor.d.ts +10 -3
- package/dist/lang/metadata-extractor.d.ts.map +1 -1
- package/dist/lang/metadata-extractor.js +160 -65
- package/dist/lang/metadata-extractor.js.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +3 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +3 -0
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/math3d/Box3.d.ts +86 -0
- package/dist/math3d/Box3.d.ts.map +1 -0
- package/dist/math3d/Box3.js +149 -0
- package/dist/math3d/Box3.js.map +1 -0
- package/dist/math3d/Euler.d.ts +64 -0
- package/dist/math3d/Euler.d.ts.map +1 -0
- package/dist/math3d/Euler.js +94 -0
- package/dist/math3d/Euler.js.map +1 -0
- package/dist/math3d/Mat4.d.ts +196 -0
- package/dist/math3d/Mat4.d.ts.map +1 -0
- package/dist/math3d/Mat4.js +518 -0
- package/dist/math3d/Mat4.js.map +1 -0
- package/dist/math3d/Plane.d.ts +67 -0
- package/dist/math3d/Plane.d.ts.map +1 -0
- package/dist/math3d/Plane.js +90 -0
- package/dist/math3d/Plane.js.map +1 -0
- package/dist/math3d/Quat.d.ts +163 -0
- package/dist/math3d/Quat.d.ts.map +1 -0
- package/dist/math3d/Quat.js +408 -0
- package/dist/math3d/Quat.js.map +1 -0
- package/dist/math3d/Vec2.d.ts +185 -0
- package/dist/math3d/Vec2.d.ts.map +1 -0
- package/dist/math3d/Vec2.js +276 -0
- package/dist/math3d/Vec2.js.map +1 -0
- package/dist/math3d/Vec3.d.ts +326 -0
- package/dist/math3d/Vec3.d.ts.map +1 -0
- package/dist/math3d/Vec3.js +521 -0
- package/dist/math3d/Vec3.js.map +1 -0
- package/dist/math3d/index.d.ts +19 -0
- package/dist/math3d/index.d.ts.map +1 -0
- package/dist/math3d/index.js +19 -0
- package/dist/math3d/index.js.map +1 -0
- package/dist/mesh/decoration-provider.d.ts +2 -2
- package/dist/mesh/decoration-provider.d.ts.map +1 -1
- package/dist/mesh/decoration-provider.js.map +1 -1
- package/dist/mesh/engrave.d.ts.map +1 -1
- package/dist/mesh/engrave.js +36 -37
- package/dist/mesh/engrave.js.map +1 -1
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +6 -7
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/knurl/KnurlGenerator.d.ts +8 -7
- package/dist/mesh/knurl/KnurlGenerator.d.ts.map +1 -1
- package/dist/mesh/knurl/KnurlGenerator.js +9 -9
- package/dist/mesh/knurl/KnurlGenerator.js.map +1 -1
- package/dist/mesh/knurl/displacement.d.ts +7 -6
- package/dist/mesh/knurl/displacement.d.ts.map +1 -1
- package/dist/mesh/knurl/displacement.js +29 -29
- package/dist/mesh/knurl/displacement.js.map +1 -1
- package/dist/mesh/knurl/subdivision.d.ts +3 -3
- package/dist/mesh/knurl/subdivision.d.ts.map +1 -1
- package/dist/mesh/knurl/subdivision.js +21 -15
- package/dist/mesh/knurl/subdivision.js.map +1 -1
- package/dist/mesh/knurl/textureLoader.d.ts +3 -3
- package/dist/mesh/knurl/textureLoader.d.ts.map +1 -1
- package/dist/mesh/knurl/textureLoader.js.map +1 -1
- package/dist/mesh/meshdata/index.d.ts +12 -0
- package/dist/mesh/meshdata/index.d.ts.map +1 -0
- package/dist/mesh/meshdata/index.js +12 -0
- package/dist/mesh/meshdata/index.js.map +1 -0
- package/dist/mesh/meshdata/ops.d.ts +62 -0
- package/dist/mesh/meshdata/ops.d.ts.map +1 -0
- package/dist/mesh/meshdata/ops.js +160 -0
- package/dist/mesh/meshdata/ops.js.map +1 -0
- package/dist/mesh/meshdata/parametric.d.ts +70 -0
- package/dist/mesh/meshdata/parametric.d.ts.map +1 -0
- package/dist/mesh/meshdata/parametric.js +213 -0
- package/dist/mesh/meshdata/parametric.js.map +1 -0
- package/dist/mesh/meshdata/weld.d.ts +21 -0
- package/dist/mesh/meshdata/weld.d.ts.map +1 -0
- package/dist/mesh/meshdata/weld.js +50 -0
- package/dist/mesh/meshdata/weld.js.map +1 -0
- package/dist/mesh/primitives.d.ts +1 -1
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +38 -39
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/query.js +11 -11
- package/dist/mesh/query.js.map +1 -1
- package/dist/mesh/stl-loader.d.ts +7 -7
- package/dist/mesh/stl-loader.d.ts.map +1 -1
- package/dist/mesh/stl-loader.js +12 -24
- package/dist/mesh/stl-loader.js.map +1 -1
- package/dist/mesh/threemf-view.d.ts +11 -11
- package/dist/mesh/threemf-view.d.ts.map +1 -1
- package/dist/mesh/threemf-view.js +10 -10
- package/dist/mesh/threemf-view.js.map +1 -1
- package/dist/mesh/transform.d.ts +14 -8
- package/dist/mesh/transform.d.ts.map +1 -1
- package/dist/mesh/transform.js +18 -13
- package/dist/mesh/transform.js.map +1 -1
- package/dist/mesh/types.d.ts +2 -0
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +20 -0
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/primitives/brep-primitives.d.ts +8 -12
- package/dist/primitives/brep-primitives.d.ts.map +1 -1
- package/dist/primitives/brep-primitives.js +10 -28
- package/dist/primitives/brep-primitives.js.map +1 -1
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/mesh-primitives.d.ts +10 -10
- package/dist/primitives/mesh-primitives.d.ts.map +1 -1
- package/dist/primitives/mesh-primitives.js +29 -76
- package/dist/primitives/mesh-primitives.js.map +1 -1
- package/dist/primitives/screw/screw.d.ts +3 -3
- package/dist/primitives/screw/screw.d.ts.map +1 -1
- package/dist/primitives/screw/screw.js +10 -9
- package/dist/primitives/screw/screw.js.map +1 -1
- package/dist/sdf/index.js.map +1 -1
- package/dist/units.d.ts +40 -0
- package/dist/units.d.ts.map +1 -1
- package/dist/units.js.map +1 -1
- package/package.json +15 -5
- package/dist/api/brep-mirror/booleanFns.d.ts +0 -40
- package/dist/api/brep-mirror/booleanFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/booleanFns.js +0 -104
- package/dist/api/brep-mirror/booleanFns.js.map +0 -1
- package/dist/api/brep-mirror/brepHelpers.d.ts +0 -55
- package/dist/api/brep-mirror/brepHelpers.d.ts.map +0 -1
- package/dist/api/brep-mirror/brepHelpers.js +0 -131
- package/dist/api/brep-mirror/brepHelpers.js.map +0 -1
- package/dist/api/brep-mirror/compoundFns.d.ts +0 -47
- package/dist/api/brep-mirror/compoundFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/compoundFns.js +0 -300
- package/dist/api/brep-mirror/compoundFns.js.map +0 -1
- package/dist/api/brep-mirror/healingFns.d.ts +0 -78
- package/dist/api/brep-mirror/healingFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/healingFns.js +0 -294
- package/dist/api/brep-mirror/healingFns.js.map +0 -1
- package/dist/api/brep-mirror/hullFns.d.ts +0 -20
- package/dist/api/brep-mirror/hullFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/hullFns.js +0 -46
- package/dist/api/brep-mirror/hullFns.js.map +0 -1
- package/dist/api/brep-mirror/joinery-brep.d.ts +0 -172
- package/dist/api/brep-mirror/joinery-brep.d.ts.map +0 -1
- package/dist/api/brep-mirror/joinery-brep.js +0 -463
- package/dist/api/brep-mirror/joinery-brep.js.map +0 -1
- package/dist/api/brep-mirror/patternFns.d.ts +0 -43
- package/dist/api/brep-mirror/patternFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/patternFns.js +0 -178
- package/dist/api/brep-mirror/patternFns.js.map +0 -1
- package/dist/api/brep-mirror/primitiveFns.d.ts +0 -42
- package/dist/api/brep-mirror/primitiveFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/primitiveFns.js +0 -104
- package/dist/api/brep-mirror/primitiveFns.js.map +0 -1
- package/dist/api/brep-mirror/roofFns.d.ts +0 -24
- package/dist/api/brep-mirror/roofFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/roofFns.js +0 -229
- package/dist/api/brep-mirror/roofFns.js.map +0 -1
- package/dist/api/brep-mirror/straightSkeleton.d.ts +0 -36
- package/dist/api/brep-mirror/straightSkeleton.d.ts.map +0 -1
- package/dist/api/brep-mirror/straightSkeleton.js +0 -443
- package/dist/api/brep-mirror/straightSkeleton.js.map +0 -1
- package/dist/api/brep-mirror/sweepFns.d.ts +0 -55
- package/dist/api/brep-mirror/sweepFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/sweepFns.js +0 -200
- package/dist/api/brep-mirror/sweepFns.js.map +0 -1
- package/dist/api/brep-mirror/threadFns.d.ts +0 -83
- package/dist/api/brep-mirror/threadFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/threadFns.js +0 -138
- package/dist/api/brep-mirror/threadFns.js.map +0 -1
- package/dist/api/brep-mirror/topologyFns.d.ts +0 -74
- package/dist/api/brep-mirror/topologyFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/topologyFns.js +0 -276
- package/dist/api/brep-mirror/topologyFns.js.map +0 -1
- package/dist/api/brepjs-compat/constants.d.ts +0 -11
- package/dist/api/brepjs-compat/constants.d.ts.map +0 -1
- package/dist/api/brepjs-compat/constants.js +0 -11
- package/dist/api/brepjs-compat/constants.js.map +0 -1
- package/dist/api/brepjs-compat/index.d.ts +0 -21
- package/dist/api/brepjs-compat/index.d.ts.map +0 -1
- package/dist/api/brepjs-compat/index.js +0 -22
- package/dist/api/brepjs-compat/index.js.map +0 -1
- package/dist/api/brepjs-compat/planeOps.d.ts +0 -98
- package/dist/api/brepjs-compat/planeOps.d.ts.map +0 -1
- package/dist/api/brepjs-compat/planeOps.js +0 -170
- package/dist/api/brepjs-compat/planeOps.js.map +0 -1
- package/dist/api/brepjs-compat/planeTypes.d.ts +0 -24
- package/dist/api/brepjs-compat/planeTypes.d.ts.map +0 -1
- package/dist/api/brepjs-compat/planeTypes.js +0 -8
- package/dist/api/brepjs-compat/planeTypes.js.map +0 -1
- package/dist/api/brepjs-compat/types.d.ts +0 -64
- package/dist/api/brepjs-compat/types.d.ts.map +0 -1
- package/dist/api/brepjs-compat/types.js +0 -48
- package/dist/api/brepjs-compat/types.js.map +0 -1
- package/dist/api/brepjs-compat/vecOps.d.ts +0 -124
- package/dist/api/brepjs-compat/vecOps.d.ts.map +0 -1
- package/dist/api/brepjs-compat/vecOps.js +0 -202
- package/dist/api/brepjs-compat/vecOps.js.map +0 -1
- package/dist/api/generated/brepjs/index.d.ts +0 -310
- package/dist/api/generated/brepjs/index.d.ts.map +0 -1
- package/dist/api/generated/brepjs/index.js +0 -195
- package/dist/api/generated/brepjs/index.js.map +0 -1
- package/dist/api/generated/cad/script-face.d.ts +0 -12
- package/dist/api/generated/cad/script-face.d.ts.map +0 -1
- package/dist/api/generated/cad/script-face.js +0 -146
- package/dist/api/generated/cad/script-face.js.map +0 -1
- package/dist/api/internal/compat-projection.d.ts +0 -55
- package/dist/api/internal/compat-projection.d.ts.map +0 -1
- package/dist/api/internal/compat-projection.js +0 -75
- package/dist/api/internal/compat-projection.js.map +0 -1
- package/dist/api/occt-kernel-bridge.d.ts +0 -118
- package/dist/api/occt-kernel-bridge.d.ts.map +0 -1
- package/dist/api/occt-kernel-bridge.js +0 -283
- package/dist/api/occt-kernel-bridge.js.map +0 -1
- package/dist/api/sketch.d.ts +0 -80
- package/dist/api/sketch.d.ts.map +0 -1
- package/dist/api/sketch.js +0 -155
- package/dist/api/sketch.js.map +0 -1
- package/dist/api/surface/projection-overrides.d.ts +0 -38
- package/dist/api/surface/projection-overrides.d.ts.map +0 -1
- package/dist/api/surface/projection-overrides.js +0 -169
- package/dist/api/surface/projection-overrides.js.map +0 -1
- package/dist/brepjs-compat.d.ts +0 -20
- package/dist/brepjs-compat.d.ts.map +0 -1
- package/dist/brepjs-compat.js +0 -20
- package/dist/brepjs-compat.js.map +0 -1
- package/dist/cad-runtime/createRuntimeWithCad.d.ts +0 -22
- package/dist/cad-runtime/createRuntimeWithCad.d.ts.map +0 -1
- package/dist/cad-runtime/createRuntimeWithCad.js +0 -29
- package/dist/cad-runtime/createRuntimeWithCad.js.map +0 -1
- package/dist/fcstd/attachment.d.ts +0 -72
- package/dist/fcstd/attachment.d.ts.map +0 -1
- package/dist/fcstd/attachment.js +0 -93
- package/dist/fcstd/attachment.js.map +0 -1
- package/dist/fcstd/build-fai-zip.d.ts +0 -40
- package/dist/fcstd/build-fai-zip.d.ts.map +0 -1
- package/dist/fcstd/build-fai-zip.js +0 -111
- package/dist/fcstd/build-fai-zip.js.map +0 -1
- package/dist/fcstd/cli.d.ts +0 -3
- package/dist/fcstd/cli.d.ts.map +0 -1
- package/dist/fcstd/cli.js +0 -37
- package/dist/fcstd/cli.js.map +0 -1
- package/dist/fcstd/codegen.d.ts +0 -79
- package/dist/fcstd/codegen.d.ts.map +0 -1
- package/dist/fcstd/codegen.js +0 -605
- package/dist/fcstd/codegen.js.map +0 -1
- package/dist/fcstd/container.d.ts +0 -75
- package/dist/fcstd/container.d.ts.map +0 -1
- package/dist/fcstd/container.js +0 -36
- package/dist/fcstd/container.js.map +0 -1
- package/dist/fcstd/contour.d.ts +0 -43
- package/dist/fcstd/contour.d.ts.map +0 -1
- package/dist/fcstd/contour.js +0 -96
- package/dist/fcstd/contour.js.map +0 -1
- package/dist/fcstd/convert.d.ts +0 -63
- package/dist/fcstd/convert.d.ts.map +0 -1
- package/dist/fcstd/convert.js +0 -274
- package/dist/fcstd/convert.js.map +0 -1
- package/dist/fcstd/document.d.ts +0 -48
- package/dist/fcstd/document.d.ts.map +0 -1
- package/dist/fcstd/document.js +0 -140
- package/dist/fcstd/document.js.map +0 -1
- package/dist/fcstd/expressions.d.ts +0 -74
- package/dist/fcstd/expressions.d.ts.map +0 -1
- package/dist/fcstd/expressions.js +0 -157
- package/dist/fcstd/expressions.js.map +0 -1
- package/dist/fcstd/external-geo.d.ts +0 -49
- package/dist/fcstd/external-geo.d.ts.map +0 -1
- package/dist/fcstd/external-geo.js +0 -140
- package/dist/fcstd/external-geo.js.map +0 -1
- package/dist/fcstd/feature-translate.d.ts +0 -189
- package/dist/fcstd/feature-translate.d.ts.map +0 -1
- package/dist/fcstd/feature-translate.js +0 -968
- package/dist/fcstd/feature-translate.js.map +0 -1
- package/dist/fcstd/index.d.ts +0 -23
- package/dist/fcstd/index.d.ts.map +0 -1
- package/dist/fcstd/index.js +0 -19
- package/dist/fcstd/index.js.map +0 -1
- package/dist/fcstd/placement.d.ts +0 -93
- package/dist/fcstd/placement.d.ts.map +0 -1
- package/dist/fcstd/placement.js +0 -117
- package/dist/fcstd/placement.js.map +0 -1
- package/dist/fcstd/planegcs-backend.d.ts +0 -34
- package/dist/fcstd/planegcs-backend.d.ts.map +0 -1
- package/dist/fcstd/planegcs-backend.js +0 -626
- package/dist/fcstd/planegcs-backend.js.map +0 -1
- package/dist/fcstd/sketch-parse.d.ts +0 -181
- package/dist/fcstd/sketch-parse.d.ts.map +0 -1
- package/dist/fcstd/sketch-parse.js +0 -227
- package/dist/fcstd/sketch-parse.js.map +0 -1
- package/dist/fcstd/sketch-solver.d.ts +0 -63
- package/dist/fcstd/sketch-solver.d.ts.map +0 -1
- package/dist/fcstd/sketch-solver.js +0 -28
- package/dist/fcstd/sketch-solver.js.map +0 -1
- package/dist/fcstd/sketch-verify.d.ts +0 -43
- package/dist/fcstd/sketch-verify.d.ts.map +0 -1
- package/dist/fcstd/sketch-verify.js +0 -62
- package/dist/fcstd/sketch-verify.js.map +0 -1
- package/dist/fcstd/structural-types.d.ts +0 -83
- package/dist/fcstd/structural-types.d.ts.map +0 -1
- package/dist/fcstd/structural-types.js +0 -121
- package/dist/fcstd/structural-types.js.map +0 -1
- package/dist/fcstd/unpack.d.ts +0 -44
- package/dist/fcstd/unpack.d.ts.map +0 -1
- package/dist/fcstd/unpack.js +0 -64
- package/dist/fcstd/unpack.js.map +0 -1
- package/dist/fcstd-convert.d.ts +0 -30
- package/dist/fcstd-convert.d.ts.map +0 -1
- package/dist/fcstd-convert.js +0 -27
- package/dist/fcstd-convert.js.map +0 -1
- package/dist/mesh/creased-normals.d.ts +0 -50
- package/dist/mesh/creased-normals.d.ts.map +0 -1
- package/dist/mesh/creased-normals.js +0 -114
- package/dist/mesh/creased-normals.js.map +0 -1
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts +0 -260
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts.map +0 -1
- package/dist/occt-kernel/generated/occtPlatform.generated.js +0 -875
- package/dist/occt-kernel/generated/occtPlatform.generated.js.map +0 -1
- package/dist/occt-kernel/stepMetaParser.d.ts +0 -44
- package/dist/occt-kernel/stepMetaParser.d.ts.map +0 -1
- package/dist/occt-kernel/stepMetaParser.js +0 -166
- package/dist/occt-kernel/stepMetaParser.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/baseSketcher2d.d.ts +0 -106
- package/dist/vendored/brepjs/2d/blueprints/baseSketcher2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/baseSketcher2d.js +0 -341
- package/dist/vendored/brepjs/2d/blueprints/baseSketcher2d.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprint.d.ts +0 -185
- package/dist/vendored/brepjs/2d/blueprints/blueprint.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprint.js +0 -361
- package/dist/vendored/brepjs/2d/blueprints/blueprint.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintApproximations.d.ts +0 -15
- package/dist/vendored/brepjs/2d/blueprints/blueprintApproximations.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintApproximations.js +0 -28
- package/dist/vendored/brepjs/2d/blueprints/blueprintApproximations.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintCustomCorners.d.ts +0 -29
- package/dist/vendored/brepjs/2d/blueprints/blueprintCustomCorners.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintCustomCorners.js +0 -86
- package/dist/vendored/brepjs/2d/blueprints/blueprintCustomCorners.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintFns.d.ts +0 -57
- package/dist/vendored/brepjs/2d/blueprints/blueprintFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintFns.js +0 -92
- package/dist/vendored/brepjs/2d/blueprints/blueprintFns.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintOffset.d.ts +0 -58
- package/dist/vendored/brepjs/2d/blueprints/blueprintOffset.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintOffset.js +0 -346
- package/dist/vendored/brepjs/2d/blueprints/blueprintOffset.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintSketcher.d.ts +0 -30
- package/dist/vendored/brepjs/2d/blueprints/blueprintSketcher.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintSketcher.js +0 -45
- package/dist/vendored/brepjs/2d/blueprints/blueprintSketcher.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprints.d.ts +0 -68
- package/dist/vendored/brepjs/2d/blueprints/blueprints.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprints.js +0 -116
- package/dist/vendored/brepjs/2d/blueprints/blueprints.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/boolean2D.d.ts +0 -68
- package/dist/vendored/brepjs/2d/blueprints/boolean2D.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/boolean2D.js +0 -362
- package/dist/vendored/brepjs/2d/blueprints/boolean2D.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/booleanHelpers.d.ts +0 -34
- package/dist/vendored/brepjs/2d/blueprints/booleanHelpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/booleanHelpers.js +0 -176
- package/dist/vendored/brepjs/2d/blueprints/booleanHelpers.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/booleanOperations.d.ts +0 -55
- package/dist/vendored/brepjs/2d/blueprints/booleanOperations.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/booleanOperations.js +0 -110
- package/dist/vendored/brepjs/2d/blueprints/booleanOperations.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/cannedBlueprints.d.ts +0 -41
- package/dist/vendored/brepjs/2d/blueprints/cannedBlueprints.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/cannedBlueprints.js +0 -90
- package/dist/vendored/brepjs/2d/blueprints/cannedBlueprints.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/compoundBlueprint.d.ts +0 -85
- package/dist/vendored/brepjs/2d/blueprints/compoundBlueprint.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/compoundBlueprint.js +0 -136
- package/dist/vendored/brepjs/2d/blueprints/compoundBlueprint.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/ellipseUtils.d.ts +0 -48
- package/dist/vendored/brepjs/2d/blueprints/ellipseUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/ellipseUtils.js +0 -154
- package/dist/vendored/brepjs/2d/blueprints/ellipseUtils.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/genericSketcher.d.ts +0 -342
- package/dist/vendored/brepjs/2d/blueprints/genericSketcher.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/genericSketcher.js +0 -32
- package/dist/vendored/brepjs/2d/blueprints/genericSketcher.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/index.d.ts +0 -16
- package/dist/vendored/brepjs/2d/blueprints/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/index.js +0 -13
- package/dist/vendored/brepjs/2d/blueprints/index.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/intersectionSegments.d.ts +0 -18
- package/dist/vendored/brepjs/2d/blueprints/intersectionSegments.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/intersectionSegments.js +0 -230
- package/dist/vendored/brepjs/2d/blueprints/intersectionSegments.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/lib.d.ts +0 -73
- package/dist/vendored/brepjs/2d/blueprints/lib.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/lib.js +0 -103
- package/dist/vendored/brepjs/2d/blueprints/lib.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/segmentAssembly.d.ts +0 -31
- package/dist/vendored/brepjs/2d/blueprints/segmentAssembly.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/segmentAssembly.js +0 -226
- package/dist/vendored/brepjs/2d/blueprints/segmentAssembly.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/svg.d.ts +0 -22
- package/dist/vendored/brepjs/2d/blueprints/svg.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/svg.js +0 -30
- package/dist/vendored/brepjs/2d/blueprints/svg.js.map +0 -1
- package/dist/vendored/brepjs/2d/curve2dGeometryFns.d.ts +0 -124
- package/dist/vendored/brepjs/2d/curve2dGeometryFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/curve2dGeometryFns.js +0 -235
- package/dist/vendored/brepjs/2d/curve2dGeometryFns.js.map +0 -1
- package/dist/vendored/brepjs/2d/curves.d.ts +0 -45
- package/dist/vendored/brepjs/2d/curves.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/curves.js +0 -139
- package/dist/vendored/brepjs/2d/curves.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/approximations.d.ts +0 -47
- package/dist/vendored/brepjs/2d/lib/approximations.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/approximations.js +0 -82
- package/dist/vendored/brepjs/2d/lib/approximations.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/boundingBox2d.d.ts +0 -39
- package/dist/vendored/brepjs/2d/lib/boundingBox2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/boundingBox2d.js +0 -88
- package/dist/vendored/brepjs/2d/lib/boundingBox2d.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/curve2D.d.ts +0 -82
- package/dist/vendored/brepjs/2d/lib/curve2D.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/curve2D.js +0 -258
- package/dist/vendored/brepjs/2d/lib/curve2D.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/curve2dFns.d.ts +0 -53
- package/dist/vendored/brepjs/2d/lib/curve2dFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/curve2dFns.js +0 -69
- package/dist/vendored/brepjs/2d/lib/curve2dFns.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/customCorners.d.ts +0 -29
- package/dist/vendored/brepjs/2d/lib/customCorners.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/customCorners.js +0 -237
- package/dist/vendored/brepjs/2d/lib/customCorners.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/definitions.d.ts +0 -12
- package/dist/vendored/brepjs/2d/lib/definitions.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/definitions.js +0 -19
- package/dist/vendored/brepjs/2d/lib/definitions.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/ellipseArcFlags.d.ts +0 -21
- package/dist/vendored/brepjs/2d/lib/ellipseArcFlags.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/ellipseArcFlags.js +0 -71
- package/dist/vendored/brepjs/2d/lib/ellipseArcFlags.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/index.d.ts +0 -14
- package/dist/vendored/brepjs/2d/lib/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/index.js +0 -14
- package/dist/vendored/brepjs/2d/lib/index.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/intersections.d.ts +0 -34
- package/dist/vendored/brepjs/2d/lib/intersections.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/intersections.js +0 -77
- package/dist/vendored/brepjs/2d/lib/intersections.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/makeCurves.d.ts +0 -63
- package/dist/vendored/brepjs/2d/lib/makeCurves.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/makeCurves.js +0 -117
- package/dist/vendored/brepjs/2d/lib/makeCurves.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/offset.d.ts +0 -30
- package/dist/vendored/brepjs/2d/lib/offset.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/offset.js +0 -109
- package/dist/vendored/brepjs/2d/lib/offset.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/precision.d.ts +0 -12
- package/dist/vendored/brepjs/2d/lib/precision.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/precision.js +0 -12
- package/dist/vendored/brepjs/2d/lib/precision.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/stitching.d.ts +0 -15
- package/dist/vendored/brepjs/2d/lib/stitching.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/stitching.js +0 -67
- package/dist/vendored/brepjs/2d/lib/stitching.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/svgPath.d.ts +0 -4
- package/dist/vendored/brepjs/2d/lib/svgPath.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/svgPath.js +0 -114
- package/dist/vendored/brepjs/2d/lib/svgPath.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/utils.d.ts +0 -11
- package/dist/vendored/brepjs/2d/lib/utils.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/utils.js +0 -24
- package/dist/vendored/brepjs/2d/lib/utils.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/vectorOperations.d.ts +0 -19
- package/dist/vendored/brepjs/2d/lib/vectorOperations.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/vectorOperations.js +0 -26
- package/dist/vendored/brepjs/2d/lib/vectorOperations.js.map +0 -1
- package/dist/vendored/brepjs/2d.d.ts +0 -26
- package/dist/vendored/brepjs/2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d.js +0 -33
- package/dist/vendored/brepjs/2d.js.map +0 -1
- package/dist/vendored/brepjs/core/constants.d.ts +0 -7
- package/dist/vendored/brepjs/core/constants.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/constants.js +0 -7
- package/dist/vendored/brepjs/core/constants.js.map +0 -1
- package/dist/vendored/brepjs/core/curve2dHandle.d.ts +0 -35
- package/dist/vendored/brepjs/core/curve2dHandle.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/curve2dHandle.js +0 -48
- package/dist/vendored/brepjs/core/curve2dHandle.js.map +0 -1
- package/dist/vendored/brepjs/core/dimensionTypes.d.ts +0 -61
- package/dist/vendored/brepjs/core/dimensionTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/dimensionTypes.js +0 -54
- package/dist/vendored/brepjs/core/dimensionTypes.js.map +0 -1
- package/dist/vendored/brepjs/core/disposal.d.ts +0 -136
- package/dist/vendored/brepjs/core/disposal.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/disposal.js +0 -441
- package/dist/vendored/brepjs/core/disposal.js.map +0 -1
- package/dist/vendored/brepjs/core/errors.d.ts +0 -191
- package/dist/vendored/brepjs/core/errors.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/errors.js +0 -238
- package/dist/vendored/brepjs/core/errors.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelBoundary.d.ts +0 -40
- package/dist/vendored/brepjs/core/kernelBoundary.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelBoundary.js +0 -99
- package/dist/vendored/brepjs/core/kernelBoundary.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelCall.d.ts +0 -48
- package/dist/vendored/brepjs/core/kernelCall.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelCall.js +0 -154
- package/dist/vendored/brepjs/core/kernelCall.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelErrorTranslation.d.ts +0 -17
- package/dist/vendored/brepjs/core/kernelErrorTranslation.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelErrorTranslation.js +0 -98
- package/dist/vendored/brepjs/core/kernelErrorTranslation.js.map +0 -1
- package/dist/vendored/brepjs/core/planeOps.d.ts +0 -62
- package/dist/vendored/brepjs/core/planeOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/planeOps.js +0 -148
- package/dist/vendored/brepjs/core/planeOps.js.map +0 -1
- package/dist/vendored/brepjs/core/planeTypes.d.ts +0 -22
- package/dist/vendored/brepjs/core/planeTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/planeTypes.js +0 -6
- package/dist/vendored/brepjs/core/planeTypes.js.map +0 -1
- package/dist/vendored/brepjs/core/result.d.ts +0 -85
- package/dist/vendored/brepjs/core/result.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/result.js +0 -212
- package/dist/vendored/brepjs/core/result.js.map +0 -1
- package/dist/vendored/brepjs/core/shapeTypeCache.d.ts +0 -27
- package/dist/vendored/brepjs/core/shapeTypeCache.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/shapeTypeCache.js +0 -40
- package/dist/vendored/brepjs/core/shapeTypeCache.js.map +0 -1
- package/dist/vendored/brepjs/core/shapeTypes.d.ts +0 -199
- package/dist/vendored/brepjs/core/shapeTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/shapeTypes.js +0 -267
- package/dist/vendored/brepjs/core/shapeTypes.js.map +0 -1
- package/dist/vendored/brepjs/core/typeDiscriminants.d.ts +0 -25
- package/dist/vendored/brepjs/core/typeDiscriminants.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/typeDiscriminants.js +0 -50
- package/dist/vendored/brepjs/core/typeDiscriminants.js.map +0 -1
- package/dist/vendored/brepjs/core/types.d.ts +0 -51
- package/dist/vendored/brepjs/core/types.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/types.js +0 -35
- package/dist/vendored/brepjs/core/types.js.map +0 -1
- package/dist/vendored/brepjs/core/validityTypes.d.ts +0 -143
- package/dist/vendored/brepjs/core/validityTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/validityTypes.js +0 -174
- package/dist/vendored/brepjs/core/validityTypes.js.map +0 -1
- package/dist/vendored/brepjs/core/vecOps.d.ts +0 -53
- package/dist/vendored/brepjs/core/vecOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/vecOps.js +0 -131
- package/dist/vendored/brepjs/core/vecOps.js.map +0 -1
- package/dist/vendored/brepjs/core.d.ts +0 -17
- package/dist/vendored/brepjs/core.d.ts.map +0 -1
- package/dist/vendored/brepjs/core.js +0 -13
- package/dist/vendored/brepjs/core.js.map +0 -1
- package/dist/vendored/brepjs/gear/gearFns.d.ts +0 -148
- package/dist/vendored/brepjs/gear/gearFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/gear/gearFns.js +0 -479
- package/dist/vendored/brepjs/gear/gearFns.js.map +0 -1
- package/dist/vendored/brepjs/gear/gearMath.d.ts +0 -89
- package/dist/vendored/brepjs/gear/gearMath.d.ts.map +0 -1
- package/dist/vendored/brepjs/gear/gearMath.js +0 -195
- package/dist/vendored/brepjs/gear/gearMath.js.map +0 -1
- package/dist/vendored/brepjs/gear/gearProfile.d.ts +0 -17
- package/dist/vendored/brepjs/gear/gearProfile.d.ts.map +0 -1
- package/dist/vendored/brepjs/gear/gearProfile.js +0 -159
- package/dist/vendored/brepjs/gear/gearProfile.js.map +0 -1
- package/dist/vendored/brepjs/gear/index.d.ts +0 -4
- package/dist/vendored/brepjs/gear/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/gear/index.js +0 -4
- package/dist/vendored/brepjs/gear/index.js.map +0 -1
- package/dist/vendored/brepjs/index.d.ts +0 -152
- package/dist/vendored/brepjs/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/index.js +0 -195
- package/dist/vendored/brepjs/index.js.map +0 -1
- package/dist/vendored/brepjs/io/dxfExportFns.d.ts +0 -74
- package/dist/vendored/brepjs/io/dxfExportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/dxfExportFns.js +0 -134
- package/dist/vendored/brepjs/io/dxfExportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/dxfImportFns.d.ts +0 -20
- package/dist/vendored/brepjs/io/dxfImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/dxfImportFns.js +0 -132
- package/dist/vendored/brepjs/io/dxfImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/gltfExportFns.d.ts +0 -97
- package/dist/vendored/brepjs/io/gltfExportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/gltfExportFns.js +0 -460
- package/dist/vendored/brepjs/io/gltfExportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/gltfImportFns.d.ts +0 -21
- package/dist/vendored/brepjs/io/gltfImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/gltfImportFns.js +0 -33
- package/dist/vendored/brepjs/io/gltfImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/importFns.d.ts +0 -56
- package/dist/vendored/brepjs/io/importFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/importFns.js +0 -108
- package/dist/vendored/brepjs/io/importFns.js.map +0 -1
- package/dist/vendored/brepjs/io/ioUtils.d.ts +0 -22
- package/dist/vendored/brepjs/io/ioUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/ioUtils.js +0 -56
- package/dist/vendored/brepjs/io/ioUtils.js.map +0 -1
- package/dist/vendored/brepjs/io/objExportFns.d.ts +0 -23
- package/dist/vendored/brepjs/io/objExportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/objExportFns.js +0 -67
- package/dist/vendored/brepjs/io/objExportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/objImportFns.d.ts +0 -26
- package/dist/vendored/brepjs/io/objImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/objImportFns.js +0 -96
- package/dist/vendored/brepjs/io/objImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/stepConfigFns.d.ts +0 -30
- package/dist/vendored/brepjs/io/stepConfigFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/stepConfigFns.js +0 -30
- package/dist/vendored/brepjs/io/stepConfigFns.js.map +0 -1
- package/dist/vendored/brepjs/io/svgImportFns.d.ts +0 -58
- package/dist/vendored/brepjs/io/svgImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/svgImportFns.js +0 -394
- package/dist/vendored/brepjs/io/svgImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/threemfExportFns.d.ts +0 -48
- package/dist/vendored/brepjs/io/threemfExportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/threemfExportFns.js +0 -345
- package/dist/vendored/brepjs/io/threemfExportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/threemfImportFns.d.ts +0 -22
- package/dist/vendored/brepjs/io/threemfImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/threemfImportFns.js +0 -350
- package/dist/vendored/brepjs/io/threemfImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io.d.ts +0 -17
- package/dist/vendored/brepjs/io.d.ts.map +0 -1
- package/dist/vendored/brepjs/io.js +0 -20
- package/dist/vendored/brepjs/io.js.map +0 -1
- package/dist/vendored/brepjs/kernel/capabilities.d.ts +0 -36
- package/dist/vendored/brepjs/kernel/capabilities.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/capabilities.js +0 -35
- package/dist/vendored/brepjs/kernel/capabilities.js.map +0 -1
- package/dist/vendored/brepjs/kernel/geometry2d.d.ts +0 -96
- package/dist/vendored/brepjs/kernel/geometry2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/geometry2d.js +0 -885
- package/dist/vendored/brepjs/kernel/geometry2d.js.map +0 -1
- package/dist/vendored/brepjs/kernel/hullGeometry.d.ts +0 -23
- package/dist/vendored/brepjs/kernel/hullGeometry.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/hullGeometry.js +0 -312
- package/dist/vendored/brepjs/kernel/hullGeometry.js.map +0 -1
- package/dist/vendored/brepjs/kernel/index.d.ts +0 -73
- package/dist/vendored/brepjs/kernel/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/index.js +0 -161
- package/dist/vendored/brepjs/kernel/index.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/booleanOps.d.ts +0 -44
- package/dist/vendored/brepjs/kernel/interfaces/booleanOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/booleanOps.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/booleanOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/builderOps.d.ts +0 -67
- package/dist/vendored/brepjs/kernel/interfaces/builderOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/builderOps.js +0 -12
- package/dist/vendored/brepjs/kernel/interfaces/builderOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/core.d.ts +0 -46
- package/dist/vendored/brepjs/kernel/interfaces/core.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/core.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/core.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/curveOps.d.ts +0 -53
- package/dist/vendored/brepjs/kernel/interfaces/curveOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/curveOps.js +0 -12
- package/dist/vendored/brepjs/kernel/interfaces/curveOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/evolutionOps.d.ts +0 -32
- package/dist/vendored/brepjs/kernel/interfaces/evolutionOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/evolutionOps.js +0 -14
- package/dist/vendored/brepjs/kernel/interfaces/evolutionOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/index.d.ts +0 -43
- package/dist/vendored/brepjs/kernel/interfaces/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/index.js +0 -12
- package/dist/vendored/brepjs/kernel/interfaces/index.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/ioOps.d.ts +0 -65
- package/dist/vendored/brepjs/kernel/interfaces/ioOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/ioOps.js +0 -9
- package/dist/vendored/brepjs/kernel/interfaces/ioOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/measureOps.d.ts +0 -55
- package/dist/vendored/brepjs/kernel/interfaces/measureOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/measureOps.js +0 -9
- package/dist/vendored/brepjs/kernel/interfaces/measureOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/meshOps.d.ts +0 -25
- package/dist/vendored/brepjs/kernel/interfaces/meshOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/meshOps.js +0 -8
- package/dist/vendored/brepjs/kernel/interfaces/meshOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/modifierOps.d.ts +0 -53
- package/dist/vendored/brepjs/kernel/interfaces/modifierOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/modifierOps.js +0 -10
- package/dist/vendored/brepjs/kernel/interfaces/modifierOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/primitiveOps.d.ts +0 -22
- package/dist/vendored/brepjs/kernel/interfaces/primitiveOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/primitiveOps.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/primitiveOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/repairOps.d.ts +0 -43
- package/dist/vendored/brepjs/kernel/interfaces/repairOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/repairOps.js +0 -9
- package/dist/vendored/brepjs/kernel/interfaces/repairOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/surfaceOps.d.ts +0 -72
- package/dist/vendored/brepjs/kernel/interfaces/surfaceOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/surfaceOps.js +0 -13
- package/dist/vendored/brepjs/kernel/interfaces/surfaceOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/sweepOps.d.ts +0 -73
- package/dist/vendored/brepjs/kernel/interfaces/sweepOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/sweepOps.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/sweepOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/topologyOps.d.ts +0 -62
- package/dist/vendored/brepjs/kernel/interfaces/topologyOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/topologyOps.js +0 -9
- package/dist/vendored/brepjs/kernel/interfaces/topologyOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/transformOps.d.ts +0 -80
- package/dist/vendored/brepjs/kernel/interfaces/transformOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/transformOps.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/transformOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/kernel2dTypes.d.ts +0 -145
- package/dist/vendored/brepjs/kernel/kernel2dTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/kernel2dTypes.js +0 -18
- package/dist/vendored/brepjs/kernel/kernel2dTypes.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occt/wasmTypes/externals.d.ts +0 -41
- package/dist/vendored/brepjs/kernel/occt/wasmTypes/externals.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occt/wasmTypes/externals.js +0 -2
- package/dist/vendored/brepjs/kernel/occt/wasmTypes/externals.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/adapterShims.d.ts +0 -17
- package/dist/vendored/brepjs/kernel/occtWasm/adapterShims.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/adapterShims.js +0 -75
- package/dist/vendored/brepjs/kernel/occtWasm/adapterShims.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/booleanOps.d.ts +0 -36
- package/dist/vendored/brepjs/kernel/occtWasm/booleanOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/booleanOps.js +0 -116
- package/dist/vendored/brepjs/kernel/occtWasm/booleanOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/constructionOps.d.ts +0 -43
- package/dist/vendored/brepjs/kernel/occtWasm/constructionOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/constructionOps.js +0 -292
- package/dist/vendored/brepjs/kernel/occtWasm/constructionOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/curveOps.d.ts +0 -34
- package/dist/vendored/brepjs/kernel/occtWasm/curveOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/curveOps.js +0 -164
- package/dist/vendored/brepjs/kernel/occtWasm/curveOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/evolutionOps.d.ts +0 -26
- package/dist/vendored/brepjs/kernel/occtWasm/evolutionOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/evolutionOps.js +0 -256
- package/dist/vendored/brepjs/kernel/occtWasm/evolutionOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/helpers.d.ts +0 -42
- package/dist/vendored/brepjs/kernel/occtWasm/helpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/helpers.js +0 -146
- package/dist/vendored/brepjs/kernel/occtWasm/helpers.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/hullOps.d.ts +0 -17
- package/dist/vendored/brepjs/kernel/occtWasm/hullOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/hullOps.js +0 -55
- package/dist/vendored/brepjs/kernel/occtWasm/hullOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/ioOps.d.ts +0 -58
- package/dist/vendored/brepjs/kernel/occtWasm/ioOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/ioOps.js +0 -303
- package/dist/vendored/brepjs/kernel/occtWasm/ioOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/kernel2dOps.d.ts +0 -113
- package/dist/vendored/brepjs/kernel/occtWasm/kernel2dOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/kernel2dOps.js +0 -731
- package/dist/vendored/brepjs/kernel/occtWasm/kernel2dOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/measureOps.d.ts +0 -62
- package/dist/vendored/brepjs/kernel/occtWasm/measureOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/measureOps.js +0 -338
- package/dist/vendored/brepjs/kernel/occtWasm/measureOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/meshOps.d.ts +0 -12
- package/dist/vendored/brepjs/kernel/occtWasm/meshOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/meshOps.js +0 -120
- package/dist/vendored/brepjs/kernel/occtWasm/meshOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/modifierOps.d.ts +0 -20
- package/dist/vendored/brepjs/kernel/occtWasm/modifierOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/modifierOps.js +0 -187
- package/dist/vendored/brepjs/kernel/occtWasm/modifierOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmAdapter.d.ts +0 -513
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmAdapter.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmAdapter.js +0 -1016
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmAdapter.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmTypes.d.ts +0 -332
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmTypes.js +0 -10
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmTypes.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/primitiveOps.d.ts +0 -16
- package/dist/vendored/brepjs/kernel/occtWasm/primitiveOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/primitiveOps.js +0 -64
- package/dist/vendored/brepjs/kernel/occtWasm/primitiveOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/repairOps.d.ts +0 -16
- package/dist/vendored/brepjs/kernel/occtWasm/repairOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/repairOps.js +0 -38
- package/dist/vendored/brepjs/kernel/occtWasm/repairOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/surfaceOps.d.ts +0 -56
- package/dist/vendored/brepjs/kernel/occtWasm/surfaceOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/surfaceOps.js +0 -247
- package/dist/vendored/brepjs/kernel/occtWasm/surfaceOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/sweepOps.d.ts +0 -56
- package/dist/vendored/brepjs/kernel/occtWasm/sweepOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/sweepOps.js +0 -235
- package/dist/vendored/brepjs/kernel/occtWasm/sweepOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/topologyOps.d.ts +0 -25
- package/dist/vendored/brepjs/kernel/occtWasm/topologyOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/topologyOps.js +0 -127
- package/dist/vendored/brepjs/kernel/occtWasm/topologyOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/transformOps.d.ts +0 -40
- package/dist/vendored/brepjs/kernel/occtWasm/transformOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/transformOps.js +0 -275
- package/dist/vendored/brepjs/kernel/occtWasm/transformOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/quality.d.ts +0 -28
- package/dist/vendored/brepjs/kernel/quality.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/quality.js +0 -40
- package/dist/vendored/brepjs/kernel/quality.js.map +0 -1
- package/dist/vendored/brepjs/kernel/solverAdapter.d.ts +0 -50
- package/dist/vendored/brepjs/kernel/solverAdapter.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/solverAdapter.js +0 -330
- package/dist/vendored/brepjs/kernel/solverAdapter.js.map +0 -1
- package/dist/vendored/brepjs/kernel/stlBuilder.d.ts +0 -21
- package/dist/vendored/brepjs/kernel/stlBuilder.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/stlBuilder.js +0 -106
- package/dist/vendored/brepjs/kernel/stlBuilder.js.map +0 -1
- package/dist/vendored/brepjs/kernel/types.d.ts +0 -214
- package/dist/vendored/brepjs/kernel/types.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/types.js +0 -22
- package/dist/vendored/brepjs/kernel/types.js.map +0 -1
- package/dist/vendored/brepjs/kernel/unsupported.d.ts +0 -15
- package/dist/vendored/brepjs/kernel/unsupported.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/unsupported.js +0 -25
- package/dist/vendored/brepjs/kernel/unsupported.js.map +0 -1
- package/dist/vendored/brepjs/measurement/interferenceFns.d.ts +0 -68
- package/dist/vendored/brepjs/measurement/interferenceFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement/interferenceFns.js +0 -102
- package/dist/vendored/brepjs/measurement/interferenceFns.js.map +0 -1
- package/dist/vendored/brepjs/measurement/measureCache.d.ts +0 -20
- package/dist/vendored/brepjs/measurement/measureCache.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement/measureCache.js +0 -28
- package/dist/vendored/brepjs/measurement/measureCache.js.map +0 -1
- package/dist/vendored/brepjs/measurement/measureFns.d.ts +0 -92
- package/dist/vendored/brepjs/measurement/measureFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement/measureFns.js +0 -239
- package/dist/vendored/brepjs/measurement/measureFns.js.map +0 -1
- package/dist/vendored/brepjs/measurement/measureTypes.d.ts +0 -35
- package/dist/vendored/brepjs/measurement/measureTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement/measureTypes.js +0 -7
- package/dist/vendored/brepjs/measurement/measureTypes.js.map +0 -1
- package/dist/vendored/brepjs/measurement.d.ts +0 -5
- package/dist/vendored/brepjs/measurement.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement.js +0 -5
- package/dist/vendored/brepjs/measurement.js.map +0 -1
- package/dist/vendored/brepjs/ns/booleans.d.ts +0 -11
- package/dist/vendored/brepjs/ns/booleans.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/booleans.js +0 -11
- package/dist/vendored/brepjs/ns/booleans.js.map +0 -1
- package/dist/vendored/brepjs/ns/construction.d.ts +0 -10
- package/dist/vendored/brepjs/ns/construction.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/construction.js +0 -10
- package/dist/vendored/brepjs/ns/construction.js.map +0 -1
- package/dist/vendored/brepjs/ns/ioNs.d.ts +0 -18
- package/dist/vendored/brepjs/ns/ioNs.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/ioNs.js +0 -20
- package/dist/vendored/brepjs/ns/ioNs.js.map +0 -1
- package/dist/vendored/brepjs/ns/measurement.d.ts +0 -6
- package/dist/vendored/brepjs/ns/measurement.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/measurement.js +0 -6
- package/dist/vendored/brepjs/ns/measurement.js.map +0 -1
- package/dist/vendored/brepjs/ns/modifiers.d.ts +0 -6
- package/dist/vendored/brepjs/ns/modifiers.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/modifiers.js +0 -6
- package/dist/vendored/brepjs/ns/modifiers.js.map +0 -1
- package/dist/vendored/brepjs/ns/patterns.d.ts +0 -5
- package/dist/vendored/brepjs/ns/patterns.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/patterns.js +0 -5
- package/dist/vendored/brepjs/ns/patterns.js.map +0 -1
- package/dist/vendored/brepjs/ns/primitives.d.ts +0 -7
- package/dist/vendored/brepjs/ns/primitives.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/primitives.js +0 -7
- package/dist/vendored/brepjs/ns/primitives.js.map +0 -1
- package/dist/vendored/brepjs/ns/query.d.ts +0 -6
- package/dist/vendored/brepjs/ns/query.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/query.js +0 -6
- package/dist/vendored/brepjs/ns/query.js.map +0 -1
- package/dist/vendored/brepjs/ns/transforms.d.ts +0 -5
- package/dist/vendored/brepjs/ns/transforms.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/transforms.js +0 -5
- package/dist/vendored/brepjs/ns/transforms.js.map +0 -1
- package/dist/vendored/brepjs/operations/api.d.ts +0 -39
- package/dist/vendored/brepjs/operations/api.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/api.js +0 -41
- package/dist/vendored/brepjs/operations/api.js.map +0 -1
- package/dist/vendored/brepjs/operations/assemblyFns.d.ts +0 -54
- package/dist/vendored/brepjs/operations/assemblyFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/assemblyFns.js +0 -91
- package/dist/vendored/brepjs/operations/assemblyFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/compoundOpsFns.d.ts +0 -43
- package/dist/vendored/brepjs/operations/compoundOpsFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/compoundOpsFns.js +0 -368
- package/dist/vendored/brepjs/operations/compoundOpsFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/convexHullFns.d.ts +0 -27
- package/dist/vendored/brepjs/operations/convexHullFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/convexHullFns.js +0 -50
- package/dist/vendored/brepjs/operations/convexHullFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/dhFns.d.ts +0 -47
- package/dist/vendored/brepjs/operations/dhFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/dhFns.js +0 -53
- package/dist/vendored/brepjs/operations/dhFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/exporterFns.d.ts +0 -47
- package/dist/vendored/brepjs/operations/exporterFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/exporterFns.js +0 -66
- package/dist/vendored/brepjs/operations/exporterFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/exporterUtils.d.ts +0 -6
- package/dist/vendored/brepjs/operations/exporterUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/exporterUtils.js +0 -5
- package/dist/vendored/brepjs/operations/exporterUtils.js.map +0 -1
- package/dist/vendored/brepjs/operations/exporters.d.ts +0 -59
- package/dist/vendored/brepjs/operations/exporters.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/exporters.js +0 -74
- package/dist/vendored/brepjs/operations/exporters.js.map +0 -1
- package/dist/vendored/brepjs/operations/extrudeFns.d.ts +0 -47
- package/dist/vendored/brepjs/operations/extrudeFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/extrudeFns.js +0 -119
- package/dist/vendored/brepjs/operations/extrudeFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/extrudeUtils.d.ts +0 -63
- package/dist/vendored/brepjs/operations/extrudeUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/extrudeUtils.js +0 -33
- package/dist/vendored/brepjs/operations/extrudeUtils.js.map +0 -1
- package/dist/vendored/brepjs/operations/guidedSweepFns.d.ts +0 -6
- package/dist/vendored/brepjs/operations/guidedSweepFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/guidedSweepFns.js +0 -6
- package/dist/vendored/brepjs/operations/guidedSweepFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/historyFns.d.ts +0 -83
- package/dist/vendored/brepjs/operations/historyFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/historyFns.js +0 -256
- package/dist/vendored/brepjs/operations/historyFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/ikFns.d.ts +0 -74
- package/dist/vendored/brepjs/operations/ikFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/ikFns.js +0 -320
- package/dist/vendored/brepjs/operations/ikFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/instanceFns.d.ts +0 -76
- package/dist/vendored/brepjs/operations/instanceFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/instanceFns.js +0 -128
- package/dist/vendored/brepjs/operations/instanceFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/jointFns.d.ts +0 -176
- package/dist/vendored/brepjs/operations/jointFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/jointFns.js +0 -298
- package/dist/vendored/brepjs/operations/jointFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/loftFns.d.ts +0 -60
- package/dist/vendored/brepjs/operations/loftFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/loftFns.js +0 -112
- package/dist/vendored/brepjs/operations/loftFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/mateFns.d.ts +0 -53
- package/dist/vendored/brepjs/operations/mateFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/mateFns.js +0 -142
- package/dist/vendored/brepjs/operations/mateFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/multiSweepFns.d.ts +0 -6
- package/dist/vendored/brepjs/operations/multiSweepFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/multiSweepFns.js +0 -6
- package/dist/vendored/brepjs/operations/multiSweepFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/patternFns.d.ts +0 -46
- package/dist/vendored/brepjs/operations/patternFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/patternFns.js +0 -126
- package/dist/vendored/brepjs/operations/patternFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/roofFns.d.ts +0 -25
- package/dist/vendored/brepjs/operations/roofFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/roofFns.js +0 -250
- package/dist/vendored/brepjs/operations/roofFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/straightSkeleton.d.ts +0 -29
- package/dist/vendored/brepjs/operations/straightSkeleton.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/straightSkeleton.js +0 -440
- package/dist/vendored/brepjs/operations/straightSkeleton.js.map +0 -1
- package/dist/vendored/brepjs/operations/sweepFns.d.ts +0 -121
- package/dist/vendored/brepjs/operations/sweepFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/sweepFns.js +0 -438
- package/dist/vendored/brepjs/operations/sweepFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/threadFns.d.ts +0 -57
- package/dist/vendored/brepjs/operations/threadFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/threadFns.js +0 -145
- package/dist/vendored/brepjs/operations/threadFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/urdfFns.d.ts +0 -48
- package/dist/vendored/brepjs/operations/urdfFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/urdfFns.js +0 -171
- package/dist/vendored/brepjs/operations/urdfFns.js.map +0 -1
- package/dist/vendored/brepjs/operations.d.ts +0 -20
- package/dist/vendored/brepjs/operations.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations.js +0 -26
- package/dist/vendored/brepjs/operations.js.map +0 -1
- package/dist/vendored/brepjs/projection/cameraFns.d.ts +0 -63
- package/dist/vendored/brepjs/projection/cameraFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/projection/cameraFns.js +0 -89
- package/dist/vendored/brepjs/projection/cameraFns.js.map +0 -1
- package/dist/vendored/brepjs/projection/makeProjectedEdges.d.ts +0 -14
- package/dist/vendored/brepjs/projection/makeProjectedEdges.d.ts.map +0 -1
- package/dist/vendored/brepjs/projection/makeProjectedEdges.js +0 -111
- package/dist/vendored/brepjs/projection/makeProjectedEdges.js.map +0 -1
- package/dist/vendored/brepjs/projection/projectionPlanes.d.ts +0 -18
- package/dist/vendored/brepjs/projection/projectionPlanes.d.ts.map +0 -1
- package/dist/vendored/brepjs/projection/projectionPlanes.js +0 -23
- package/dist/vendored/brepjs/projection/projectionPlanes.js.map +0 -1
- package/dist/vendored/brepjs/projection.d.ts +0 -12
- package/dist/vendored/brepjs/projection.d.ts.map +0 -1
- package/dist/vendored/brepjs/projection.js +0 -12
- package/dist/vendored/brepjs/projection.js.map +0 -1
- package/dist/vendored/brepjs/query/cornerFinder.d.ts +0 -54
- package/dist/vendored/brepjs/query/cornerFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/cornerFinder.js +0 -73
- package/dist/vendored/brepjs/query/cornerFinder.js.map +0 -1
- package/dist/vendored/brepjs/query/directionUtils.d.ts +0 -9
- package/dist/vendored/brepjs/query/directionUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/directionUtils.js +0 -18
- package/dist/vendored/brepjs/query/directionUtils.js.map +0 -1
- package/dist/vendored/brepjs/query/edgeFinder.d.ts +0 -5
- package/dist/vendored/brepjs/query/edgeFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/edgeFinder.js +0 -5
- package/dist/vendored/brepjs/query/edgeFinder.js.map +0 -1
- package/dist/vendored/brepjs/query/faceFinder.d.ts +0 -5
- package/dist/vendored/brepjs/query/faceFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/faceFinder.js +0 -5
- package/dist/vendored/brepjs/query/faceFinder.js.map +0 -1
- package/dist/vendored/brepjs/query/finderCore.d.ts +0 -49
- package/dist/vendored/brepjs/query/finderCore.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/finderCore.js +0 -120
- package/dist/vendored/brepjs/query/finderCore.js.map +0 -1
- package/dist/vendored/brepjs/query/finderFns.d.ts +0 -25
- package/dist/vendored/brepjs/query/finderFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/finderFns.js +0 -25
- package/dist/vendored/brepjs/query/finderFns.js.map +0 -1
- package/dist/vendored/brepjs/query/helpers.d.ts +0 -11
- package/dist/vendored/brepjs/query/helpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/helpers.js +0 -17
- package/dist/vendored/brepjs/query/helpers.js.map +0 -1
- package/dist/vendored/brepjs/query/shapeDistanceFilter.d.ts +0 -15
- package/dist/vendored/brepjs/query/shapeDistanceFilter.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/shapeDistanceFilter.js +0 -21
- package/dist/vendored/brepjs/query/shapeDistanceFilter.js.map +0 -1
- package/dist/vendored/brepjs/query/shapeFinders.d.ts +0 -39
- package/dist/vendored/brepjs/query/shapeFinders.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/shapeFinders.js +0 -82
- package/dist/vendored/brepjs/query/shapeFinders.js.map +0 -1
- package/dist/vendored/brepjs/query/vertexFinder.d.ts +0 -19
- package/dist/vendored/brepjs/query/vertexFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/vertexFinder.js +0 -73
- package/dist/vendored/brepjs/query/vertexFinder.js.map +0 -1
- package/dist/vendored/brepjs/query/wireFinder.d.ts +0 -5
- package/dist/vendored/brepjs/query/wireFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/wireFinder.js +0 -5
- package/dist/vendored/brepjs/query/wireFinder.js.map +0 -1
- package/dist/vendored/brepjs/query.d.ts +0 -6
- package/dist/vendored/brepjs/query.d.ts.map +0 -1
- package/dist/vendored/brepjs/query.js +0 -6
- package/dist/vendored/brepjs/query.js.map +0 -1
- package/dist/vendored/brepjs/result.d.ts +0 -7
- package/dist/vendored/brepjs/result.d.ts.map +0 -1
- package/dist/vendored/brepjs/result.js +0 -7
- package/dist/vendored/brepjs/result.js.map +0 -1
- package/dist/vendored/brepjs/shapeRef.d.ts +0 -13
- package/dist/vendored/brepjs/shapeRef.d.ts.map +0 -1
- package/dist/vendored/brepjs/shapeRef.js +0 -13
- package/dist/vendored/brepjs/shapeRef.js.map +0 -1
- package/dist/vendored/brepjs/sketching/cannedSketches.d.ts +0 -144
- package/dist/vendored/brepjs/sketching/cannedSketches.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/cannedSketches.js +0 -327
- package/dist/vendored/brepjs/sketching/cannedSketches.js.map +0 -1
- package/dist/vendored/brepjs/sketching/compoundSketch.d.ts +0 -70
- package/dist/vendored/brepjs/sketching/compoundSketch.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/compoundSketch.js +0 -87
- package/dist/vendored/brepjs/sketching/compoundSketch.js.map +0 -1
- package/dist/vendored/brepjs/sketching/draw3d.d.ts +0 -22
- package/dist/vendored/brepjs/sketching/draw3d.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/draw3d.js +0 -150
- package/dist/vendored/brepjs/sketching/draw3d.js.map +0 -1
- package/dist/vendored/brepjs/sketching/drawFns.d.ts +0 -122
- package/dist/vendored/brepjs/sketching/drawFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/drawFns.js +0 -129
- package/dist/vendored/brepjs/sketching/drawFns.js.map +0 -1
- package/dist/vendored/brepjs/sketching/drawing.d.ts +0 -128
- package/dist/vendored/brepjs/sketching/drawing.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/drawing.js +0 -275
- package/dist/vendored/brepjs/sketching/drawing.js.map +0 -1
- package/dist/vendored/brepjs/sketching/drawingFactories.d.ts +0 -95
- package/dist/vendored/brepjs/sketching/drawingFactories.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/drawingFactories.js +0 -125
- package/dist/vendored/brepjs/sketching/drawingFactories.js.map +0 -1
- package/dist/vendored/brepjs/sketching/drawingPen.d.ts +0 -35
- package/dist/vendored/brepjs/sketching/drawingPen.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/drawingPen.js +0 -57
- package/dist/vendored/brepjs/sketching/drawingPen.js.map +0 -1
- package/dist/vendored/brepjs/sketching/faceSketcher.d.ts +0 -53
- package/dist/vendored/brepjs/sketching/faceSketcher.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/faceSketcher.js +0 -167
- package/dist/vendored/brepjs/sketching/faceSketcher.js.map +0 -1
- package/dist/vendored/brepjs/sketching/shortcuts.d.ts +0 -16
- package/dist/vendored/brepjs/sketching/shortcuts.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/shortcuts.js +0 -24
- package/dist/vendored/brepjs/sketching/shortcuts.js.map +0 -1
- package/dist/vendored/brepjs/sketching/sketch.d.ts +0 -157
- package/dist/vendored/brepjs/sketching/sketch.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/sketch.js +0 -151
- package/dist/vendored/brepjs/sketching/sketch.js.map +0 -1
- package/dist/vendored/brepjs/sketching/sketchFns.d.ts +0 -89
- package/dist/vendored/brepjs/sketching/sketchFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/sketchFns.js +0 -266
- package/dist/vendored/brepjs/sketching/sketchFns.js.map +0 -1
- package/dist/vendored/brepjs/sketching/sketcher.d.ts +0 -70
- package/dist/vendored/brepjs/sketching/sketcher.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/sketcher.js +0 -181
- package/dist/vendored/brepjs/sketching/sketcher.js.map +0 -1
- package/dist/vendored/brepjs/sketching/sketches.d.ts +0 -70
- package/dist/vendored/brepjs/sketching/sketches.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/sketches.js +0 -91
- package/dist/vendored/brepjs/sketching/sketches.js.map +0 -1
- package/dist/vendored/brepjs/sketching.d.ts +0 -28
- package/dist/vendored/brepjs/sketching.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching.js +0 -30
- package/dist/vendored/brepjs/sketching.js.map +0 -1
- package/dist/vendored/brepjs/text/fontRegistry.d.ts +0 -23
- package/dist/vendored/brepjs/text/fontRegistry.d.ts.map +0 -1
- package/dist/vendored/brepjs/text/fontRegistry.js +0 -61
- package/dist/vendored/brepjs/text/fontRegistry.js.map +0 -1
- package/dist/vendored/brepjs/text/sketchText.d.ts +0 -31
- package/dist/vendored/brepjs/text/sketchText.d.ts.map +0 -1
- package/dist/vendored/brepjs/text/sketchText.js +0 -30
- package/dist/vendored/brepjs/text/sketchText.js.map +0 -1
- package/dist/vendored/brepjs/text/textBlueprints.d.ts +0 -19
- package/dist/vendored/brepjs/text/textBlueprints.d.ts.map +0 -1
- package/dist/vendored/brepjs/text/textBlueprints.js +0 -61
- package/dist/vendored/brepjs/text/textBlueprints.js.map +0 -1
- package/dist/vendored/brepjs/text/textMetrics.d.ts +0 -40
- package/dist/vendored/brepjs/text/textMetrics.d.ts.map +0 -1
- package/dist/vendored/brepjs/text/textMetrics.js +0 -43
- package/dist/vendored/brepjs/text/textMetrics.js.map +0 -1
- package/dist/vendored/brepjs/text.d.ts +0 -13
- package/dist/vendored/brepjs/text.d.ts.map +0 -1
- package/dist/vendored/brepjs/text.js +0 -13
- package/dist/vendored/brepjs/text.js.map +0 -1
- package/dist/vendored/brepjs/topology/adjacencyFns.d.ts +0 -89
- package/dist/vendored/brepjs/topology/adjacencyFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/adjacencyFns.js +0 -411
- package/dist/vendored/brepjs/topology/adjacencyFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/api.d.ts +0 -145
- package/dist/vendored/brepjs/topology/api.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/api.js +0 -282
- package/dist/vendored/brepjs/topology/api.js.map +0 -1
- package/dist/vendored/brepjs/topology/apiTypes.d.ts +0 -135
- package/dist/vendored/brepjs/topology/apiTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/apiTypes.js +0 -24
- package/dist/vendored/brepjs/topology/apiTypes.js.map +0 -1
- package/dist/vendored/brepjs/topology/booleanBatchFns.d.ts +0 -52
- package/dist/vendored/brepjs/topology/booleanBatchFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/booleanBatchFns.js +0 -164
- package/dist/vendored/brepjs/topology/booleanBatchFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/booleanDiagnosticFns.d.ts +0 -21
- package/dist/vendored/brepjs/topology/booleanDiagnosticFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/booleanDiagnosticFns.js +0 -23
- package/dist/vendored/brepjs/topology/booleanDiagnosticFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/booleanFns.d.ts +0 -155
- package/dist/vendored/brepjs/topology/booleanFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/booleanFns.js +0 -600
- package/dist/vendored/brepjs/topology/booleanFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/cast.d.ts +0 -48
- package/dist/vendored/brepjs/topology/cast.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/cast.js +0 -113
- package/dist/vendored/brepjs/topology/cast.js.map +0 -1
- package/dist/vendored/brepjs/topology/chamferAngleFns.d.ts +0 -24
- package/dist/vendored/brepjs/topology/chamferAngleFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/chamferAngleFns.js +0 -64
- package/dist/vendored/brepjs/topology/chamferAngleFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/compoundOpsFns.d.ts +0 -6
- package/dist/vendored/brepjs/topology/compoundOpsFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/compoundOpsFns.js +0 -6
- package/dist/vendored/brepjs/topology/compoundOpsFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/curveBuilders.d.ts +0 -90
- package/dist/vendored/brepjs/topology/curveBuilders.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/curveBuilders.js +0 -125
- package/dist/vendored/brepjs/topology/curveBuilders.js.map +0 -1
- package/dist/vendored/brepjs/topology/curveFns.d.ts +0 -96
- package/dist/vendored/brepjs/topology/curveFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/curveFns.js +0 -191
- package/dist/vendored/brepjs/topology/curveFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/evolutionFns.d.ts +0 -78
- package/dist/vendored/brepjs/topology/evolutionFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/evolutionFns.js +0 -271
- package/dist/vendored/brepjs/topology/evolutionFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/faceFns.d.ts +0 -86
- package/dist/vendored/brepjs/topology/faceFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/faceFns.js +0 -169
- package/dist/vendored/brepjs/topology/faceFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/healingFns.d.ts +0 -98
- package/dist/vendored/brepjs/topology/healingFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/healingFns.js +0 -338
- package/dist/vendored/brepjs/topology/healingFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/hullFns.d.ts +0 -21
- package/dist/vendored/brepjs/topology/hullFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/hullFns.js +0 -60
- package/dist/vendored/brepjs/topology/hullFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/index.d.ts +0 -14
- package/dist/vendored/brepjs/topology/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/index.js +0 -17
- package/dist/vendored/brepjs/topology/index.js.map +0 -1
- package/dist/vendored/brepjs/topology/meshCache.d.ts +0 -68
- package/dist/vendored/brepjs/topology/meshCache.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/meshCache.js +0 -117
- package/dist/vendored/brepjs/topology/meshCache.js.map +0 -1
- package/dist/vendored/brepjs/topology/meshFns.d.ts +0 -179
- package/dist/vendored/brepjs/topology/meshFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/meshFns.js +0 -393
- package/dist/vendored/brepjs/topology/meshFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/colorFns.d.ts +0 -41
- package/dist/vendored/brepjs/topology/metadata/colorFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/colorFns.js +0 -128
- package/dist/vendored/brepjs/topology/metadata/colorFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/faceTagFns.d.ts +0 -44
- package/dist/vendored/brepjs/topology/metadata/faceTagFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/faceTagFns.js +0 -168
- package/dist/vendored/brepjs/topology/metadata/faceTagFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/metadataPropagation.d.ts +0 -59
- package/dist/vendored/brepjs/topology/metadata/metadataPropagation.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/metadataPropagation.js +0 -109
- package/dist/vendored/brepjs/topology/metadata/metadataPropagation.js.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/originTrackingFns.d.ts +0 -43
- package/dist/vendored/brepjs/topology/metadata/originTrackingFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/originTrackingFns.js +0 -270
- package/dist/vendored/brepjs/topology/metadata/originTrackingFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/minkowskiFns.d.ts +0 -26
- package/dist/vendored/brepjs/topology/minkowskiFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/minkowskiFns.js +0 -136
- package/dist/vendored/brepjs/topology/minkowskiFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/modifierFns.d.ts +0 -87
- package/dist/vendored/brepjs/topology/modifierFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/modifierFns.js +0 -446
- package/dist/vendored/brepjs/topology/modifierFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/nurbsFns.d.ts +0 -13
- package/dist/vendored/brepjs/topology/nurbsFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/nurbsFns.js +0 -22
- package/dist/vendored/brepjs/topology/nurbsFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/polyhedronFns.d.ts +0 -11
- package/dist/vendored/brepjs/topology/polyhedronFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/polyhedronFns.js +0 -47
- package/dist/vendored/brepjs/topology/polyhedronFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/positionFns.d.ts +0 -18
- package/dist/vendored/brepjs/topology/positionFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/positionFns.js +0 -34
- package/dist/vendored/brepjs/topology/positionFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/primitiveFns.d.ts +0 -244
- package/dist/vendored/brepjs/topology/primitiveFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/primitiveFns.js +0 -361
- package/dist/vendored/brepjs/topology/primitiveFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeBooleans.d.ts +0 -14
- package/dist/vendored/brepjs/topology/shapeBooleans.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeBooleans.js +0 -24
- package/dist/vendored/brepjs/topology/shapeBooleans.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeFns.d.ts +0 -30
- package/dist/vendored/brepjs/topology/shapeFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeFns.js +0 -50
- package/dist/vendored/brepjs/topology/shapeFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeHelpers.d.ts +0 -9
- package/dist/vendored/brepjs/topology/shapeHelpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeHelpers.js +0 -14
- package/dist/vendored/brepjs/topology/shapeHelpers.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeModifiers.d.ts +0 -33
- package/dist/vendored/brepjs/topology/shapeModifiers.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeModifiers.js +0 -28
- package/dist/vendored/brepjs/topology/shapeModifiers.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/derivedFaceRefFns.d.ts +0 -29
- package/dist/vendored/brepjs/topology/shapeRef/derivedFaceRefFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/derivedFaceRefFns.js +0 -135
- package/dist/vendored/brepjs/topology/shapeRef/derivedFaceRefFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/edgeRefFns.d.ts +0 -25
- package/dist/vendored/brepjs/topology/shapeRef/edgeRefFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/edgeRefFns.js +0 -123
- package/dist/vendored/brepjs/topology/shapeRef/edgeRefFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/index.d.ts +0 -11
- package/dist/vendored/brepjs/topology/shapeRef/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/index.js +0 -10
- package/dist/vendored/brepjs/topology/shapeRef/index.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/refResolveFns.d.ts +0 -66
- package/dist/vendored/brepjs/topology/shapeRef/refResolveFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/refResolveFns.js +0 -128
- package/dist/vendored/brepjs/topology/shapeRef/refResolveFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/roleLookup.d.ts +0 -18
- package/dist/vendored/brepjs/topology/shapeRef/roleLookup.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/roleLookup.js +0 -51
- package/dist/vendored/brepjs/topology/shapeRef/roleLookup.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/scoring.d.ts +0 -20
- package/dist/vendored/brepjs/topology/shapeRef/scoring.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/scoring.js +0 -65
- package/dist/vendored/brepjs/topology/shapeRef/scoring.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefFns.d.ts +0 -59
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefFns.js +0 -266
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefTypes.d.ts +0 -153
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefTypes.js +0 -6
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefTypes.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/vertexRefFns.d.ts +0 -24
- package/dist/vendored/brepjs/topology/shapeRef/vertexRefFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/vertexRefFns.js +0 -128
- package/dist/vendored/brepjs/topology/shapeRef/vertexRefFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeUtils.d.ts +0 -16
- package/dist/vendored/brepjs/topology/shapeUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeUtils.js +0 -28
- package/dist/vendored/brepjs/topology/shapeUtils.js.map +0 -1
- package/dist/vendored/brepjs/topology/solidBuilders.d.ts +0 -74
- package/dist/vendored/brepjs/topology/solidBuilders.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/solidBuilders.js +0 -173
- package/dist/vendored/brepjs/topology/solidBuilders.js.map +0 -1
- package/dist/vendored/brepjs/topology/surfaceBuilders.d.ts +0 -47
- package/dist/vendored/brepjs/topology/surfaceBuilders.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/surfaceBuilders.js +0 -162
- package/dist/vendored/brepjs/topology/surfaceBuilders.js.map +0 -1
- package/dist/vendored/brepjs/topology/surfaceFns.d.ts +0 -41
- package/dist/vendored/brepjs/topology/surfaceFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/surfaceFns.js +0 -178
- package/dist/vendored/brepjs/topology/surfaceFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/threeHelpers.d.ts +0 -124
- package/dist/vendored/brepjs/topology/threeHelpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/threeHelpers.js +0 -118
- package/dist/vendored/brepjs/topology/threeHelpers.js.map +0 -1
- package/dist/vendored/brepjs/topology/topologyQueryFns.d.ts +0 -100
- package/dist/vendored/brepjs/topology/topologyQueryFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/topologyQueryFns.js +0 -307
- package/dist/vendored/brepjs/topology/topologyQueryFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/transformFns.d.ts +0 -69
- package/dist/vendored/brepjs/topology/transformFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/transformFns.js +0 -235
- package/dist/vendored/brepjs/topology/transformFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/wrapperFns.d.ts +0 -169
- package/dist/vendored/brepjs/topology/wrapperFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/wrapperFns.js +0 -291
- package/dist/vendored/brepjs/topology/wrapperFns.js.map +0 -1
- package/dist/vendored/brepjs/topology.d.ts +0 -28
- package/dist/vendored/brepjs/topology.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology.js +0 -39
- package/dist/vendored/brepjs/topology.js.map +0 -1
- package/dist/vendored/brepjs/utils/arrayAccess.d.ts +0 -12
- package/dist/vendored/brepjs/utils/arrayAccess.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/arrayAccess.js +0 -25
- package/dist/vendored/brepjs/utils/arrayAccess.js.map +0 -1
- package/dist/vendored/brepjs/utils/bug.d.ts +0 -15
- package/dist/vendored/brepjs/utils/bug.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/bug.js +0 -21
- package/dist/vendored/brepjs/utils/bug.js.map +0 -1
- package/dist/vendored/brepjs/utils/ioFilename.d.ts +0 -3
- package/dist/vendored/brepjs/utils/ioFilename.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/ioFilename.js +0 -7
- package/dist/vendored/brepjs/utils/ioFilename.js.map +0 -1
- package/dist/vendored/brepjs/utils/precisionRound.d.ts +0 -11
- package/dist/vendored/brepjs/utils/precisionRound.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/precisionRound.js +0 -19
- package/dist/vendored/brepjs/utils/precisionRound.js.map +0 -1
- package/dist/vendored/brepjs/utils/quaternion.d.ts +0 -18
- package/dist/vendored/brepjs/utils/quaternion.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/quaternion.js +0 -68
- package/dist/vendored/brepjs/utils/quaternion.js.map +0 -1
- package/dist/vendored/brepjs/utils/range.d.ts +0 -3
- package/dist/vendored/brepjs/utils/range.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/range.js +0 -5
- package/dist/vendored/brepjs/utils/range.js.map +0 -1
- package/dist/vendored/brepjs/utils/uuid.d.ts +0 -3
- package/dist/vendored/brepjs/utils/uuid.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/uuid.js +0 -7
- package/dist/vendored/brepjs/utils/uuid.js.map +0 -1
- package/dist/vendored/brepjs/utils/vec2d.d.ts +0 -62
- package/dist/vendored/brepjs/utils/vec2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/vec2d.js +0 -107
- package/dist/vendored/brepjs/utils/vec2d.js.map +0 -1
- package/dist/vendored/brepjs/utils/vec3.d.ts +0 -32
- package/dist/vendored/brepjs/utils/vec3.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/vec3.js +0 -35
- package/dist/vendored/brepjs/utils/vec3.js.map +0 -1
- package/dist/vendored/brepjs/utils/zip.d.ts +0 -5
- package/dist/vendored/brepjs/utils/zip.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/zip.js +0 -8
- package/dist/vendored/brepjs/utils/zip.js.map +0 -1
- package/dist/vendored/brepjs/vectors.d.ts +0 -11
- package/dist/vendored/brepjs/vectors.d.ts.map +0 -1
- package/dist/vendored/brepjs/vectors.js +0 -9
- package/dist/vendored/brepjs/vectors.js.map +0 -1
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* 简化:去掉了 boundaryFalloff、blendNormalSmoothing、cubic zoneArea 等。
|
|
10
10
|
* 保留了核心水密性保证:同位置顶点使用相同平滑法线 + 相同位移值。
|
|
11
11
|
*/
|
|
12
|
-
import
|
|
12
|
+
import { Vec3 as Vec3C } from '../../math3d/index.js';
|
|
13
13
|
import { QuantizedPointMap } from './meshIndex.js';
|
|
14
14
|
import { computeUV, getCubicBlendWeights } from './mapping.js';
|
|
15
15
|
/**
|
|
@@ -28,19 +28,19 @@ import { computeUV, getCubicBlendWeights } from './mapping.js';
|
|
|
28
28
|
* @returns a new BufferGeometry with displaced positions and face normals.
|
|
29
29
|
*/
|
|
30
30
|
export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, settings, bounds, onProgress) {
|
|
31
|
-
const posAttr = geometry.
|
|
32
|
-
const nrmAttr = geometry.
|
|
33
|
-
const count = posAttr.
|
|
31
|
+
const posAttr = geometry.positions;
|
|
32
|
+
const nrmAttr = geometry.normals || new Float32Array(posAttr.length);
|
|
33
|
+
const count = posAttr.length / 3;
|
|
34
34
|
const newPos = new Float32Array(count * 3);
|
|
35
35
|
const newNrm = new Float32Array(count * 3);
|
|
36
|
-
const tmpPos = new
|
|
37
|
-
const tmpNrm = new
|
|
38
|
-
const vA = new
|
|
39
|
-
const vB = new
|
|
40
|
-
const vC = new
|
|
41
|
-
const edge1 = new
|
|
42
|
-
const edge2 = new
|
|
43
|
-
const faceNrm = new
|
|
36
|
+
const tmpPos = new Vec3C();
|
|
37
|
+
const tmpNrm = new Vec3C();
|
|
38
|
+
const vA = new Vec3C();
|
|
39
|
+
const vB = new Vec3C();
|
|
40
|
+
const vC = new Vec3C();
|
|
41
|
+
const edge1 = new Vec3C();
|
|
42
|
+
const edge2 = new Vec3C();
|
|
43
|
+
const faceNrm = new Vec3C();
|
|
44
44
|
// 纹理纵横比校正
|
|
45
45
|
const tmax = Math.max(imgWidth, imgHeight, 1);
|
|
46
46
|
const aspectU = tmax / Math.max(imgWidth, 1);
|
|
@@ -53,7 +53,7 @@ export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, sett
|
|
|
53
53
|
let nextId = 0;
|
|
54
54
|
const vertexId = new Uint32Array(count);
|
|
55
55
|
for (let i = 0; i < count; i++) {
|
|
56
|
-
const x = posAttr
|
|
56
|
+
const x = posAttr[i * 3], y = posAttr[i * 3 + 1], z = posAttr[i * 3 + 2];
|
|
57
57
|
const id = dedupMap.getOrSet(x, y, z, nextId);
|
|
58
58
|
if (dedupMap.inserted)
|
|
59
59
|
nextId++;
|
|
@@ -68,13 +68,13 @@ export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, sett
|
|
|
68
68
|
const maskedFracMasked = new Float64Array(uniqueCount);
|
|
69
69
|
const maskedFracTotal = new Float64Array(uniqueCount);
|
|
70
70
|
// 面排除权重
|
|
71
|
-
const ewAttr = geometry.
|
|
71
|
+
const ewAttr = geometry.excludeWeight || null;
|
|
72
72
|
const userExcludedFaces = ewAttr ? new Uint8Array(count / 3) : null;
|
|
73
73
|
const excludedPos = ewAttr ? new Uint8Array(uniqueCount) : null;
|
|
74
74
|
for (let t = 0; t < count; t += 3) {
|
|
75
|
-
vA.
|
|
76
|
-
vB.
|
|
77
|
-
vC.
|
|
75
|
+
vA.set(posAttr[t * 3], posAttr[t * 3 + 1], posAttr[t * 3 + 2]);
|
|
76
|
+
vB.set(posAttr[(t + 1) * 3], posAttr[(t + 1) * 3 + 1], posAttr[(t + 1) * 3 + 2]);
|
|
77
|
+
vC.set(posAttr[(t + 2) * 3], posAttr[(t + 2) * 3 + 1], posAttr[(t + 2) * 3 + 2]);
|
|
78
78
|
edge1.subVectors(vB, vA);
|
|
79
79
|
edge2.subVectors(vC, vA);
|
|
80
80
|
faceNrm.crossVectors(edge1, edge2);
|
|
@@ -87,7 +87,7 @@ export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, sett
|
|
|
87
87
|
: (settings.topAngleLimit ?? 0) > 0 &&
|
|
88
88
|
faceAngle <= (settings.topAngleLimit ?? 0);
|
|
89
89
|
const userExcluded = ewAttr
|
|
90
|
-
? (ewAttr
|
|
90
|
+
? (ewAttr[t] + ewAttr[t + 1] + ewAttr[t + 2]) / 3 > 0.99
|
|
91
91
|
: false;
|
|
92
92
|
const faceMasked = angleMasked;
|
|
93
93
|
if (userExcluded && userExcludedFaces)
|
|
@@ -96,7 +96,7 @@ export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, sett
|
|
|
96
96
|
const vid = vertexId[t + v];
|
|
97
97
|
if (userExcluded && excludedPos)
|
|
98
98
|
excludedPos[vid] = 1;
|
|
99
|
-
tmpNrm.
|
|
99
|
+
tmpNrm.set(nrmAttr[(t + v) * 3], nrmAttr[(t + v) * 3 + 1], nrmAttr[(t + v) * 3 + 2]);
|
|
100
100
|
smoothNrmX[vid] += tmpNrm.x * faceArea;
|
|
101
101
|
smoothNrmY[vid] += tmpNrm.y * faceArea;
|
|
102
102
|
smoothNrmZ[vid] += tmpNrm.z * faceArea;
|
|
@@ -123,7 +123,7 @@ export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, sett
|
|
|
123
123
|
if (dispCacheSet[vid])
|
|
124
124
|
continue;
|
|
125
125
|
dispCacheSet[vid] = 1;
|
|
126
|
-
tmpPos.
|
|
126
|
+
tmpPos.set(posAttr[i * 3], posAttr[i * 3 + 1], posAttr[i * 3 + 2]);
|
|
127
127
|
// Cubic 模式特殊处理
|
|
128
128
|
if (settings.mappingMode === 6) {
|
|
129
129
|
const md = Math.max(bounds.size.x, bounds.size.y, bounds.size.z, 1e-6);
|
|
@@ -181,8 +181,8 @@ export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, sett
|
|
|
181
181
|
// ── Pass 3: 每个顶点副本沿平滑法线位移 ──
|
|
182
182
|
const REPORT_EVERY = 5000;
|
|
183
183
|
for (let i = 0; i < count; i++) {
|
|
184
|
-
tmpPos.
|
|
185
|
-
tmpNrm.
|
|
184
|
+
tmpPos.set(posAttr[i * 3], posAttr[i * 3 + 1], posAttr[i * 3 + 2]);
|
|
185
|
+
tmpNrm.set(nrmAttr[i * 3], nrmAttr[i * 3 + 1], nrmAttr[i * 3 + 2]);
|
|
186
186
|
const vid = vertexId[i];
|
|
187
187
|
const grey = dispCacheVal[vid];
|
|
188
188
|
const isFaceExcluded = userExcludedFaces && userExcludedFaces[Math.floor(i / 3)];
|
|
@@ -213,9 +213,9 @@ export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, sett
|
|
|
213
213
|
onProgress(i / count);
|
|
214
214
|
}
|
|
215
215
|
// 从位移后位置计算精确的面法线
|
|
216
|
-
const eA = new
|
|
217
|
-
const eB = new
|
|
218
|
-
const fn = new
|
|
216
|
+
const eA = new Vec3C();
|
|
217
|
+
const eB = new Vec3C();
|
|
218
|
+
const fn = new Vec3C();
|
|
219
219
|
for (let t = 0; t < count; t += 3) {
|
|
220
220
|
const ax = newPos[t * 3], ay = newPos[t * 3 + 1], az = newPos[t * 3 + 2];
|
|
221
221
|
const bx = newPos[t * 3 + 3], by = newPos[t * 3 + 4], bz = newPos[t * 3 + 5];
|
|
@@ -229,10 +229,10 @@ export function applyDisplacement(geometry, imageData, imgWidth, imgHeight, sett
|
|
|
229
229
|
newNrm[(t + v) * 3 + 2] = fn.z;
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
return
|
|
232
|
+
const indices = new Uint32Array(count);
|
|
233
|
+
for (let i = 0; i < count; i++)
|
|
234
|
+
indices[i] = i;
|
|
235
|
+
return { positions: newPos, indices, normals: newNrm };
|
|
236
236
|
}
|
|
237
237
|
// ── 双线性采样 ──
|
|
238
238
|
function sampleBilinear(data, w, h, u, v) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displacement.js","sourceRoot":"","sources":["../../../src/mesh/knurl/displacement.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * displacement.ts — 纹理位移核心,从 stlTexturizer/js/displacement.js 移植为 TS(简化版)。\n *\n * 对每个顶点:\n * 1. 用与 GPU 预览 shader 相同的数学计算 UV(mapping.ts)\n * 2. 双线性采样灰度 ImageData\n * 3. 沿平滑法线位移:grey × amplitude\n *\n * 简化:去掉了 boundaryFalloff、blendNormalSmoothing、cubic zoneArea 等。\n * 保留了核心水密性保证:同位置顶点使用相同平滑法线 + 相同位移值。\n */\n\nimport * as THREE from 'three'\nimport { QuantizedPointMap } from './meshIndex'\nimport { computeUV, getCubicBlendWeights, type MappingSettings } from './mapping'\n\n/**\n * Displacement settings: the mapping settings plus the amplitude, optional\n * symmetric displacement, and angle-based face-masking limits.\n */\nexport interface DisplacementSettings extends MappingSettings {\n mappingMode: number\n amplitude: number\n symmetricDisplacement?: boolean\n bottomAngleLimit?: number\n topAngleLimit?: number\n}\n\ninterface Bounds {\n min: THREE.Vector3\n max: THREE.Vector3\n center: THREE.Vector3\n size: THREE.Vector3\n}\n\ninterface ImageDataLike {\n data: Uint8ClampedArray | Uint8Array\n width: number\n height: number\n}\n\n/**\n * Displace every vertex of a non-indexed BufferGeometry. For each vertex the\n * UV is computed with the same math as the GPU preview shader, the greyscale\n * ImageData is sampled bilinearly, and the position is shifted along the\n * smoothed normal by grey × amplitude.\n *\n * @param geometry - the non-indexed source geometry (position + normal attributes).\n * @param imageData - RGBA pixel data of the height map.\n * @param imgWidth - texture width in pixels.\n * @param imgHeight - texture height in pixels.\n * @param settings - displacement and mapping settings.\n * @param bounds - overall mesh bounds used to normalize UV coordinates.\n * @param onProgress - optional callback receiving progress in [0, 1].\n * @returns a new BufferGeometry with displaced positions and face normals.\n */\nexport function applyDisplacement(\n geometry: THREE.BufferGeometry,\n imageData: ImageDataLike,\n imgWidth: number,\n imgHeight: number,\n settings: DisplacementSettings,\n bounds: Bounds,\n onProgress?: (p: number) => void,\n): THREE.BufferGeometry {\n const posAttr = geometry.attributes.position\n const nrmAttr = geometry.attributes.normal\n const count = posAttr.count\n\n const newPos = new Float32Array(count * 3)\n const newNrm = new Float32Array(count * 3)\n\n const tmpPos = new THREE.Vector3()\n const tmpNrm = new THREE.Vector3()\n const vA = new THREE.Vector3()\n const vB = new THREE.Vector3()\n const vC = new THREE.Vector3()\n const edge1 = new THREE.Vector3()\n const edge2 = new THREE.Vector3()\n const faceNrm = new THREE.Vector3()\n\n // 纹理纵横比校正\n const tmax = Math.max(imgWidth, imgHeight, 1)\n const aspectU = tmax / Math.max(imgWidth, 1)\n const aspectV = tmax / Math.max(imgHeight, 1)\n const settingsWithAspect = { ...settings, textureAspectU: aspectU, textureAspectV: aspectV }\n\n // 10μm 顶点去重\n const QUANT = 1e5\n\n // ── 顶点去重:position → numeric ID ──\n const dedupMap = new QuantizedPointMap(QUANT, Math.min(count, 1 << 22))\n let nextId = 0\n const vertexId = new Uint32Array(count)\n for (let i = 0; i < count; i++) {\n const x = posAttr.getX(i),\n y = posAttr.getY(i),\n z = posAttr.getZ(i)\n const id = dedupMap.getOrSet(x, y, z, nextId)\n if (dedupMap.inserted) nextId++\n vertexId[i] = id\n }\n const uniqueCount = nextId\n\n // ── Pass 1: 每个唯一顶点累加面积加权平滑法线 ──\n const smoothNrmX = new Float64Array(uniqueCount)\n const smoothNrmY = new Float64Array(uniqueCount)\n const smoothNrmZ = new Float64Array(uniqueCount)\n\n // 角度遮罩\n const maskedFracMasked = new Float64Array(uniqueCount)\n const maskedFracTotal = new Float64Array(uniqueCount)\n\n // 面排除权重\n const ewAttr = geometry.attributes.excludeWeight || null\n const userExcludedFaces = ewAttr ? new Uint8Array(count / 3) : null\n const excludedPos = ewAttr ? new Uint8Array(uniqueCount) : null\n\n for (let t = 0; t < count; t += 3) {\n vA.fromBufferAttribute(posAttr, t)\n vB.fromBufferAttribute(posAttr, t + 1)\n vC.fromBufferAttribute(posAttr, t + 2)\n edge1.subVectors(vB, vA)\n edge2.subVectors(vC, vA)\n faceNrm.crossVectors(edge1, edge2)\n\n const faceArea = faceNrm.length()\n const faceNzNorm = faceArea > 1e-12 ? faceNrm.z / faceArea : 0\n const faceAngle = Math.acos(Math.abs(faceNzNorm)) * (180 / Math.PI)\n const angleMasked =\n faceNzNorm < 0\n ? (settings.bottomAngleLimit ?? 0) > 0 &&\n faceAngle <= (settings.bottomAngleLimit ?? 0)\n : (settings.topAngleLimit ?? 0) > 0 &&\n faceAngle <= (settings.topAngleLimit ?? 0)\n\n const userExcluded = ewAttr\n ? (ewAttr.getX(t) + ewAttr.getX(t + 1) + ewAttr.getX(t + 2)) / 3 > 0.99\n : false\n const faceMasked = angleMasked\n if (userExcluded && userExcludedFaces) userExcludedFaces[t / 3] = 1\n\n for (let v = 0; v < 3; v++) {\n const vid = vertexId[t + v]\n if (userExcluded && excludedPos) excludedPos[vid] = 1\n tmpNrm.fromBufferAttribute(nrmAttr, t + v)\n smoothNrmX[vid] += tmpNrm.x * faceArea\n smoothNrmY[vid] += tmpNrm.y * faceArea\n smoothNrmZ[vid] += tmpNrm.z * faceArea\n if (faceMasked) maskedFracMasked[vid] += faceArea\n maskedFracTotal[vid] += faceArea\n }\n }\n\n // 归一化平滑法线\n for (let id = 0; id < uniqueCount; id++) {\n const len = Math.sqrt(\n smoothNrmX[id] * smoothNrmX[id] +\n smoothNrmY[id] * smoothNrmY[id] +\n smoothNrmZ[id] * smoothNrmZ[id],\n )\n const inv = len > 0 ? 1 / len : 1\n smoothNrmX[id] *= inv\n smoothNrmY[id] *= inv\n smoothNrmZ[id] *= inv\n }\n\n // ── Pass 2: 每个唯一顶点采样纹理一次 ──\n const dispCacheVal = new Float64Array(uniqueCount)\n const dispCacheSet = new Uint8Array(uniqueCount)\n\n for (let i = 0; i < count; i++) {\n const vid = vertexId[i]\n if (dispCacheSet[vid]) continue\n dispCacheSet[vid] = 1\n\n tmpPos.fromBufferAttribute(posAttr, i)\n\n // Cubic 模式特殊处理\n if (settings.mappingMode === 6) {\n const md = Math.max(bounds.size.x, bounds.size.y, bounds.size.z, 1e-6)\n const rotRad = (settings.rotation ?? 0) * Math.PI / 180\n const cubicBlend = settings.mappingBlend ?? 0\n const cubicBandWidth = settings.seamBandWidth ?? 0.35\n\n const sn = {\n x: smoothNrmX[vid],\n y: smoothNrmY[vid],\n z: smoothNrmZ[vid],\n }\n const w = getCubicBlendWeights(sn, cubicBlend, cubicBandWidth)\n\n if (w.x + w.y + w.z > 0) {\n let grey = 0\n if (w.x > 0) {\n let rawU = (tmpPos.y - bounds.min.y) / md\n if (smoothNrmX[vid] < 0) rawU = -rawU\n const uv = _cubicUV(rawU, (tmpPos.z - bounds.min.z) / md, settings, rotRad, aspectU, aspectV)\n grey += sampleBilinear(imageData.data, imgWidth, imgHeight, uv.u, uv.v) * w.x\n }\n if (w.y > 0) {\n let rawU = (tmpPos.x - bounds.min.x) / md\n if (smoothNrmY[vid] > 0) rawU = -rawU\n const uv = _cubicUV(rawU, (tmpPos.z - bounds.min.z) / md, settings, rotRad, aspectU, aspectV)\n grey += sampleBilinear(imageData.data, imgWidth, imgHeight, uv.u, uv.v) * w.y\n }\n if (w.z > 0) {\n let rawU = (tmpPos.x - bounds.min.x) / md\n if (smoothNrmZ[vid] < 0) rawU = -rawU\n const uv = _cubicUV(rawU, (tmpPos.y - bounds.min.y) / md, settings, rotRad, aspectU, aspectV)\n grey += sampleBilinear(imageData.data, imgWidth, imgHeight, uv.u, uv.v) * w.z\n }\n dispCacheVal[vid] = grey\n continue\n }\n }\n\n // 其他模式:用平滑法线计算 UV\n tmpNrm.set(smoothNrmX[vid], smoothNrmY[vid], smoothNrmZ[vid])\n\n const uvResult = computeUV(tmpPos, tmpNrm, settings.mappingMode, settingsWithAspect, bounds)\n let grey: number\n if (uvResult.triplanar && uvResult.samples) {\n grey = 0\n for (const s of uvResult.samples) {\n grey += sampleBilinear(imageData.data, imgWidth, imgHeight, s.u, s.v) * s.w\n }\n } else {\n grey = sampleBilinear(imageData.data, imgWidth, imgHeight, uvResult.u, uvResult.v)\n }\n dispCacheVal[vid] = grey\n }\n\n // ── Pass 3: 每个顶点副本沿平滑法线位移 ──\n const REPORT_EVERY = 5000\n\n for (let i = 0; i < count; i++) {\n tmpPos.fromBufferAttribute(posAttr, i)\n tmpNrm.fromBufferAttribute(nrmAttr, i)\n\n const vid = vertexId[i]\n const grey = dispCacheVal[vid]\n\n const isFaceExcluded = userExcludedFaces && userExcludedFaces[Math.floor(i / 3)]\n const isSealedBoundary = !isFaceExcluded && excludedPos && excludedPos[vid] === 1\n const mfTotal = maskedFracTotal[vid]\n const maskedFrac = mfTotal > 0 ? maskedFracMasked[vid] / mfTotal : 0\n const centeredGrey = settings.symmetricDisplacement ? grey - 0.5 : grey\n const disp =\n isFaceExcluded || isSealedBoundary\n ? 0\n : (1 - maskedFrac) * centeredGrey * settings.amplitude\n\n const newX = tmpPos.x + smoothNrmX[vid] * disp\n const newY = tmpPos.y + smoothNrmY[vid] * disp\n let newZ = tmpPos.z + smoothNrmZ[vid] * disp\n\n // 防止边界顶点穿过遮罩表面\n if (maskedFrac > 0) {\n if ((settings.bottomAngleLimit ?? 0) > 0 && newZ < tmpPos.z) newZ = tmpPos.z\n if ((settings.topAngleLimit ?? 0) > 0 && newZ > tmpPos.z) newZ = tmpPos.z\n }\n\n newPos[i * 3] = newX\n newPos[i * 3 + 1] = newY\n newPos[i * 3 + 2] = newZ\n\n newNrm[i * 3] = tmpNrm.x\n newNrm[i * 3 + 1] = tmpNrm.y\n newNrm[i * 3 + 2] = tmpNrm.z\n\n if (onProgress && i % REPORT_EVERY === 0) onProgress(i / count)\n }\n\n // 从位移后位置计算精确的面法线\n const eA = new THREE.Vector3()\n const eB = new THREE.Vector3()\n const fn = new THREE.Vector3()\n for (let t = 0; t < count; t += 3) {\n const ax = newPos[t * 3],\n ay = newPos[t * 3 + 1],\n az = newPos[t * 3 + 2]\n const bx = newPos[t * 3 + 3],\n by = newPos[t * 3 + 4],\n bz = newPos[t * 3 + 5]\n const cx = newPos[t * 3 + 6],\n cy = newPos[t * 3 + 7],\n cz = newPos[t * 3 + 8]\n eA.set(bx - ax, by - ay, bz - az)\n eB.set(cx - ax, cy - ay, cz - az)\n fn.crossVectors(eA, eB).normalize()\n for (let v = 0; v < 3; v++) {\n newNrm[(t + v) * 3] = fn.x\n newNrm[(t + v) * 3 + 1] = fn.y\n newNrm[(t + v) * 3 + 2] = fn.z\n }\n }\n\n const out = new THREE.BufferGeometry()\n out.setAttribute('position', new THREE.BufferAttribute(newPos, 3))\n out.setAttribute('normal', new THREE.BufferAttribute(newNrm, 3))\n return out\n}\n\n// ── 双线性采样 ──\n\nfunction sampleBilinear(\n data: Uint8ClampedArray | Uint8Array,\n w: number,\n h: number,\n u: number,\n v: number,\n): number {\n u = ((u % 1) + 1) % 1\n v = ((v % 1) + 1) % 1\n v = 1 - v\n\n const fx = u * w - 0.5\n const fy = v * h - 0.5\n let x0 = Math.floor(fx)\n let y0 = Math.floor(fy)\n const tx = fx - x0\n const ty = fy - y0\n const x1 = (x0 + 1 + w) % w\n const y1 = (y0 + 1 + h) % h\n x0 = ((x0 % w) + w) % w\n y0 = ((y0 % h) + h) % h\n\n const v00 = data[(y0 * w + x0) * 4] / 255\n const v10 = data[(y0 * w + x1) * 4] / 255\n const v01 = data[(y1 * w + x0) * 4] / 255\n const v11 = data[(y1 * w + x1) * 4] / 255\n\n return (\n v00 * (1 - tx) * (1 - ty) +\n v10 * tx * (1 - ty) +\n v01 * (1 - tx) * ty +\n v11 * tx * ty\n )\n}\n\nfunction _cubicUV(\n rawU: number,\n rawV: number,\n settings: DisplacementSettings,\n rotRad: number,\n aspectU: number,\n aspectV: number,\n): { u: number; v: number } {\n let u = (rawU * aspectU) / settings.scaleU + settings.offsetU\n let v = (rawV * aspectV) / settings.scaleV + settings.offsetV\n if (rotRad !== 0) {\n const c = Math.cos(rotRad),\n s = Math.sin(rotRad)\n u -= 0.5\n v -= 0.5\n const ru = c * u - s * v,\n rv = s * u + c * v\n u = ru + 0.5\n v = rv + 0.5\n }\n return { u: u - Math.floor(u), v: v - Math.floor(v) }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"displacement.js","sourceRoot":"","sources":["../../../src/mesh/knurl/displacement.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * displacement.ts — 纹理位移核心,从 stlTexturizer/js/displacement.js 移植为 TS(简化版)。\n *\n * 对每个顶点:\n * 1. 用与 GPU 预览 shader 相同的数学计算 UV(mapping.ts)\n * 2. 双线性采样灰度 ImageData\n * 3. 沿平滑法线位移:grey × amplitude\n *\n * 简化:去掉了 boundaryFalloff、blendNormalSmoothing、cubic zoneArea 等。\n * 保留了核心水密性保证:同位置顶点使用相同平滑法线 + 相同位移值。\n */\n\nimport { Vec3 as Vec3C } from '../../math3d'\nimport type { Shape } from '../types'\nimport { QuantizedPointMap } from './meshIndex'\nimport { computeUV, getCubicBlendWeights, type MappingSettings } from './mapping'\n\n/**\n * Displacement settings: the mapping settings plus the amplitude, optional\n * symmetric displacement, and angle-based face-masking limits.\n */\nexport interface DisplacementSettings extends MappingSettings {\n mappingMode: number\n amplitude: number\n symmetricDisplacement?: boolean\n bottomAngleLimit?: number\n topAngleLimit?: number\n}\n\ninterface Bounds {\n min: Vec3C\n max: Vec3C\n center: Vec3C\n size: Vec3C\n}\n\ninterface ImageDataLike {\n data: Uint8ClampedArray | Uint8Array\n width: number\n height: number\n}\n\n/**\n * Displace every vertex of a non-indexed BufferGeometry. For each vertex the\n * UV is computed with the same math as the GPU preview shader, the greyscale\n * ImageData is sampled bilinearly, and the position is shifted along the\n * smoothed normal by grey × amplitude.\n *\n * @param geometry - the non-indexed source geometry (position + normal attributes).\n * @param imageData - RGBA pixel data of the height map.\n * @param imgWidth - texture width in pixels.\n * @param imgHeight - texture height in pixels.\n * @param settings - displacement and mapping settings.\n * @param bounds - overall mesh bounds used to normalize UV coordinates.\n * @param onProgress - optional callback receiving progress in [0, 1].\n * @returns a new BufferGeometry with displaced positions and face normals.\n */\nexport function applyDisplacement(\n geometry: Shape,\n imageData: ImageDataLike,\n imgWidth: number,\n imgHeight: number,\n settings: DisplacementSettings,\n bounds: Bounds,\n onProgress?: (p: number) => void,\n): Shape {\n const posAttr = geometry.positions\n const nrmAttr = geometry.normals || new Float32Array(posAttr.length)\n const count = posAttr.length / 3\n\n const newPos = new Float32Array(count * 3)\n const newNrm = new Float32Array(count * 3)\n\n const tmpPos = new Vec3C()\n const tmpNrm = new Vec3C()\n const vA = new Vec3C()\n const vB = new Vec3C()\n const vC = new Vec3C()\n const edge1 = new Vec3C()\n const edge2 = new Vec3C()\n const faceNrm = new Vec3C()\n\n // 纹理纵横比校正\n const tmax = Math.max(imgWidth, imgHeight, 1)\n const aspectU = tmax / Math.max(imgWidth, 1)\n const aspectV = tmax / Math.max(imgHeight, 1)\n const settingsWithAspect = { ...settings, textureAspectU: aspectU, textureAspectV: aspectV }\n\n // 10μm 顶点去重\n const QUANT = 1e5\n\n // ── 顶点去重:position → numeric ID ──\n const dedupMap = new QuantizedPointMap(QUANT, Math.min(count, 1 << 22))\n let nextId = 0\n const vertexId = new Uint32Array(count)\n for (let i = 0; i < count; i++) {\n const x = posAttr[i * 3],\n y = posAttr[i * 3 + 1],\n z = posAttr[i * 3 + 2]\n const id = dedupMap.getOrSet(x, y, z, nextId)\n if (dedupMap.inserted) nextId++\n vertexId[i] = id\n }\n const uniqueCount = nextId\n\n // ── Pass 1: 每个唯一顶点累加面积加权平滑法线 ──\n const smoothNrmX = new Float64Array(uniqueCount)\n const smoothNrmY = new Float64Array(uniqueCount)\n const smoothNrmZ = new Float64Array(uniqueCount)\n\n // 角度遮罩\n const maskedFracMasked = new Float64Array(uniqueCount)\n const maskedFracTotal = new Float64Array(uniqueCount)\n\n // 面排除权重\n const ewAttr = (geometry as Shape & { excludeWeight?: Float32Array | null }).excludeWeight || null\n const userExcludedFaces = ewAttr ? new Uint8Array(count / 3) : null\n const excludedPos = ewAttr ? new Uint8Array(uniqueCount) : null\n\n for (let t = 0; t < count; t += 3) {\n vA.set(posAttr[t * 3], posAttr[t * 3 + 1], posAttr[t * 3 + 2])\n vB.set(posAttr[(t + 1) * 3], posAttr[(t + 1) * 3 + 1], posAttr[(t + 1) * 3 + 2])\n vC.set(posAttr[(t + 2) * 3], posAttr[(t + 2) * 3 + 1], posAttr[(t + 2) * 3 + 2])\n edge1.subVectors(vB, vA)\n edge2.subVectors(vC, vA)\n faceNrm.crossVectors(edge1, edge2)\n\n const faceArea = faceNrm.length()\n const faceNzNorm = faceArea > 1e-12 ? faceNrm.z / faceArea : 0\n const faceAngle = Math.acos(Math.abs(faceNzNorm)) * (180 / Math.PI)\n const angleMasked =\n faceNzNorm < 0\n ? (settings.bottomAngleLimit ?? 0) > 0 &&\n faceAngle <= (settings.bottomAngleLimit ?? 0)\n : (settings.topAngleLimit ?? 0) > 0 &&\n faceAngle <= (settings.topAngleLimit ?? 0)\n\n const userExcluded = ewAttr\n ? (ewAttr[t] + ewAttr[t + 1] + ewAttr[t + 2]) / 3 > 0.99\n : false\n const faceMasked = angleMasked\n if (userExcluded && userExcludedFaces) userExcludedFaces[t / 3] = 1\n\n for (let v = 0; v < 3; v++) {\n const vid = vertexId[t + v]\n if (userExcluded && excludedPos) excludedPos[vid] = 1\n tmpNrm.set(nrmAttr[(t + v) * 3], nrmAttr[(t + v) * 3 + 1], nrmAttr[(t + v) * 3 + 2])\n smoothNrmX[vid] += tmpNrm.x * faceArea\n smoothNrmY[vid] += tmpNrm.y * faceArea\n smoothNrmZ[vid] += tmpNrm.z * faceArea\n if (faceMasked) maskedFracMasked[vid] += faceArea\n maskedFracTotal[vid] += faceArea\n }\n }\n\n // 归一化平滑法线\n for (let id = 0; id < uniqueCount; id++) {\n const len = Math.sqrt(\n smoothNrmX[id] * smoothNrmX[id] +\n smoothNrmY[id] * smoothNrmY[id] +\n smoothNrmZ[id] * smoothNrmZ[id],\n )\n const inv = len > 0 ? 1 / len : 1\n smoothNrmX[id] *= inv\n smoothNrmY[id] *= inv\n smoothNrmZ[id] *= inv\n }\n\n // ── Pass 2: 每个唯一顶点采样纹理一次 ──\n const dispCacheVal = new Float64Array(uniqueCount)\n const dispCacheSet = new Uint8Array(uniqueCount)\n\n for (let i = 0; i < count; i++) {\n const vid = vertexId[i]\n if (dispCacheSet[vid]) continue\n dispCacheSet[vid] = 1\n\n tmpPos.set(posAttr[i * 3], posAttr[i * 3 + 1], posAttr[i * 3 + 2])\n\n // Cubic 模式特殊处理\n if (settings.mappingMode === 6) {\n const md = Math.max(bounds.size.x, bounds.size.y, bounds.size.z, 1e-6)\n const rotRad = (settings.rotation ?? 0) * Math.PI / 180\n const cubicBlend = settings.mappingBlend ?? 0\n const cubicBandWidth = settings.seamBandWidth ?? 0.35\n\n const sn = {\n x: smoothNrmX[vid],\n y: smoothNrmY[vid],\n z: smoothNrmZ[vid],\n }\n const w = getCubicBlendWeights(sn, cubicBlend, cubicBandWidth)\n\n if (w.x + w.y + w.z > 0) {\n let grey = 0\n if (w.x > 0) {\n let rawU = (tmpPos.y - bounds.min.y) / md\n if (smoothNrmX[vid] < 0) rawU = -rawU\n const uv = _cubicUV(rawU, (tmpPos.z - bounds.min.z) / md, settings, rotRad, aspectU, aspectV)\n grey += sampleBilinear(imageData.data, imgWidth, imgHeight, uv.u, uv.v) * w.x\n }\n if (w.y > 0) {\n let rawU = (tmpPos.x - bounds.min.x) / md\n if (smoothNrmY[vid] > 0) rawU = -rawU\n const uv = _cubicUV(rawU, (tmpPos.z - bounds.min.z) / md, settings, rotRad, aspectU, aspectV)\n grey += sampleBilinear(imageData.data, imgWidth, imgHeight, uv.u, uv.v) * w.y\n }\n if (w.z > 0) {\n let rawU = (tmpPos.x - bounds.min.x) / md\n if (smoothNrmZ[vid] < 0) rawU = -rawU\n const uv = _cubicUV(rawU, (tmpPos.y - bounds.min.y) / md, settings, rotRad, aspectU, aspectV)\n grey += sampleBilinear(imageData.data, imgWidth, imgHeight, uv.u, uv.v) * w.z\n }\n dispCacheVal[vid] = grey\n continue\n }\n }\n\n // 其他模式:用平滑法线计算 UV\n tmpNrm.set(smoothNrmX[vid], smoothNrmY[vid], smoothNrmZ[vid])\n\n const uvResult = computeUV(tmpPos, tmpNrm, settings.mappingMode, settingsWithAspect, bounds)\n let grey: number\n if (uvResult.triplanar && uvResult.samples) {\n grey = 0\n for (const s of uvResult.samples) {\n grey += sampleBilinear(imageData.data, imgWidth, imgHeight, s.u, s.v) * s.w\n }\n } else {\n grey = sampleBilinear(imageData.data, imgWidth, imgHeight, uvResult.u, uvResult.v)\n }\n dispCacheVal[vid] = grey\n }\n\n // ── Pass 3: 每个顶点副本沿平滑法线位移 ──\n const REPORT_EVERY = 5000\n\n for (let i = 0; i < count; i++) {\n tmpPos.set(posAttr[i * 3], posAttr[i * 3 + 1], posAttr[i * 3 + 2])\n tmpNrm.set(nrmAttr[i * 3], nrmAttr[i * 3 + 1], nrmAttr[i * 3 + 2])\n\n const vid = vertexId[i]\n const grey = dispCacheVal[vid]\n\n const isFaceExcluded = userExcludedFaces && userExcludedFaces[Math.floor(i / 3)]\n const isSealedBoundary = !isFaceExcluded && excludedPos && excludedPos[vid] === 1\n const mfTotal = maskedFracTotal[vid]\n const maskedFrac = mfTotal > 0 ? maskedFracMasked[vid] / mfTotal : 0\n const centeredGrey = settings.symmetricDisplacement ? grey - 0.5 : grey\n const disp =\n isFaceExcluded || isSealedBoundary\n ? 0\n : (1 - maskedFrac) * centeredGrey * settings.amplitude\n\n const newX = tmpPos.x + smoothNrmX[vid] * disp\n const newY = tmpPos.y + smoothNrmY[vid] * disp\n let newZ = tmpPos.z + smoothNrmZ[vid] * disp\n\n // 防止边界顶点穿过遮罩表面\n if (maskedFrac > 0) {\n if ((settings.bottomAngleLimit ?? 0) > 0 && newZ < tmpPos.z) newZ = tmpPos.z\n if ((settings.topAngleLimit ?? 0) > 0 && newZ > tmpPos.z) newZ = tmpPos.z\n }\n\n newPos[i * 3] = newX\n newPos[i * 3 + 1] = newY\n newPos[i * 3 + 2] = newZ\n\n newNrm[i * 3] = tmpNrm.x\n newNrm[i * 3 + 1] = tmpNrm.y\n newNrm[i * 3 + 2] = tmpNrm.z\n\n if (onProgress && i % REPORT_EVERY === 0) onProgress(i / count)\n }\n\n // 从位移后位置计算精确的面法线\n const eA = new Vec3C()\n const eB = new Vec3C()\n const fn = new Vec3C()\n for (let t = 0; t < count; t += 3) {\n const ax = newPos[t * 3],\n ay = newPos[t * 3 + 1],\n az = newPos[t * 3 + 2]\n const bx = newPos[t * 3 + 3],\n by = newPos[t * 3 + 4],\n bz = newPos[t * 3 + 5]\n const cx = newPos[t * 3 + 6],\n cy = newPos[t * 3 + 7],\n cz = newPos[t * 3 + 8]\n eA.set(bx - ax, by - ay, bz - az)\n eB.set(cx - ax, cy - ay, cz - az)\n fn.crossVectors(eA, eB).normalize()\n for (let v = 0; v < 3; v++) {\n newNrm[(t + v) * 3] = fn.x\n newNrm[(t + v) * 3 + 1] = fn.y\n newNrm[(t + v) * 3 + 2] = fn.z\n }\n }\n\n const indices = new Uint32Array(count)\n for (let i = 0; i < count; i++) indices[i] = i\n return { positions: newPos, indices, normals: newNrm }\n}\n\n// ── 双线性采样 ──\n\nfunction sampleBilinear(\n data: Uint8ClampedArray | Uint8Array,\n w: number,\n h: number,\n u: number,\n v: number,\n): number {\n u = ((u % 1) + 1) % 1\n v = ((v % 1) + 1) % 1\n v = 1 - v\n\n const fx = u * w - 0.5\n const fy = v * h - 0.5\n let x0 = Math.floor(fx)\n let y0 = Math.floor(fy)\n const tx = fx - x0\n const ty = fy - y0\n const x1 = (x0 + 1 + w) % w\n const y1 = (y0 + 1 + h) % h\n x0 = ((x0 % w) + w) % w\n y0 = ((y0 % h) + h) % h\n\n const v00 = data[(y0 * w + x0) * 4] / 255\n const v10 = data[(y0 * w + x1) * 4] / 255\n const v01 = data[(y1 * w + x0) * 4] / 255\n const v11 = data[(y1 * w + x1) * 4] / 255\n\n return (\n v00 * (1 - tx) * (1 - ty) +\n v10 * tx * (1 - ty) +\n v01 * (1 - tx) * ty +\n v11 * tx * ty\n )\n}\n\nfunction _cubicUV(\n rawU: number,\n rawV: number,\n settings: DisplacementSettings,\n rotRad: number,\n aspectU: number,\n aspectV: number,\n): { u: number; v: number } {\n let u = (rawU * aspectU) / settings.scaleU + settings.offsetU\n let v = (rawV * aspectV) / settings.scaleV + settings.offsetV\n if (rotRad !== 0) {\n const c = Math.cos(rotRad),\n s = Math.sin(rotRad)\n u -= 0.5\n v -= 0.5\n const ru = c * u - s * v,\n rv = s * u + c * v\n u = ru + 0.5\n v = rv + 0.5\n }\n return { u: u - Math.floor(u), v: v - Math.floor(v) }\n}\n"]}
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
* - E2E 测试通过:hasNaN: false, bounds 正确
|
|
34
34
|
* - 原始 bounds [0,0,0]~[150,120,90] → knurl 后 [-0.5,-0.5,0]~[150.5,120.5,90.5]
|
|
35
35
|
*/
|
|
36
|
-
import
|
|
36
|
+
import type { Shape } from '../types.js';
|
|
37
37
|
/**
|
|
38
38
|
* Adaptively subdivide a geometry until every edge is ≤ maxEdgeLength.
|
|
39
39
|
* Indexed inputs are expanded to non-indexed form first; sharp edges are
|
|
@@ -47,8 +47,8 @@ import * as THREE from 'three';
|
|
|
47
47
|
* @param faceWeights - optional per-face exclusion weights (non-indexed triangle soup layout).
|
|
48
48
|
* @returns the subdivided non-indexed geometry and whether the safety cap was reached.
|
|
49
49
|
*/
|
|
50
|
-
export declare function subdivide(geometry:
|
|
51
|
-
geometry:
|
|
50
|
+
export declare function subdivide(geometry: Shape, maxEdgeLength: number, onProgress?: (p: number, triCount: number, longestEdge: number) => void, faceWeights?: Float32Array | null): Promise<{
|
|
51
|
+
geometry: Shape;
|
|
52
52
|
safetyCapHit: boolean;
|
|
53
53
|
}>;
|
|
54
54
|
//# sourceMappingURL=subdivision.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subdivision.d.ts","sourceRoot":"","sources":["../../../src/mesh/knurl/subdivision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"subdivision.d.ts","sourceRoot":"","sources":["../../../src/mesh/knurl/subdivision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AA8DrC;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,EACvE,WAAW,GAAE,YAAY,GAAG,IAAW,GACtC,OAAO,CAAC;IACT,QAAQ,EAAE,KAAK,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;CACtB,CAAC,CAuED"}
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
* - E2E 测试通过:hasNaN: false, bounds 正确
|
|
34
34
|
* - 原始 bounds [0,0,0]~[150,120,90] → knurl 后 [-0.5,-0.5,0]~[150.5,120.5,90.5]
|
|
35
35
|
*/
|
|
36
|
-
import
|
|
36
|
+
import { toNonIndexed as shapeToNonIndexed } from '../meshdata/ops.js';
|
|
37
37
|
import { QuantizedPointMap } from './meshIndex.js';
|
|
38
38
|
// 10μm 顶点去重网格
|
|
39
39
|
const QUANTISE = 1e5;
|
|
@@ -92,8 +92,9 @@ function makeVertStore(initialCap, hasWeights, hasCanon) {
|
|
|
92
92
|
export async function subdivide(geometry, maxEdgeLength, onProgress, faceWeights = null) {
|
|
93
93
|
// 确保 geometry 是 non-indexed(toIndexed 假设输入是 flat 的)
|
|
94
94
|
let workingGeo = geometry;
|
|
95
|
-
if (geometry.
|
|
96
|
-
|
|
95
|
+
if (geometry.indices.length > 0) {
|
|
96
|
+
const ni = shapeToNonIndexed(geometry);
|
|
97
|
+
workingGeo = { positions: ni.positions, indices: ni.indices };
|
|
97
98
|
}
|
|
98
99
|
// 在 toIndexed 之前推导每面排除标记
|
|
99
100
|
let initialFaceExcluded = null;
|
|
@@ -365,15 +366,15 @@ function getMidpoint(verts, cache, a, b, posCanonMap) {
|
|
|
365
366
|
return idx;
|
|
366
367
|
}
|
|
367
368
|
function toIndexed(geometry, nonIndexedWeights = null) {
|
|
368
|
-
const
|
|
369
|
-
const n =
|
|
369
|
+
const positions = geometry.positions;
|
|
370
|
+
const n = positions.length / 3;
|
|
370
371
|
// 预计算每个面的法线(单位 + 原始叉积)
|
|
371
372
|
const faceNrmUnit = new Float32Array(n * 3);
|
|
372
373
|
const faceNrmRaw = new Float32Array(n * 3);
|
|
373
374
|
for (let t = 0; t < n; t += 3) {
|
|
374
|
-
const ax =
|
|
375
|
-
const bx =
|
|
376
|
-
const cx =
|
|
375
|
+
const ax = positions[t * 3], ay = positions[t * 3 + 1], az = positions[t * 3 + 2];
|
|
376
|
+
const bx = positions[(t + 1) * 3], by = positions[(t + 1) * 3 + 1], bz = positions[(t + 1) * 3 + 2];
|
|
377
|
+
const cx = positions[(t + 2) * 3], cy = positions[(t + 2) * 3 + 1], cz = positions[(t + 2) * 3 + 2];
|
|
377
378
|
const e1x = bx - ax, e1y = by - ay, e1z = bz - az;
|
|
378
379
|
const e2x = cx - ax, e2y = cy - ay, e2z = cz - az;
|
|
379
380
|
const rx = e1y * e2z - e1z * e2y;
|
|
@@ -397,9 +398,9 @@ function toIndexed(geometry, nonIndexedWeights = null) {
|
|
|
397
398
|
// canonical ID → cluster list at that position
|
|
398
399
|
const clustersByCanon = new Map();
|
|
399
400
|
for (let i = 0; i < n; i++) {
|
|
400
|
-
const px =
|
|
401
|
-
const py =
|
|
402
|
-
const pz =
|
|
401
|
+
const px = positions[i * 3];
|
|
402
|
+
const py = positions[i * 3 + 1];
|
|
403
|
+
const pz = positions[i * 3 + 2];
|
|
403
404
|
const fnUx = faceNrmUnit[i * 3], fnUy = faceNrmUnit[i * 3 + 1], fnUz = faceNrmUnit[i * 3 + 2];
|
|
404
405
|
const fnRx = faceNrmRaw[i * 3], fnRy = faceNrmRaw[i * 3 + 1], fnRz = faceNrmRaw[i * 3 + 2];
|
|
405
406
|
// 第一个到达此位置的顶点成为 canonical ID
|
|
@@ -507,11 +508,16 @@ function toNonIndexed(verts, indices, faceExcluded = null) {
|
|
|
507
508
|
wgtArray[t * 3 + v] = faceW !== null ? faceW : weights[vidx];
|
|
508
509
|
}
|
|
509
510
|
}
|
|
510
|
-
const
|
|
511
|
-
|
|
512
|
-
|
|
511
|
+
const seqIndices = new Uint32Array(triCount * 3);
|
|
512
|
+
for (let i = 0; i < seqIndices.length; i++)
|
|
513
|
+
seqIndices[i] = i;
|
|
514
|
+
const geo = {
|
|
515
|
+
positions: posArray,
|
|
516
|
+
indices: seqIndices,
|
|
517
|
+
normals: nrmArray,
|
|
518
|
+
};
|
|
513
519
|
if (wgtArray)
|
|
514
|
-
geo.
|
|
520
|
+
geo.excludeWeight = wgtArray;
|
|
515
521
|
return geo;
|
|
516
522
|
}
|
|
517
523
|
//# sourceMappingURL=subdivision.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subdivision.js","sourceRoot":"","sources":["../../../src/mesh/knurl/subdivision.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * subdivision.ts — 自适应边细分,从 stlTexturizer/js/subdivision.js 移植为 TS。\n *\n * 细分直到每条边 ≤ maxEdgeLength。\n *\n * 关键特性:\n * - toIndexed (export path): 锐边分裂 — 同位置但法线夹角 > 30° 的顶点分开存储\n * - 确保水密性\n *\n * 管线:\n * toIndexed(geometry) → 索引化 + 顶点去重 + 锐边分裂\n * 循环细分:标记长边 → 按标记数量分裂三角形\n * toNonIndexed(verts, indices) → 输出 non-indexed BufferGeometry\n *\n * Bug 修复记录 (2026-07-22):\n * 问题: 检测到 knurl 后的 mesh 出现 NaN 值和错误 bounds\n * (bounds 从 [-0.5, 0.5] 变成 [-17, 17],且 hasNaN: true)\n *\n * 根因分析:\n * 1. box_boss.3mf 是 indexed geometry (530 vertices, 1548 indices)\n * 2. toIndexed() 函数假设输入是 non-indexed (flat triangles)\n * 3. 当传入 indexed geometry 时,toIndexed() 错误处理顶点数据:\n * - n = posAttr.count = 530 (顶点数)\n * - 但代码按 triangle count = n/3 = 176 处理\n * - 导致顶点索引越界,读取错误位置的数据\n * 4. 细分后顶点位置完全错误,进而导致 displacement 计算产生 NaN\n *\n * 修复方案:\n * 在 subdivide() 入口添加 indexed → non-indexed 转换:\n * if (geometry.index) { workingGeo = geometry.toNonIndexed() }\n *\n * 验证:\n * - E2E 测试通过:hasNaN: false, bounds 正确\n * - 原始 bounds [0,0,0]~[150,120,90] → knurl 后 [-0.5,-0.5,0]~[150.5,120.5,90.5]\n */\n\nimport * as THREE from 'three'\nimport { QuantizedPointMap } from './meshIndex'\n\n// 10μm 顶点去重网格\nconst QUANTISE = 1e5\n// 安全上限\nconst SAFETY_CAP =\n typeof navigator !== 'undefined' &&\n (navigator as Navigator & { deviceMemory?: number }).deviceMemory !== undefined &&\n (navigator as Navigator & { deviceMemory?: number }).deviceMemory! >= 8\n ? 32_000_000\n : 16_000_000\n\n// 锐边角度阈值(度)— 法线夹角超过此值的顶点在索引化时分裂\nconst SHARP_ANGLE_DEG = 30\nconst SHARP_COS = Math.cos(SHARP_ANGLE_DEG * Math.PI / 180)\n\n// ── 可增长类型化顶点存储 ──\n\ninterface VertStore {\n cap: number\n count: number\n pos: Float64Array\n nrm: Float64Array\n wgt: Float64Array | null\n canon: Int32Array | null // 规范位置 ID(准确模式)\n grow(): void\n}\n\nfunction makeVertStore(initialCap: number, hasWeights: boolean, hasCanon: boolean): VertStore {\n return {\n cap: initialCap,\n count: 0,\n pos: new Float64Array(initialCap * 3),\n nrm: new Float64Array(initialCap * 3),\n wgt: hasWeights ? new Float64Array(initialCap) : null,\n canon: hasCanon ? new Int32Array(initialCap) : null,\n grow() {\n this.cap *= 2\n const np = new Float64Array(this.cap * 3)\n np.set(this.pos)\n this.pos = np\n const nn = new Float64Array(this.cap * 3)\n nn.set(this.nrm)\n this.nrm = nn\n if (this.wgt) {\n const nw = new Float64Array(this.cap)\n nw.set(this.wgt)\n this.wgt = nw\n }\n if (this.canon) {\n const nc = new Int32Array(this.cap)\n nc.set(this.canon)\n this.canon = nc\n }\n },\n }\n}\n\n// ── 公共入口 ──\n\n/**\n * Adaptively subdivide a geometry until every edge is ≤ maxEdgeLength.\n * Indexed inputs are expanded to non-indexed form first; sharp edges are\n * split at vertices whose face-normal angle exceeds the threshold so each\n * surface keeps its own normal direction and the result stays watertight.\n * Faces marked by `faceWeights` are excluded from refinement.\n *\n * @param geometry - the source geometry (position attribute; may be indexed).\n * @param maxEdgeLength - maximum allowed edge length in millimeters.\n * @param onProgress - optional callback receiving progress, triangle count, and longest edge.\n * @param faceWeights - optional per-face exclusion weights (non-indexed triangle soup layout).\n * @returns the subdivided non-indexed geometry and whether the safety cap was reached.\n */\nexport async function subdivide(\n geometry: THREE.BufferGeometry,\n maxEdgeLength: number,\n onProgress?: (p: number, triCount: number, longestEdge: number) => void,\n faceWeights: Float32Array | null = null,\n): Promise<{\n geometry: THREE.BufferGeometry\n safetyCapHit: boolean\n}> {\n // 确保 geometry 是 non-indexed(toIndexed 假设输入是 flat 的)\n let workingGeo = geometry\n if (geometry.index) {\n workingGeo = geometry.toNonIndexed()\n }\n\n // 在 toIndexed 之前推导每面排除标记\n let initialFaceExcluded: Uint8Array | null = null\n if (faceWeights) {\n const triCount = faceWeights.length / 3\n initialFaceExcluded = new Uint8Array(triCount)\n for (let i = 0; i < triCount; i++) {\n if (faceWeights[i * 3] > 0.99) initialFaceExcluded[i] = 1\n }\n }\n\n // 使用准确模式(带锐边分裂的 toIndexed)\n const { verts, indices, posCanonMap } = toIndexed(workingGeo, faceWeights)\n\n const maxIterations = 12\n let currentIndices = indices\n let currentFaceExcluded = initialFaceExcluded\n let safetyCapHit = false\n\n for (let iter = 0; iter < maxIterations; iter++) {\n const triCount = currentIndices.length / 3\n if (triCount >= SAFETY_CAP) {\n safetyCapHit = true\n break\n }\n\n const { newIndices, newFaceExcluded, changed, capped } = subdividePass(\n verts,\n currentIndices,\n maxEdgeLength,\n SAFETY_CAP,\n currentFaceExcluded,\n posCanonMap,\n )\n currentIndices = newIndices\n if (newFaceExcluded) currentFaceExcluded = newFaceExcluded\n\n if (capped || newIndices.length / 3 >= SAFETY_CAP) safetyCapHit = true\n\n const positions = verts.pos\n let maxEdgeLenSq = 0\n for (let t = 0; t < currentIndices.length; t += 3) {\n const a = currentIndices[t],\n b = currentIndices[t + 1],\n c = currentIndices[t + 2]\n const ab = edgeLenSq(positions, a, b)\n const bc = edgeLenSq(positions, b, c)\n const ca = edgeLenSq(positions, c, a)\n if (ab > maxEdgeLenSq) maxEdgeLenSq = ab\n if (bc > maxEdgeLenSq) maxEdgeLenSq = bc\n if (ca > maxEdgeLenSq) maxEdgeLenSq = ca\n }\n const longestEdge = Math.sqrt(maxEdgeLenSq)\n\n const newTriCount = newIndices.length / 3\n if (onProgress) onProgress(Math.min(0.95, (iter + 1) / maxIterations), newTriCount, longestEdge)\n await new Promise((r) => setTimeout(r, 0))\n if (!changed || safetyCapHit) break\n }\n\n return {\n geometry: toNonIndexed(verts, currentIndices, currentFaceExcluded),\n safetyCapHit,\n }\n}\n\n// ── 一次细分 pass ──\n\nfunction subdividePass(\n verts: VertStore,\n indices: Uint32Array,\n maxEdgeLength: number,\n safetyCap: number,\n faceExcluded: Uint8Array | null = null,\n posCanonMap: QuantizedPointMap | null = null,\n): {\n newIndices: Uint32Array\n newFaceExcluded: Uint8Array | null\n changed: boolean\n capped?: boolean\n} {\n const maxSq = maxEdgeLength * maxEdgeLength\n const midCache = new QuantizedPointMap(1, 1 << 16)\n const positions = verts.pos\n const canonIdx = verts.canon\n\n const splitEdges = new QuantizedPointMap(1, 1 << 16)\n const markEdge = (a: number, b: number) => {\n const u = canonIdx ? canonIdx[a] : a,\n v = canonIdx ? canonIdx[b] : b\n if (u < v) splitEdges.getOrSet(u, v, 0, 1)\n else splitEdges.getOrSet(v, u, 0, 1)\n }\n const isMarked = (a: number, b: number) => {\n const u = canonIdx ? canonIdx[a] : a,\n v = canonIdx ? canonIdx[b] : b\n return (u < v ? splitEdges.get(u, v, 0) : splitEdges.get(v, u, 0)) !== -1\n }\n\n // Step 1: 标记需要分裂的边\n for (let t = 0; t < indices.length; t += 3) {\n if (faceExcluded && faceExcluded[t / 3]) continue\n const a = indices[t],\n b = indices[t + 1],\n c = indices[t + 2]\n if (edgeLenSq(positions, a, b) > maxSq) markEdge(a, b)\n if (edgeLenSq(positions, b, c) > maxSq) markEdge(b, c)\n if (edgeLenSq(positions, c, a) > maxSq) markEdge(c, a)\n }\n\n if (splitEdges.size === 0)\n return { newIndices: indices, newFaceExcluded: faceExcluded, changed: false }\n\n // Step 1.5: 预测分裂后三角形数量\n let predictedTris = 0\n for (let t = 0; t < indices.length; t += 3) {\n const a = indices[t],\n b = indices[t + 1],\n c = indices[t + 2]\n const sAB = isMarked(a, b)\n const sBC = isMarked(b, c)\n const sCA = isMarked(c, a)\n const n = (sAB ? 1 : 0) + (sBC ? 1 : 0) + (sCA ? 1 : 0)\n predictedTris += n === 0 ? 1 : n + 1\n }\n if (predictedTris > safetyCap) {\n return { newIndices: indices, newFaceExcluded: faceExcluded, changed: false, capped: true }\n }\n\n // Step 2: 重建索引列表\n const nextIndices = new Uint32Array(predictedTris * 3)\n const nextFaceExcluded = faceExcluded ? new Uint8Array(predictedTris) : null\n let wi = 0\n let fi = 0\n\n for (let t = 0; t < indices.length; t += 3) {\n const a = indices[t],\n b = indices[t + 1],\n c = indices[t + 2]\n const fIdx = t / 3\n const excl = faceExcluded ? faceExcluded[fIdx] : 0\n const sAB = isMarked(a, b)\n const sBC = isMarked(b, c)\n const sCA = isMarked(c, a)\n const n = (sAB ? 1 : 0) + (sBC ? 1 : 0) + (sCA ? 1 : 0)\n\n if (n === 0) {\n nextIndices[wi++] = a\n nextIndices[wi++] = b\n nextIndices[wi++] = c\n if (nextFaceExcluded) nextFaceExcluded[fi] = excl\n fi++\n } else if (n === 3) {\n const mAB = getMidpoint(verts, midCache, a, b, posCanonMap)\n const mBC = getMidpoint(verts, midCache, b, c, posCanonMap)\n const mCA = getMidpoint(verts, midCache, c, a, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = mAB\n nextIndices[wi++] = mCA\n nextIndices[wi++] = mAB\n nextIndices[wi++] = b\n nextIndices[wi++] = mBC\n nextIndices[wi++] = mCA\n nextIndices[wi++] = mBC\n nextIndices[wi++] = c\n nextIndices[wi++] = mAB\n nextIndices[wi++] = mBC\n nextIndices[wi++] = mCA\n for (let k = 0; k < 4; k++) {\n if (nextFaceExcluded) nextFaceExcluded[fi] = excl\n fi++\n }\n } else if (n === 1) {\n if (sAB) {\n const m = getMidpoint(verts, midCache, a, b, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = m\n nextIndices[wi++] = c\n nextIndices[wi++] = m\n nextIndices[wi++] = b\n nextIndices[wi++] = c\n } else if (sBC) {\n const m = getMidpoint(verts, midCache, b, c, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = b\n nextIndices[wi++] = m\n nextIndices[wi++] = a\n nextIndices[wi++] = m\n nextIndices[wi++] = c\n } else {\n const m = getMidpoint(verts, midCache, c, a, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = b\n nextIndices[wi++] = m\n nextIndices[wi++] = m\n nextIndices[wi++] = b\n nextIndices[wi++] = c\n }\n for (let k = 0; k < 2; k++) {\n if (nextFaceExcluded) nextFaceExcluded[fi] = excl\n fi++\n }\n } else {\n // n === 2: 3 sub-triangles, fan from the untouched-edge vertex\n if (!sAB) {\n // sBC + sCA: fan from C\n const mBC = getMidpoint(verts, midCache, b, c, posCanonMap)\n const mCA = getMidpoint(verts, midCache, c, a, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = b\n nextIndices[wi++] = mBC\n nextIndices[wi++] = a\n nextIndices[wi++] = mBC\n nextIndices[wi++] = mCA\n nextIndices[wi++] = c\n nextIndices[wi++] = mCA\n nextIndices[wi++] = mBC\n } else if (!sBC) {\n // sAB + sCA: fan from A\n const mAB = getMidpoint(verts, midCache, a, b, posCanonMap)\n const mCA = getMidpoint(verts, midCache, c, a, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = mAB\n nextIndices[wi++] = mCA\n nextIndices[wi++] = mAB\n nextIndices[wi++] = b\n nextIndices[wi++] = c\n nextIndices[wi++] = mAB\n nextIndices[wi++] = c\n nextIndices[wi++] = mCA\n } else {\n // sAB + sBC: fan from B\n const mAB = getMidpoint(verts, midCache, a, b, posCanonMap)\n const mBC = getMidpoint(verts, midCache, b, c, posCanonMap)\n nextIndices[wi++] = b\n nextIndices[wi++] = mBC\n nextIndices[wi++] = mAB\n nextIndices[wi++] = a\n nextIndices[wi++] = mAB\n nextIndices[wi++] = mBC\n nextIndices[wi++] = a\n nextIndices[wi++] = mBC\n nextIndices[wi++] = c\n }\n for (let k = 0; k < 3; k++) {\n if (nextFaceExcluded) nextFaceExcluded[fi] = excl\n fi++\n }\n }\n }\n\n return { newIndices: nextIndices, newFaceExcluded: nextFaceExcluded, changed: true }\n}\n\n// ── 辅助函数 ──\n\nfunction edgeLenSq(pos: Float64Array, a: number, b: number): number {\n const dx = pos[a * 3] - pos[b * 3]\n const dy = pos[a * 3 + 1] - pos[b * 3 + 1]\n const dz = pos[a * 3 + 2] - pos[b * 3 + 2]\n return dx * dx + dy * dy + dz * dz\n}\n\nfunction getMidpoint(\n verts: VertStore,\n cache: QuantizedPointMap,\n a: number,\n b: number,\n posCanonMap: QuantizedPointMap | null,\n): number {\n const lo = a < b ? a : b,\n hi = a < b ? b : a\n const cached = cache.get(lo, hi, 0)\n if (cached !== -1) return cached\n\n const pos = verts.pos,\n nrm = verts.nrm\n\n const mx = (pos[a * 3] + pos[b * 3]) / 2\n const my = (pos[a * 3 + 1] + pos[b * 3 + 1]) / 2\n const mz = (pos[a * 3 + 2] + pos[b * 3 + 2]) / 2\n\n const nx = nrm[a * 3] + nrm[b * 3]\n const ny = nrm[a * 3 + 1] + nrm[b * 3 + 1]\n const nz = nrm[a * 3 + 2] + nrm[b * 3 + 2]\n const nl = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1\n\n const idx = verts.count\n if (idx === verts.cap) verts.grow()\n verts.pos[idx * 3] = mx\n verts.pos[idx * 3 + 1] = my\n verts.pos[idx * 3 + 2] = mz\n verts.nrm[idx * 3] = nx / nl\n verts.nrm[idx * 3 + 1] = ny / nl\n verts.nrm[idx * 3 + 2] = nz / nl\n if (verts.wgt) verts.wgt[idx] = (verts.wgt[a] + verts.wgt[b]) / 2\n // 维护规范位置 ID\n if (verts.canon && posCanonMap) {\n verts.canon[idx] = posCanonMap.getOrSet(mx, my, mz, idx)\n }\n verts.count = idx + 1\n\n cache.getOrSet(lo, hi, 0, idx)\n return idx\n}\n\n// ── 准确模式:非 indexed → indexed(带锐边分裂) ──\n//\n// 关键:同一位置但法线夹角 > SHARP_ANGLE_DEG 的顶点会被分裂成不同的 indexed vertex。\n// 这确保立方体的每个面保持独立的法线方向,位移后不会产生破面。\n\ninterface ClusterInfo {\n idx: number\n fnU: [number, number, number] // 面法线单位向量(运行平均值)\n}\n\nfunction toIndexed(\n geometry: THREE.BufferGeometry,\n nonIndexedWeights: Float32Array | null = null,\n): { verts: VertStore; indices: Uint32Array; posCanonMap: QuantizedPointMap } {\n const posAttr = geometry.attributes.position\n const n = posAttr.count\n\n // 预计算每个面的法线(单位 + 原始叉积)\n const faceNrmUnit = new Float32Array(n * 3)\n const faceNrmRaw = new Float32Array(n * 3)\n for (let t = 0; t < n; t += 3) {\n const ax = posAttr.getX(t),\n ay = posAttr.getY(t),\n az = posAttr.getZ(t)\n const bx = posAttr.getX(t + 1),\n by = posAttr.getY(t + 1),\n bz = posAttr.getZ(t + 1)\n const cx = posAttr.getX(t + 2),\n cy = posAttr.getY(t + 2),\n cz = posAttr.getZ(t + 2)\n const e1x = bx - ax,\n e1y = by - ay,\n e1z = bz - az\n const e2x = cx - ax,\n e2y = cy - ay,\n e2z = cz - az\n const rx = e1y * e2z - e1z * e2y\n const ry = e1z * e2x - e1x * e2z\n const rz = e1x * e2y - e1y * e2x\n const len = Math.sqrt(rx * rx + ry * ry + rz * rz) || 1\n const ux = rx / len,\n uy = ry / len,\n uz = rz / len\n for (let v = 0; v < 3; v++) {\n faceNrmUnit[(t + v) * 3] = ux\n faceNrmUnit[(t + v) * 3 + 1] = uy\n faceNrmUnit[(t + v) * 3 + 2] = uz\n faceNrmRaw[(t + v) * 3] = rx\n faceNrmRaw[(t + v) * 3 + 1] = ry\n faceNrmRaw[(t + v) * 3 + 2] = rz\n }\n }\n\n const indices = new Uint32Array(n)\n const verts = makeVertStore(Math.max(16, Math.min(1 << 16, n)), !!nonIndexedWeights, true)\n // position → first vertex idx at that position (canonical ID)\n const posCanonMap = new QuantizedPointMap(QUANTISE, Math.min(n, 1 << 22))\n // canonical ID → cluster list at that position\n const clustersByCanon = new Map<number, ClusterInfo[]>()\n\n for (let i = 0; i < n; i++) {\n const px = posAttr.getX(i)\n const py = posAttr.getY(i)\n const pz = posAttr.getZ(i)\n const fnUx = faceNrmUnit[i * 3],\n fnUy = faceNrmUnit[i * 3 + 1],\n fnUz = faceNrmUnit[i * 3 + 2]\n const fnRx = faceNrmRaw[i * 3],\n fnRy = faceNrmRaw[i * 3 + 1],\n fnRz = faceNrmRaw[i * 3 + 2]\n\n // 第一个到达此位置的顶点成为 canonical ID\n const canonId = posCanonMap.getOrSet(px, py, pz, verts.count)\n const clusters = posCanonMap.inserted ? undefined : clustersByCanon.get(canonId)\n\n if (clusters) {\n let matched = false\n for (const cl of clusters) {\n const dot = cl.fnU[0] * fnUx + cl.fnU[1] * fnUy + cl.fnU[2] * fnUz\n if (dot >= SHARP_COS) {\n // 同一 smooth group — 累加面积加权法线\n const idx = cl.idx\n verts.nrm[idx * 3] += fnRx\n verts.nrm[idx * 3 + 1] += fnRy\n verts.nrm[idx * 3 + 2] += fnRz\n if (verts.wgt && nonIndexedWeights && nonIndexedWeights[i] > verts.wgt[idx]) {\n verts.wgt[idx] = nonIndexedWeights[i]\n }\n // 更新 cluster 代表法线为运行平均值\n cl.fnU[0] += fnUx\n cl.fnU[1] += fnUy\n cl.fnU[2] += fnUz\n const rl =\n Math.sqrt(cl.fnU[0] * cl.fnU[0] + cl.fnU[1] * cl.fnU[1] + cl.fnU[2] * cl.fnU[2]) || 1\n cl.fnU[0] /= rl\n cl.fnU[1] /= rl\n cl.fnU[2] /= rl\n indices[i] = idx\n matched = true\n break\n }\n }\n if (!matched) {\n // 此位置的新 cluster(锐边分裂)\n const idx = verts.count\n if (idx === verts.cap) verts.grow()\n verts.pos[idx * 3] = px\n verts.pos[idx * 3 + 1] = py\n verts.pos[idx * 3 + 2] = pz\n verts.nrm[idx * 3] = fnRx\n verts.nrm[idx * 3 + 1] = fnRy\n verts.nrm[idx * 3 + 2] = fnRz\n if (verts.wgt && nonIndexedWeights) verts.wgt[idx] = nonIndexedWeights[i]\n if (verts.canon) verts.canon[idx] = canonId\n verts.count++\n clusters.push({ idx, fnU: [fnUx, fnUy, fnUz] })\n indices[i] = idx\n }\n } else {\n // 此位置的第一个顶点\n const idx = verts.count // === canonId\n if (idx === verts.cap) verts.grow()\n verts.pos[idx * 3] = px\n verts.pos[idx * 3 + 1] = py\n verts.pos[idx * 3 + 2] = pz\n verts.nrm[idx * 3] = fnRx\n verts.nrm[idx * 3 + 1] = fnRy\n verts.nrm[idx * 3 + 2] = fnRz\n if (verts.wgt && nonIndexedWeights) verts.wgt[idx] = nonIndexedWeights[i]\n if (verts.canon) verts.canon[idx] = canonId\n verts.count++\n clustersByCanon.set(canonId, [{ idx, fnU: [fnUx, fnUy, fnUz] }])\n indices[i] = idx\n }\n }\n\n normalizeStoreNormals(verts)\n return { verts, indices, posCanonMap }\n}\n\nfunction normalizeStoreNormals(verts: VertStore): void {\n const nrm = verts.nrm\n for (let i = 0; i < verts.count; i++) {\n const nx = nrm[i * 3]\n const ny = nrm[i * 3 + 1]\n const nz = nrm[i * 3 + 2]\n const len = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1\n nrm[i * 3] = nx / len\n nrm[i * 3 + 1] = ny / len\n nrm[i * 3 + 2] = nz / len\n }\n}\n\n// ── Indexed → non-indexed ──\n\nfunction toNonIndexed(\n verts: VertStore,\n indices: Uint32Array,\n faceExcluded: Uint8Array | null = null,\n): THREE.BufferGeometry {\n const positions = verts.pos,\n normals = verts.nrm,\n weights = verts.wgt\n const triCount = indices.length / 3\n const posArray = new Float32Array(triCount * 9)\n const nrmArray = new Float32Array(triCount * 9)\n const wgtArray = faceExcluded || weights ? new Float32Array(triCount * 3) : null\n\n for (let t = 0; t < triCount; t++) {\n const faceW = faceExcluded ? (faceExcluded[t] ? 1.0 : 0.0) : null\n for (let v = 0; v < 3; v++) {\n const vidx = indices[t * 3 + v]\n posArray[t * 9 + v * 3] = positions[vidx * 3]\n posArray[t * 9 + v * 3 + 1] = positions[vidx * 3 + 1]\n posArray[t * 9 + v * 3 + 2] = positions[vidx * 3 + 2]\n\n nrmArray[t * 9 + v * 3] = normals[vidx * 3]\n nrmArray[t * 9 + v * 3 + 1] = normals[vidx * 3 + 1]\n nrmArray[t * 9 + v * 3 + 2] = normals[vidx * 3 + 2]\n\n if (wgtArray) wgtArray[t * 3 + v] = faceW !== null ? faceW : weights![vidx]\n }\n }\n\n const geo = new THREE.BufferGeometry()\n geo.setAttribute('position', new THREE.BufferAttribute(posArray, 3))\n geo.setAttribute('normal', new THREE.BufferAttribute(nrmArray, 3))\n if (wgtArray) geo.setAttribute('excludeWeight', new THREE.BufferAttribute(wgtArray, 1))\n return geo\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subdivision.js","sourceRoot":"","sources":["../../../src/mesh/knurl/subdivision.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * subdivision.ts — 自适应边细分,从 stlTexturizer/js/subdivision.js 移植为 TS。\n *\n * 细分直到每条边 ≤ maxEdgeLength。\n *\n * 关键特性:\n * - toIndexed (export path): 锐边分裂 — 同位置但法线夹角 > 30° 的顶点分开存储\n * - 确保水密性\n *\n * 管线:\n * toIndexed(geometry) → 索引化 + 顶点去重 + 锐边分裂\n * 循环细分:标记长边 → 按标记数量分裂三角形\n * toNonIndexed(verts, indices) → 输出 non-indexed BufferGeometry\n *\n * Bug 修复记录 (2026-07-22):\n * 问题: 检测到 knurl 后的 mesh 出现 NaN 值和错误 bounds\n * (bounds 从 [-0.5, 0.5] 变成 [-17, 17],且 hasNaN: true)\n *\n * 根因分析:\n * 1. box_boss.3mf 是 indexed geometry (530 vertices, 1548 indices)\n * 2. toIndexed() 函数假设输入是 non-indexed (flat triangles)\n * 3. 当传入 indexed geometry 时,toIndexed() 错误处理顶点数据:\n * - n = posAttr.count = 530 (顶点数)\n * - 但代码按 triangle count = n/3 = 176 处理\n * - 导致顶点索引越界,读取错误位置的数据\n * 4. 细分后顶点位置完全错误,进而导致 displacement 计算产生 NaN\n *\n * 修复方案:\n * 在 subdivide() 入口添加 indexed → non-indexed 转换:\n * if (geometry.index) { workingGeo = geometry.toNonIndexed() }\n *\n * 验证:\n * - E2E 测试通过:hasNaN: false, bounds 正确\n * - 原始 bounds [0,0,0]~[150,120,90] → knurl 后 [-0.5,-0.5,0]~[150.5,120.5,90.5]\n */\n\nimport type { Shape } from '../types'\nimport { toNonIndexed as shapeToNonIndexed } from '../meshdata/ops'\nimport { QuantizedPointMap } from './meshIndex'\n\n// 10μm 顶点去重网格\nconst QUANTISE = 1e5\n// 安全上限\nconst SAFETY_CAP =\n typeof navigator !== 'undefined' &&\n (navigator as Navigator & { deviceMemory?: number }).deviceMemory !== undefined &&\n (navigator as Navigator & { deviceMemory?: number }).deviceMemory! >= 8\n ? 32_000_000\n : 16_000_000\n\n// 锐边角度阈值(度)— 法线夹角超过此值的顶点在索引化时分裂\nconst SHARP_ANGLE_DEG = 30\nconst SHARP_COS = Math.cos(SHARP_ANGLE_DEG * Math.PI / 180)\n\n// ── 可增长类型化顶点存储 ──\n\ninterface VertStore {\n cap: number\n count: number\n pos: Float64Array\n nrm: Float64Array\n wgt: Float64Array | null\n canon: Int32Array | null // 规范位置 ID(准确模式)\n grow(): void\n}\n\nfunction makeVertStore(initialCap: number, hasWeights: boolean, hasCanon: boolean): VertStore {\n return {\n cap: initialCap,\n count: 0,\n pos: new Float64Array(initialCap * 3),\n nrm: new Float64Array(initialCap * 3),\n wgt: hasWeights ? new Float64Array(initialCap) : null,\n canon: hasCanon ? new Int32Array(initialCap) : null,\n grow() {\n this.cap *= 2\n const np = new Float64Array(this.cap * 3)\n np.set(this.pos)\n this.pos = np\n const nn = new Float64Array(this.cap * 3)\n nn.set(this.nrm)\n this.nrm = nn\n if (this.wgt) {\n const nw = new Float64Array(this.cap)\n nw.set(this.wgt)\n this.wgt = nw\n }\n if (this.canon) {\n const nc = new Int32Array(this.cap)\n nc.set(this.canon)\n this.canon = nc\n }\n },\n }\n}\n\n// ── 公共入口 ──\n\n/**\n * Adaptively subdivide a geometry until every edge is ≤ maxEdgeLength.\n * Indexed inputs are expanded to non-indexed form first; sharp edges are\n * split at vertices whose face-normal angle exceeds the threshold so each\n * surface keeps its own normal direction and the result stays watertight.\n * Faces marked by `faceWeights` are excluded from refinement.\n *\n * @param geometry - the source geometry (position attribute; may be indexed).\n * @param maxEdgeLength - maximum allowed edge length in millimeters.\n * @param onProgress - optional callback receiving progress, triangle count, and longest edge.\n * @param faceWeights - optional per-face exclusion weights (non-indexed triangle soup layout).\n * @returns the subdivided non-indexed geometry and whether the safety cap was reached.\n */\nexport async function subdivide(\n geometry: Shape,\n maxEdgeLength: number,\n onProgress?: (p: number, triCount: number, longestEdge: number) => void,\n faceWeights: Float32Array | null = null,\n): Promise<{\n geometry: Shape\n safetyCapHit: boolean\n}> {\n // 确保 geometry 是 non-indexed(toIndexed 假设输入是 flat 的)\n let workingGeo: Shape = geometry\n if (geometry.indices.length > 0) {\n const ni = shapeToNonIndexed(geometry)\n workingGeo = { positions: ni.positions, indices: ni.indices }\n }\n\n // 在 toIndexed 之前推导每面排除标记\n let initialFaceExcluded: Uint8Array | null = null\n if (faceWeights) {\n const triCount = faceWeights.length / 3\n initialFaceExcluded = new Uint8Array(triCount)\n for (let i = 0; i < triCount; i++) {\n if (faceWeights[i * 3] > 0.99) initialFaceExcluded[i] = 1\n }\n }\n\n // 使用准确模式(带锐边分裂的 toIndexed)\n const { verts, indices, posCanonMap } = toIndexed(workingGeo, faceWeights)\n\n const maxIterations = 12\n let currentIndices = indices\n let currentFaceExcluded = initialFaceExcluded\n let safetyCapHit = false\n\n for (let iter = 0; iter < maxIterations; iter++) {\n const triCount = currentIndices.length / 3\n if (triCount >= SAFETY_CAP) {\n safetyCapHit = true\n break\n }\n\n const { newIndices, newFaceExcluded, changed, capped } = subdividePass(\n verts,\n currentIndices,\n maxEdgeLength,\n SAFETY_CAP,\n currentFaceExcluded,\n posCanonMap,\n )\n currentIndices = newIndices\n if (newFaceExcluded) currentFaceExcluded = newFaceExcluded\n\n if (capped || newIndices.length / 3 >= SAFETY_CAP) safetyCapHit = true\n\n const positions = verts.pos\n let maxEdgeLenSq = 0\n for (let t = 0; t < currentIndices.length; t += 3) {\n const a = currentIndices[t],\n b = currentIndices[t + 1],\n c = currentIndices[t + 2]\n const ab = edgeLenSq(positions, a, b)\n const bc = edgeLenSq(positions, b, c)\n const ca = edgeLenSq(positions, c, a)\n if (ab > maxEdgeLenSq) maxEdgeLenSq = ab\n if (bc > maxEdgeLenSq) maxEdgeLenSq = bc\n if (ca > maxEdgeLenSq) maxEdgeLenSq = ca\n }\n const longestEdge = Math.sqrt(maxEdgeLenSq)\n\n const newTriCount = newIndices.length / 3\n if (onProgress) onProgress(Math.min(0.95, (iter + 1) / maxIterations), newTriCount, longestEdge)\n await new Promise((r) => setTimeout(r, 0))\n if (!changed || safetyCapHit) break\n }\n\n return {\n geometry: toNonIndexed(verts, currentIndices, currentFaceExcluded),\n safetyCapHit,\n }\n}\n\n// ── 一次细分 pass ──\n\nfunction subdividePass(\n verts: VertStore,\n indices: Uint32Array,\n maxEdgeLength: number,\n safetyCap: number,\n faceExcluded: Uint8Array | null = null,\n posCanonMap: QuantizedPointMap | null = null,\n): {\n newIndices: Uint32Array\n newFaceExcluded: Uint8Array | null\n changed: boolean\n capped?: boolean\n} {\n const maxSq = maxEdgeLength * maxEdgeLength\n const midCache = new QuantizedPointMap(1, 1 << 16)\n const positions = verts.pos\n const canonIdx = verts.canon\n\n const splitEdges = new QuantizedPointMap(1, 1 << 16)\n const markEdge = (a: number, b: number) => {\n const u = canonIdx ? canonIdx[a] : a,\n v = canonIdx ? canonIdx[b] : b\n if (u < v) splitEdges.getOrSet(u, v, 0, 1)\n else splitEdges.getOrSet(v, u, 0, 1)\n }\n const isMarked = (a: number, b: number) => {\n const u = canonIdx ? canonIdx[a] : a,\n v = canonIdx ? canonIdx[b] : b\n return (u < v ? splitEdges.get(u, v, 0) : splitEdges.get(v, u, 0)) !== -1\n }\n\n // Step 1: 标记需要分裂的边\n for (let t = 0; t < indices.length; t += 3) {\n if (faceExcluded && faceExcluded[t / 3]) continue\n const a = indices[t],\n b = indices[t + 1],\n c = indices[t + 2]\n if (edgeLenSq(positions, a, b) > maxSq) markEdge(a, b)\n if (edgeLenSq(positions, b, c) > maxSq) markEdge(b, c)\n if (edgeLenSq(positions, c, a) > maxSq) markEdge(c, a)\n }\n\n if (splitEdges.size === 0)\n return { newIndices: indices, newFaceExcluded: faceExcluded, changed: false }\n\n // Step 1.5: 预测分裂后三角形数量\n let predictedTris = 0\n for (let t = 0; t < indices.length; t += 3) {\n const a = indices[t],\n b = indices[t + 1],\n c = indices[t + 2]\n const sAB = isMarked(a, b)\n const sBC = isMarked(b, c)\n const sCA = isMarked(c, a)\n const n = (sAB ? 1 : 0) + (sBC ? 1 : 0) + (sCA ? 1 : 0)\n predictedTris += n === 0 ? 1 : n + 1\n }\n if (predictedTris > safetyCap) {\n return { newIndices: indices, newFaceExcluded: faceExcluded, changed: false, capped: true }\n }\n\n // Step 2: 重建索引列表\n const nextIndices = new Uint32Array(predictedTris * 3)\n const nextFaceExcluded = faceExcluded ? new Uint8Array(predictedTris) : null\n let wi = 0\n let fi = 0\n\n for (let t = 0; t < indices.length; t += 3) {\n const a = indices[t],\n b = indices[t + 1],\n c = indices[t + 2]\n const fIdx = t / 3\n const excl = faceExcluded ? faceExcluded[fIdx] : 0\n const sAB = isMarked(a, b)\n const sBC = isMarked(b, c)\n const sCA = isMarked(c, a)\n const n = (sAB ? 1 : 0) + (sBC ? 1 : 0) + (sCA ? 1 : 0)\n\n if (n === 0) {\n nextIndices[wi++] = a\n nextIndices[wi++] = b\n nextIndices[wi++] = c\n if (nextFaceExcluded) nextFaceExcluded[fi] = excl\n fi++\n } else if (n === 3) {\n const mAB = getMidpoint(verts, midCache, a, b, posCanonMap)\n const mBC = getMidpoint(verts, midCache, b, c, posCanonMap)\n const mCA = getMidpoint(verts, midCache, c, a, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = mAB\n nextIndices[wi++] = mCA\n nextIndices[wi++] = mAB\n nextIndices[wi++] = b\n nextIndices[wi++] = mBC\n nextIndices[wi++] = mCA\n nextIndices[wi++] = mBC\n nextIndices[wi++] = c\n nextIndices[wi++] = mAB\n nextIndices[wi++] = mBC\n nextIndices[wi++] = mCA\n for (let k = 0; k < 4; k++) {\n if (nextFaceExcluded) nextFaceExcluded[fi] = excl\n fi++\n }\n } else if (n === 1) {\n if (sAB) {\n const m = getMidpoint(verts, midCache, a, b, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = m\n nextIndices[wi++] = c\n nextIndices[wi++] = m\n nextIndices[wi++] = b\n nextIndices[wi++] = c\n } else if (sBC) {\n const m = getMidpoint(verts, midCache, b, c, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = b\n nextIndices[wi++] = m\n nextIndices[wi++] = a\n nextIndices[wi++] = m\n nextIndices[wi++] = c\n } else {\n const m = getMidpoint(verts, midCache, c, a, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = b\n nextIndices[wi++] = m\n nextIndices[wi++] = m\n nextIndices[wi++] = b\n nextIndices[wi++] = c\n }\n for (let k = 0; k < 2; k++) {\n if (nextFaceExcluded) nextFaceExcluded[fi] = excl\n fi++\n }\n } else {\n // n === 2: 3 sub-triangles, fan from the untouched-edge vertex\n if (!sAB) {\n // sBC + sCA: fan from C\n const mBC = getMidpoint(verts, midCache, b, c, posCanonMap)\n const mCA = getMidpoint(verts, midCache, c, a, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = b\n nextIndices[wi++] = mBC\n nextIndices[wi++] = a\n nextIndices[wi++] = mBC\n nextIndices[wi++] = mCA\n nextIndices[wi++] = c\n nextIndices[wi++] = mCA\n nextIndices[wi++] = mBC\n } else if (!sBC) {\n // sAB + sCA: fan from A\n const mAB = getMidpoint(verts, midCache, a, b, posCanonMap)\n const mCA = getMidpoint(verts, midCache, c, a, posCanonMap)\n nextIndices[wi++] = a\n nextIndices[wi++] = mAB\n nextIndices[wi++] = mCA\n nextIndices[wi++] = mAB\n nextIndices[wi++] = b\n nextIndices[wi++] = c\n nextIndices[wi++] = mAB\n nextIndices[wi++] = c\n nextIndices[wi++] = mCA\n } else {\n // sAB + sBC: fan from B\n const mAB = getMidpoint(verts, midCache, a, b, posCanonMap)\n const mBC = getMidpoint(verts, midCache, b, c, posCanonMap)\n nextIndices[wi++] = b\n nextIndices[wi++] = mBC\n nextIndices[wi++] = mAB\n nextIndices[wi++] = a\n nextIndices[wi++] = mAB\n nextIndices[wi++] = mBC\n nextIndices[wi++] = a\n nextIndices[wi++] = mBC\n nextIndices[wi++] = c\n }\n for (let k = 0; k < 3; k++) {\n if (nextFaceExcluded) nextFaceExcluded[fi] = excl\n fi++\n }\n }\n }\n\n return { newIndices: nextIndices, newFaceExcluded: nextFaceExcluded, changed: true }\n}\n\n// ── 辅助函数 ──\n\nfunction edgeLenSq(pos: Float64Array, a: number, b: number): number {\n const dx = pos[a * 3] - pos[b * 3]\n const dy = pos[a * 3 + 1] - pos[b * 3 + 1]\n const dz = pos[a * 3 + 2] - pos[b * 3 + 2]\n return dx * dx + dy * dy + dz * dz\n}\n\nfunction getMidpoint(\n verts: VertStore,\n cache: QuantizedPointMap,\n a: number,\n b: number,\n posCanonMap: QuantizedPointMap | null,\n): number {\n const lo = a < b ? a : b,\n hi = a < b ? b : a\n const cached = cache.get(lo, hi, 0)\n if (cached !== -1) return cached\n\n const pos = verts.pos,\n nrm = verts.nrm\n\n const mx = (pos[a * 3] + pos[b * 3]) / 2\n const my = (pos[a * 3 + 1] + pos[b * 3 + 1]) / 2\n const mz = (pos[a * 3 + 2] + pos[b * 3 + 2]) / 2\n\n const nx = nrm[a * 3] + nrm[b * 3]\n const ny = nrm[a * 3 + 1] + nrm[b * 3 + 1]\n const nz = nrm[a * 3 + 2] + nrm[b * 3 + 2]\n const nl = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1\n\n const idx = verts.count\n if (idx === verts.cap) verts.grow()\n verts.pos[idx * 3] = mx\n verts.pos[idx * 3 + 1] = my\n verts.pos[idx * 3 + 2] = mz\n verts.nrm[idx * 3] = nx / nl\n verts.nrm[idx * 3 + 1] = ny / nl\n verts.nrm[idx * 3 + 2] = nz / nl\n if (verts.wgt) verts.wgt[idx] = (verts.wgt[a] + verts.wgt[b]) / 2\n // 维护规范位置 ID\n if (verts.canon && posCanonMap) {\n verts.canon[idx] = posCanonMap.getOrSet(mx, my, mz, idx)\n }\n verts.count = idx + 1\n\n cache.getOrSet(lo, hi, 0, idx)\n return idx\n}\n\n// ── 准确模式:非 indexed → indexed(带锐边分裂) ──\n//\n// 关键:同一位置但法线夹角 > SHARP_ANGLE_DEG 的顶点会被分裂成不同的 indexed vertex。\n// 这确保立方体的每个面保持独立的法线方向,位移后不会产生破面。\n\ninterface ClusterInfo {\n idx: number\n fnU: [number, number, number] // 面法线单位向量(运行平均值)\n}\n\nfunction toIndexed(\n geometry: Shape,\n nonIndexedWeights: Float32Array | null = null,\n): { verts: VertStore; indices: Uint32Array; posCanonMap: QuantizedPointMap } {\n const positions = geometry.positions\n const n = positions.length / 3\n\n // 预计算每个面的法线(单位 + 原始叉积)\n const faceNrmUnit = new Float32Array(n * 3)\n const faceNrmRaw = new Float32Array(n * 3)\n for (let t = 0; t < n; t += 3) {\n const ax = positions[t * 3],\n ay = positions[t * 3 + 1],\n az = positions[t * 3 + 2]\n const bx = positions[(t + 1) * 3],\n by = positions[(t + 1) * 3 + 1],\n bz = positions[(t + 1) * 3 + 2]\n const cx = positions[(t + 2) * 3],\n cy = positions[(t + 2) * 3 + 1],\n cz = positions[(t + 2) * 3 + 2]\n const e1x = bx - ax,\n e1y = by - ay,\n e1z = bz - az\n const e2x = cx - ax,\n e2y = cy - ay,\n e2z = cz - az\n const rx = e1y * e2z - e1z * e2y\n const ry = e1z * e2x - e1x * e2z\n const rz = e1x * e2y - e1y * e2x\n const len = Math.sqrt(rx * rx + ry * ry + rz * rz) || 1\n const ux = rx / len,\n uy = ry / len,\n uz = rz / len\n for (let v = 0; v < 3; v++) {\n faceNrmUnit[(t + v) * 3] = ux\n faceNrmUnit[(t + v) * 3 + 1] = uy\n faceNrmUnit[(t + v) * 3 + 2] = uz\n faceNrmRaw[(t + v) * 3] = rx\n faceNrmRaw[(t + v) * 3 + 1] = ry\n faceNrmRaw[(t + v) * 3 + 2] = rz\n }\n }\n\n const indices = new Uint32Array(n)\n const verts = makeVertStore(Math.max(16, Math.min(1 << 16, n)), !!nonIndexedWeights, true)\n // position → first vertex idx at that position (canonical ID)\n const posCanonMap = new QuantizedPointMap(QUANTISE, Math.min(n, 1 << 22))\n // canonical ID → cluster list at that position\n const clustersByCanon = new Map<number, ClusterInfo[]>()\n\n for (let i = 0; i < n; i++) {\n const px = positions[i * 3]\n const py = positions[i * 3 + 1]\n const pz = positions[i * 3 + 2]\n const fnUx = faceNrmUnit[i * 3],\n fnUy = faceNrmUnit[i * 3 + 1],\n fnUz = faceNrmUnit[i * 3 + 2]\n const fnRx = faceNrmRaw[i * 3],\n fnRy = faceNrmRaw[i * 3 + 1],\n fnRz = faceNrmRaw[i * 3 + 2]\n\n // 第一个到达此位置的顶点成为 canonical ID\n const canonId = posCanonMap.getOrSet(px, py, pz, verts.count)\n const clusters = posCanonMap.inserted ? undefined : clustersByCanon.get(canonId)\n\n if (clusters) {\n let matched = false\n for (const cl of clusters) {\n const dot = cl.fnU[0] * fnUx + cl.fnU[1] * fnUy + cl.fnU[2] * fnUz\n if (dot >= SHARP_COS) {\n // 同一 smooth group — 累加面积加权法线\n const idx = cl.idx\n verts.nrm[idx * 3] += fnRx\n verts.nrm[idx * 3 + 1] += fnRy\n verts.nrm[idx * 3 + 2] += fnRz\n if (verts.wgt && nonIndexedWeights && nonIndexedWeights[i] > verts.wgt[idx]) {\n verts.wgt[idx] = nonIndexedWeights[i]\n }\n // 更新 cluster 代表法线为运行平均值\n cl.fnU[0] += fnUx\n cl.fnU[1] += fnUy\n cl.fnU[2] += fnUz\n const rl =\n Math.sqrt(cl.fnU[0] * cl.fnU[0] + cl.fnU[1] * cl.fnU[1] + cl.fnU[2] * cl.fnU[2]) || 1\n cl.fnU[0] /= rl\n cl.fnU[1] /= rl\n cl.fnU[2] /= rl\n indices[i] = idx\n matched = true\n break\n }\n }\n if (!matched) {\n // 此位置的新 cluster(锐边分裂)\n const idx = verts.count\n if (idx === verts.cap) verts.grow()\n verts.pos[idx * 3] = px\n verts.pos[idx * 3 + 1] = py\n verts.pos[idx * 3 + 2] = pz\n verts.nrm[idx * 3] = fnRx\n verts.nrm[idx * 3 + 1] = fnRy\n verts.nrm[idx * 3 + 2] = fnRz\n if (verts.wgt && nonIndexedWeights) verts.wgt[idx] = nonIndexedWeights[i]\n if (verts.canon) verts.canon[idx] = canonId\n verts.count++\n clusters.push({ idx, fnU: [fnUx, fnUy, fnUz] })\n indices[i] = idx\n }\n } else {\n // 此位置的第一个顶点\n const idx = verts.count // === canonId\n if (idx === verts.cap) verts.grow()\n verts.pos[idx * 3] = px\n verts.pos[idx * 3 + 1] = py\n verts.pos[idx * 3 + 2] = pz\n verts.nrm[idx * 3] = fnRx\n verts.nrm[idx * 3 + 1] = fnRy\n verts.nrm[idx * 3 + 2] = fnRz\n if (verts.wgt && nonIndexedWeights) verts.wgt[idx] = nonIndexedWeights[i]\n if (verts.canon) verts.canon[idx] = canonId\n verts.count++\n clustersByCanon.set(canonId, [{ idx, fnU: [fnUx, fnUy, fnUz] }])\n indices[i] = idx\n }\n }\n\n normalizeStoreNormals(verts)\n return { verts, indices, posCanonMap }\n}\n\nfunction normalizeStoreNormals(verts: VertStore): void {\n const nrm = verts.nrm\n for (let i = 0; i < verts.count; i++) {\n const nx = nrm[i * 3]\n const ny = nrm[i * 3 + 1]\n const nz = nrm[i * 3 + 2]\n const len = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1\n nrm[i * 3] = nx / len\n nrm[i * 3 + 1] = ny / len\n nrm[i * 3 + 2] = nz / len\n }\n}\n\n// ── Indexed → non-indexed ──\n\nfunction toNonIndexed(\n verts: VertStore,\n indices: Uint32Array,\n faceExcluded: Uint8Array | null = null,\n): Shape {\n const positions = verts.pos,\n normals = verts.nrm,\n weights = verts.wgt\n const triCount = indices.length / 3\n const posArray = new Float32Array(triCount * 9)\n const nrmArray = new Float32Array(triCount * 9)\n const wgtArray = faceExcluded || weights ? new Float32Array(triCount * 3) : null\n\n for (let t = 0; t < triCount; t++) {\n const faceW = faceExcluded ? (faceExcluded[t] ? 1.0 : 0.0) : null\n for (let v = 0; v < 3; v++) {\n const vidx = indices[t * 3 + v]\n posArray[t * 9 + v * 3] = positions[vidx * 3]\n posArray[t * 9 + v * 3 + 1] = positions[vidx * 3 + 1]\n posArray[t * 9 + v * 3 + 2] = positions[vidx * 3 + 2]\n\n nrmArray[t * 9 + v * 3] = normals[vidx * 3]\n nrmArray[t * 9 + v * 3 + 1] = normals[vidx * 3 + 1]\n nrmArray[t * 9 + v * 3 + 2] = normals[vidx * 3 + 2]\n\n if (wgtArray) wgtArray[t * 3 + v] = faceW !== null ? faceW : weights![vidx]\n }\n }\n\n const seqIndices = new Uint32Array(triCount * 3)\n for (let i = 0; i < seqIndices.length; i++) seqIndices[i] = i\n const geo: Shape = {\n positions: posArray,\n indices: seqIndices,\n normals: nrmArray,\n }\n if (wgtArray) (geo as Shape & { excludeWeight?: Float32Array }).excludeWeight = wgtArray\n return geo\n}\n"]}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* 在整个浏览器页面中,滚花纹理只应加载一次。
|
|
10
10
|
* 多个 CadRuntime 实例共享同一个纹理加载器是正确的行为。
|
|
11
11
|
*/
|
|
12
|
-
import
|
|
12
|
+
import type { Box3 } from '../../math3d/index.js';
|
|
13
13
|
/**
|
|
14
14
|
* Raw RGBA pixel data plus the pixel dimensions of a loaded texture.
|
|
15
15
|
*/
|
|
@@ -33,6 +33,6 @@ export declare function setKnurlTextureLoader(loader: (() => Promise<TextureData
|
|
|
33
33
|
export declare function loadKnurlingTexture(): Promise<TextureData | null>;
|
|
34
34
|
/** Dispose the knurl preview material; a no-op in the headless engine. */
|
|
35
35
|
export declare function disposeKnurlPreviewMaterial(): void;
|
|
36
|
-
/** Bounds type shared with the knurl preview path (a
|
|
37
|
-
export type KnurlPreviewBounds =
|
|
36
|
+
/** Bounds type shared with the knurl preview path (a math3d Box3). */
|
|
37
|
+
export type KnurlPreviewBounds = Box3;
|
|
38
38
|
//# sourceMappingURL=textureLoader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textureLoader.d.ts","sourceRoot":"","sources":["../../../src/mesh/knurl/textureLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"textureLoader.d.ts","sourceRoot":"","sources":["../../../src/mesh/knurl/textureLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAExC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,iBAAiB,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAKD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,CAAC,MAAM,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAE9F;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAOvE;AAED,0EAA0E;AAC1E,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED,sEAAsE;AACtE,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAA"}
|