@reekon-tools/boldr-cad 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -9
- package/dist/app/edit.d.ts +12 -1
- package/dist/app/edit.js +96 -11
- package/dist/app/edit.js.map +1 -1
- package/dist/app/state.d.ts +31 -4
- package/dist/app/state.js +31 -2
- package/dist/app/state.js.map +1 -1
- package/dist/data/memory.d.ts +5 -0
- package/dist/data/memory.js +2 -2
- package/dist/data/memory.js.map +1 -1
- package/dist/data/provider.d.ts +19 -7
- package/dist/data/sync.d.ts +7 -2
- package/dist/data/sync.js +115 -64
- package/dist/data/sync.js.map +1 -1
- package/dist/editor/actions.d.ts +1 -2
- package/dist/editor/actions.js +391 -113
- package/dist/editor/actions.js.map +1 -1
- package/dist/editor/confirm.d.ts +23 -0
- package/dist/editor/confirm.js +35 -0
- package/dist/editor/confirm.js.map +1 -0
- package/dist/editor/elevation.d.ts +191 -90
- package/dist/editor/elevation.js +812 -616
- package/dist/editor/elevation.js.map +1 -1
- package/dist/editor/face.d.ts +73 -0
- package/dist/editor/face.js +269 -0
- package/dist/editor/face.js.map +1 -0
- package/dist/editor/files.d.ts +6 -0
- package/dist/editor/files.js +50 -4
- package/dist/editor/files.js.map +1 -1
- package/dist/editor/gestures.d.ts +18 -3
- package/dist/editor/gestures.js +145 -30
- package/dist/editor/gestures.js.map +1 -1
- package/dist/editor/keypad.d.ts +19 -4
- package/dist/editor/keypad.js +39 -9
- package/dist/editor/keypad.js.map +1 -1
- package/dist/editor/keys.js +36 -4
- package/dist/editor/keys.js.map +1 -1
- package/dist/editor/laser.d.ts +20 -4
- package/dist/editor/laser.js +104 -21
- package/dist/editor/laser.js.map +1 -1
- package/dist/editor/linkActions.d.ts +49 -0
- package/dist/editor/linkActions.js +210 -0
- package/dist/editor/linkActions.js.map +1 -0
- package/dist/editor/linkFollow.d.ts +2 -0
- package/dist/editor/linkFollow.js +53 -0
- package/dist/editor/linkFollow.js.map +1 -0
- package/dist/editor/linkWrite.d.ts +13 -0
- package/dist/editor/linkWrite.js +84 -0
- package/dist/editor/linkWrite.js.map +1 -0
- package/dist/editor/links.d.ts +84 -0
- package/dist/editor/links.js +130 -0
- package/dist/editor/links.js.map +1 -0
- package/dist/editor/markup.d.ts +29 -3
- package/dist/editor/markup.js +95 -10
- package/dist/editor/markup.js.map +1 -1
- package/dist/editor/mode.d.ts +40 -2
- package/dist/editor/mode.js +71 -4
- package/dist/editor/mode.js.map +1 -1
- package/dist/editor/ports.d.ts +36 -6
- package/dist/editor/ports.js +10 -1
- package/dist/editor/ports.js.map +1 -1
- package/dist/editor/project.d.ts +38 -6
- package/dist/editor/project.js +167 -27
- package/dist/editor/project.js.map +1 -1
- package/dist/editor/selection.d.ts +10 -0
- package/dist/editor/selection.js +62 -8
- package/dist/editor/selection.js.map +1 -1
- package/dist/editor/status.js +3 -0
- package/dist/editor/status.js.map +1 -1
- package/dist/editor/tooltips.d.ts +5 -0
- package/dist/editor/tooltips.js +48 -0
- package/dist/editor/tooltips.js.map +1 -0
- package/dist/editor/view3d.d.ts +17 -0
- package/dist/editor/view3d.js +135 -0
- package/dist/editor/view3d.js.map +1 -0
- package/dist/editor/view3dState.d.ts +39 -0
- package/dist/editor/view3dState.js +44 -0
- package/dist/editor/view3dState.js.map +1 -0
- package/dist/export/dxf.js +1 -1
- package/dist/export/dxf.js.map +1 -1
- package/dist/export/pdf.js +17 -12
- package/dist/export/pdf.js.map +1 -1
- package/dist/export/plan.d.ts +23 -6
- package/dist/export/plan.js +127 -44
- package/dist/export/plan.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/model/constraints.js +15 -4
- package/dist/model/constraints.js.map +1 -1
- package/dist/model/demo.js +3 -3
- package/dist/model/demo.js.map +1 -1
- package/dist/model/elevation.d.ts +6 -9
- package/dist/model/elevation.js +5 -13
- package/dist/model/elevation.js.map +1 -1
- package/dist/model/faces.d.ts +58 -0
- package/dist/model/faces.js +197 -0
- package/dist/model/faces.js.map +1 -0
- package/dist/model/facesolve.d.ts +72 -0
- package/dist/model/facesolve.js +369 -0
- package/dist/model/facesolve.js.map +1 -0
- package/dist/model/history.d.ts +3 -2
- package/dist/model/history.js +17 -11
- package/dist/model/history.js.map +1 -1
- package/dist/model/images.d.ts +18 -0
- package/dist/model/images.js +26 -0
- package/dist/model/images.js.map +1 -0
- package/dist/model/links.d.ts +46 -0
- package/dist/model/links.js +73 -0
- package/dist/model/links.js.map +1 -0
- package/dist/model/markup.d.ts +46 -0
- package/dist/model/markup.js +71 -0
- package/dist/model/markup.js.map +1 -0
- package/dist/model/measurement.d.ts +11 -0
- package/dist/model/measurement.js +24 -0
- package/dist/model/measurement.js.map +1 -0
- package/dist/model/openings.d.ts +4 -0
- package/dist/model/openings.js +4 -0
- package/dist/model/openings.js.map +1 -1
- package/dist/model/planGeom.d.ts +72 -2
- package/dist/model/planGeom.js +184 -10
- package/dist/model/planGeom.js.map +1 -1
- package/dist/model/project.js +3 -2
- package/dist/model/project.js.map +1 -1
- package/dist/model/projectfile.js +2 -1
- package/dist/model/projectfile.js.map +1 -1
- package/dist/model/rooms.js +2 -2
- package/dist/model/rooms.js.map +1 -1
- package/dist/model/settings.d.ts +6 -0
- package/dist/model/settings.js +2 -2
- package/dist/model/settings.js.map +1 -1
- package/dist/model/sketch.d.ts +14 -0
- package/dist/model/sketch.js +143 -24
- package/dist/model/sketch.js.map +1 -1
- package/dist/model/smooth.d.ts +6 -0
- package/dist/model/smooth.js +52 -0
- package/dist/model/smooth.js.map +1 -0
- package/dist/model/store.d.ts +12 -0
- package/dist/model/store.js +35 -3
- package/dist/model/store.js.map +1 -1
- package/dist/model/types.d.ts +173 -8
- package/dist/model/wallfaces.d.ts +32 -0
- package/dist/model/wallfaces.js +133 -20
- package/dist/model/wallfaces.js.map +1 -1
- package/dist/model/wallshape.d.ts +15 -0
- package/dist/model/wallshape.js +89 -0
- package/dist/model/wallshape.js.map +1 -0
- package/dist/react/BottomBar.d.ts +9 -5
- package/dist/react/BottomBar.js +213 -24
- package/dist/react/BottomBar.js.map +1 -1
- package/dist/react/Buttons.d.ts +13 -2
- package/dist/react/Buttons.js +37 -5
- package/dist/react/Buttons.js.map +1 -1
- package/dist/react/CadEditor.d.ts +46 -3
- package/dist/react/CadEditor.js +77 -20
- package/dist/react/CadEditor.js.map +1 -1
- package/dist/react/ConfirmSheet.d.ts +4 -0
- package/dist/react/ConfirmSheet.js +31 -0
- package/dist/react/ConfirmSheet.js.map +1 -0
- package/dist/react/ConflictSheet.d.ts +2 -1
- package/dist/react/ConflictSheet.js +16 -8
- package/dist/react/ConflictSheet.js.map +1 -1
- package/dist/react/Drawer.d.ts +8 -2
- package/dist/react/Drawer.js +167 -38
- package/dist/react/Drawer.js.map +1 -1
- package/dist/react/Duck.d.ts +13 -0
- package/dist/react/Duck.js +45 -0
- package/dist/react/Duck.js.map +1 -0
- package/dist/react/Empty3D.d.ts +2 -0
- package/dist/react/Empty3D.js +39 -0
- package/dist/react/Empty3D.js.map +1 -0
- package/dist/react/FitScroll.d.ts +6 -0
- package/dist/react/FitScroll.js +14 -0
- package/dist/react/FitScroll.js.map +1 -0
- package/dist/react/Icon.native.d.ts +6 -0
- package/dist/react/Icon.native.js +4 -0
- package/dist/react/Icon.native.js.map +1 -1
- package/dist/react/Icon.web.d.ts +6 -0
- package/dist/react/Icon.web.js +4 -0
- package/dist/react/Icon.web.js.map +1 -1
- package/dist/react/KeypadSheet.d.ts +9 -2
- package/dist/react/KeypadSheet.js +174 -42
- package/dist/react/KeypadSheet.js.map +1 -1
- package/dist/react/LaserTray.js +8 -5
- package/dist/react/LaserTray.js.map +1 -1
- package/dist/react/MarkupPanel.d.ts +8 -0
- package/dist/react/MarkupPanel.js +67 -0
- package/dist/react/MarkupPanel.js.map +1 -0
- package/dist/react/PageThumb.native.d.ts +7 -2
- package/dist/react/PageThumb.native.js +19 -7
- package/dist/react/PageThumb.native.js.map +1 -1
- package/dist/react/PageThumb.web.d.ts +3 -2
- package/dist/react/PageThumb.web.js +4 -4
- package/dist/react/PageThumb.web.js.map +1 -1
- package/dist/react/PlanCanvas.native.d.ts +1 -1
- package/dist/react/PlanCanvas.native.js +134 -36
- package/dist/react/PlanCanvas.native.js.map +1 -1
- package/dist/react/PlanCanvas.web.js +16 -5
- package/dist/react/PlanCanvas.web.js.map +1 -1
- package/dist/react/Popovers.d.ts +12 -6
- package/dist/react/Popovers.js +53 -26
- package/dist/react/Popovers.js.map +1 -1
- package/dist/react/Rail.d.ts +24 -0
- package/dist/react/Rail.js +324 -34
- package/dist/react/Rail.js.map +1 -1
- package/dist/react/ShapeMenu.d.ts +7 -0
- package/dist/react/ShapeMenu.js +58 -0
- package/dist/react/ShapeMenu.js.map +1 -0
- package/dist/react/Sheet.d.ts +14 -4
- package/dist/react/Sheet.js +54 -9
- package/dist/react/Sheet.js.map +1 -1
- package/dist/react/Slider.d.ts +18 -0
- package/dist/react/Slider.js +27 -0
- package/dist/react/Slider.js.map +1 -0
- package/dist/react/Toast.js +14 -6
- package/dist/react/Toast.js.map +1 -1
- package/dist/react/ToolTip.d.ts +7 -0
- package/dist/react/ToolTip.js +43 -0
- package/dist/react/ToolTip.js.map +1 -0
- package/dist/react/TopBar.d.ts +6 -3
- package/dist/react/TopBar.js +48 -17
- package/dist/react/TopBar.js.map +1 -1
- package/dist/react/Tween.d.ts +7 -0
- package/dist/react/Tween.js +26 -0
- package/dist/react/Tween.js.map +1 -0
- package/dist/react/Tween.native.d.ts +6 -0
- package/dist/react/Tween.native.js +43 -0
- package/dist/react/Tween.native.js.map +1 -0
- package/dist/react/View3D.native.d.ts +4 -0
- package/dist/react/View3D.native.js +103 -0
- package/dist/react/View3D.native.js.map +1 -0
- package/dist/react/View3D.web.d.ts +4 -0
- package/dist/react/View3D.web.js +151 -0
- package/dist/react/View3D.web.js.map +1 -0
- package/dist/react/View3DHost.d.ts +143 -0
- package/dist/react/View3DHost.js +377 -0
- package/dist/react/View3DHost.js.map +1 -0
- package/dist/react/corners.d.ts +7 -0
- package/dist/react/corners.js +51 -0
- package/dist/react/corners.js.map +1 -0
- package/dist/react/easing.d.ts +15 -0
- package/dist/react/easing.js +10 -0
- package/dist/react/easing.js.map +1 -0
- package/dist/react/host.d.ts +7 -2
- package/dist/react/host.js +8 -3
- package/dist/react/host.js.map +1 -1
- package/dist/react/hostKeypad.d.ts +56 -0
- package/dist/react/hostKeypad.js +5 -0
- package/dist/react/hostKeypad.js.map +1 -0
- package/dist/react/motion.d.ts +77 -0
- package/dist/react/motion.js +173 -0
- package/dist/react/motion.js.map +1 -0
- package/dist/react/ports.js +90 -8
- package/dist/react/ports.js.map +1 -1
- package/dist/react/saving.d.ts +15 -0
- package/dist/react/saving.js +76 -0
- package/dist/react/saving.js.map +1 -0
- package/dist/react/store.d.ts +38 -1
- package/dist/react/store.js +31 -1
- package/dist/react/store.js.map +1 -1
- package/dist/react/theme.d.ts +10 -0
- package/dist/react/theme.js +8 -0
- package/dist/react/theme.js.map +1 -1
- package/dist/react/topRow.d.ts +22 -0
- package/dist/react/topRow.js +61 -0
- package/dist/react/topRow.js.map +1 -0
- package/dist/react/touch.d.ts +6 -0
- package/dist/react/touch.js +9 -0
- package/dist/react/touch.js.map +1 -0
- package/dist/render/ctx.d.ts +8 -0
- package/dist/render/draw.d.ts +33 -1
- package/dist/render/draw.js +593 -215
- package/dist/render/draw.js.map +1 -1
- package/dist/render/elevation.d.ts +65 -43
- package/dist/render/elevation.js +414 -140
- package/dist/render/elevation.js.map +1 -1
- package/dist/render/figmaIcons.d.ts +12 -0
- package/dist/render/figmaIcons.js +21 -0
- package/dist/render/figmaIcons.js.map +1 -0
- package/dist/render/hit.d.ts +22 -2
- package/dist/render/hit.js +168 -25
- package/dist/render/hit.js.map +1 -1
- package/dist/render/icons.js +69 -10
- package/dist/render/icons.js.map +1 -1
- package/dist/render/linkTile.d.ts +15 -0
- package/dist/render/linkTile.js +369 -0
- package/dist/render/linkTile.js.map +1 -0
- package/dist/render/markup.d.ts +11 -0
- package/dist/render/markup.js +112 -0
- package/dist/render/markup.js.map +1 -0
- package/dist/render/navigate.d.ts +88 -0
- package/dist/render/navigate.js +100 -0
- package/dist/render/navigate.js.map +1 -0
- package/dist/render/snap.d.ts +20 -1
- package/dist/render/snap.js +118 -25
- package/dist/render/snap.js.map +1 -1
- package/dist/render/squircle.d.ts +8 -0
- package/dist/render/squircle.js +71 -0
- package/dist/render/squircle.js.map +1 -0
- package/dist/render/view.d.ts +115 -2
- package/dist/render/view.js +244 -19
- package/dist/render/view.js.map +1 -1
- package/dist/skia/SkiaDrawCtx.d.ts +30 -2
- package/dist/skia/SkiaDrawCtx.js +198 -43
- package/dist/skia/SkiaDrawCtx.js.map +1 -1
- package/dist/skia/host.d.ts +18 -2
- package/dist/skia/host.js +46 -1
- package/dist/skia/host.js.map +1 -1
- package/dist/solver/equations.js +37 -2
- package/dist/solver/equations.js.map +1 -1
- package/dist/solver/gauss-newton.d.ts +17 -0
- package/dist/solver/gauss-newton.js +144 -36
- package/dist/solver/gauss-newton.js.map +1 -1
- package/dist/solver/linalg.d.ts +45 -2
- package/dist/solver/linalg.js +164 -10
- package/dist/solver/linalg.js.map +1 -1
- package/dist/solver/types.d.ts +5 -0
- package/dist/tools/annotate.d.ts +57 -1
- package/dist/tools/annotate.js +64 -43
- package/dist/tools/annotate.js.map +1 -1
- package/dist/tools/chamfer.d.ts +12 -0
- package/dist/tools/chamfer.js +114 -0
- package/dist/tools/chamfer.js.map +1 -0
- package/dist/tools/corner.d.ts +38 -0
- package/dist/tools/corner.js +99 -0
- package/dist/tools/corner.js.map +1 -0
- package/dist/tools/dim.d.ts +86 -9
- package/dist/tools/dim.js +581 -96
- package/dist/tools/dim.js.map +1 -1
- package/dist/tools/elevation.js +1 -1
- package/dist/tools/elevation.js.map +1 -1
- package/dist/tools/fillet.d.ts +9 -0
- package/dist/tools/fillet.js +86 -0
- package/dist/tools/fillet.js.map +1 -0
- package/dist/tools/freehand.d.ts +3 -2
- package/dist/tools/freehand.js +19 -12
- package/dist/tools/freehand.js.map +1 -1
- package/dist/tools/index.js +14 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/line.d.ts +8 -3
- package/dist/tools/line.js +66 -30
- package/dist/tools/line.js.map +1 -1
- package/dist/tools/modify.d.ts +13 -0
- package/dist/tools/modify.js +105 -25
- package/dist/tools/modify.js.map +1 -1
- package/dist/tools/openings.js +22 -15
- package/dist/tools/openings.js.map +1 -1
- package/dist/tools/registry.d.ts +8 -0
- package/dist/tools/registry.js +42 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/select.d.ts +77 -3
- package/dist/tools/select.js +560 -74
- package/dist/tools/select.js.map +1 -1
- package/dist/tools/shapes.d.ts +14 -0
- package/dist/tools/shapes.js +154 -75
- package/dist/tools/shapes.js.map +1 -1
- package/dist/units/format.d.ts +10 -2
- package/dist/units/format.js +18 -3
- package/dist/units/format.js.map +1 -1
- package/dist/view3d/build.d.ts +35 -0
- package/dist/view3d/build.js +630 -0
- package/dist/view3d/build.js.map +1 -0
- package/dist/view3d/camera.d.ts +60 -0
- package/dist/view3d/camera.js +84 -0
- package/dist/view3d/camera.js.map +1 -0
- package/dist/view3d/fatLines.d.ts +11 -0
- package/dist/view3d/fatLines.js +83 -0
- package/dist/view3d/fatLines.js.map +1 -0
- package/dist/view3d/lines.d.ts +17 -0
- package/dist/view3d/lines.js +271 -0
- package/dist/view3d/lines.js.map +1 -0
- package/dist/view3d/mesh.d.ts +51 -0
- package/dist/view3d/mesh.js +101 -0
- package/dist/view3d/mesh.js.map +1 -0
- package/dist/view3d/poly.d.ts +16 -0
- package/dist/view3d/poly.js +109 -0
- package/dist/view3d/poly.js.map +1 -0
- package/dist/view3d/viewer.d.ts +86 -0
- package/dist/view3d/viewer.js +350 -0
- package/dist/view3d/viewer.js.map +1 -0
- package/package.json +15 -2
- package/src/app/edit.ts +83 -12
- package/src/app/main.ts +11 -5
- package/src/app/state.ts +38 -5
- package/src/data/memory.ts +2 -2
- package/src/data/provider.ts +15 -7
- package/src/data/sync.ts +87 -50
- package/src/editor/actions.ts +292 -83
- package/src/editor/confirm.ts +58 -0
- package/src/editor/elevation.ts +698 -478
- package/src/editor/face.ts +227 -0
- package/src/editor/files.ts +40 -4
- package/src/editor/gestures.ts +147 -31
- package/src/editor/keypad.ts +43 -11
- package/src/editor/keys.ts +25 -5
- package/src/editor/laser.ts +98 -20
- package/src/editor/linkActions.ts +194 -0
- package/src/editor/linkFollow.ts +43 -0
- package/src/editor/linkWrite.ts +77 -0
- package/src/editor/links.ts +181 -0
- package/src/editor/markup.ts +92 -8
- package/src/editor/mode.ts +83 -7
- package/src/editor/ports.ts +37 -6
- package/src/editor/project.ts +155 -26
- package/src/editor/selection.ts +54 -8
- package/src/editor/status.ts +2 -0
- package/src/editor/tooltips.ts +47 -0
- package/src/editor/view3d.ts +119 -0
- package/src/editor/view3dState.ts +61 -0
- package/src/export/dxf.ts +1 -1
- package/src/export/pdf.ts +15 -7
- package/src/export/plan.ts +119 -35
- package/src/index.ts +5 -0
- package/src/input/keyboard.ts +2 -4
- package/src/model/constraints.ts +13 -4
- package/src/model/demo.ts +3 -3
- package/src/model/elevation.ts +6 -16
- package/src/model/faces.ts +153 -0
- package/src/model/facesolve.ts +322 -0
- package/src/model/history.ts +19 -11
- package/src/model/images.ts +35 -0
- package/src/model/links.ts +77 -0
- package/src/model/markup.ts +80 -0
- package/src/model/measurement.ts +26 -0
- package/src/model/openings.ts +6 -0
- package/src/model/planGeom.ts +174 -8
- package/src/model/project.ts +3 -2
- package/src/model/projectfile.ts +2 -1
- package/src/model/rooms.ts +1 -1
- package/src/model/settings.ts +8 -2
- package/src/model/sketch.ts +101 -14
- package/src/model/smooth.ts +51 -0
- package/src/model/store.ts +35 -4
- package/src/model/types.ts +170 -8
- package/src/model/wallfaces.ts +126 -17
- package/src/model/wallshape.ts +97 -0
- package/src/react/BottomBar.tsx +263 -46
- package/src/react/Buttons.tsx +50 -9
- package/src/react/CadEditor.tsx +133 -30
- package/src/react/ConfirmSheet.tsx +38 -0
- package/src/react/ConflictSheet.tsx +19 -12
- package/src/react/Drawer.tsx +213 -110
- package/src/react/Duck.tsx +50 -0
- package/src/react/Empty3D.tsx +32 -0
- package/src/react/FitScroll.tsx +19 -0
- package/src/react/Icon.native.tsx +5 -0
- package/src/react/Icon.web.tsx +5 -0
- package/src/react/KeypadSheet.tsx +253 -60
- package/src/react/LaserTray.tsx +12 -8
- package/src/react/MarkupPanel.tsx +150 -0
- package/src/react/PageThumb.native.tsx +18 -7
- package/src/react/PageThumb.web.tsx +4 -4
- package/src/react/PlanCanvas.native.tsx +151 -34
- package/src/react/PlanCanvas.web.tsx +15 -5
- package/src/react/Popovers.tsx +116 -51
- package/src/react/Rail.tsx +360 -27
- package/src/react/ShapeMenu.tsx +66 -0
- package/src/react/Sheet.tsx +56 -11
- package/src/react/Slider.tsx +48 -0
- package/src/react/Toast.tsx +16 -9
- package/src/react/ToolTip.tsx +49 -0
- package/src/react/TopBar.tsx +97 -39
- package/src/react/Tween.native.tsx +36 -0
- package/src/react/Tween.tsx +24 -0
- package/src/react/View3D.native.tsx +131 -0
- package/src/react/View3D.web.tsx +131 -0
- package/src/react/View3DHost.ts +367 -0
- package/src/react/corners.ts +52 -0
- package/src/react/easing.ts +14 -0
- package/src/react/host.ts +8 -3
- package/src/react/hostKeypad.ts +66 -0
- package/src/react/motion.tsx +239 -0
- package/src/react/ports.ts +78 -9
- package/src/react/saving.ts +80 -0
- package/src/react/store.ts +35 -3
- package/src/react/theme.ts +8 -0
- package/src/react/topRow.ts +71 -0
- package/src/react/touch.ts +10 -0
- package/src/render/ctx.ts +8 -0
- package/src/render/draw.ts +437 -175
- package/src/render/elevation.ts +349 -143
- package/src/render/figmaIcons.ts +22 -0
- package/src/render/hit.ts +140 -21
- package/src/render/icons.ts +69 -10
- package/src/render/linkTile.ts +297 -0
- package/src/render/markup.ts +91 -0
- package/src/render/navigate.ts +114 -0
- package/src/render/snap.ts +105 -22
- package/src/render/squircle.ts +73 -0
- package/src/render/view.ts +255 -19
- package/src/skia/SkiaDrawCtx.ts +163 -41
- package/src/skia/host.ts +46 -1
- package/src/solver/equations.ts +37 -2
- package/src/solver/gauss-newton.ts +125 -28
- package/src/solver/linalg.ts +141 -5
- package/src/solver/types.ts +5 -0
- package/src/styles.css +91 -42
- package/src/tools/annotate.ts +58 -29
- package/src/tools/chamfer.ts +103 -0
- package/src/tools/corner.ts +99 -0
- package/src/tools/dim.ts +524 -92
- package/src/tools/elevation.ts +1 -1
- package/src/tools/fillet.ts +82 -0
- package/src/tools/freehand.ts +20 -16
- package/src/tools/index.ts +17 -4
- package/src/tools/line.ts +59 -23
- package/src/tools/modify.ts +86 -24
- package/src/tools/openings.ts +8 -13
- package/src/tools/registry.ts +27 -2
- package/src/tools/select.ts +424 -75
- package/src/tools/shapes.ts +119 -58
- package/src/ui/ctx.ts +2 -1
- package/src/ui/domPorts.ts +23 -4
- package/src/ui/drawer.ts +6 -26
- package/src/ui/elevation.ts +10 -101
- package/src/ui/keypad.ts +8 -14
- package/src/ui/laser.ts +2 -2
- package/src/ui/menu.ts +63 -17
- package/src/ui/noteinput.ts +3 -3
- package/src/ui/opacity.ts +108 -0
- package/src/ui/palette.ts +67 -12
- package/src/ui/rail.ts +21 -7
- package/src/ui/topbar.ts +4 -14
- package/src/units/format.ts +18 -3
- package/src/view3d/build.ts +607 -0
- package/src/view3d/camera.ts +113 -0
- package/src/view3d/fatLines.ts +83 -0
- package/src/view3d/lines.ts +258 -0
- package/src/view3d/mesh.ts +111 -0
- package/src/view3d/poly.ts +104 -0
- package/src/view3d/viewer.ts +348 -0
- package/dist/react/ElevCanvas.native.d.ts +0 -3
- package/dist/react/ElevCanvas.native.js +0 -58
- package/dist/react/ElevCanvas.native.js.map +0 -1
- package/dist/react/ElevCanvas.web.d.ts +0 -4
- package/dist/react/ElevCanvas.web.js +0 -44
- package/dist/react/ElevCanvas.web.js.map +0 -1
- package/dist/react/ElevationSheet.d.ts +0 -2
- package/dist/react/ElevationSheet.js +0 -38
- package/dist/react/ElevationSheet.js.map +0 -1
- package/dist/render/elevationView.d.ts +0 -3
- package/dist/render/elevationView.js +0 -100
- package/dist/render/elevationView.js.map +0 -1
- package/src/react/ElevCanvas.native.tsx +0 -68
- package/src/react/ElevCanvas.web.tsx +0 -42
- package/src/react/ElevationSheet.tsx +0 -88
- package/src/render/elevationView.ts +0 -73
package/dist/react/TopBar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../../src/react/TopBar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../../src/react/TopBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ViewProps } from 'react-native';
|
|
2
|
+
import { type TweenTo } from './easing';
|
|
3
|
+
/** `to`: the box it eases to (set at once the first time); `duration` in ms. */
|
|
4
|
+
export declare function TweenView({ to, duration, style, ...rest }: ViewProps & {
|
|
5
|
+
to: TweenTo;
|
|
6
|
+
duration?: number;
|
|
7
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { Animated } from 'react-native';
|
|
4
|
+
import { DURATION, EASE } from './easing';
|
|
5
|
+
/*
|
|
6
|
+
A view whose size and place ease to each new value: what a transform can't do — a rail growing longer, the highlight
|
|
7
|
+
of a segmented control moving to a wider option. In a browser JavaScript draws every frame anyway; on a device the
|
|
8
|
+
same view runs on the UI thread (Tween.native.tsx), so it never waits for the JavaScript thread.
|
|
9
|
+
*/
|
|
10
|
+
const KEYS = ['left', 'top', 'width', 'height'];
|
|
11
|
+
/** `to`: the box it eases to (set at once the first time); `duration` in ms. */
|
|
12
|
+
export function TweenView({ to, duration = DURATION, style, ...rest }) {
|
|
13
|
+
const vals = useRef({}).current;
|
|
14
|
+
for (const k of KEYS)
|
|
15
|
+
if (to[k] != null && !vals[k])
|
|
16
|
+
vals[k] = new Animated.Value(to[k]);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
for (const k of KEYS) {
|
|
19
|
+
const v = vals[k];
|
|
20
|
+
if (v && to[k] != null)
|
|
21
|
+
Animated.timing(v, { toValue: to[k], duration, easing: EASE, useNativeDriver: false }).start();
|
|
22
|
+
}
|
|
23
|
+
}, [to.left, to.top, to.width, to.height]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
24
|
+
return _jsx(Animated.View, { ...rest, style: [style, vals] });
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=Tween.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tween.js","sourceRoot":"","sources":["../../src/react/Tween.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAkB,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAgB,MAAM,UAAU,CAAC;AAExD;;;;EAIE;AAEF,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAEzD,gFAAgF;AAChF,MAAM,UAAU,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAkD;IACnH,MAAM,IAAI,GAAG,MAAM,CAAyD,EAAE,CAAC,CAAC,OAAO,CAAC;IACxF,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;IAC1F,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1H,CAAC;IACH,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kDAAkD;IAC9F,OAAO,KAAC,QAAQ,CAAC,IAAI,OAAK,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,GAAI,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import Animated, { Easing, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
|
|
4
|
+
import { DURATION } from './easing';
|
|
5
|
+
/*
|
|
6
|
+
TweenView on a device (see Tween.tsx): its box eases on the UI thread with Reanimated, so a rail growing longer or a
|
|
7
|
+
segmented control's highlight sliding never waits for the JavaScript thread. Same curve as the rest of the chrome.
|
|
8
|
+
*/
|
|
9
|
+
const EASE_UI = Easing.bezier(0.2, 0, 0, 1);
|
|
10
|
+
export function TweenView({ to, duration = DURATION, style, ...rest }) {
|
|
11
|
+
const left = useSharedValue(to.left ?? 0), top = useSharedValue(to.top ?? 0);
|
|
12
|
+
const width = useSharedValue(to.width ?? 0), height = useSharedValue(to.height ?? 0);
|
|
13
|
+
const hasL = to.left != null, hasT = to.top != null, hasW = to.width != null, hasH = to.height != null;
|
|
14
|
+
// (each set at once the first time it's given, as in a browser — one given after the first render too)
|
|
15
|
+
const given = useRef({ left: hasL, top: hasT, width: hasW, height: hasH }).current;
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const cfg = { duration, easing: EASE_UI };
|
|
18
|
+
const go = (k, v, to) => {
|
|
19
|
+
if (to == null)
|
|
20
|
+
return;
|
|
21
|
+
v.value = given[k] ? withTiming(to, cfg) : to;
|
|
22
|
+
given[k] = true;
|
|
23
|
+
};
|
|
24
|
+
go('left', left, to.left);
|
|
25
|
+
go('top', top, to.top);
|
|
26
|
+
go('width', width, to.width);
|
|
27
|
+
go('height', height, to.height);
|
|
28
|
+
}, [to.left, to.top, to.width, to.height]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
29
|
+
const box = useAnimatedStyle(() => {
|
|
30
|
+
const o = {};
|
|
31
|
+
if (hasL)
|
|
32
|
+
o.left = left.value;
|
|
33
|
+
if (hasT)
|
|
34
|
+
o.top = top.value;
|
|
35
|
+
if (hasW)
|
|
36
|
+
o.width = width.value;
|
|
37
|
+
if (hasH)
|
|
38
|
+
o.height = height.value;
|
|
39
|
+
return o;
|
|
40
|
+
});
|
|
41
|
+
return _jsx(Animated.View, { ...rest, style: [style, box] });
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=Tween.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tween.native.js","sourceRoot":"","sources":["../../src/react/Tween.native.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { PixelRatio, StyleSheet, View } from 'react-native';
|
|
4
|
+
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
5
|
+
import { toast } from '../editor/ports';
|
|
6
|
+
import { view3dKey } from '../editor/view3d';
|
|
7
|
+
import { rendererOn, sizeOn } from '../view3d/viewer';
|
|
8
|
+
import { useEditorKey } from './store';
|
|
9
|
+
import { View3DHost } from './View3DHost';
|
|
10
|
+
const { GLView } = require('expo-gl');
|
|
11
|
+
export function View3D({ theme, active = true }) {
|
|
12
|
+
const host = useRef(null), renderer = useRef(null), context = useRef(null);
|
|
13
|
+
const size = useRef({ w: 0, h: 0 }), themeNow = useRef(theme), failed = useRef(false);
|
|
14
|
+
// (the GL view waits for this view's size: see above)
|
|
15
|
+
const [laidOut, setLaidOut] = useState(false);
|
|
16
|
+
themeNow.current = theme;
|
|
17
|
+
const key = useEditorKey(view3dKey);
|
|
18
|
+
const drop = () => { host.current?.dispose(); renderer.current?.dispose(); host.current = null; renderer.current = null; context.current = null; };
|
|
19
|
+
useEffect(() => drop, []);
|
|
20
|
+
// (hidden, it follows nothing: shown again, it catches up with the plan at once)
|
|
21
|
+
const activeNow = useRef(active);
|
|
22
|
+
activeNow.current = active;
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
host.current?.setVisible(active);
|
|
25
|
+
if (active)
|
|
26
|
+
host.current?.sync(theme);
|
|
27
|
+
}, [key, theme, active]);
|
|
28
|
+
/** What went wrong making or sizing the view, in a toast (once): see above. */
|
|
29
|
+
const fail = (e) => {
|
|
30
|
+
console.error('3D view:', e);
|
|
31
|
+
if (failed.current)
|
|
32
|
+
return;
|
|
33
|
+
failed.current = true;
|
|
34
|
+
toast('The 3D view couldn’t start (' + (e instanceof Error ? e.message : String(e)) + '). Leave the tab and open it again to retry.', { warn: true });
|
|
35
|
+
};
|
|
36
|
+
/** The drawing as big as the view (in points, at the screen's pixel density): again as the device turns. */
|
|
37
|
+
const fit = () => {
|
|
38
|
+
const { w, h } = size.current;
|
|
39
|
+
if (!renderer.current || !context.current || w < 1 || h < 1)
|
|
40
|
+
return;
|
|
41
|
+
try {
|
|
42
|
+
sizeOn(renderer.current, context.current, w, h, PixelRatio.get());
|
|
43
|
+
host.current?.resize(w, h);
|
|
44
|
+
host.current?.settle();
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
fail(e);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const onContextCreate = (gl) => {
|
|
51
|
+
drop();
|
|
52
|
+
try {
|
|
53
|
+
renderer.current = rendererOn(gl);
|
|
54
|
+
context.current = gl;
|
|
55
|
+
// (the GL view is made after this view's first layout: its size is known)
|
|
56
|
+
host.current = new View3DHost(renderer.current, themeNow.current, () => gl.endFrameEXP());
|
|
57
|
+
host.current.setVisible(activeNow.current);
|
|
58
|
+
fit();
|
|
59
|
+
host.current.sync(themeNow.current);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
drop();
|
|
63
|
+
fail(e);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const onLayout = (e) => {
|
|
67
|
+
const { width, height } = e.nativeEvent.layout;
|
|
68
|
+
size.current = { w: width, h: height };
|
|
69
|
+
if (width >= 1 && height >= 1)
|
|
70
|
+
setLaidOut(true);
|
|
71
|
+
fit();
|
|
72
|
+
};
|
|
73
|
+
const gesture = useMemo(() => {
|
|
74
|
+
// the chrome steps aside while either moves the camera: a pinch with its fingers spreading evenly needn't move
|
|
75
|
+
// their middle far enough to start the pan
|
|
76
|
+
let panning = false, pinching = false;
|
|
77
|
+
const moving = () => host.current?.moving(panning || pinching);
|
|
78
|
+
// one finger turns the model, two move it (and pinch to zoom, at the same time)
|
|
79
|
+
const pan = Gesture.Pan().runOnJS(true).minPointers(1).maxPointers(2).averageTouches(true)
|
|
80
|
+
.onStart(() => { panning = true; moving(); })
|
|
81
|
+
.onChange(e => { if (e.numberOfPointers >= 2)
|
|
82
|
+
host.current?.pan(e.changeX, e.changeY);
|
|
83
|
+
else
|
|
84
|
+
host.current?.orbit(e.changeX, e.changeY); })
|
|
85
|
+
.onFinalize(() => { panning = false; moving(); });
|
|
86
|
+
const pinch = Gesture.Pinch().runOnJS(true)
|
|
87
|
+
.onStart(() => { pinching = true; moving(); })
|
|
88
|
+
.onChange(e => { if (e.scaleChange > 0)
|
|
89
|
+
host.current?.zoom(1 / e.scaleChange, e.focalX, e.focalY); })
|
|
90
|
+
.onFinalize(() => { pinching = false; moving(); });
|
|
91
|
+
// a tap is told at once, and the host makes a second one soon after a double tap: a double-tap gesture would hold
|
|
92
|
+
// every single tap back until it failed (half a second)
|
|
93
|
+
const tap = Gesture.Tap().runOnJS(true).maxDuration(400).onEnd((e, ok) => { if (ok)
|
|
94
|
+
host.current?.tapAt(e.x, e.y); });
|
|
95
|
+
return Gesture.Race(Gesture.Simultaneous(pan, pinch), tap);
|
|
96
|
+
}, []);
|
|
97
|
+
return (_jsx(GestureDetector, { gesture: gesture, children: _jsx(View, { style: [s.fill, !active && s.away], pointerEvents: active ? 'auto' : 'none', "aria-hidden": !active, onLayout: onLayout, collapsable: false, testID: "view3d", accessibilityLabel: "3D view of the plan", children: laidOut && _jsx(GLView, { style: s.fill, onContextCreate: onContextCreate, msaaSamples: 4 }) }) }));
|
|
98
|
+
}
|
|
99
|
+
// (no zIndex: it's drawn after the plan and before the chrome, which stays on top. Spelt out: React Native 0.86
|
|
100
|
+
// dropped StyleSheet.absoluteFillObject, and with it undefined the view got no style — the screen's width, no height —
|
|
101
|
+
// so the 3D tab showed nothing over the plan.)
|
|
102
|
+
const s = StyleSheet.create({ fill: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }, away: { opacity: 0 } });
|
|
103
|
+
//# sourceMappingURL=View3D.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"View3D.native.js","sourceRoot":"","sources":["../../src/react/View3D.native.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { WebGLRenderer } from 'three';
|
|
4
|
+
import { toast } from '../editor/ports';
|
|
5
|
+
import { view3dKey } from '../editor/view3d';
|
|
6
|
+
import { useEditorKey } from './store';
|
|
7
|
+
import { View3DHost } from './View3DHost';
|
|
8
|
+
/*
|
|
9
|
+
The 3D tab in a browser: a WebGL <canvas> over the plan (which stays as it was underneath). A finger or the mouse
|
|
10
|
+
drags to turn the model; two fingers, the right or middle button, or Shift and a drag move it; a pinch, the wheel or
|
|
11
|
+
a trackpad's pinch zooms toward the pointer. A tap picks what's under it; a double tap frames everything.
|
|
12
|
+
|
|
13
|
+
Left, the tab's canvas is kept (hidden, untouchable, drawing nothing: `active`), so coming back is at once — made
|
|
14
|
+
again each time, its WebGL context, renderer and shaders took a pause every time the tab opened. CadEditor lets it
|
|
15
|
+
go after a while away.
|
|
16
|
+
*/
|
|
17
|
+
/** Moving less than this (points) between press and release is a tap (a double tap is the host's: View3DHost.tapAt). */
|
|
18
|
+
const TAP_SLOP = 6;
|
|
19
|
+
export function View3D({ theme, active = true }) {
|
|
20
|
+
const ref = useRef(null), host = useRef(null), activeNow = useRef(active);
|
|
21
|
+
activeNow.current = active;
|
|
22
|
+
const key = useEditorKey(view3dKey);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const cv = ref.current;
|
|
25
|
+
let renderer;
|
|
26
|
+
try {
|
|
27
|
+
renderer = new WebGLRenderer({ canvas: cv, antialias: true, powerPreference: 'high-performance' });
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
toast('3D needs WebGL, which this browser has turned off.', { warn: true });
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
renderer.setPixelRatio(Math.min(2, window.devicePixelRatio || 1));
|
|
34
|
+
const h = new View3DHost(renderer, theme);
|
|
35
|
+
host.current = h;
|
|
36
|
+
h.setVisible(activeNow.current);
|
|
37
|
+
// (only for a new size: setting a canvas's size makes its drawing buffer again and clears it, the same size or not —
|
|
38
|
+
// and the observer reports the size just set as it starts)
|
|
39
|
+
let was = { w: -1, h: -1 };
|
|
40
|
+
const size = () => {
|
|
41
|
+
const w = cv.clientWidth, ht = cv.clientHeight;
|
|
42
|
+
if (w === was.w && ht === was.h)
|
|
43
|
+
return;
|
|
44
|
+
was = { w, h: ht };
|
|
45
|
+
renderer.setSize(w, ht, false);
|
|
46
|
+
h.resize(w, ht);
|
|
47
|
+
};
|
|
48
|
+
size();
|
|
49
|
+
h.sync(theme);
|
|
50
|
+
const ro = new ResizeObserver(size);
|
|
51
|
+
ro.observe(cv);
|
|
52
|
+
// the pointers down, and what they're doing
|
|
53
|
+
const ac = new AbortController(), on = { signal: ac.signal };
|
|
54
|
+
const pts = new Map();
|
|
55
|
+
let mode = 'none', moved = false, downAt = 0, start = { x: 0, y: 0 };
|
|
56
|
+
let pinch = { d: 0, x: 0, y: 0 };
|
|
57
|
+
const at = (e) => { const r = cv.getBoundingClientRect(); return { x: e.clientX - r.left, y: e.clientY - r.top }; };
|
|
58
|
+
const two = () => {
|
|
59
|
+
const [a, b] = [...pts.values()];
|
|
60
|
+
return { d: Math.hypot(b.x - a.x, b.y - a.y), x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };
|
|
61
|
+
};
|
|
62
|
+
cv.addEventListener('pointerdown', e => {
|
|
63
|
+
cv.focus({ preventScroll: true });
|
|
64
|
+
try {
|
|
65
|
+
cv.setPointerCapture(e.pointerId);
|
|
66
|
+
}
|
|
67
|
+
catch { /* not capturable (synthetic) */ }
|
|
68
|
+
const p = at(e);
|
|
69
|
+
pts.set(e.pointerId, p);
|
|
70
|
+
if (pts.size === 1) {
|
|
71
|
+
mode = e.button === 1 || e.button === 2 || e.shiftKey ? 'pan' : 'orbit';
|
|
72
|
+
moved = false;
|
|
73
|
+
downAt = performance.now();
|
|
74
|
+
start = p;
|
|
75
|
+
}
|
|
76
|
+
else if (pts.size === 2) {
|
|
77
|
+
// (two fingers never tap)
|
|
78
|
+
mode = 'pinch';
|
|
79
|
+
moved = true;
|
|
80
|
+
pinch = two();
|
|
81
|
+
h.moving(true);
|
|
82
|
+
}
|
|
83
|
+
}, on);
|
|
84
|
+
cv.addEventListener('pointermove', e => {
|
|
85
|
+
const prev = pts.get(e.pointerId);
|
|
86
|
+
if (!prev)
|
|
87
|
+
return;
|
|
88
|
+
const p = at(e);
|
|
89
|
+
pts.set(e.pointerId, p);
|
|
90
|
+
if (mode === 'pinch' && pts.size >= 2) {
|
|
91
|
+
const now = two();
|
|
92
|
+
if (pinch.d > 0 && now.d > 0)
|
|
93
|
+
h.zoom(pinch.d / now.d, now.x, now.y);
|
|
94
|
+
h.pan(now.x - pinch.x, now.y - pinch.y);
|
|
95
|
+
pinch = now;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (mode !== 'orbit' && mode !== 'pan')
|
|
99
|
+
return;
|
|
100
|
+
if (!moved) {
|
|
101
|
+
if (Math.hypot(p.x - start.x, p.y - start.y) < TAP_SLOP)
|
|
102
|
+
return;
|
|
103
|
+
moved = true;
|
|
104
|
+
h.moving(true);
|
|
105
|
+
}
|
|
106
|
+
if (mode === 'orbit')
|
|
107
|
+
h.orbit(p.x - prev.x, p.y - prev.y);
|
|
108
|
+
else
|
|
109
|
+
h.pan(p.x - prev.x, p.y - prev.y);
|
|
110
|
+
}, on);
|
|
111
|
+
const up = (e, cancel) => {
|
|
112
|
+
if (!pts.has(e.pointerId))
|
|
113
|
+
return;
|
|
114
|
+
pts.delete(e.pointerId);
|
|
115
|
+
if (!cancel && (mode === 'orbit' || mode === 'pan') && !moved && performance.now() - downAt < 600) {
|
|
116
|
+
const p = at(e);
|
|
117
|
+
h.tapAt(p.x, p.y);
|
|
118
|
+
}
|
|
119
|
+
if (pts.size === 1 && mode === 'pinch') {
|
|
120
|
+
mode = 'orbit';
|
|
121
|
+
return;
|
|
122
|
+
} // (one finger left: it turns the model)
|
|
123
|
+
if (!pts.size) {
|
|
124
|
+
if (moved)
|
|
125
|
+
h.moving(false);
|
|
126
|
+
mode = 'none';
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
cv.addEventListener('pointerup', e => up(e, false), on);
|
|
130
|
+
cv.addEventListener('pointercancel', e => up(e, true), on);
|
|
131
|
+
cv.addEventListener('contextmenu', e => e.preventDefault(), on);
|
|
132
|
+
// (a browser can take the GL context back — Safari does in the background — and three.js makes it again: draw then)
|
|
133
|
+
cv.addEventListener('webglcontextrestored', () => h.redraw(), on);
|
|
134
|
+
cv.addEventListener('wheel', e => {
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
const p = at(e), d = e.deltaY || e.deltaX, unit = e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? 400 : 1;
|
|
137
|
+
// a trackpad's pinch arrives as the wheel with Ctrl held, in smaller steps
|
|
138
|
+
h.zoom(Math.exp(d * unit * (e.ctrlKey ? 0.01 : 0.0015)), p.x, p.y);
|
|
139
|
+
}, { passive: false, signal: ac.signal });
|
|
140
|
+
return () => { ac.abort(); ro.disconnect(); h.dispose(); renderer.dispose(); host.current = null; };
|
|
141
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
142
|
+
// (hidden, it follows nothing: shown again, it catches up with the plan at once)
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
host.current?.setVisible(active);
|
|
145
|
+
if (active)
|
|
146
|
+
host.current?.sync(theme);
|
|
147
|
+
}, [key, theme, active]);
|
|
148
|
+
return (_jsx("canvas", { ref: ref, tabIndex: -1, "aria-label": "3D view of the plan", "aria-hidden": !active, "data-testid": "view3d", id: "cv3d", style: { position: 'absolute', inset: 0, width: '100%', height: '100%', touchAction: 'none', display: 'block', outline: 'none',
|
|
149
|
+
visibility: active ? 'visible' : 'hidden', pointerEvents: active ? 'auto' : 'none' } }));
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=View3D.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"View3D.web.js","sourceRoot":"","sources":["../../src/react/View3D.web.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import type { WebGLRenderer } from 'three';
|
|
2
|
+
import { type Orbit } from '../view3d/camera';
|
|
3
|
+
import { type Theme3 } from '../view3d/viewer';
|
|
4
|
+
/** A second tap this soon after the first (ms), and this near it (points), is a double tap. */
|
|
5
|
+
export declare const DOUBLE_MS = 320, DOUBLE_NEAR = 24;
|
|
6
|
+
export declare class View3DHost {
|
|
7
|
+
private readonly present;
|
|
8
|
+
private readonly viewer;
|
|
9
|
+
/** the model with every wall at full height (what the camera frames), and the one showing (cut away or not) */
|
|
10
|
+
private full;
|
|
11
|
+
private shown;
|
|
12
|
+
private modelKey;
|
|
13
|
+
private cutKey;
|
|
14
|
+
private cmdSeq;
|
|
15
|
+
private theme;
|
|
16
|
+
private w;
|
|
17
|
+
private h;
|
|
18
|
+
private frame;
|
|
19
|
+
private failed;
|
|
20
|
+
/** cutaway models made for this model, by what they lower (the most recently shown last) */
|
|
21
|
+
private readonly cuts;
|
|
22
|
+
/** how long the last model took to make (ms) */
|
|
23
|
+
private buildMs;
|
|
24
|
+
/** a gesture is moving the camera; when it last moved */
|
|
25
|
+
private held;
|
|
26
|
+
private movedAt;
|
|
27
|
+
private rest;
|
|
28
|
+
/** the camera gliding to a view */
|
|
29
|
+
private glide;
|
|
30
|
+
/** frames still to draw, changed or not, since the GL view was made or resized (see settle) */
|
|
31
|
+
private settling;
|
|
32
|
+
/** on screen (the tab showing): hidden, it's kept as it is but draws nothing (see setVisible); and frames drawn */
|
|
33
|
+
private visible;
|
|
34
|
+
private frames;
|
|
35
|
+
private lastTap;
|
|
36
|
+
/** `present`: shows what was drawn, where the GL view needs telling (expo-gl's endFrameEXP). */
|
|
37
|
+
constructor(renderer: WebGLRenderer, theme: Theme3, present?: () => void);
|
|
38
|
+
private get aspect();
|
|
39
|
+
/**
|
|
40
|
+
* Where the model is framed: clear of the chrome over the view — the top bar (and the tabs under it, where they don't
|
|
41
|
+
* fit beside it: a phone, an upright tablet) and the bar along the bottom. (The 3D tab has no rail.)
|
|
42
|
+
*/
|
|
43
|
+
private win;
|
|
44
|
+
/** What the camera frames: everything at full height. */
|
|
45
|
+
private box;
|
|
46
|
+
/** Drawing went wrong: said once (a 3D view that stays empty says why), and logged in full. */
|
|
47
|
+
private fail;
|
|
48
|
+
/** The editor changed, or the theme: the model, a camera move asked for, what's tapped. */
|
|
49
|
+
sync(theme: Theme3): void;
|
|
50
|
+
private syncNow;
|
|
51
|
+
/** Where view `what` puts the camera, on the screen as it is now ('fit': everything, from where it looks now). */
|
|
52
|
+
private view;
|
|
53
|
+
/** The camera to view `what`: gliding there from where it is (straight there when motion is reduced). */
|
|
54
|
+
private glideTo;
|
|
55
|
+
/** The camera was moved by hand: a glide stops where it got to, and it's no longer at a view. */
|
|
56
|
+
private moved;
|
|
57
|
+
/** Where the walls in front are cut away from, as the camera is now (null: none are). */
|
|
58
|
+
private cut;
|
|
59
|
+
/**
|
|
60
|
+
* The model to show from here: another only when what's cut away changes — one made before if it's kept, or made
|
|
61
|
+
* now (or, if they're slow to make, once the camera rests).
|
|
62
|
+
*/
|
|
63
|
+
private showNow;
|
|
64
|
+
private requestDraw;
|
|
65
|
+
private draw;
|
|
66
|
+
/** The view's size on the screen, in points. A camera still at a view is framed again for the new shape. */
|
|
67
|
+
resize(w: number, h: number): void;
|
|
68
|
+
/**
|
|
69
|
+
* Draw the next few frames too, whether or not anything changes: a GL view just made or resized can let its first
|
|
70
|
+
* frames go while it makes its buffers (expo-gl), and this view draws only when something changes.
|
|
71
|
+
*/
|
|
72
|
+
settle(frames?: number): void;
|
|
73
|
+
/**
|
|
74
|
+
* The tab is showing, or not. Left, the view is kept as it is — its GL context, its compiled shaders, its model — so
|
|
75
|
+
* coming back draws at once, where making them all again was a pause each time the tab opened; meanwhile it draws
|
|
76
|
+
* nothing, and the tests and harness see no 3D view.
|
|
77
|
+
*/
|
|
78
|
+
setVisible(on: boolean): void;
|
|
79
|
+
/** Draw again (the GL context was lost and is back: what was on the GPU went with it, and goes up again as it draws). */
|
|
80
|
+
redraw(): void;
|
|
81
|
+
/** A drag (screen points): the model turns with it. */
|
|
82
|
+
orbit(dx: number, dy: number): void;
|
|
83
|
+
/** A two-finger (or right-button) drag: the model slides with it. */
|
|
84
|
+
pan(dx: number, dy: number): void;
|
|
85
|
+
/** Closer by `f` (under 1: in) toward screen point x, y. */
|
|
86
|
+
zoom(f: number, x: number, y: number): void;
|
|
87
|
+
/**
|
|
88
|
+
* A tap (screen points) — on either screen: what it landed on is picked at once (its sizes go in the bar; empty space
|
|
89
|
+
* lets go), and a second soon after and near it frames everything. Not waiting to see whether a second comes: a
|
|
90
|
+
* device's double-tap gesture held every single tap back half a second.
|
|
91
|
+
*/
|
|
92
|
+
tapAt(x: number, y: number): void;
|
|
93
|
+
/** What a tap at x, y landed on is picked (its sizes go in the bar); empty space lets go. */
|
|
94
|
+
private tap;
|
|
95
|
+
/** A double tap: everything in view again, from where it's looked at. */
|
|
96
|
+
private doubleTap;
|
|
97
|
+
/**
|
|
98
|
+
* A gesture started moving the camera, or ended: on a phone the chrome steps aside meanwhile, and a cutaway put off
|
|
99
|
+
* while it moved is made as it ends.
|
|
100
|
+
*/
|
|
101
|
+
moving(on: boolean): void;
|
|
102
|
+
dispose(): void;
|
|
103
|
+
/** For tests: what's showing, and where plan points land on the screen. */
|
|
104
|
+
debug(): {
|
|
105
|
+
parts: string[];
|
|
106
|
+
lowered: string[];
|
|
107
|
+
orbit: Orbit | null;
|
|
108
|
+
size: number[];
|
|
109
|
+
/** the last frame's draws and triangles */
|
|
110
|
+
drawn: {
|
|
111
|
+
calls: number;
|
|
112
|
+
triangles: number;
|
|
113
|
+
};
|
|
114
|
+
near: number;
|
|
115
|
+
far: number;
|
|
116
|
+
/** cutaway models kept; whether the camera is gliding to a view; frames drawn since it was made */
|
|
117
|
+
cutsKept: number;
|
|
118
|
+
gliding: boolean;
|
|
119
|
+
frames: number;
|
|
120
|
+
project: (x: number, y: number, z: number) => [number, number];
|
|
121
|
+
pickAt: (x: number, y: number) => import("../view3d/viewer").Hit3 | null;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** The 3D view showing now, for tests and the harness (null when the tab isn't). */
|
|
125
|
+
export declare const view3dDebug: () => {
|
|
126
|
+
parts: string[];
|
|
127
|
+
lowered: string[];
|
|
128
|
+
orbit: Orbit | null;
|
|
129
|
+
size: number[];
|
|
130
|
+
/** the last frame's draws and triangles */
|
|
131
|
+
drawn: {
|
|
132
|
+
calls: number;
|
|
133
|
+
triangles: number;
|
|
134
|
+
};
|
|
135
|
+
near: number;
|
|
136
|
+
far: number;
|
|
137
|
+
/** cutaway models kept; whether the camera is gliding to a view; frames drawn since it was made */
|
|
138
|
+
cutsKept: number;
|
|
139
|
+
gliding: boolean;
|
|
140
|
+
frames: number;
|
|
141
|
+
project: (x: number, y: number, z: number) => [number, number];
|
|
142
|
+
pickAt: (x: number, y: number) => import("../view3d/viewer").Hit3 | null;
|
|
143
|
+
} | null;
|