@faicad/faijs 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +4 -5
- package/NOTICE +5 -6
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +19 -1
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/assembly/entities.d.ts +1 -1
- package/dist/api/assembly/entities.d.ts.map +1 -1
- package/dist/api/assembly/entities.js.map +1 -1
- package/dist/api/assembly/joints.d.ts +2 -2
- package/dist/api/assembly/joints.d.ts.map +1 -1
- package/dist/api/assembly/joints.js +2 -2
- package/dist/api/assembly/joints.js.map +1 -1
- package/dist/api/assembly/lower.d.ts +1 -1
- package/dist/api/assembly/lower.d.ts.map +1 -1
- package/dist/api/assembly/lower.js.map +1 -1
- package/dist/api/assembly/pose.d.ts +3 -3
- package/dist/api/assembly/pose.d.ts.map +1 -1
- package/dist/api/assembly/pose.js +1 -1
- package/dist/api/assembly/pose.js.map +1 -1
- package/dist/api/assembly/preview.d.ts +1 -1
- package/dist/api/assembly/preview.d.ts.map +1 -1
- package/dist/api/assembly/preview.js +1 -1
- package/dist/api/assembly/preview.js.map +1 -1
- package/dist/api/assembly/solve.d.ts.map +1 -1
- package/dist/api/assembly/solve.js +3 -3
- package/dist/api/assembly/solve.js.map +1 -1
- package/dist/api/assembly/solvers/assembly-tree.d.ts +98 -0
- package/dist/api/assembly/solvers/assembly-tree.d.ts.map +1 -0
- package/dist/api/assembly/solvers/assembly-tree.js +130 -0
- package/dist/api/assembly/solvers/assembly-tree.js.map +1 -0
- package/dist/api/assembly/solvers/chain-solver.d.ts +27 -0
- package/dist/api/assembly/solvers/chain-solver.d.ts.map +1 -0
- package/dist/api/assembly/solvers/chain-solver.js +330 -0
- package/dist/api/assembly/solvers/chain-solver.js.map +1 -0
- package/dist/api/assembly/solvers/global-solver.js +2 -2
- package/dist/api/assembly/solvers/global-solver.js.map +1 -1
- package/dist/api/assembly/solvers/joints-kinematics.d.ts +308 -0
- package/dist/api/assembly/solvers/joints-kinematics.d.ts.map +1 -0
- package/dist/api/assembly/solvers/joints-kinematics.js +643 -0
- package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -0
- package/dist/api/assembly/solvers/quat.d.ts +35 -0
- package/dist/api/assembly/solvers/quat.d.ts.map +1 -0
- package/dist/api/assembly/solvers/quat.js +84 -0
- package/dist/api/assembly/solvers/quat.js.map +1 -0
- package/dist/api/assembly/solvers/types.d.ts +33 -0
- package/dist/api/assembly/solvers/types.d.ts.map +1 -1
- package/dist/api/assembly/solvers/types.js.map +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +3 -4
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/brep-mirror/booleanFns.d.ts +40 -0
- package/dist/api/brep-mirror/booleanFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/booleanFns.js +99 -0
- package/dist/api/brep-mirror/booleanFns.js.map +1 -0
- package/dist/api/brep-mirror/brepHelpers.d.ts +55 -0
- package/dist/api/brep-mirror/brepHelpers.d.ts.map +1 -0
- package/dist/api/brep-mirror/brepHelpers.js +131 -0
- package/dist/api/brep-mirror/brepHelpers.js.map +1 -0
- package/dist/api/brep-mirror/compoundFns.d.ts +47 -0
- package/dist/api/brep-mirror/compoundFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/compoundFns.js +300 -0
- package/dist/api/brep-mirror/compoundFns.js.map +1 -0
- package/dist/api/brep-mirror/healingFns.d.ts +78 -0
- package/dist/api/brep-mirror/healingFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/healingFns.js +294 -0
- package/dist/api/brep-mirror/healingFns.js.map +1 -0
- package/dist/api/brep-mirror/hullFns.d.ts +20 -0
- package/dist/api/brep-mirror/hullFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/hullFns.js +46 -0
- package/dist/api/brep-mirror/hullFns.js.map +1 -0
- package/dist/api/brep-mirror/patternFns.d.ts +43 -0
- package/dist/api/brep-mirror/patternFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/patternFns.js +178 -0
- package/dist/api/brep-mirror/patternFns.js.map +1 -0
- package/dist/api/brep-mirror/primitiveFns.d.ts +42 -0
- package/dist/api/brep-mirror/primitiveFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/primitiveFns.js +104 -0
- package/dist/api/brep-mirror/primitiveFns.js.map +1 -0
- package/dist/api/brep-mirror/roofFns.d.ts +24 -0
- package/dist/api/brep-mirror/roofFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/roofFns.js +229 -0
- package/dist/api/brep-mirror/roofFns.js.map +1 -0
- package/dist/api/brep-mirror/straightSkeleton.d.ts +36 -0
- package/dist/api/brep-mirror/straightSkeleton.d.ts.map +1 -0
- package/dist/api/brep-mirror/straightSkeleton.js +443 -0
- package/dist/api/brep-mirror/straightSkeleton.js.map +1 -0
- package/dist/api/brep-mirror/sweepFns.d.ts +55 -0
- package/dist/api/brep-mirror/sweepFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/sweepFns.js +200 -0
- package/dist/api/brep-mirror/sweepFns.js.map +1 -0
- package/dist/api/brep-mirror/threadFns.d.ts +15 -0
- package/dist/api/brep-mirror/threadFns.d.ts.map +1 -1
- package/dist/api/brep-mirror/threadFns.js +37 -2
- package/dist/api/brep-mirror/threadFns.js.map +1 -1
- package/dist/api/brep-mirror/topologyFns.d.ts +74 -0
- package/dist/api/brep-mirror/topologyFns.d.ts.map +1 -0
- package/dist/api/brep-mirror/topologyFns.js +273 -0
- package/dist/api/brep-mirror/topologyFns.js.map +1 -0
- package/dist/api/brep-topology.d.ts +190 -0
- package/dist/api/brep-topology.d.ts.map +1 -0
- package/dist/api/brep-topology.js +337 -0
- package/dist/api/brep-topology.js.map +1 -0
- package/dist/api/brepjs-compat/constants.d.ts +11 -0
- package/dist/api/brepjs-compat/constants.d.ts.map +1 -0
- package/dist/api/brepjs-compat/constants.js +11 -0
- package/dist/api/brepjs-compat/constants.js.map +1 -0
- package/dist/api/brepjs-compat/index.d.ts +19 -232
- package/dist/api/brepjs-compat/index.d.ts.map +1 -1
- package/dist/api/brepjs-compat/index.js +19 -286
- package/dist/api/brepjs-compat/index.js.map +1 -1
- package/dist/api/brepjs-compat/planeOps.d.ts +98 -0
- package/dist/api/brepjs-compat/planeOps.d.ts.map +1 -0
- package/dist/api/brepjs-compat/planeOps.js +170 -0
- package/dist/api/brepjs-compat/planeOps.js.map +1 -0
- package/dist/api/brepjs-compat/planeTypes.d.ts +24 -0
- package/dist/api/brepjs-compat/planeTypes.d.ts.map +1 -0
- package/dist/api/brepjs-compat/planeTypes.js +8 -0
- package/dist/api/brepjs-compat/planeTypes.js.map +1 -0
- package/dist/api/brepjs-compat/types.d.ts +64 -0
- package/dist/api/brepjs-compat/types.d.ts.map +1 -0
- package/dist/api/brepjs-compat/types.js +48 -0
- package/dist/api/brepjs-compat/types.js.map +1 -0
- package/dist/api/brepjs-compat/vecOps.d.ts +124 -0
- package/dist/api/brepjs-compat/vecOps.d.ts.map +1 -0
- package/dist/api/brepjs-compat/vecOps.js +202 -0
- package/dist/api/brepjs-compat/vecOps.js.map +1 -0
- package/dist/api/chamfer.d.ts +5 -0
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +13 -8
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/compound-geom.d.ts.map +1 -1
- package/dist/api/compound-geom.js +8 -2
- package/dist/api/compound-geom.js.map +1 -1
- package/dist/api/draft.d.ts +69 -0
- package/dist/api/draft.d.ts.map +1 -0
- package/dist/api/draft.js +109 -0
- package/dist/api/draft.js.map +1 -0
- package/dist/api/edge-ref.d.ts.map +1 -1
- package/dist/api/edge-ref.js +2 -2
- package/dist/api/edge-ref.js.map +1 -1
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +2 -3
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +28 -13
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/face-ref.d.ts.map +1 -1
- package/dist/api/face-ref.js +2 -2
- package/dist/api/face-ref.js.map +1 -1
- package/dist/api/feature-repair.d.ts +137 -0
- package/dist/api/feature-repair.d.ts.map +1 -0
- package/dist/api/feature-repair.js +221 -0
- package/dist/api/feature-repair.js.map +1 -0
- package/dist/api/fillet-variable.d.ts +35 -0
- package/dist/api/fillet-variable.d.ts.map +1 -0
- package/dist/api/fillet-variable.js +71 -0
- package/dist/api/fillet-variable.js.map +1 -0
- package/dist/api/fillet.d.ts +3 -0
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +7 -4
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/2d.d.ts +1 -13
- package/dist/api/generated/2d.d.ts.map +1 -1
- package/dist/api/generated/2d.js +6 -1
- package/dist/api/generated/2d.js.map +1 -1
- package/dist/api/generated/brepjs/index.d.ts +298 -298
- package/dist/api/generated/brepjs/index.d.ts.map +1 -1
- package/dist/api/generated/brepjs/index.js +183 -183
- package/dist/api/generated/brepjs/index.js.map +1 -1
- package/dist/api/generated/core.d.ts +3 -123
- package/dist/api/generated/core.d.ts.map +1 -1
- package/dist/api/generated/core.js +2 -81
- package/dist/api/generated/core.js.map +1 -1
- package/dist/api/generated/gear.d.ts +1 -15
- package/dist/api/generated/gear.d.ts.map +1 -1
- package/dist/api/generated/gear.js +6 -3
- package/dist/api/generated/gear.js.map +1 -1
- package/dist/api/generated/io.d.ts +1 -13
- package/dist/api/generated/io.d.ts.map +1 -1
- package/dist/api/generated/io.js +6 -1
- package/dist/api/generated/io.js.map +1 -1
- package/dist/api/generated/kernel.d.ts +1 -39
- package/dist/api/generated/kernel.d.ts.map +1 -1
- package/dist/api/generated/kernel.js +6 -4
- package/dist/api/generated/kernel.js.map +1 -1
- package/dist/api/generated/measurement.d.ts +53 -97
- package/dist/api/generated/measurement.d.ts.map +1 -1
- package/dist/api/generated/measurement.js +48 -143
- package/dist/api/generated/measurement.js.map +1 -1
- package/dist/api/generated/ns.d.ts +1 -10
- package/dist/api/generated/ns.d.ts.map +1 -1
- package/dist/api/generated/ns.js +2 -10
- package/dist/api/generated/ns.js.map +1 -1
- package/dist/api/generated/operations.d.ts +65 -110
- package/dist/api/generated/operations.d.ts.map +1 -1
- package/dist/api/generated/operations.js +132 -80
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/projection.d.ts +1 -8
- package/dist/api/generated/projection.d.ts.map +1 -1
- package/dist/api/generated/projection.js +6 -4
- package/dist/api/generated/projection.js.map +1 -1
- package/dist/api/generated/query.d.ts +1 -9
- package/dist/api/generated/query.d.ts.map +1 -1
- package/dist/api/generated/query.js +6 -1
- package/dist/api/generated/query.js.map +1 -1
- package/dist/api/generated/script-face-manifest.d.ts +2 -0
- package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
- package/dist/api/generated/script-face-manifest.js +34 -22
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/generated/script-face.d.ts +52 -27
- package/dist/api/generated/script-face.d.ts.map +1 -1
- package/dist/api/generated/script-face.js +18 -4
- package/dist/api/generated/script-face.js.map +1 -1
- package/dist/api/generated/sketching.d.ts +4 -7
- package/dist/api/generated/sketching.d.ts.map +1 -1
- package/dist/api/generated/sketching.js +10 -8
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/text.d.ts +1 -6
- package/dist/api/generated/text.d.ts.map +1 -1
- package/dist/api/generated/text.js +6 -3
- package/dist/api/generated/text.js.map +1 -1
- package/dist/api/generated/topology.d.ts +77 -175
- package/dist/api/generated/topology.d.ts.map +1 -1
- package/dist/api/generated/topology.js +172 -131
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/geom.d.ts.map +1 -1
- package/dist/api/geom.js +2 -2
- package/dist/api/geom.js.map +1 -1
- package/dist/api/helix.d.ts +51 -0
- package/dist/api/helix.d.ts.map +1 -0
- package/dist/api/helix.js +63 -0
- package/dist/api/helix.js.map +1 -0
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +6 -2
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.d.ts +18 -5
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +29 -12
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.d.ts +10 -0
- package/dist/api/internal/compat-op.d.ts.map +1 -1
- package/dist/api/internal/compat-op.js +9 -3
- package/dist/api/internal/compat-op.js.map +1 -1
- package/dist/api/internal/compat-projection.d.ts +4 -4
- package/dist/api/internal/compat-projection.js +7 -7
- package/dist/api/internal/compat-projection.js.map +1 -1
- package/dist/api/internal/l3-bridge.d.ts +75 -42
- package/dist/api/internal/l3-bridge.d.ts.map +1 -1
- package/dist/api/internal/l3-bridge.js +105 -50
- package/dist/api/internal/l3-bridge.js.map +1 -1
- package/dist/api/internal/profile-wire.d.ts +31 -0
- package/dist/api/internal/profile-wire.d.ts.map +1 -0
- package/dist/api/internal/profile-wire.js +37 -0
- package/dist/api/internal/profile-wire.js.map +1 -0
- package/dist/api/internal/replica-role-table.js +2 -2
- package/dist/api/internal/replica-role-table.js.map +1 -1
- package/dist/api/loft.d.ts +66 -0
- package/dist/api/loft.d.ts.map +1 -0
- package/dist/api/loft.js +111 -0
- package/dist/api/loft.js.map +1 -0
- package/dist/api/measurement/index.d.ts +51 -0
- package/dist/api/measurement/index.d.ts.map +1 -0
- package/dist/api/measurement/index.js +71 -0
- package/dist/api/measurement/index.js.map +1 -0
- package/dist/api/occt-kernel-bridge.d.ts +5 -8
- package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
- package/dist/api/occt-kernel-bridge.js +18 -14
- package/dist/api/occt-kernel-bridge.js.map +1 -1
- package/dist/api/pattern.d.ts.map +1 -1
- package/dist/api/pattern.js +3 -4
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/place.d.ts.map +1 -1
- package/dist/api/place.js +2 -4
- package/dist/api/place.js.map +1 -1
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +3 -4
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/replicate.d.ts +28 -1
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +29 -19
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/result.d.ts +6 -11
- package/dist/api/result.d.ts.map +1 -1
- package/dist/api/result.js +6 -11
- package/dist/api/result.js.map +1 -1
- package/dist/api/revolve.d.ts.map +1 -1
- package/dist/api/revolve.js +15 -14
- package/dist/api/revolve.js.map +1 -1
- package/dist/api/screw.d.ts +3 -0
- package/dist/api/screw.d.ts.map +1 -1
- package/dist/api/screw.js +9 -4
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts +1 -1
- package/dist/api/section-by-plane.d.ts +42 -0
- package/dist/api/section-by-plane.d.ts.map +1 -0
- package/dist/api/section-by-plane.js +61 -0
- package/dist/api/section-by-plane.js.map +1 -0
- package/dist/api/shell.d.ts +45 -0
- package/dist/api/shell.d.ts.map +1 -0
- package/dist/api/shell.js +73 -0
- package/dist/api/shell.js.map +1 -0
- package/dist/api/sketch.d.ts +8 -1
- package/dist/api/sketch.d.ts.map +1 -1
- package/dist/api/sketch.js +12 -7
- package/dist/api/sketch.js.map +1 -1
- package/dist/api/split-by-plane.d.ts +41 -0
- package/dist/api/split-by-plane.d.ts.map +1 -0
- package/dist/api/split-by-plane.js +60 -0
- package/dist/api/split-by-plane.js.map +1 -0
- package/dist/api/split.d.ts +6 -1
- package/dist/api/split.d.ts.map +1 -1
- package/dist/api/split.js +23 -9
- package/dist/api/split.js.map +1 -1
- package/dist/api/surface/arg-spec.d.ts +22 -0
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +723 -476
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/sweep.d.ts +55 -0
- package/dist/api/sweep.d.ts.map +1 -0
- package/dist/api/sweep.js +86 -0
- package/dist/api/sweep.js.map +1 -0
- package/dist/api/thicken.d.ts +36 -0
- package/dist/api/thicken.d.ts.map +1 -0
- package/dist/api/thicken.js +55 -0
- package/dist/api/thicken.js.map +1 -0
- package/dist/api/transform.d.ts +8 -0
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +15 -4
- package/dist/api/transform.js.map +1 -1
- package/dist/api/view/cameraFns.d.ts +48 -0
- package/dist/api/view/cameraFns.d.ts.map +1 -0
- package/dist/api/view/cameraFns.js +75 -0
- package/dist/api/view/cameraFns.js.map +1 -0
- package/dist/api/view/projectionPlanes.d.ts +25 -0
- package/dist/api/view/projectionPlanes.d.ts.map +1 -0
- package/dist/api/view/projectionPlanes.js +30 -0
- package/dist/api/view/projectionPlanes.js.map +1 -0
- package/dist/api/view/view-camera.d.ts +2 -2
- package/dist/api/view/view-camera.d.ts.map +1 -1
- package/dist/api/view/view-camera.js +3 -3
- package/dist/api/view/view-camera.js.map +1 -1
- package/dist/api/view/view-projection.d.ts +9 -6
- package/dist/api/view/view-projection.d.ts.map +1 -1
- package/dist/api/view/view-projection.js +132 -65
- package/dist/api/view/view-projection.js.map +1 -1
- package/dist/api/wire.d.ts +45 -0
- package/dist/api/wire.d.ts.map +1 -0
- package/dist/api/wire.js +96 -0
- package/dist/api/wire.js.map +1 -0
- package/dist/boolean/creased-normals.d.ts +50 -0
- package/dist/boolean/creased-normals.d.ts.map +1 -0
- package/dist/boolean/creased-normals.js +114 -0
- package/dist/boolean/creased-normals.js.map +1 -0
- package/dist/boolean/deriveNormals.d.ts +4 -1
- package/dist/boolean/deriveNormals.d.ts.map +1 -1
- package/dist/boolean/deriveNormals.js +5 -2
- package/dist/boolean/deriveNormals.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +6 -0
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +11 -2
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/brep-topology.d.ts +4 -0
- package/dist/brep/brep-topology.d.ts.map +1 -1
- package/dist/brep/brep-topology.js +4 -0
- package/dist/brep/brep-topology.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +79 -59
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brepkit.js +7 -1
- package/dist/brep/engine/adapters/brepkit.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +15 -7
- package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
- package/dist/brep/engine/adapters/occt.js +52 -167
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +93 -130
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js +9 -7
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/types.d.ts +14 -1
- package/dist/brep/engine/types.d.ts.map +1 -1
- package/dist/brep/engine/types.js +11 -1
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/export/step.d.ts +3 -0
- package/dist/brep/export/step.d.ts.map +1 -1
- package/dist/brep/export/step.js +7 -1
- package/dist/brep/export/step.js.map +1 -1
- package/dist/brep/face-evolution.d.ts +8 -0
- package/dist/brep/face-evolution.d.ts.map +1 -1
- package/dist/brep/face-evolution.js +15 -3
- package/dist/brep/face-evolution.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +20 -2
- package/dist/brep/handle-bridge.d.ts.map +1 -1
- package/dist/brep/handle-bridge.js +25 -2
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +25 -5
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +336 -144
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +6 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +5 -1
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.d.ts +9 -3
- package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +32 -2
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +8 -2
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +3 -0
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +3 -1
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +18 -2
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +29 -1
- package/dist/define-op.js.map +1 -1
- package/dist/env-agnostic.d.ts +3 -0
- package/dist/env-agnostic.d.ts.map +1 -1
- package/dist/env-agnostic.js +7 -0
- package/dist/env-agnostic.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +28 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +29 -1
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
- package/dist/occt-kernel/highLevelApi.js +6 -3
- package/dist/occt-kernel/highLevelApi.js.map +1 -1
- package/dist/occt-kernel/hullGeometry.d.ts +31 -0
- package/dist/occt-kernel/hullGeometry.d.ts.map +1 -0
- package/dist/occt-kernel/hullGeometry.js +319 -0
- package/dist/occt-kernel/hullGeometry.js.map +1 -0
- package/dist/occt-kernel/hullOps.d.ts +24 -0
- package/dist/occt-kernel/hullOps.d.ts.map +1 -0
- package/dist/occt-kernel/hullOps.js +52 -0
- package/dist/occt-kernel/hullOps.js.map +1 -0
- package/dist/occt-kernel/occt-primitives.d.ts +14 -0
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -0
- package/dist/occt-kernel/occt-primitives.js +351 -0
- package/dist/occt-kernel/occt-primitives.js.map +1 -0
- package/dist/occt-kernel/occtKernel.d.ts +14 -6
- package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
- package/dist/occt-kernel/occtKernel.js +11 -3
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/occt-kernel/topologyExt.js +2 -2
- package/dist/occt-kernel/topologyExt.js.map +1 -1
- package/dist/primitives/brep-primitives.d.ts +4 -0
- package/dist/primitives/brep-primitives.d.ts.map +1 -1
- package/dist/primitives/brep-primitives.js +4 -0
- package/dist/primitives/brep-primitives.js.map +1 -1
- package/dist/result/bug.d.ts +22 -0
- package/dist/result/bug.d.ts.map +1 -0
- package/dist/result/bug.js +28 -0
- package/dist/result/bug.js.map +1 -0
- package/dist/result/errors.d.ts +270 -0
- package/dist/result/errors.d.ts.map +1 -0
- package/dist/result/errors.js +317 -0
- package/dist/result/errors.js.map +1 -0
- package/dist/result/kernelErrorTranslation.d.ts +21 -0
- package/dist/result/kernelErrorTranslation.d.ts.map +1 -0
- package/dist/result/kernelErrorTranslation.js +102 -0
- package/dist/result/kernelErrorTranslation.js.map +1 -0
- package/dist/result/result.d.ts +213 -0
- package/dist/result/result.d.ts.map +1 -0
- package/dist/result/result.js +336 -0
- package/dist/result/result.js.map +1 -0
- package/dist/result/vec3.d.ts +12 -0
- package/dist/result/vec3.d.ts.map +1 -0
- package/dist/result/vec3.js +14 -0
- package/dist/result/vec3.js.map +1 -0
- package/dist/runtime-state.d.ts +9 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js.map +1 -1
- package/dist/sdk.d.ts +3 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +2 -1
- package/dist/sdk.js.map +1 -1
- package/dist/shape.d.ts +43 -1
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +57 -1
- package/dist/shape.js.map +1 -1
- package/dist/topology/naming/geom-hint.js +1 -1
- package/dist/topology/naming/geom-hint.js.map +1 -1
- package/dist/topology/naming/score.js +1 -1
- package/dist/topology/naming/score.js.map +1 -1
- package/package.json +6 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brep-topology.d.ts","sourceRoot":"","sources":["../../src/brep/brep-topology.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"brep-topology.d.ts","sourceRoot":"","sources":["../../src/brep/brep-topology.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAoC,MAAM,mBAAmB,CAAA;AAK1F;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,OAAO,EAAE,eAAe,CAAA;IACxB,6CAA6C;IAC7C,IAAI,EAAE;QACJ,SAAS,EAAE,YAAY,CAAA;QACvB,OAAO,EAAE,YAAY,CAAA;QACrB,OAAO,EAAE,WAAW,CAAA;KACrB,CAAA;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,EACjB,cAAc,EAAE,cAAc,GAC7B,eAAe,CAcjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,GAChB,mBAAmB,CA0BrB"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* BREP 拓扑运行时构建 — 从 OCCT solid 句柄生成 SelectorRuntime + mesh 数据
|
|
3
3
|
*
|
|
4
|
+
* @platform occt — 本文件 import occt-kernel(occtKernel / topologyExt):拓扑
|
|
5
|
+
* 提取直接消费平台原生句柄与扩展方法,由调用方(宿主导出缓存 / 平台装配点)
|
|
6
|
+
* 在 occt 引擎下使用;守卫 R1 豁免、R2 无 defineOp 不适用。
|
|
7
|
+
*
|
|
4
8
|
* 与 STEP 文件导入的拓扑提取使用**同源算法**:
|
|
5
9
|
* meshShape + buildAssemblySelectorManifest + buildSelectorRuntime
|
|
6
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brep-topology.js","sourceRoot":"","sources":["../../src/brep/brep-topology.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"brep-topology.js","sourceRoot":"","sources":["../../src/brep/brep-topology.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAiBzE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAqB,EACrB,KAAiB,EACjB,cAA8B;IAE9B,oDAAoD;IACpD,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,EAAE,CAAC;YACpD,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,KAAK;YAClB,cAAc;SACf,CAAC,CAAC,CAAA;IAEH,qBAAqB;IACrB,MAAM,MAAM,GAAmB;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAuC;QACxD,OAAO,EAAE,MAAM,CAAC,OAAiE;KAClF,CAAA;IACD,OAAO,oBAAoB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;AACnD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAqB,EACrB,KAAiB;IAEjB,qDAAqD;IACrD,uDAAuD;IACvD,MAAM,0BAA0B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;IACrD,MAAM,GAAG,GAAG,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE;QACpD,gBAAgB,EAAE,GAAG;QACrB,iBAAiB,EAAE,0BAA0B;QAC7C,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IACF,MAAM,IAAI,GAAmB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QACnD,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;KACzC,CAAC,CAAA;IAEF,4CAA4C;IAC5C,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAE1D,yCAAyC;IACzC,OAAO;QACL,OAAO;QACP,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;SAC9B;KACF,CAAA;AACH,CAAC","sourcesContent":["/**\n * BREP 拓扑运行时构建 — 从 OCCT solid 句柄生成 SelectorRuntime + mesh 数据\n *\n * @platform occt — 本文件 import occt-kernel(occtKernel / topologyExt):拓扑\n * 提取直接消费平台原生句柄与扩展方法,由调用方(宿主导出缓存 / 平台装配点)\n * 在 occt 引擎下使用;守卫 R1 豁免、R2 无 defineOp 不适用。\n *\n * 与 STEP 文件导入的拓扑提取使用**同源算法**:\n * meshShape + buildAssemblySelectorManifest + buildSelectorRuntime\n *\n * 不执行 STEP round-trip(export→import),直接在原始 solid 上运行。\n * solid 句柄不被释放或修改——由调用方(宿主导出缓存)管理生命周期。\n *\n * 同时返回 mesh 数据(positions/normals/indices),用于更新场景几何,\n * 保证 mesh 三角形与 topology faceRuns 一一对应。\n */\n\nimport type { BrepHandle, BrepMeshResult } from './engine/types'\nimport type { BrepEngineApi } from './engine/primitives'\nimport type { SelectorRuntime, SelectorBundle, SelectorManifest } from '../topology/types'\nimport { computeEffectiveDeflection } from '../occt-kernel/occtKernel'\nimport { buildAssemblySelectorManifest } from '../occt-kernel/topologyExt'\nimport { buildSelectorRuntime } from '../topology/build-selector-runtime'\n\n/**\n * Result of building BREP topology from an OCCT solid: the SelectorRuntime\n * plus the mesh data produced by the same meshShape call.\n */\nexport interface SolidTopologyResult {\n /** SelectorRuntime,与 STEP_T 使用同源算法生成 */\n runtime: SelectorRuntime\n /** 与 topology 使用同一个 meshShape 输出的 mesh 数据 */\n mesh: {\n positions: Float32Array\n normals: Float32Array\n indices: Uint32Array\n }\n}\n\n/**\n * 从已有的三角化结果(meshWithGroups)构建拓扑,不强制重新 meshShape。\n *\n * 用于 BREP 路径在场景已有三角化时复用——三角化属于几何数据生成,\n * 拓扑构建应接收已有结果而非内部重新生成(需求 §2.0/§2.2、验收 3)。\n *\n * @param kernel the OCCT kernel instance.\n * @param solid the OCCT solid handle (the shapeHandle for buildAssemblySelectorManifest).\n * @param meshWithGroups the existing tessellation result (from kernel.meshShape).\n * @returns the assembled SelectorRuntime.\n */\nexport function buildTopologyFromMesh(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n meshWithGroups: BrepMeshResult,\n): SelectorRuntime {\n // 生成拓扑清单(与 STEP_T 同源:buildAssemblySelectorManifest)\n const result = buildAssemblySelectorManifest(kernel, [{\n labelPath: 'o1',\n shapeHandle: solid,\n meshWithGroups,\n }])\n\n // 构建 SelectorRuntime\n const bundle: SelectorBundle = {\n manifest: result.manifest as unknown as SelectorManifest,\n buffers: result.buffers as unknown as import('../topology/types').SelectorBuffers,\n }\n return buildSelectorRuntime(bundle, { scale: 1 })\n}\n\n/**\n * 从 OCCT solid 句柄生成 SelectorRuntime + mesh 数据。\n *\n * 算法与 STEP 文件导入路径(step-worker.ts → importStepToMesh →\n * buildAssemblySelectorManifest → buildSelectorRuntime)完全同源,\n * 区别仅在于 solid 来源是 OCCT 运算而非 STEP 文件导入。\n *\n * 三角化参数与显示 mesh 完全一致\n * (linearDeflection=0.1, angularDeflection=2π/32≈0.196, relative=false)。\n * 这与 solidToShape 的默认值一致,保证拓扑 faceRuns 与显示 mesh 三角形一一对应。\n *\n * 规则 1:拓扑数据生成所使用的 mesh,必须是当前用户看到的 mesh。\n * 由于 OCCT meshShape 对同一 solid + 同一参数是确定性的,\n * 此处重新三角化的结果与显示 mesh 完全相同。\n * 如果已有三角化结果(meshShapeCache),应直接调 buildTopologyFromMesh 以复用。\n *\n * @param kernel the OCCT kernel instance.\n * @param solid the OCCT solid handle (never released or modified).\n * @returns the SelectorRuntime plus the mesh data from the same meshShape call.\n */\nexport function buildSolidTopologyRuntime(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n): SolidTopologyResult {\n // 1. 三角化(含 faceGroups)——与显示 mesh 使用相同的 deflection 参数\n // solidToShape 默认 angularDeflection = 2π/32 ≈ 0.196\n const DISPLAY_ANGULAR_DEFLECTION = (2 * Math.PI) / 32\n const eff = computeEffectiveDeflection(kernel, solid, {\n linearDeflection: 0.1,\n angularDeflection: DISPLAY_ANGULAR_DEFLECTION,\n relative: false,\n })\n const mesh: BrepMeshResult = kernel.meshShape(solid, {\n linearDeflection: eff.linearDeflection,\n angularDeflection: eff.angularDeflection,\n })\n\n // 2. 从已有三角化结果构建拓扑(复用 buildTopologyFromMesh)\n const runtime = buildTopologyFromMesh(kernel, solid, mesh)\n\n // 3. 返回 runtime + mesh(同一个 meshShape 输出)\n return {\n runtime,\n mesh: {\n positions: mesh.positions.slice(),\n normals: mesh.normals.slice(),\n indices: mesh.indices.slice(),\n },\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brep-mock.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brep-mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,OAAO,KAAK,EAAE,aAAa,EAAgC,MAAM,eAAe,CAAA;AAEhF,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,cAAc,CAAA;AAoC9C;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"brep-mock.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brep-mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,OAAO,KAAK,EAAE,aAAa,EAAgC,MAAM,eAAe,CAAA;AAEhF,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,cAAc,CAAA;AAoC9C;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAuWjD;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,IAAI,IAAI,CAQ7C"}
|
|
@@ -67,14 +67,6 @@ export function createBrepMockApi() {
|
|
|
67
67
|
ymax: Math.max(a.ymax, b.ymax),
|
|
68
68
|
zmax: Math.max(a.zmax, b.zmax),
|
|
69
69
|
});
|
|
70
|
-
const mockXcafDocument = () => ({
|
|
71
|
-
addShape: () => undefined,
|
|
72
|
-
exportSTEP: () => mockStepExport(),
|
|
73
|
-
close: () => undefined,
|
|
74
|
-
});
|
|
75
|
-
const mockStepExport = () => 'brep-mock-engine STEP (mock)\n' +
|
|
76
|
-
'// Not real STEP — marker of the in-memory mock BREP engine, for engine-switch tests only.\n' +
|
|
77
|
-
'FILE_DESCRIPTION(("brep-mock-engine"), "2;1");';
|
|
78
70
|
const primitive = (kind, size, tag) => alloc({ kind, bbox: bboxOf(kind, size), tag });
|
|
79
71
|
const primitives = {
|
|
80
72
|
// ── 生命周期 ──
|
|
@@ -91,7 +83,54 @@ export function createBrepMockApi() {
|
|
|
91
83
|
const s = need(shape, 'extrude');
|
|
92
84
|
return alloc({ kind: 'solid', bbox: { ...s.bbox, xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz }, tag: `extrude(${s.tag})` });
|
|
93
85
|
},
|
|
94
|
-
|
|
86
|
+
revolveVec: (shape, _center, direction, angleDeg) => {
|
|
87
|
+
// Mock approximation: revolve grows the bbox by sweeping the profile's
|
|
88
|
+
// extent around the axis — approximate with the direction-scaled extent
|
|
89
|
+
// (signature-level coverage only, like extrude above).
|
|
90
|
+
const s = need(shape, 'revolveVec');
|
|
91
|
+
const grow = (Math.abs(angleDeg) / 360) * Math.hypot(direction.x, direction.y, direction.z) * 2;
|
|
92
|
+
return alloc({
|
|
93
|
+
kind: 'solid',
|
|
94
|
+
bbox: {
|
|
95
|
+
xmin: s.bbox.xmin - grow, ymin: s.bbox.ymin - grow, zmin: s.bbox.zmin,
|
|
96
|
+
xmax: s.bbox.xmax + grow, ymax: s.bbox.ymax + grow, zmax: s.bbox.zmax,
|
|
97
|
+
},
|
|
98
|
+
tag: `revolveVec(${s.tag},a=${angleDeg})`,
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
sew: (shapesIn, _tolerance) => {
|
|
102
|
+
// Mock approximation: merge the parts' bboxes into one shell-ish solid.
|
|
103
|
+
let bbox = null;
|
|
104
|
+
let tag = 'sew(';
|
|
105
|
+
for (const h of shapesIn) {
|
|
106
|
+
const rec = need(h, 'sew');
|
|
107
|
+
bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox };
|
|
108
|
+
tag += `${rec.tag},`;
|
|
109
|
+
}
|
|
110
|
+
return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` });
|
|
111
|
+
},
|
|
112
|
+
sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),
|
|
113
|
+
shell: (solid, _facesToRemove, thickness, _tolerance) => {
|
|
114
|
+
// Mock approximation: shelling keeps the outer bbox and marks it hollow.
|
|
115
|
+
const s = need(solid, 'shell');
|
|
116
|
+
return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `shell(${s.tag},t=${thickness})` });
|
|
117
|
+
},
|
|
118
|
+
hullFromPoints: (points, _tolerance) => {
|
|
119
|
+
// Mock approximation: bbox of the point set as a solid.
|
|
120
|
+
if (points.length === 0)
|
|
121
|
+
return unsupported('hullFromPoints: empty point set');
|
|
122
|
+
let xmin = Infinity, ymin = Infinity, zmin = Infinity;
|
|
123
|
+
let xmax = -Infinity, ymax = -Infinity, zmax = -Infinity;
|
|
124
|
+
for (const p of points) {
|
|
125
|
+
xmin = Math.min(xmin, p.x);
|
|
126
|
+
ymin = Math.min(ymin, p.y);
|
|
127
|
+
zmin = Math.min(zmin, p.z);
|
|
128
|
+
xmax = Math.max(xmax, p.x);
|
|
129
|
+
ymax = Math.max(ymax, p.y);
|
|
130
|
+
zmax = Math.max(zmax, p.z);
|
|
131
|
+
}
|
|
132
|
+
return alloc({ kind: 'solid', bbox: { xmin, ymin, zmin, xmax, ymax, zmax }, tag: `hullFromPoints(n=${points.length})` });
|
|
133
|
+
},
|
|
95
134
|
// ── 倒角与圆角(mock:只重打标签/复制,不做真几何;引擎切换测试覆盖签名面) ──
|
|
96
135
|
chamfer: (solid, edges, distance) => {
|
|
97
136
|
const s = need(solid, 'chamfer');
|
|
@@ -115,12 +154,6 @@ export function createBrepMockApi() {
|
|
|
115
154
|
const evo = { result, modified: [], generated: [], deleted: [] };
|
|
116
155
|
return evo;
|
|
117
156
|
},
|
|
118
|
-
chamferWithHistory: (solid, edges, distance, _hashes, _upper) => {
|
|
119
|
-
const s = need(solid, 'chamferWithHistory');
|
|
120
|
-
const result = alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamferWH(${s.tag},d=${distance},e=${edges.length})` });
|
|
121
|
-
const evo = { result, modified: [], generated: [], deleted: [] };
|
|
122
|
-
return evo;
|
|
123
|
-
},
|
|
124
157
|
// ── 布尔与分割 ──
|
|
125
158
|
fuse: (a, b) => {
|
|
126
159
|
const sa = need(a, 'fuse');
|
|
@@ -141,7 +174,19 @@ export function createBrepMockApi() {
|
|
|
141
174
|
const sb = need(b, 'intersect');
|
|
142
175
|
return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `intersect(${sa.tag},${sb.tag})` });
|
|
143
176
|
},
|
|
144
|
-
|
|
177
|
+
sectionByPlane: (shape, _point, _normal) => {
|
|
178
|
+
// Mock approximation: section curves keep the input bbox as a wire-ish record.
|
|
179
|
+
const s = need(shape, 'sectionByPlane');
|
|
180
|
+
return [alloc({ kind: 'wire', bbox: { ...s.bbox }, tag: `sectionByPlane(${s.tag})` })];
|
|
181
|
+
},
|
|
182
|
+
splitByPlane: (shape, _point, _normal) => {
|
|
183
|
+
// Mock approximation: two halves share the input bbox (no real cut).
|
|
184
|
+
const s = need(shape, 'splitByPlane');
|
|
185
|
+
return {
|
|
186
|
+
positive: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane+(${s.tag})` }),
|
|
187
|
+
negative: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane-(${s.tag})` }),
|
|
188
|
+
};
|
|
189
|
+
},
|
|
145
190
|
fuseAll: (shapesIn) => {
|
|
146
191
|
let bbox = null;
|
|
147
192
|
let tag = 'fuseAll(';
|
|
@@ -228,6 +273,7 @@ export function createBrepMockApi() {
|
|
|
228
273
|
}, tag: `arc` });
|
|
229
274
|
},
|
|
230
275
|
makeBezierEdge: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'bezier' }),
|
|
276
|
+
makeCircleEdge: (center, _normal, radius) => alloc({ kind: 'edge', bbox: bboxOf('edge', [radius * 2, radius * 2, 0]), tag: `circle(${center.x},${center.y},${center.z},r=${radius})` }),
|
|
231
277
|
// ── 拓扑构造 ──
|
|
232
278
|
makeWire: (edges) => alloc({ kind: 'wire', bbox: edges.length > 0 ? { ...need(edges[0], 'makeWire').bbox } : bboxOf('wire', [0, 0, 0]), tag: `wire(${edges.length})` }),
|
|
233
279
|
makeFace: (wire) => alloc({ kind: 'face', bbox: { ...need(wire, 'makeFace').bbox }, tag: `face(#${wire})` }),
|
|
@@ -239,7 +285,6 @@ export function createBrepMockApi() {
|
|
|
239
285
|
}
|
|
240
286
|
return alloc({ kind: 'compound', bbox: bbox ?? bboxOf('compound', [0, 0, 0]), tag: `compound(${parts.length})` });
|
|
241
287
|
},
|
|
242
|
-
sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),
|
|
243
288
|
buildTriFace: () => alloc({ kind: 'face', bbox: bboxOf('face', [1, 1, 0]), tag: 'triFace' }),
|
|
244
289
|
addHolesInFace: (face) => alloc({ kind: 'face', bbox: { ...need(face, 'addHolesInFace').bbox }, tag: `holedFace(#${face})` }),
|
|
245
290
|
// ── 三角化(BREP→mesh 唯一出口) ──
|
|
@@ -247,12 +292,15 @@ export function createBrepMockApi() {
|
|
|
247
292
|
wireframe: () => ({ points: new Float32Array(0), edgeGroups: new Int32Array(0), pointCount: 0, edgeCount: 0 }),
|
|
248
293
|
// ── 拓扑查询 ──
|
|
249
294
|
getSubShapes: () => [],
|
|
250
|
-
queryBatch: (shapesIn) => shapesIn.map(() => ({ area: 0 })),
|
|
251
295
|
subShapeHashes: () => [],
|
|
252
296
|
hashCode: (shape) => shape % 2147483647,
|
|
253
297
|
isSame: (a, b) => a === b,
|
|
254
298
|
isSolid: () => true,
|
|
299
|
+
shapeType: () => 'SOLID',
|
|
255
300
|
shapeOrientation: () => 'forward',
|
|
301
|
+
edgeToFaceMap: () => ({}),
|
|
302
|
+
adjacentFaces: () => [],
|
|
303
|
+
sharedEdges: () => [],
|
|
256
304
|
// ── 几何求值 ──
|
|
257
305
|
curveType: () => 'line',
|
|
258
306
|
curvePointAtParam: () => ({ x: 0, y: 0, z: 0 }),
|
|
@@ -264,9 +312,14 @@ export function createBrepMockApi() {
|
|
|
264
312
|
surfaceNormal: () => ({ x: 0, y: 0, z: 1 }),
|
|
265
313
|
pointOnSurface: () => ({ x: 0, y: 0, z: 0 }),
|
|
266
314
|
uvBounds: () => ({ uMin: 0, uMax: 1, vMin: 0, vMax: 1 }),
|
|
267
|
-
getSurfaceCenterOfMass: () => ({ x: 0, y: 0, z: 0 }),
|
|
268
315
|
getFaceCylinderData: () => null,
|
|
269
316
|
getNurbsCurveData: () => null,
|
|
317
|
+
interpolatePoints: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'interpolatePoints' }),
|
|
318
|
+
defeature: (shape) => { need(shape, 'defeature'); return shape; },
|
|
319
|
+
draft: (shape) => { need(shape, 'draft'); return shape; },
|
|
320
|
+
removeHolesFromFace: (face) => { need(face, 'removeHolesFromFace'); return face; },
|
|
321
|
+
reverseShape: (shape) => { need(shape, 'reverseShape'); return shape; },
|
|
322
|
+
projectEdges: () => unsupported('projectEdges'),
|
|
270
323
|
// ── 测量 ──
|
|
271
324
|
getBoundingBox: (shape) => ({ ...need(shape, 'getBoundingBox').bbox }),
|
|
272
325
|
getVolume: (shape) => {
|
|
@@ -277,6 +330,8 @@ export function createBrepMockApi() {
|
|
|
277
330
|
const b = need(shape, 'getCenterOfMass').bbox;
|
|
278
331
|
return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 };
|
|
279
332
|
},
|
|
333
|
+
getSurfaceArea: () => 0,
|
|
334
|
+
getLength: () => 0,
|
|
280
335
|
// ── 校验与修复 ──
|
|
281
336
|
isValid: () => true,
|
|
282
337
|
unifySameDomain: (shape) => shape,
|
|
@@ -292,7 +347,7 @@ export function createBrepMockApi() {
|
|
|
292
347
|
},
|
|
293
348
|
importStl: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStl(mock)' }),
|
|
294
349
|
fromBREP: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'fromBREP(mock)' }),
|
|
295
|
-
// ──
|
|
350
|
+
// ── 面演化(L1 三员:mock 用底层布尔 + 空 evo) ──
|
|
296
351
|
cutWithHistory: (a, b, _hashes, _upper) => {
|
|
297
352
|
const result = primitives.cut(a, b);
|
|
298
353
|
const evo = { result, modified: [], generated: [], deleted: [] };
|
|
@@ -308,51 +363,16 @@ export function createBrepMockApi() {
|
|
|
308
363
|
const evo = { result, modified: [], generated: [], deleted: [] };
|
|
309
364
|
return evo;
|
|
310
365
|
},
|
|
311
|
-
//
|
|
312
|
-
translateWithHistory: () => unsupported('translateWithHistory'),
|
|
313
|
-
rotateWithHistory: () => unsupported('rotateWithHistory'),
|
|
314
|
-
mirrorWithHistory: () => unsupported('mirrorWithHistory'),
|
|
315
|
-
scaleWithHistory: () => unsupported('scaleWithHistory'),
|
|
316
|
-
shellWithHistory: () => unsupported('shellWithHistory'),
|
|
317
|
-
offsetWithHistory: () => unsupported('offsetWithHistory'),
|
|
318
|
-
thickenWithHistory: () => unsupported('thickenWithHistory'),
|
|
319
|
-
// ── XCAF 装配(mock 文档) ──
|
|
320
|
-
createXCAFDocument: () => mockXcafDocument(),
|
|
321
|
-
importXCAFFromSTEP: () => mockXcafDocument(),
|
|
322
|
-
// ── Phase 3 登记方法:mock 验证载体——查询类给简单实现,其余明确缺失暴露 ──
|
|
323
|
-
boundingBox: (shape) => ({ ...need(shape, 'boundingBox').bbox }),
|
|
324
|
-
shapeType: (shape) => need(shape, 'shapeType').kind === 'face' ? 'face' : need(shape, 'shapeType').kind === 'edge' ? 'edge' : need(shape, 'shapeType').kind === 'wire' ? 'wire' : 'solid',
|
|
325
|
-
isNull: () => false,
|
|
326
|
-
iterShapes: (shape) => { need(shape, 'iterShapes'); return []; },
|
|
327
|
-
surfaceCenterOfMass: (shape) => { const b = need(shape, 'surfaceCenterOfMass').bbox; return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 }; },
|
|
328
|
-
locate: (shape) => alloc({ kind: need(shape, 'locate').kind, bbox: { ...need(shape, 'locate').bbox }, tag: `locate(#${shape})` }),
|
|
329
|
-
copyShape: (shape) => alloc({ kind: need(shape, 'copyShape').kind, bbox: { ...need(shape, 'copyShape').bbox }, tag: `copy(#${shape})` }),
|
|
330
|
-
downcast: (shape) => alloc({ kind: need(shape, 'downcast').kind, bbox: { ...need(shape, 'downcast').bbox }, tag: `downcast(#${shape})` }),
|
|
366
|
+
// ── L1 补齐方法(mock 验证载体——查询类给简单实现,其余明确缺失暴露) ──
|
|
331
367
|
dispose: () => undefined,
|
|
332
368
|
composeTransform: () => unsupported('composeTransform'),
|
|
333
|
-
buildExtrusionLaw: () => unsupported('buildExtrusionLaw'),
|
|
334
|
-
buildEdgeOnSurface: () => unsupported('buildEdgeOnSurface'),
|
|
335
|
-
healFace: () => unsupported('healFace'),
|
|
336
|
-
healWire: () => unsupported('healWire'),
|
|
337
|
-
fixSelfIntersection: () => unsupported('fixSelfIntersection'),
|
|
338
|
-
hullFromPoints: () => unsupported('hullFromPoints'),
|
|
339
|
-
loftAdvanced: () => unsupported('loftAdvanced'),
|
|
340
369
|
makeEllipsoid: () => unsupported('makeEllipsoid'),
|
|
341
|
-
makeFaceOnSurface: () => unsupported('makeFaceOnSurface'),
|
|
342
370
|
makeTorus: () => unsupported('makeTorus'),
|
|
343
371
|
makeVertex: (x, y, z) => alloc({ kind: 'edge', bbox: { xmin: x, ymin: y, zmin: z, xmax: x, ymax: y, zmax: z }, tag: `vertex(${x},${y},${z})` }),
|
|
344
|
-
makeWireFromMixed: (items) => alloc({ kind: 'wire', bbox: items.length > 0 ? { ...need(items[0], 'makeWireFromMixed').bbox } : bboxOf('wire', [0, 0, 0]), tag: `mixedWire(${items.length})` }),
|
|
345
372
|
mirror: (shape) => alloc({ kind: need(shape, 'mirror').kind, bbox: { ...need(shape, 'mirror').bbox }, tag: `mirror(#${shape})` }),
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
simplePipe: () => unsupported('simplePipe'),
|
|
350
|
-
simplify: () => unsupported('simplify'),
|
|
351
|
-
split: () => unsupported('split'),
|
|
352
|
-
sweepPipeShell: () => unsupported('sweepPipeShell'),
|
|
353
|
-
generalTransformNonOrthogonal: () => unsupported('generalTransformNonOrthogonal'),
|
|
354
|
-
generalTransformWithHistory: () => unsupported('generalTransformWithHistory'),
|
|
355
|
-
applyComposedTransformWithHistory: () => unsupported('applyComposedTransformWithHistory'),
|
|
373
|
+
surfaceCenterOfMass: (shape) => { const b = need(shape, 'surfaceCenterOfMass').bbox; return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 }; },
|
|
374
|
+
locate: (shape) => alloc({ kind: need(shape, 'locate').kind, bbox: { ...need(shape, 'locate').bbox }, tag: `locate(#${shape})` }),
|
|
375
|
+
copyShape: (shape) => alloc({ kind: need(shape, 'copyShape').kind, bbox: { ...need(shape, 'copyShape').bbox }, tag: `copy(#${shape})` }),
|
|
356
376
|
};
|
|
357
377
|
return primitives;
|
|
358
378
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brep-mock.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brep-mock.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * engine/adapters/memory — 内存模拟 BREP 引擎(第二引擎,引擎切换验证用)\n *\n *\n * 目的:证明「引擎可切换」——不是生产内核,是注册表机制的验证载体。\n * 与 occt 适配器(adapters/occt.ts)同构注册;同一段 faijs 代码在\n * occt / memory 两个引擎下都能执行(构造 → 变换 → 布尔 → 三角化 → 导出),\n * 通过 mock STEP 文本标记区分当前引擎。\n *\n * 实现形态:句柄为自增 number;每条形状记录 { kind, bbox, tag }。\n * 只实现引擎切换测试所需的方法面(原语/变换/布尔/网格化/导出),\n * 其余方法抛「not implemented」——缺失即暴露,绝不伪造(§7.5 语义)。\n */\n\nimport { registerBrepEngine, type BrepEngine } from '../registry'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepUvBounds,\n BrepXcafDocument,\n} from '../types'\nimport type { BrepEngineApi, AssertSatisfiesBrepEngineApi } from '../primitives'\n\n/** brep-mock engine registration id. */\nexport const BREP_MOCK_ENGINE_ID = 'brep_mock'\n\n/** Internal shape record (the \"solid\" of an in-memory mock BREP). */\ninterface MemShape {\n kind: 'box' | 'sphere' | 'cylinder' | 'cone' | 'edge' | 'wire' | 'face' | 'solid' | 'compound'\n /** 轴对齐包围盒(近似真实几何,供 getBoundingBox / 导出用)。 */\n bbox: BrepBoundingBox\n /** 人类可读描述(导出标记用)。 */\n tag: string\n}\n\nfunction bboxOf(kind: MemShape['kind'], size: [number, number, number]): BrepBoundingBox {\n const [x, y, z] = size\n return { xmin: -x / 2, ymin: -y / 2, zmin: -z / 2, xmax: x / 2, ymax: y / 2, zmax: z / 2 }\n}\n\n/** 1×1×1 单位盒三角化(8 顶点 / 12 三角形;memory 引擎的 meshShape 输出)。 */\nconst UNIT_BOX_POSITIONS = new Float32Array([\n -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5,\n -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5,\n])\nconst UNIT_BOX_INDICES = new Uint32Array([\n 0, 2, 1, 0, 3, 2, 4, 5, 6, 4, 6, 7, 0, 1, 5, 0, 5, 4,\n 1, 2, 6, 1, 6, 5, 2, 3, 7, 2, 7, 6, 3, 0, 4, 3, 4, 7,\n])\n\nfunction unitBoxMesh(): BrepMeshResult {\n return {\n positions: new Float32Array(UNIT_BOX_POSITIONS),\n normals: new Float32Array(24), // 占位法线(切换测试不校验法线)\n indices: new Uint32Array(UNIT_BOX_INDICES),\n vertexCount: 8,\n triangleCount: 12,\n }\n}\n\n/**\n * Build an in-memory mock BREP engine (a BrepEngineApi subset).\n * @returns the mock in-memory BREP engine API.\n */\nexport function createBrepMockApi(): BrepEngineApi {\n const shapes = new Map<number, MemShape>()\n let nextHandle = 1\n\n const alloc = (shape: MemShape): BrepHandle => {\n const h = nextHandle as BrepHandle\n nextHandle += 1\n shapes.set(h, shape)\n return h\n }\n\n const need = (h: BrepHandle, method: string): MemShape => {\n const s = shapes.get(h)\n if (!s) throw new Error(`[brep-mock-engine] ${method}: unknown handle ${h}`)\n return s\n }\n\n const unsupported = (method: string): never => {\n throw new Error(`[brep-mock-engine] ${method}() not implemented — engine-switch test only`)\n }\n\n /** 布尔合并 bbox(fuse/cut/common 的近似包围盒)。 */\n const mergeBbox = (a: BrepBoundingBox, b: BrepBoundingBox): BrepBoundingBox => ({\n xmin: Math.min(a.xmin, b.xmin),\n ymin: Math.min(a.ymin, b.ymin),\n zmin: Math.min(a.zmin, b.zmin),\n xmax: Math.max(a.xmax, b.xmax),\n ymax: Math.max(a.ymax, b.ymax),\n zmax: Math.max(a.zmax, b.zmax),\n })\n\n const mockXcafDocument = (): BrepXcafDocument => ({\n addShape: () => undefined,\n exportSTEP: () => mockStepExport(),\n close: () => undefined,\n })\n\n const mockStepExport = (): string =>\n 'brep-mock-engine STEP (mock)\\n' +\n '// Not real STEP — marker of the in-memory mock BREP engine, for engine-switch tests only.\\n' +\n 'FILE_DESCRIPTION((\"brep-mock-engine\"), \"2;1\");'\n\n const primitive = (\n kind: MemShape['kind'],\n size: [number, number, number],\n tag: string,\n ): BrepHandle => alloc({ kind, bbox: bboxOf(kind, size), tag })\n\n const primitives: BrepEngineApi = {\n // ── 生命周期 ──\n release: () => undefined,\n\n // ── 实体图元 ──\n makeBox: (dx, dy, dz) => primitive('box', [dx, dy, dz], `box ${dx}x${dy}x${dz}`),\n makeBoxFromCorners: (c1, c2) => primitive('box',\n [Math.abs(c2.x - c1.x), Math.abs(c2.y - c1.y), Math.abs(c2.z - c1.z)],\n `box (${c1.x},${c1.y},${c1.z})→(${c2.x},${c2.y},${c2.z})`),\n makeCylinder: (radius, height) => primitive('cylinder', [radius * 2, radius * 2, height], `cylinder r=${radius} h=${height}`),\n makeSphere: (radius) => primitive('sphere', [radius * 2, radius * 2, radius * 2], `sphere r=${radius}`),\n makeCone: (r1, r2, height) => primitive('cone', [Math.max(r1, r2) * 2, Math.max(r1, r2) * 2, height], `cone r1=${r1} r2=${r2} h=${height}`),\n makeRectangle: (width, height) => primitive('face', [width, height, 0], `rectangle ${width}x${height}`),\n\n // ── 造型运算 ──\n extrude: (shape, dx, dy, dz) => {\n const s = need(shape, 'extrude')\n return alloc({ kind: 'solid', bbox: { ...s.bbox, xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz }, tag: `extrude(${s.tag})` })\n },\n loft: () => unsupported('loft'),\n\n // ── 倒角与圆角(mock:只重打标签/复制,不做真几何;引擎切换测试覆盖签名面) ──\n chamfer: (solid, edges, distance) => {\n const s = need(solid, 'chamfer')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamfer(${s.tag},d=${distance},e=${edges.length})` })\n },\n chamferDistAngle: (solid, edges, distance, angleDeg) => {\n const s = need(solid, 'chamferDistAngle')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamferDA(${s.tag},d=${distance},a=${angleDeg},e=${edges.length})` })\n },\n fillet: (solid, edges, radius) => {\n const s = need(solid, 'fillet')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `fillet(${s.tag},r=${radius},e=${edges.length})` })\n },\n filletVariable: (solid, edge, startRadius, endRadius) => {\n const s = need(solid, 'filletVariable')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `filletVar(${s.tag},r=${startRadius}-${endRadius},e=1)` })\n },\n filletWithHistory: (solid, edges, radius, _hashes, _upper) => {\n const s = need(solid, 'filletWithHistory')\n const result = alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `filletWH(${s.tag},r=${radius},e=${edges.length})` })\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n chamferWithHistory: (solid, edges, distance, _hashes, _upper) => {\n const s = need(solid, 'chamferWithHistory')\n const result = alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamferWH(${s.tag},d=${distance},e=${edges.length})` })\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n\n // ── 布尔与分割 ──\n fuse: (a, b) => {\n const sa = need(a, 'fuse')\n const sb = need(b, 'fuse')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `fuse(${sa.tag},${sb.tag})` })\n },\n cut: (a, b) => {\n const sa = need(a, 'cut')\n return alloc({ kind: 'solid', bbox: { ...sa.bbox }, tag: `cut(${sa.tag},#${b})` })\n },\n common: (a, b) => {\n const sa = need(a, 'common')\n const sb = need(b, 'common')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `common(${sa.tag},${sb.tag})` })\n },\n intersect: (a, b) => {\n const sa = need(a, 'intersect')\n const sb = need(b, 'intersect')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `intersect(${sa.tag},${sb.tag})` })\n },\n section: () => unsupported('section'),\n fuseAll: (shapesIn) => {\n let bbox: BrepBoundingBox | null = null\n let tag = 'fuseAll('\n for (const s of shapesIn) {\n const rec = need(s, 'fuseAll')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n tag += `${rec.tag},`\n }\n return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` })\n },\n\n // ── 变换 ──\n translate: (shape, dx, dy, dz) => {\n const s = need(shape, 'translate')\n return alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin + dx, ymin: s.bbox.ymin + dy, zmin: s.bbox.zmin + dz,\n xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz,\n },\n tag: `translate(${s.tag},${dx},${dy},${dz})`,\n })\n },\n scale: (shape, _center, factor) => {\n const s = need(shape, 'scale')\n return alloc({ kind: 'solid', bbox: {\n xmin: s.bbox.xmin * factor, ymin: s.bbox.ymin * factor, zmin: s.bbox.zmin * factor,\n xmax: s.bbox.xmax * factor, ymax: s.bbox.ymax * factor, zmax: s.bbox.zmax * factor,\n }, tag: `scale(${s.tag},${factor})` })\n },\n transform: (shape, _matrix) => {\n const s = need(shape, 'transform')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `transform(${s.tag})` })\n },\n located: (shape, _matrix) => {\n const s = need(shape, 'located')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `located(${s.tag})` })\n },\n generalTransform: (shape, _matrix) => {\n const s = need(shape, 'generalTransform')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `generalTransform(${s.tag})` })\n },\n copy: (shape) => {\n const s = need(shape, 'copy')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `copy(${s.tag})` })\n },\n\n // ── 阵列(Phase 2 接口新增;mock 只重打标签/复制,不做真几何) ──\n linearPattern: (shape, direction, spacing, count) => {\n const s = need(shape, 'linearPattern')\n const list: BrepHandle[] = []\n for (let i = 0; i < count; i++) {\n list.push(alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin + direction.x * spacing * i, ymin: s.bbox.ymin + direction.y * spacing * i, zmin: s.bbox.zmin + direction.z * spacing * i,\n xmax: s.bbox.xmax + direction.x * spacing * i, ymax: s.bbox.ymax + direction.y * spacing * i, zmax: s.bbox.zmax + direction.z * spacing * i,\n },\n tag: `linearPattern(${s.tag},${i})`,\n }))\n }\n return list\n },\n circularPattern: (shape, _center, _axis, _angleStep, _count) => {\n const s = need(shape, 'circularPattern')\n return [alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `circularPattern(${s.tag})` })]\n },\n gridPattern: (shape, directionX, directionY, spacingX, spacingY, countX, countY) => {\n const s = need(shape, 'gridPattern')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `gridPattern(${s.tag},${countX}x${countY})` })\n },\n\n // ── 曲线构造 ──\n makeLineEdge: (start, end) => alloc({ kind: 'edge',\n bbox: {\n xmin: Math.min(start.x, end.x), ymin: Math.min(start.y, end.y), zmin: Math.min(start.z, end.z),\n xmax: Math.max(start.x, end.x), ymax: Math.max(start.y, end.y), zmax: Math.max(start.z, end.z),\n },\n tag: `line(${start.x},${start.y},${start.z})→(${end.x},${end.y},${end.z})` }),\n makeArcEdge: (start, mid, end) => {\n const xs = [start.x, mid.x, end.x]\n const ys = [start.y, mid.y, end.y]\n const zs = [start.z, mid.z, end.z]\n return alloc({ kind: 'edge', bbox: {\n xmin: Math.min(...xs), ymin: Math.min(...ys), zmin: Math.min(...zs),\n xmax: Math.max(...xs), ymax: Math.max(...ys), zmax: Math.max(...zs),\n }, tag: `arc` })\n },\n makeBezierEdge: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'bezier' }),\n\n // ── 拓扑构造 ──\n makeWire: (edges) => alloc({ kind: 'wire', bbox: edges.length > 0 ? { ...need(edges[0], 'makeWire').bbox } : bboxOf('wire', [0, 0, 0]), tag: `wire(${edges.length})` }),\n makeFace: (wire) => alloc({ kind: 'face', bbox: { ...need(wire, 'makeFace').bbox }, tag: `face(#${wire})` }),\n makeCompound: (parts) => {\n let bbox: BrepBoundingBox | null = null\n for (const p of parts) {\n const rec = need(p, 'makeCompound')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n }\n return alloc({ kind: 'compound', bbox: bbox ?? bboxOf('compound', [0, 0, 0]), tag: `compound(${parts.length})` })\n },\n sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),\n buildTriFace: () => alloc({ kind: 'face', bbox: bboxOf('face', [1, 1, 0]), tag: 'triFace' }),\n addHolesInFace: (face) => alloc({ kind: 'face', bbox: { ...need(face, 'addHolesInFace').bbox }, tag: `holedFace(#${face})` }),\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape: () => unitBoxMesh(),\n wireframe: (): BrepEdgeData => ({ points: new Float32Array(0), edgeGroups: new Int32Array(0), pointCount: 0, edgeCount: 0 }),\n\n // ── 拓扑查询 ──\n getSubShapes: () => [],\n queryBatch: (shapesIn) => shapesIn.map(() => ({ area: 0 })),\n subShapeHashes: () => [],\n hashCode: (shape) => shape % 2147483647,\n isSame: (a, b) => a === b,\n isSolid: () => true,\n shapeOrientation: () => 'forward',\n\n // ── 几何求值 ──\n curveType: () => 'line',\n curvePointAtParam: () => ({ x: 0, y: 0, z: 0 }),\n curveTangent: () => ({ x: 1, y: 0, z: 0 }),\n curveParameters: (): BrepCurveParameters => ({ first: 0, last: 1 }),\n curveIsClosed: () => false,\n curveLength: () => 0,\n surfaceType: () => 'plane',\n surfaceNormal: () => ({ x: 0, y: 0, z: 1 }),\n pointOnSurface: () => ({ x: 0, y: 0, z: 0 }),\n uvBounds: (): BrepUvBounds => ({ uMin: 0, uMax: 1, vMin: 0, vMax: 1 }),\n getSurfaceCenterOfMass: () => ({ x: 0, y: 0, z: 0 }),\n getFaceCylinderData: () => null,\n getNurbsCurveData: () => null,\n\n // ── 测量 ──\n getBoundingBox: (shape) => ({ ...need(shape, 'getBoundingBox').bbox }),\n getVolume: (shape) => {\n const b = need(shape, 'getVolume').bbox\n return (b.xmax - b.xmin) * (b.ymax - b.ymin) * (b.zmax - b.zmin)\n },\n getCenterOfMass: (shape) => {\n const b = need(shape, 'getCenterOfMass').bbox\n return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 }\n },\n\n // ── 校验与修复 ──\n isValid: () => true,\n unifySameDomain: (shape) => shape,\n healSolid: (shape) => shape,\n fixShape: (shape) => shape,\n fixFaceOrientations: (shape) => shape,\n removeDegenerateEdges: (shape) => shape,\n\n // ── IO ──\n importStep: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStep(mock)' }),\n exportStep: (shape) => {\n const s = need(shape, 'exportStep')\n return `brep-mock-engine STEP (mock)\\nshape #${shape}: ${s.tag}\\nFILE_DESCRIPTION((\"brep-mock-engine\"), \"2;1\");`\n },\n importStl: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStl(mock)' }),\n fromBREP: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'fromBREP(mock)' }),\n\n // ── 面演化(可选能力槽:memory 不支持 → 明确缺失暴露) ──\n cutWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.cut(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n fuseWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.fuse(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n intersectWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.intersect(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n // Phase 0.1 补齐的 7 个:memory 引擎不实现 —— 明确缺失暴露,不伪造(与 loft/section 同风格)。\n translateWithHistory: () => unsupported('translateWithHistory'),\n rotateWithHistory: () => unsupported('rotateWithHistory'),\n mirrorWithHistory: () => unsupported('mirrorWithHistory'),\n scaleWithHistory: () => unsupported('scaleWithHistory'),\n shellWithHistory: () => unsupported('shellWithHistory'),\n offsetWithHistory: () => unsupported('offsetWithHistory'),\n thickenWithHistory: () => unsupported('thickenWithHistory'),\n\n // ── XCAF 装配(mock 文档) ──\n createXCAFDocument: () => mockXcafDocument(),\n importXCAFFromSTEP: () => mockXcafDocument(),\n\n // ── Phase 3 登记方法:mock 验证载体——查询类给简单实现,其余明确缺失暴露 ──\n boundingBox: (shape) => ({ ...need(shape, 'boundingBox').bbox }),\n shapeType: (shape) => need(shape, 'shapeType').kind === 'face' ? 'face' : need(shape, 'shapeType').kind === 'edge' ? 'edge' : need(shape, 'shapeType').kind === 'wire' ? 'wire' : 'solid',\n isNull: () => false,\n iterShapes: (shape) => { need(shape, 'iterShapes'); return [] },\n surfaceCenterOfMass: (shape) => { const b = need(shape, 'surfaceCenterOfMass').bbox; return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 } },\n locate: (shape) => alloc({ kind: need(shape, 'locate').kind, bbox: { ...need(shape, 'locate').bbox }, tag: `locate(#${shape})` }),\n copyShape: (shape) => alloc({ kind: need(shape, 'copyShape').kind, bbox: { ...need(shape, 'copyShape').bbox }, tag: `copy(#${shape})` }),\n downcast: (shape) => alloc({ kind: need(shape, 'downcast').kind, bbox: { ...need(shape, 'downcast').bbox }, tag: `downcast(#${shape})` }),\n dispose: () => undefined,\n composeTransform: () => unsupported('composeTransform'),\n buildExtrusionLaw: () => unsupported('buildExtrusionLaw'),\n buildEdgeOnSurface: () => unsupported('buildEdgeOnSurface'),\n healFace: () => unsupported('healFace'),\n healWire: () => unsupported('healWire'),\n fixSelfIntersection: () => unsupported('fixSelfIntersection'),\n hullFromPoints: () => unsupported('hullFromPoints'),\n loftAdvanced: () => unsupported('loftAdvanced'),\n makeEllipsoid: () => unsupported('makeEllipsoid'),\n makeFaceOnSurface: () => unsupported('makeFaceOnSurface'),\n makeTorus: () => unsupported('makeTorus'),\n makeVertex: (x, y, z) => alloc({ kind: 'edge', bbox: { xmin: x, ymin: y, zmin: z, xmax: x, ymax: y, zmax: z }, tag: `vertex(${x},${y},${z})` }),\n makeWireFromMixed: (items) => alloc({ kind: 'wire', bbox: items.length > 0 ? { ...need(items[0], 'makeWireFromMixed').bbox } : bboxOf('wire', [0, 0, 0]), tag: `mixedWire(${items.length})` }),\n mirror: (shape) => alloc({ kind: need(shape, 'mirror').kind, bbox: { ...need(shape, 'mirror').bbox }, tag: `mirror(#${shape})` }),\n revolveVec: () => unsupported('revolveVec'),\n sew: () => unsupported('sew'),\n shell: () => unsupported('shell'),\n simplePipe: () => unsupported('simplePipe'),\n simplify: () => unsupported('simplify'),\n split: () => unsupported('split'),\n sweepPipeShell: () => unsupported('sweepPipeShell'),\n generalTransformNonOrthogonal: () => unsupported('generalTransformNonOrthogonal'),\n generalTransformWithHistory: () => unsupported('generalTransformWithHistory'),\n applyComposedTransformWithHistory: () => unsupported('applyComposedTransformWithHistory'),\n }\n return primitives\n}\n\n/** Assemble the brep-mock engine (sync registration — no async init). */\nexport function registerBrepMockEngine(): void {\n registerBrepEngine(BREP_MOCK_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREP_MOCK_ENGINE_ID,\n primitives: createBrepMockApi(),\n capabilities: {\n // brep-mock lacks evolution/heal/assembly — missing capabilities are exposed (§7.5).\n },\n }))\n}\n\n// §7.8 compile-time guard: createBrepMockApi's return type must satisfy BrepEngineApi.\ntype _AssertBrepMockApi = AssertSatisfiesBrepEngineApi<ReturnType<typeof createBrepMockApi>>\n"]}
|
|
1
|
+
{"version":3,"file":"brep-mock.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brep-mock.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * engine/adapters/memory — 内存模拟 BREP 引擎(第二引擎,引擎切换验证用)\n *\n *\n * 目的:证明「引擎可切换」——不是生产内核,是注册表机制的验证载体。\n * 与 occt 适配器(adapters/occt.ts)同构注册;同一段 faijs 代码在\n * occt / memory 两个引擎下都能执行(构造 → 变换 → 布尔 → 三角化 → 导出),\n * 通过 mock STEP 文本标记区分当前引擎。\n *\n * 实现形态:句柄为自增 number;每条形状记录 { kind, bbox, tag }。\n * 只实现引擎切换测试所需的方法面(原语/变换/布尔/网格化/导出),\n * 其余方法抛「not implemented」——缺失即暴露,绝不伪造(§7.5 语义)。\n */\n\nimport { registerBrepEngine, type BrepEngine } from '../registry'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepUvBounds,\n\n} from '../types'\nimport type { BrepEngineApi, AssertSatisfiesBrepEngineApi } from '../primitives'\n\n/** brep-mock engine registration id. */\nexport const BREP_MOCK_ENGINE_ID = 'brep_mock'\n\n/** Internal shape record (the \"solid\" of an in-memory mock BREP). */\ninterface MemShape {\n kind: 'box' | 'sphere' | 'cylinder' | 'cone' | 'edge' | 'wire' | 'face' | 'solid' | 'compound'\n /** 轴对齐包围盒(近似真实几何,供 getBoundingBox / 导出用)。 */\n bbox: BrepBoundingBox\n /** 人类可读描述(导出标记用)。 */\n tag: string\n}\n\nfunction bboxOf(kind: MemShape['kind'], size: [number, number, number]): BrepBoundingBox {\n const [x, y, z] = size\n return { xmin: -x / 2, ymin: -y / 2, zmin: -z / 2, xmax: x / 2, ymax: y / 2, zmax: z / 2 }\n}\n\n/** 1×1×1 单位盒三角化(8 顶点 / 12 三角形;memory 引擎的 meshShape 输出)。 */\nconst UNIT_BOX_POSITIONS = new Float32Array([\n -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5,\n -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5,\n])\nconst UNIT_BOX_INDICES = new Uint32Array([\n 0, 2, 1, 0, 3, 2, 4, 5, 6, 4, 6, 7, 0, 1, 5, 0, 5, 4,\n 1, 2, 6, 1, 6, 5, 2, 3, 7, 2, 7, 6, 3, 0, 4, 3, 4, 7,\n])\n\nfunction unitBoxMesh(): BrepMeshResult {\n return {\n positions: new Float32Array(UNIT_BOX_POSITIONS),\n normals: new Float32Array(24), // 占位法线(切换测试不校验法线)\n indices: new Uint32Array(UNIT_BOX_INDICES),\n vertexCount: 8,\n triangleCount: 12,\n }\n}\n\n/**\n * Build an in-memory mock BREP engine (a BrepEngineApi subset).\n * @returns the mock in-memory BREP engine API.\n */\nexport function createBrepMockApi(): BrepEngineApi {\n const shapes = new Map<number, MemShape>()\n let nextHandle = 1\n\n const alloc = (shape: MemShape): BrepHandle => {\n const h = nextHandle as BrepHandle\n nextHandle += 1\n shapes.set(h, shape)\n return h\n }\n\n const need = (h: BrepHandle, method: string): MemShape => {\n const s = shapes.get(h)\n if (!s) throw new Error(`[brep-mock-engine] ${method}: unknown handle ${h}`)\n return s\n }\n\n const unsupported = (method: string): never => {\n throw new Error(`[brep-mock-engine] ${method}() not implemented — engine-switch test only`)\n }\n\n /** 布尔合并 bbox(fuse/cut/common 的近似包围盒)。 */\n const mergeBbox = (a: BrepBoundingBox, b: BrepBoundingBox): BrepBoundingBox => ({\n xmin: Math.min(a.xmin, b.xmin),\n ymin: Math.min(a.ymin, b.ymin),\n zmin: Math.min(a.zmin, b.zmin),\n xmax: Math.max(a.xmax, b.xmax),\n ymax: Math.max(a.ymax, b.ymax),\n zmax: Math.max(a.zmax, b.zmax),\n })\n\n\n const primitive = (\n kind: MemShape['kind'],\n size: [number, number, number],\n tag: string,\n ): BrepHandle => alloc({ kind, bbox: bboxOf(kind, size), tag })\n\n const primitives: BrepEngineApi = {\n // ── 生命周期 ──\n release: () => undefined,\n\n // ── 实体图元 ──\n makeBox: (dx, dy, dz) => primitive('box', [dx, dy, dz], `box ${dx}x${dy}x${dz}`),\n makeBoxFromCorners: (c1, c2) => primitive('box',\n [Math.abs(c2.x - c1.x), Math.abs(c2.y - c1.y), Math.abs(c2.z - c1.z)],\n `box (${c1.x},${c1.y},${c1.z})→(${c2.x},${c2.y},${c2.z})`),\n makeCylinder: (radius, height) => primitive('cylinder', [radius * 2, radius * 2, height], `cylinder r=${radius} h=${height}`),\n makeSphere: (radius) => primitive('sphere', [radius * 2, radius * 2, radius * 2], `sphere r=${radius}`),\n makeCone: (r1, r2, height) => primitive('cone', [Math.max(r1, r2) * 2, Math.max(r1, r2) * 2, height], `cone r1=${r1} r2=${r2} h=${height}`),\n makeRectangle: (width, height) => primitive('face', [width, height, 0], `rectangle ${width}x${height}`),\n\n // ── 造型运算 ──\n extrude: (shape, dx, dy, dz) => {\n const s = need(shape, 'extrude')\n return alloc({ kind: 'solid', bbox: { ...s.bbox, xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz }, tag: `extrude(${s.tag})` })\n },\n revolveVec: (shape, _center, direction, angleDeg) => {\n // Mock approximation: revolve grows the bbox by sweeping the profile's\n // extent around the axis — approximate with the direction-scaled extent\n // (signature-level coverage only, like extrude above).\n const s = need(shape, 'revolveVec')\n const grow = (Math.abs(angleDeg) / 360) * Math.hypot(direction.x, direction.y, direction.z) * 2\n return alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin - grow, ymin: s.bbox.ymin - grow, zmin: s.bbox.zmin,\n xmax: s.bbox.xmax + grow, ymax: s.bbox.ymax + grow, zmax: s.bbox.zmax,\n },\n tag: `revolveVec(${s.tag},a=${angleDeg})`,\n })\n },\n sew: (shapesIn, _tolerance) => {\n // Mock approximation: merge the parts' bboxes into one shell-ish solid.\n let bbox: BrepBoundingBox | null = null\n let tag = 'sew('\n for (const h of shapesIn) {\n const rec = need(h, 'sew')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n tag += `${rec.tag},`\n }\n return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` })\n },\n sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),\n shell: (solid, _facesToRemove, thickness, _tolerance) => {\n // Mock approximation: shelling keeps the outer bbox and marks it hollow.\n const s = need(solid, 'shell')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `shell(${s.tag},t=${thickness})` })\n },\n hullFromPoints: (points, _tolerance) => {\n // Mock approximation: bbox of the point set as a solid.\n if (points.length === 0) return unsupported('hullFromPoints: empty point set')\n let xmin = Infinity, ymin = Infinity, zmin = Infinity\n let xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (const p of points) {\n xmin = Math.min(xmin, p.x); ymin = Math.min(ymin, p.y); zmin = Math.min(zmin, p.z)\n xmax = Math.max(xmax, p.x); ymax = Math.max(ymax, p.y); zmax = Math.max(zmax, p.z)\n }\n return alloc({ kind: 'solid', bbox: { xmin, ymin, zmin, xmax, ymax, zmax }, tag: `hullFromPoints(n=${points.length})` })\n },\n\n // ── 倒角与圆角(mock:只重打标签/复制,不做真几何;引擎切换测试覆盖签名面) ──\n chamfer: (solid, edges, distance) => {\n const s = need(solid, 'chamfer')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamfer(${s.tag},d=${distance},e=${edges.length})` })\n },\n chamferDistAngle: (solid, edges, distance, angleDeg) => {\n const s = need(solid, 'chamferDistAngle')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamferDA(${s.tag},d=${distance},a=${angleDeg},e=${edges.length})` })\n },\n fillet: (solid, edges, radius) => {\n const s = need(solid, 'fillet')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `fillet(${s.tag},r=${radius},e=${edges.length})` })\n },\n filletVariable: (solid, edge, startRadius, endRadius) => {\n const s = need(solid, 'filletVariable')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `filletVar(${s.tag},r=${startRadius}-${endRadius},e=1)` })\n },\n filletWithHistory: (solid, edges, radius, _hashes, _upper) => {\n const s = need(solid, 'filletWithHistory')\n const result = alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `filletWH(${s.tag},r=${radius},e=${edges.length})` })\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n\n // ── 布尔与分割 ──\n fuse: (a, b) => {\n const sa = need(a, 'fuse')\n const sb = need(b, 'fuse')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `fuse(${sa.tag},${sb.tag})` })\n },\n cut: (a, b) => {\n const sa = need(a, 'cut')\n return alloc({ kind: 'solid', bbox: { ...sa.bbox }, tag: `cut(${sa.tag},#${b})` })\n },\n common: (a, b) => {\n const sa = need(a, 'common')\n const sb = need(b, 'common')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `common(${sa.tag},${sb.tag})` })\n },\n intersect: (a, b) => {\n const sa = need(a, 'intersect')\n const sb = need(b, 'intersect')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `intersect(${sa.tag},${sb.tag})` })\n },\n sectionByPlane: (shape, _point, _normal) => {\n // Mock approximation: section curves keep the input bbox as a wire-ish record.\n const s = need(shape, 'sectionByPlane')\n return [alloc({ kind: 'wire', bbox: { ...s.bbox }, tag: `sectionByPlane(${s.tag})` })]\n },\n splitByPlane: (shape, _point, _normal) => {\n // Mock approximation: two halves share the input bbox (no real cut).\n const s = need(shape, 'splitByPlane')\n return {\n positive: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane+(${s.tag})` }),\n negative: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane-(${s.tag})` }),\n }\n },\n fuseAll: (shapesIn) => {\n let bbox: BrepBoundingBox | null = null\n let tag = 'fuseAll('\n for (const s of shapesIn) {\n const rec = need(s, 'fuseAll')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n tag += `${rec.tag},`\n }\n return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` })\n },\n\n // ── 变换 ──\n translate: (shape, dx, dy, dz) => {\n const s = need(shape, 'translate')\n return alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin + dx, ymin: s.bbox.ymin + dy, zmin: s.bbox.zmin + dz,\n xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz,\n },\n tag: `translate(${s.tag},${dx},${dy},${dz})`,\n })\n },\n scale: (shape, _center, factor) => {\n const s = need(shape, 'scale')\n return alloc({ kind: 'solid', bbox: {\n xmin: s.bbox.xmin * factor, ymin: s.bbox.ymin * factor, zmin: s.bbox.zmin * factor,\n xmax: s.bbox.xmax * factor, ymax: s.bbox.ymax * factor, zmax: s.bbox.zmax * factor,\n }, tag: `scale(${s.tag},${factor})` })\n },\n transform: (shape, _matrix) => {\n const s = need(shape, 'transform')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `transform(${s.tag})` })\n },\n located: (shape, _matrix) => {\n const s = need(shape, 'located')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `located(${s.tag})` })\n },\n generalTransform: (shape, _matrix) => {\n const s = need(shape, 'generalTransform')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `generalTransform(${s.tag})` })\n },\n copy: (shape) => {\n const s = need(shape, 'copy')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `copy(${s.tag})` })\n },\n\n // ── 阵列(Phase 2 接口新增;mock 只重打标签/复制,不做真几何) ──\n linearPattern: (shape, direction, spacing, count) => {\n const s = need(shape, 'linearPattern')\n const list: BrepHandle[] = []\n for (let i = 0; i < count; i++) {\n list.push(alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin + direction.x * spacing * i, ymin: s.bbox.ymin + direction.y * spacing * i, zmin: s.bbox.zmin + direction.z * spacing * i,\n xmax: s.bbox.xmax + direction.x * spacing * i, ymax: s.bbox.ymax + direction.y * spacing * i, zmax: s.bbox.zmax + direction.z * spacing * i,\n },\n tag: `linearPattern(${s.tag},${i})`,\n }))\n }\n return list\n },\n circularPattern: (shape, _center, _axis, _angleStep, _count) => {\n const s = need(shape, 'circularPattern')\n return [alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `circularPattern(${s.tag})` })]\n },\n gridPattern: (shape, directionX, directionY, spacingX, spacingY, countX, countY) => {\n const s = need(shape, 'gridPattern')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `gridPattern(${s.tag},${countX}x${countY})` })\n },\n\n // ── 曲线构造 ──\n makeLineEdge: (start, end) => alloc({ kind: 'edge',\n bbox: {\n xmin: Math.min(start.x, end.x), ymin: Math.min(start.y, end.y), zmin: Math.min(start.z, end.z),\n xmax: Math.max(start.x, end.x), ymax: Math.max(start.y, end.y), zmax: Math.max(start.z, end.z),\n },\n tag: `line(${start.x},${start.y},${start.z})→(${end.x},${end.y},${end.z})` }),\n makeArcEdge: (start, mid, end) => {\n const xs = [start.x, mid.x, end.x]\n const ys = [start.y, mid.y, end.y]\n const zs = [start.z, mid.z, end.z]\n return alloc({ kind: 'edge', bbox: {\n xmin: Math.min(...xs), ymin: Math.min(...ys), zmin: Math.min(...zs),\n xmax: Math.max(...xs), ymax: Math.max(...ys), zmax: Math.max(...zs),\n }, tag: `arc` })\n },\n makeBezierEdge: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'bezier' }),\n makeCircleEdge: (center, _normal, radius) => alloc({ kind: 'edge', bbox: bboxOf('edge', [radius * 2, radius * 2, 0]), tag: `circle(${center.x},${center.y},${center.z},r=${radius})` }),\n\n // ── 拓扑构造 ──\n makeWire: (edges) => alloc({ kind: 'wire', bbox: edges.length > 0 ? { ...need(edges[0], 'makeWire').bbox } : bboxOf('wire', [0, 0, 0]), tag: `wire(${edges.length})` }),\n makeFace: (wire) => alloc({ kind: 'face', bbox: { ...need(wire, 'makeFace').bbox }, tag: `face(#${wire})` }),\n makeCompound: (parts) => {\n let bbox: BrepBoundingBox | null = null\n for (const p of parts) {\n const rec = need(p, 'makeCompound')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n }\n return alloc({ kind: 'compound', bbox: bbox ?? bboxOf('compound', [0, 0, 0]), tag: `compound(${parts.length})` })\n },\n\n buildTriFace: () => alloc({ kind: 'face', bbox: bboxOf('face', [1, 1, 0]), tag: 'triFace' }),\n addHolesInFace: (face) => alloc({ kind: 'face', bbox: { ...need(face, 'addHolesInFace').bbox }, tag: `holedFace(#${face})` }),\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape: () => unitBoxMesh(),\n wireframe: (): BrepEdgeData => ({ points: new Float32Array(0), edgeGroups: new Int32Array(0), pointCount: 0, edgeCount: 0 }),\n\n // ── 拓扑查询 ──\n getSubShapes: () => [],\n subShapeHashes: () => [],\n hashCode: (shape) => shape % 2147483647,\n isSame: (a, b) => a === b,\n isSolid: () => true,\n shapeType: () => 'SOLID',\n shapeOrientation: () => 'forward',\n edgeToFaceMap: () => ({}),\n adjacentFaces: () => [],\n sharedEdges: () => [],\n\n // ── 几何求值 ──\n curveType: () => 'line',\n curvePointAtParam: () => ({ x: 0, y: 0, z: 0 }),\n curveTangent: () => ({ x: 1, y: 0, z: 0 }),\n curveParameters: (): BrepCurveParameters => ({ first: 0, last: 1 }),\n curveIsClosed: () => false,\n curveLength: () => 0,\n surfaceType: () => 'plane',\n surfaceNormal: () => ({ x: 0, y: 0, z: 1 }),\n pointOnSurface: () => ({ x: 0, y: 0, z: 0 }),\n uvBounds: (): BrepUvBounds => ({ uMin: 0, uMax: 1, vMin: 0, vMax: 1 }),\n getFaceCylinderData: () => null,\n getNurbsCurveData: () => null,\n interpolatePoints: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'interpolatePoints' }),\n defeature: (shape) => { need(shape, 'defeature'); return shape },\n draft: (shape) => { need(shape, 'draft'); return shape },\n removeHolesFromFace: (face) => { need(face, 'removeHolesFromFace'); return face },\n reverseShape: (shape) => { need(shape, 'reverseShape'); return shape },\n projectEdges: () => unsupported('projectEdges'),\n\n // ── 测量 ──\n getBoundingBox: (shape) => ({ ...need(shape, 'getBoundingBox').bbox }),\n getVolume: (shape) => {\n const b = need(shape, 'getVolume').bbox\n return (b.xmax - b.xmin) * (b.ymax - b.ymin) * (b.zmax - b.zmin)\n },\n getCenterOfMass: (shape) => {\n const b = need(shape, 'getCenterOfMass').bbox\n return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 }\n },\n getSurfaceArea: () => 0,\n getLength: () => 0,\n\n // ── 校验与修复 ──\n isValid: () => true,\n unifySameDomain: (shape) => shape,\n healSolid: (shape) => shape,\n fixShape: (shape) => shape,\n fixFaceOrientations: (shape) => shape,\n removeDegenerateEdges: (shape) => shape,\n\n // ── IO ──\n importStep: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStep(mock)' }),\n exportStep: (shape) => {\n const s = need(shape, 'exportStep')\n return `brep-mock-engine STEP (mock)\\nshape #${shape}: ${s.tag}\\nFILE_DESCRIPTION((\"brep-mock-engine\"), \"2;1\");`\n },\n importStl: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStl(mock)' }),\n fromBREP: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'fromBREP(mock)' }),\n\n // ── 面演化(L1 三员:mock 用底层布尔 + 空 evo) ──\n cutWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.cut(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n fuseWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.fuse(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n intersectWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.intersect(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n\n // ── L1 补齐方法(mock 验证载体——查询类给简单实现,其余明确缺失暴露) ──\n dispose: () => undefined,\n composeTransform: () => unsupported('composeTransform'),\n makeEllipsoid: () => unsupported('makeEllipsoid'),\n makeTorus: () => unsupported('makeTorus'),\n makeVertex: (x, y, z) => alloc({ kind: 'edge', bbox: { xmin: x, ymin: y, zmin: z, xmax: x, ymax: y, zmax: z }, tag: `vertex(${x},${y},${z})` }),\n mirror: (shape) => alloc({ kind: need(shape, 'mirror').kind, bbox: { ...need(shape, 'mirror').bbox }, tag: `mirror(#${shape})` }),\n surfaceCenterOfMass: (shape) => { const b = need(shape, 'surfaceCenterOfMass').bbox; return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 } },\n locate: (shape) => alloc({ kind: need(shape, 'locate').kind, bbox: { ...need(shape, 'locate').bbox }, tag: `locate(#${shape})` }),\n copyShape: (shape) => alloc({ kind: need(shape, 'copyShape').kind, bbox: { ...need(shape, 'copyShape').bbox }, tag: `copy(#${shape})` }),\n }\n return primitives\n}\n\n/** Assemble the brep-mock engine (sync registration — no async init). */\nexport function registerBrepMockEngine(): void {\n registerBrepEngine(BREP_MOCK_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREP_MOCK_ENGINE_ID,\n primitives: createBrepMockApi(),\n capabilities: {\n // brep-mock lacks evolution/heal/assembly — missing capabilities are exposed (§7.5).\n },\n }))\n}\n\n// §7.8 compile-time guard: createBrepMockApi's return type must satisfy BrepEngineApi.\ntype _AssertBrepMockApi = AssertSatisfiesBrepEngineApi<ReturnType<typeof createBrepMockApi>>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brepkit.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"brepkit.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoE/D;AAED,wDAAwD;AACxD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhE"}
|
|
@@ -40,7 +40,13 @@ export async function registerBrepkitBrepEngine() {
|
|
|
40
40
|
'addHolesInFace',
|
|
41
41
|
// Phase 3:brepkitKernel 真实现映射(wasm getBoundingBox/getSurfaceCenterOfMass 导出)——
|
|
42
42
|
// 能力表可声明;其余 31 个 Phase 3 方法为 unsupported 桩 → 不声明(engine-switch-p3 断言)。
|
|
43
|
-
'
|
|
43
|
+
'getBoundingBox',
|
|
44
|
+
// Phase 4(narrowing D9):测量族全部接线(surfaceArea→getSurfaceArea、
|
|
45
|
+
// length/wireLength→getLength、volume、centerOfMass)——L1 中立名(D5)如实声明。
|
|
46
|
+
'getVolume',
|
|
47
|
+
'getSurfaceArea',
|
|
48
|
+
'getLength',
|
|
49
|
+
'getCenterOfMass',
|
|
44
50
|
'surfaceCenterOfMass',
|
|
45
51
|
'curveParameters',
|
|
46
52
|
'curvePointAtParam',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brepkit.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAA;AAExG,OAAO,EAAE,uBAAuB,EAA0B,MAAM,uCAAuC,CAAA;AAEvG,uBAAuB;AACvB,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAA;IAClD,IAAI,sBAAsB,CAAC,sBAAsB,CAAC;QAAE,OAAM;IAC1D,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,IAAyB,EAAE,CAAC,CAAC;QAC3E,EAAE,EAAE,sBAAsB;QAC1B,UAAU;QACV,YAAY,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,kCAAkC;YAClC,oEAAoE;YACpE,uDAAuD;YACvD,+DAA+D;YAC/D,wCAAwC;YACxC,SAAS,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;YACrE,OAAO,EAAE;gBACP,gBAAgB;gBAChB,+EAA+E;gBAC/E,uEAAuE;gBACvE,
|
|
1
|
+
{"version":3,"file":"brepkit.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAA;AAExG,OAAO,EAAE,uBAAuB,EAA0B,MAAM,uCAAuC,CAAA;AAEvG,uBAAuB;AACvB,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAA;IAClD,IAAI,sBAAsB,CAAC,sBAAsB,CAAC;QAAE,OAAM;IAC1D,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,IAAyB,EAAE,CAAC,CAAC;QAC3E,EAAE,EAAE,sBAAsB;QAC1B,UAAU;QACV,YAAY,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,kCAAkC;YAClC,oEAAoE;YACpE,uDAAuD;YACvD,+DAA+D;YAC/D,wCAAwC;YACxC,SAAS,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;YACrE,OAAO,EAAE;gBACP,gBAAgB;gBAChB,+EAA+E;gBAC/E,uEAAuE;gBACvE,gBAAgB;gBAChB,4DAA4D;gBAC5D,oEAAoE;gBACpE,WAAW;gBACX,gBAAgB;gBAChB,WAAW;gBACX,iBAAiB;gBACjB,qBAAqB;gBACrB,iBAAiB;gBACjB,mBAAmB;gBACnB,cAAc;gBACd,KAAK;gBACL,UAAU;gBACV,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,WAAW;gBACX,WAAW;gBACX,cAAc;gBACd,oDAAoD;gBACpD,2EAA2E;gBAC3E,0DAA0D;gBAC1D,eAAe;gBACf,WAAW;gBACX,YAAY;gBACZ,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,cAAc;gBACd,kEAAkE;gBAClE,eAAe;gBACf,iBAAiB;gBACjB,aAAa;gBACb,OAAO;gBACP,gBAAgB;gBAChB,eAAe;gBACf,aAAa;gBACb,WAAW;gBACX,UAAU;aACX;YACD,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,cAAc;SAClC;KACF,CAAC,CAAC,CAAA;AACL,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,aAAa,EAAE;QAAE,OAAM;IAC3B,MAAM,yBAAyB,EAAE,CAAA;AACnC,CAAC","sourcesContent":["/**\n * engine/adapters/brepkit — brepkit BREP 引擎适配器(对照 adapters/occt.ts 形态)\n *\n * 把 createBrepkitPrimitives 包装为 BrepEngine 注册进注册表。业务层只经注册表取\n * 引擎,不直接 import brepkit 初始化函数——引擎本体可整体替换(换适配器即换引擎)。\n *\n * 小程序装配顺序(§6.1):Worker 启动时先 setBrepkitWasmInitFn + 本函数注册,\n * ensureOcctDefaultEngine 的动态 import('occt-wasm') 永不触发。\n */\n\nimport { registerBrepEngine, isBrepEngineRegistered, hasBrepEngine, type BrepEngine } from '../registry'\nimport type { AssertSatisfiesBrepEngineApi } from '../primitives'\nimport { createBrepkitPrimitives, type BrepkitPrimitives } from '../../../brepkit-kernel/brepkitKernel'\n\n/** brepkit 引擎注册 id。 */\nexport const BREPKIT_BREP_ENGINE_ID = 'brepkit'\n\n/**\n * 装配 brepkit BREP 引擎(宿主启动时调用一次,幂等)。\n *\n * 预初始化 createBrepkitPrimitives():wasm 装载完成后立即注册——注册返回后\n * provider 直接返回就绪实例。幂等:已注册则跳过。\n *\n * 能力表(设计文档 §5.2 v1 建议值,随单测逐项校正):\n * evolution 仅覆盖 fuse/cut/fillet(chamferWithHistory 未提供,诚实报错);\n * meshLift/assembly/advSurface 均为 false,命中即静态报错,禁止伪造。\n */\nexport async function registerBrepkitBrepEngine(): Promise<void> {\n const primitives = await createBrepkitPrimitives()\n if (isBrepEngineRegistered(BREPKIT_BREP_ENGINE_ID)) return\n registerBrepEngine(BREPKIT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREPKIT_BREP_ENGINE_ID,\n primitives,\n capabilities: {\n exact: true,\n // 面演化:逐核函数如实声明(Phase 0.2,不是族级布尔)。\n // brepkit 只实现 fillet/cut/fuse 三个 *WithHistory,其余(chamfer/intersect/\n // translate/rotate/mirror/scale/shell/offset/thicken)在\n // brepkit-kernel/brepkitKernel.ts:224-537 一律 unsupported(...)。\n // 声明里少写一项 = 让该 op 静默通过静态判定后死在运行时(红线违规)。\n evolution: ['fuseWithHistory', 'cutWithHistory', 'filletWithHistory'],\n methods: [\n 'addHolesInFace',\n // Phase 3:brepkitKernel 真实现映射(wasm getBoundingBox/getSurfaceCenterOfMass 导出)——\n // 能力表可声明;其余 31 个 Phase 3 方法为 unsupported 桩 → 不声明(engine-switch-p3 断言)。\n 'getBoundingBox',\n // Phase 4(narrowing D9):测量族全部接线(surfaceArea→getSurfaceArea、\n // length/wireLength→getLength、volume、centerOfMass)——L1 中立名(D5)如实声明。\n 'getVolume',\n 'getSurfaceArea',\n 'getLength',\n 'getCenterOfMass',\n 'surfaceCenterOfMass',\n 'curveParameters',\n 'curvePointAtParam',\n 'curveTangent',\n 'cut',\n 'fixShape',\n 'fuse',\n 'fuseAll',\n 'hashCode',\n 'healSolid',\n 'intersect',\n 'makeCylinder',\n // Phase 3:brepkitKernel 真实现接线 5 个(wasm 导出同/可映射语义)——\n // makeEllipsoid/makeTorus/makeVertex/mirror/shell;extrude/section/split 语义\n // 不匹配(wasm 平面式)→ 保持 unsupported 不声明(engine-switch-p3 断言)。\n 'makeEllipsoid',\n 'makeTorus',\n 'makeVertex',\n 'mirror',\n 'shell',\n 'makeFace',\n 'makeLineEdge',\n // Phase 2:brepkit wasm 已导出 pattern 三方法并已接线(brepkitKernel.ts 阵列族)。\n 'linearPattern',\n 'circularPattern',\n 'gridPattern',\n 'scale',\n 'sewAndSolidify',\n 'surfaceNormal',\n 'surfaceType',\n 'translate',\n 'uvBounds',\n ],\n heal: true,\n directEdit: true,\n advSurface: false,\n assembly: false,\n meshLift: false,\n exactMeasurement: true,\n brepExport: true,\n tessellationModel: 'extract-time',\n },\n }))\n}\n\n/** 已注册任何 BREP 引擎则 no-op;否则注册 brepkit(可作为宿主的显式缺省装配点)。 */\nexport async function ensureBrepkitDefaultEngine(): Promise<void> {\n if (hasBrepEngine()) return\n await registerBrepkitBrepEngine()\n}\n\n// §7.8 编译期完整性守卫:brepkit 原语集合必须满足 BrepEngineApi。\n// 实现缺方法或签名不兼容 → tsc 在此报错列出缺失(与 occt 适配器同守卫)。\ntype _AssertBrepkitApi = AssertSatisfiesBrepEngineApi<BrepkitPrimitives>\n"]}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* engine/adapters/occt — OCCT BREP 引擎适配器(槽位 1 的默认实现)
|
|
3
3
|
*
|
|
4
|
+
* 本文件是「occt 引擎实现」的注册入口:把 `createOcctPrimitives()`(occt-kernel/
|
|
5
|
+
* occt-primitives.ts,L1 契约 `BrepEngineApi` 的 occt 显式实现)注册进引擎注册表。
|
|
6
|
+
* 业务层(runtime/brep ops/stdlib)只经注册表取引擎,不直接 import occt 初始化
|
|
7
|
+
* 函数——引擎本体可整体替换(换一个适配器即换引擎)。
|
|
4
8
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
9
|
+
* Phase 3(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):
|
|
10
|
+
* 本文件不再做任何猴子补丁(旧版在 occt-wasm 单例上覆写 pattern 三方法与 33 个
|
|
11
|
+
* 登记方法——全部移入 `createOcctPrimitives` 的显式对象字面量)。occt-wasm 类型
|
|
12
|
+
* 耦合只存在于 occt-kernel/(A1 允许的唯一耦合区);本文件不接触 occt-wasm 类型。
|
|
8
13
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* 接触 occt-wasm 类型。
|
|
14
|
+
* 平台独有能力(loft 族、工具实体 section/split、L1 三员之外的 *WithHistory、
|
|
15
|
+
* XCAF 等)不在 L1 契约里——平台代码经原生面 `getOcctKernel()`(D3)访问。
|
|
12
16
|
*/
|
|
13
17
|
/** OCCT 引擎注册 id(默认 BREP 引擎;首个注册自动成为默认)。 */
|
|
14
18
|
export declare const OCCT_BREP_ENGINE_ID = "occt";
|
|
15
19
|
/**
|
|
16
|
-
* 装配 OCCT BREP
|
|
20
|
+
* 装配 OCCT BREP 引擎(宿主启动时调用一次,幂等)。
|
|
21
|
+
*
|
|
22
|
+
* 预初始化 `createOcctPrimitives()`(内部 await initOcctWasm):wasm 加载完成后
|
|
23
|
+
* 立即注册——保证注册返回后内核单例已就绪。幂等:已注册(含运行时默认装配或
|
|
24
|
+
* 宿主先行注册)则跳过注册,仅确保 wasm 预初始化。
|
|
17
25
|
*/
|
|
18
26
|
export declare function registerOcctBrepEngine(): Promise<void>;
|
|
19
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"occt.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"occt.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,SAAS,CAAA;AAuHzC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B5D;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D"}
|