@toolpath/viewer 2.2.0 → 2.3.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.
@@ -1,5 +1,5 @@
1
- import { P as PartModel, a as PartMeshRefs } from '../normalize--FiXUhO4.js';
2
- export { E as EnginePart, b as EnginePartProps, M as MIN_KERNEL_VERSION, c as assertSupportedKernelVersion, n as normalizePartReport, s as smoothRegionNormals } from '../normalize--FiXUhO4.js';
1
+ import { P as PartModel, a as PartMeshRefs } from '../normalize-C4Wj4IGK.js';
2
+ export { E as EnginePart, b as EnginePartProps, M as MIN_KERNEL_VERSION, c as assertSupportedKernelVersion, n as normalizePartReport, s as smoothRegionNormals } from '../normalize-C4Wj4IGK.js';
3
3
  import { BufferGeometry } from 'three';
4
4
  import 'react';
5
5
 
@@ -12,7 +12,7 @@ import {
12
12
  parsePartGeometry,
13
13
  partMeshAssets,
14
14
  smoothRegionNormals
15
- } from "../chunk-WTTOUG4P.js";
15
+ } from "../chunk-N54FHMTG.js";
16
16
  export {
17
17
  EnginePart,
18
18
  MIN_KERNEL_VERSION,
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { P as PartModel, F as FeatureTag, d as PartPick, V as Vec3, R as RegionHighlight, e as ViewerTheme, S as SectionOptions, f as SectionState, g as PartModelRegion, T as TriangleRange, h as RegionIndex, i as PartModelFeature, j as FeatureType } from './normalize--FiXUhO4.js';
2
- export { A as AXES_PLANE_OFFSET, k as AXES_PLANE_SCALE, l as AxesPlane, B as BuildPickInput, C as CANDIDATE_WEIGHT, m as CAP_HATCH, D as DEFAULT_SECTION_NORMAL, o as DEFAULT_THEME, p as DIRECTION_COLORS, q as DISABLED_SECTION, E as EnginePart, r as FeatureHighlight, t as FocusOptions, H as HANDLE_PIXELS, u as HIGHLIGHT_COLORS, v as HIGHLIGHT_WEIGHT, w as HOVER_WEIGHT, x as HighlightLayers, K as KnownFeatureType, y as KnownShapeKind, N as NO_MODIFIERS, O as OUTLINE_SCALE, z as PICKED_SURFACE_LABEL, G as PREVIEW_SCALE, I as PartDisplay, J as PartMesh, L as PartMeshProps, a as PartMeshRefs, Q as PartObject, U as PickModifiers, W as PointerLocation, X as REGION_ATTRIBUTE, Y as RegionPaint, Z as SECTION_GIZMO_FRAME_SCALE, _ as SECTION_RENDER_ORDER, $ as SectionAnchor, a0 as SectionBounds, a1 as SectionPlacement, a2 as ShapeKind, a3 as SurfaceHit, a4 as applyHighlightLayers, a5 as axesPlanes, a6 as buildPick, a7 as buildRegionAttribute, a8 as buildRegionTexels, a9 as createPart, aa as directionColor, ab as dragPlane, ac as focusForPick, ad as hitUnderRay, n as normalizePartReport, ae as pickedStartDepth, af as resolveTheme, ag as sectionAnchor, ah as sectionBounds, ai as sectionConstant, aj as sectionDepth, ak as sectionDepthConstant, al as sectionDepthRange, am as sectionFromPick, an as sectionMeasurement, ao as sectionOffset, ap as sectionOptionsFromState, aq as sectionPlane, s as smoothRegionNormals, ar as surfaceUnderRay, as as themesEqual, at as viewDirection } from './normalize--FiXUhO4.js';
3
- import { BufferGeometry, Box3, CanvasTexture, Plane, Vector3, OrthographicCamera, PerspectiveCamera, Object3D, Matrix4, Vector2, Ray, ShaderMaterial, Texture, Color, MeshBasicMaterial, WebGLRenderTarget } from 'three';
1
+ import { P as PartModel, F as FeatureTag, d as PartPick, V as Vec3, R as RegionHighlight, e as ViewerTheme, S as SectionOptions, f as SectionState, g as ViewerCamera, h as ViewportSize, i as PartModelRegion, C as CameraLimits, j as ViewerView, k as Projection, T as TriangleRange, l as RegionIndex, m as PartModelFeature, o as FeatureType } from './normalize-C4Wj4IGK.js';
2
+ export { A as AXES_PLANE_OFFSET, p as AXES_PLANE_SCALE, q as AxesPlane, B as BuildPickInput, r as CAD_CAMERA_UP, t as CANDIDATE_WEIGHT, u as CAP_HATCH, D as DEFAULT_FIT_MARGIN, v as DEFAULT_SECTION_NORMAL, w as DEFAULT_THEME, x as DIRECTION_COLORS, y as DISABLED_SECTION, z as EXCLUDE_FROM_FRAME, E as EnginePart, G as FeatureHighlight, H as FocusOptions, I as HANDLE_PIXELS, J as HIGHLIGHT_COLORS, K as HIGHLIGHT_WEIGHT, L as HOVER_WEIGHT, N as HighlightLayers, O as KnownFeatureType, Q as KnownShapeKind, U as MAX_FRAME_RATIO, W as MIN_FRAME_RATIO, X as NO_MODIFIERS, Y as OUTLINE_SCALE, Z as PERSPECTIVE_FOV, _ as PICKED_SURFACE_LABEL, $ as PREVIEW_SCALE, a0 as PartDisplay, a1 as PartMesh, a2 as PartMeshProps, a as PartMeshRefs, a3 as PartObject, a4 as PickModifiers, a5 as PointerLocation, a6 as REGION_ATTRIBUTE, a7 as RegionPaint, a8 as SECTION_GIZMO_FRAME_SCALE, a9 as SECTION_RENDER_ORDER, aa as SceneBounds, ab as SectionAnchor, ac as SectionBounds, ad as SectionPlacement, ae as ShapeKind, af as SharpCorner, ag as SharpCornerOptions, ah as SurfaceCreases, ai as SurfaceHit, aj as adaptedUp, ak as applyHighlightLayers, al as applyProjection, am as aspectRatio, an as axesPlanes, ao as boundsFromBox, ap as buildPick, aq as buildRegionAttribute, ar as buildRegionTexels, as as cadViewDirections, at as cameraLimits, au as contentBounds, av as createPart, aw as currentViewDirection, ax as defaultBounds, ay as directionColor, az as dragPlane, aA as excludedFromFrame, aB as findSharpCorners, aC as fitDistance, aD as focusForPick, aE as hitUnderRay, n as normalizePartReport, aF as orthographicHalfHeight, aG as perspectiveFitDistance, aH as pickedStartDepth, aI as resolveTheme, aJ as screenLength, aK as sectionAnchor, aL as sectionBounds, aM as sectionConstant, aN as sectionDepth, aO as sectionDepthConstant, aP as sectionDepthRange, aQ as sectionFromPick, aR as sectionMeasurement, aS as sectionOffset, aT as sectionOptionsFromState, aU as sectionPlane, aV as sharpCornerPositions, s as smoothRegionNormals, aW as startPosition, aX as surfaceCreases, aY as surfaceUnderRay, aZ as targetBoundary, a_ as themesEqual, a$ as viewDirection } from './normalize-C4Wj4IGK.js';
3
+ import { BufferGeometry, Box3, CanvasTexture, Plane, Vector3, Matrix4, Vector2, Ray, ShaderMaterial, Texture, Color, MeshBasicMaterial, WebGLRenderTarget } from 'three';
4
4
  import * as react from 'react';
5
5
  import { ReactNode, PropsWithChildren, RefObject, CSSProperties } from 'react';
6
6
  import CameraControls from 'camera-controls';
@@ -91,6 +91,8 @@ interface ViewerToolbarControls {
91
91
  tools?: ViewerToolbarControl;
92
92
  directions?: ViewerToolbarControl;
93
93
  dfm?: ViewerToolbarControl;
94
+ /** The DFM rules' sharp corners, drawn on the part: see `sharpCorners` on `<PartMesh>`. */
95
+ sharpCorners?: ViewerToolbarControl;
94
96
  hover?: ViewerToolbarControl;
95
97
  focus?: ViewerToolbarControl;
96
98
  wireframe?: ViewerToolbarControl;
@@ -133,6 +135,7 @@ declare const ViewerToolbar: (({ className, children }: ViewerToolbarProps) => r
133
135
  ToolsButton: () => react.JSX.Element;
134
136
  DirectionsButton: () => react.JSX.Element;
135
137
  DfmButton: () => react.JSX.Element;
138
+ SharpCornersButton: () => react.JSX.Element;
136
139
  HoverButton: () => react.JSX.Element;
137
140
  FocusButton: () => react.JSX.Element;
138
141
  WireframeButton: () => react.JSX.Element;
@@ -534,207 +537,6 @@ interface SectionToolProps {
534
537
  */
535
538
  declare const SectionTool: ({ theme }: SectionToolProps) => react.JSX.Element | null;
536
539
 
537
- type Projection = 'orthographic' | 'perspective';
538
- type ViewerCamera = OrthographicCamera | PerspectiveCamera;
539
- interface ViewportSize {
540
- readonly width: number;
541
- readonly height: number;
542
- }
543
- /** Vertical field of view, in degrees, for the perspective camera. */
544
- declare const PERSPECTIVE_FOV = 30;
545
- /** Padding around the framed bounds, as a multiple of its radius. */
546
- declare const DEFAULT_FIT_MARGIN = 1.2;
547
- /** Marks scene furniture — grid, axes — that the camera should not frame. */
548
- declare const EXCLUDE_FROM_FRAME = "viewerExcludeFromFrame";
549
- /**
550
- * What the camera frames: a bounding *sphere*, not a box.
551
- *
552
- * A sphere makes framing rotation-invariant — the part stays fully visible from
553
- * every angle, and a resize never needs to know the current pose. Framing
554
- * per-axis box dimensions instead means recomputing the camera distance on
555
- * every resize, and still clipping on some orientations.
556
- */
557
- interface SceneBounds {
558
- readonly center: Vector3;
559
- readonly radius: number;
560
- }
561
- /**
562
- * Bounds for a scene with nothing in it. A viewer is mounted before it has a
563
- * part, and a camera with a zero-size frustum renders nothing at all.
564
- */
565
- declare function defaultBounds(): SceneBounds;
566
- /**
567
- * A container can be laid out at zero size, and a degenerate aspect ratio
568
- * produces a `NaN` projection matrix that never recovers. Fall back to square.
569
- */
570
- declare function aspectRatio(size: ViewportSize): number;
571
- /**
572
- * A world length that covers `pixels` on screen at `point`.
573
- *
574
- * Anything sized in world units is a thumbnail on a plate and a wall on an
575
- * insert; the whole reason a control is measured this way is that it is a
576
- * control rather than part of the model. The section handle and the orbit
577
- * target marker both size themselves with it, which is why it lives here with
578
- * the camera rather than beside either of them.
579
- *
580
- * The two projections answer differently on purpose. An orthographic frustum
581
- * covers the same world height wherever the point is, so distance does not
582
- * enter; a perspective one covers more the further away it looks, so it does.
583
- */
584
- declare function screenLength(camera: ViewerCamera, point: Vector3, viewport: ViewportSize, pixels: number): number;
585
- declare function boundsFromBox(box: Box3): SceneBounds;
586
- /**
587
- * The bounds of everything worth framing under `root`.
588
- *
589
- * Skips objects flagged with {@link EXCLUDE_FROM_FRAME} and their descendants:
590
- * a 100 mm grid around a 6 mm part would otherwise frame the grid, and the part
591
- * would be a speck.
592
- */
593
- declare function contentBounds(root: Object3D, into: Box3): SceneBounds;
594
- /**
595
- * Whether `object`, or anything between it and `root`, carries
596
- * {@link EXCLUDE_FROM_FRAME}. The flag is set on an overlay's outermost group
597
- * and means the whole subtree, so the walk goes up rather than reading the
598
- * object alone.
599
- */
600
- declare function excludedFromFrame(object: Object3D, root: Object3D): boolean;
601
- /**
602
- * The distance at which a sphere of `radius` fits inside a perspective frustum.
603
- * Uses the narrower of the two field-of-view angles, so a portrait viewport
604
- * frames on width and a landscape one on height.
605
- */
606
- declare function perspectiveFitDistance(fovDegrees: number, aspect: number, radius: number): number;
607
- /**
608
- * Half-height of an orthographic frustum that fits a sphere of `radius`. A
609
- * portrait viewport grows the height so the width still clears the sphere.
610
- */
611
- declare function orthographicHalfHeight(aspect: number, radius: number): number;
612
- declare function fitDistance(projection: Projection, size: ViewportSize, bounds: SceneBounds, margin?: number): number;
613
- declare function startPosition(projection: Projection, size: ViewportSize, bounds: SceneBounds, margin?: number): Vector3;
614
- /**
615
- * How far out the wheel may pull, as a fraction of the fitted framing: the part
616
- * may shrink to a quarter of the view and no further. Past that it is a speck
617
- * with no cue that Fit is the way back.
618
- */
619
- declare const MIN_FRAME_RATIO = 0.25;
620
- /**
621
- * How far in the wheel may push, as a multiple of the fitted framing.
622
- *
623
- * Both ratios are the legacy viewer's `minZoom` 0.25 / `maxZoom` 10
624
- * (`three-object.tsx:289-311`), which transfer almost exactly: legacy's
625
- * orthographic frustum was `largestDimension * 2` tall and this one is the
626
- * fitted bounding sphere, which for a cube agree within a few percent. So the
627
- * numbers are the ones that shipped, and here they carry a meaning they did not
628
- * have there — `zoom` 1 *is* the fitted framing, so 0.25 and 10 say exactly
629
- * what a reader thinks they say.
630
- */
631
- declare const MAX_FRAME_RATIO = 10;
632
- /** How far the camera may travel, in the two units the two cameras travel in. */
633
- interface CameraLimits {
634
- readonly minZoom: number;
635
- readonly maxZoom: number;
636
- readonly minDistance: number;
637
- readonly maxDistance: number;
638
- }
639
- /**
640
- * The clamps for a scene, so the wheel cannot leave the viewport empty.
641
- *
642
- * Without them it can, from either end, and both cameras can do it: an
643
- * orthographic `camera.zoom` reaches 1e30 in sixty notches, and a perspective
644
- * camera dives inside the part in eight, because `minDistance` defaults to
645
- * `Number.EPSILON`. Fit recovers from both — but Fit is a double middle click
646
- * and nothing on screen says so, which makes it a way out rather than an
647
- * answer.
648
- *
649
- * One rule for both cameras: the wheel may take the part from a quarter of its
650
- * fitted size to ten times it. Under an orthographic camera that scale *is* the
651
- * frustum, so the ratios land on `zoom`; under a perspective camera apparent
652
- * size is the inverse of distance, so they land on `distance` — which is why
653
- * they swap sides between the two.
654
- *
655
- * Pure, and derived from `bounds`, so it re-derives wherever the scene is
656
- * re-measured rather than being sampled once at mount.
657
- *
658
- * `framed` is what the view has been framed *on*, when that is not the whole
659
- * scene — `frameBox` on a single feature. The band is then taken about that
660
- * framing as well as about the scene's, because a band centred on the part is
661
- * the wrong band for a view of a 3 mm hole in it: ten times the *part's* fitted
662
- * size can be less than once the hole's, so the framing the caller asked for sat
663
- * outside the clamps meant to keep it in view. Under an orthographic camera
664
- * `zoom` is measured against a frustum still sized to the scene, so the framing
665
- * enters as the zoom ratio it takes to reach; under a perspective one it enters
666
- * as its own fitted distance.
667
- *
668
- * Widened to the union of the two rather than moved onto `framed`, and that is
669
- * the whole of why this takes both. A band that simply followed the last framing
670
- * would take the part away: framing a hole would put "far enough out to see what
671
- * the hole is in" past `maxDistance`, so the wheel could no longer get back to
672
- * the part it had just been looking at, and Fit — a gesture with nothing on
673
- * screen to say so — would be the only way. Reaching further in must not cost
674
- * the reach back out, so each end takes whichever bound is looser. With no
675
- * `framed`, or one the size of the scene, both ends collapse to the scene's own
676
- * and this is the function it was before.
677
- */
678
- declare function cameraLimits(projection: Projection, size: ViewportSize, bounds: SceneBounds, margin?: number, framed?: SceneBounds): CameraLimits;
679
- /**
680
- * The box the orbit target is confined to — the fitted framing, several frames
681
- * over. Written into `into` so the per-frame path allocates nothing.
682
- */
683
- declare function targetBoundary(bounds: SceneBounds, into: Box3, margin?: number): Box3;
684
- /**
685
- * Points an existing camera's frustum at `bounds` for the current viewport.
686
- * Pose is untouched — that belongs to the controls.
687
- */
688
- declare function applyProjection(camera: ViewerCamera, size: ViewportSize, bounds: SceneBounds, margin?: number): void;
689
- /**
690
- * The world-up convention. The part data is Z-up (millimetres, no conversion) —
691
- * not the glTF-conventional Y-up — so the camera has to say so explicitly.
692
- */
693
- declare const CAD_CAMERA_UP: Vector3;
694
- /**
695
- * `up` re-squared against a view direction: the part of it perpendicular to
696
- * `view`, written into `into`.
697
- *
698
- * This is what keeps the horizon level while a free orbit carries the camera
699
- * over a pole — the up vector follows the view instead of flipping. The
700
- * controls run it on every update, which is what makes the next sentence the
701
- * important one.
702
- *
703
- * **It is path-dependent.** It is a projection, so it discards the component it
704
- * removes and cannot put it back: running it at one view and then another does
705
- * not give what running it once at the second view would. So a camera carries
706
- * the roll of every pose it has passed through, and any pose that is meant to
707
- * be canonical — the opening frame, a reset, a named view — has to say what
708
- * `up` is rather than inherit it. `viewer.tsx` does, at `resetContent`. The
709
- * test beside this pins both halves.
710
- *
711
- * `into` may be `view` or `up` — three.js `crossVectors` reads all six
712
- * components before it writes any, and the intermediate is this module's own
713
- * scratch, so writing the result over an input is safe. Said here because this
714
- * is exported and an out-parameter invites the question; the test beside this
715
- * pins it, so a three.js change cannot quietly turn the answer around.
716
- *
717
- * `view` and `up` being parallel is the one degenerate case: their cross is
718
- * zero, `normalize` leaves it zero, and the result is a zero vector rather than
719
- * an error. A caller with a free-orbiting camera reaches that at the pole,
720
- * which is what `freeOrbit` and a squared `up` at every canonical pose exist to
721
- * keep it away from.
722
- */
723
- declare function adaptedUp(view: Vector3, up: Vector3, into: Vector3): Vector3;
724
- /** Named viewing directions, as unit vectors from the part toward the camera. */
725
- declare const cadViewDirections: {
726
- readonly front: Vector3;
727
- readonly back: Vector3;
728
- readonly left: Vector3;
729
- readonly right: Vector3;
730
- readonly top: Vector3;
731
- readonly bottom: Vector3;
732
- readonly isometric: Vector3;
733
- };
734
- type ViewerView = keyof typeof cadViewDirections;
735
- /** The current orbit direction, so Fit can retain the direction being looked from. */
736
- declare function currentViewDirection(camera: ViewerCamera, target: Vector3, into: Vector3): Vector3;
737
-
738
540
  /**
739
541
  * Measuring, without a canvas: where a pointer snaps to, what two or three
740
542
  * points measure, and how that is written down. `measure-tool.tsx` is the
@@ -1977,4 +1779,4 @@ declare const ORBIT_TARGET_FADE_MS = 1000;
1977
1779
  */
1978
1780
  declare function orbitTargetOpacity(sinceHold: number, fade?: number): number;
1979
1781
 
1980
- export { ANGLE_ARC_FRACTION, ANGLE_ARC_SEGMENTS, AXIS_COLORS, type AngleMeasurement, type ArrowPlacement, Axes, type AxesProps, type Axis, type AxisLock, BANANA_GAP, BANANA_MODEL_URL, Banana, type BananaProps, type BoxStockFigure, type BoxStockInput, type BoxStockPreview, CAD_CAMERA_UP, CHAMFER, CONTROL_SCHEME_OPTIONS, CadCameraControls, type CadCameraControlsProps, type CameraLimits, type CapMaterial, type CapUniforms, type ControlScheme, type ControlSchemeOption, type CubeZone, type CylinderStockFigure, type CylinderStockInput, type CylinderStockPreview, DEFAULT_FIT_MARGIN, DELTA_DASH_PIXELS, DOUBLE_TAP_MS, type DeltaLeg, DirectionArrows, type DirectionArrowsProps, type DirectionGroup, type DistanceMeasurement, type DoubleTapPoint, type DoubleTapTracker, EXCLUDE_FROM_FRAME, ExtendedCameraControls, type ExtendedCameraControlsOptions, FEATURE_TYPE_RANKS, FeatureTag, type FeatureTriangles, FeatureType, Grid, type GridProps, type GridSpec, HoverCard, type HoverCardProps, MAX_FRAME_RATIO, MEASURE_LABEL_CLASS, MEASURE_LINE_PIXELS, MEASURE_MARKER_PIXELS, MEASURE_RENDER_ORDER, MIN_FRAME_RATIO, type MeasureLabelKind, type MeasureMode, MeasureTool, type MeasureToolProps, type Measurement, type NamedDirection, ORBIT_TARGET_COLOR, ORBIT_TARGET_FADE_MS, ORBIT_TARGET_FLASH_MS, ORBIT_TARGET_PIXELS, ORBIT_TARGET_RING_COLOR, ORBIT_TARGET_RING_OPACITY, ORBIT_TARGET_RING_PIXELS, ORBIT_TARGET_RING_WIDTH, PERSPECTIVE_FOV, POINTS_PER_MEASUREMENT, type PartContextValue, PartModel, PartModelFeature, PartModelRegion, PartPick, PartReportFormatError, type Projection, type RankingContext, RegionHighlight, RegionIndex, type Retarget, type RetargetPose, SNAP_MARKER_PIXELS, SNAP_PIXELS, type SceneBounds, SectionOptions, type SectionSample, SectionState, type SectionStore, SectionTool, type SectionToolProps, SectionView, type Snap, type SnapEdges, type SnapHit, type SnapKind, Stock, type StockAllowance, type StockAppearanceProps, type StockPosition, type StockProps, type StockSource, type SurfaceOf, TAP_SLOP, type TapPoint, type TapTracker, type ToolMark, ToolMarks, type ToolMarksProps, type ToolProfilePoint, TriangleRange, UnsupportedKernelVersionError, VIEW_NAMES, VIEW_SIGNS, Vec3, ViewCube, type ViewCubeProps, type ViewKind, type ViewName, Viewer, type ViewerCamera, type ViewerControls, type ViewerHandle, type ViewerProps, ViewerTheme, ViewerToolbar, type ViewerToolbarControl, type ViewerToolbarControls, type ViewerToolbarControlsProps, type ViewerToolbarProps, ViewerToolbarProvider, type ViewerView, type ViewportSize, adaptedUp, angleArc, angleArcRadius, angleAt, applyCapTheme, applyProjection, arrowPlacement, aspectRatio, bananaFrameBounds, bananaPosition, bestOwner, boundsFromBox, boxStockBounds, buildRegionIndex, cadViewDirections, cameraLimits, capHit, clipSegments, contentBounds, createCapMaterial, createMaskMaterial, createMaskTarget, createSectionStore, createStencilMaterials, cubeOutlineGeometry, cubeZones, currentViewDirection, cycleOwner, defaultBounds, deltaBetween, deltaLegs, directionHighlights, directionIndexOf, directionLabel, distanceBetween, excludedFromFrame, featureTriangles, featureTypeRank, fitDistance, fixedBoxStockBounds, formatDegrees, formatMillimetres, gridGeometry, gridSpec, groupByDirection, labelGeometry, labelTexture, lockToAxis, measurementFromPoints, measurementLabel, measurementLabelAnchor, midpoint, movedFar, nextMeasurementId, orbitTargetOpacity, orthographicHalfHeight, panelGeometry, perspectiveFitDistance, pointInContour, rankOwners, regionAdjacency, regionEdgesGeometry, regionNormals, resolveSectionPlane, retargetPose, sameDirection, sampleSection, screenLength, screenPoint, sectionContour, snapAt, squaredUp, startPosition, targetBoundary, trackDoubleTaps, trackTaps, useContentBox, usePartContext, useRetarget, useSectionStore, useTapGuard, useViewerControls, useViewerToolbar, viewKind, viewUp, viewVector, visualSurfaces };
1782
+ export { ANGLE_ARC_FRACTION, ANGLE_ARC_SEGMENTS, AXIS_COLORS, type AngleMeasurement, type ArrowPlacement, Axes, type AxesProps, type Axis, type AxisLock, BANANA_GAP, BANANA_MODEL_URL, Banana, type BananaProps, type BoxStockFigure, type BoxStockInput, type BoxStockPreview, CHAMFER, CONTROL_SCHEME_OPTIONS, CadCameraControls, type CadCameraControlsProps, CameraLimits, type CapMaterial, type CapUniforms, type ControlScheme, type ControlSchemeOption, type CubeZone, type CylinderStockFigure, type CylinderStockInput, type CylinderStockPreview, DELTA_DASH_PIXELS, DOUBLE_TAP_MS, type DeltaLeg, DirectionArrows, type DirectionArrowsProps, type DirectionGroup, type DistanceMeasurement, type DoubleTapPoint, type DoubleTapTracker, ExtendedCameraControls, type ExtendedCameraControlsOptions, FEATURE_TYPE_RANKS, FeatureTag, type FeatureTriangles, FeatureType, Grid, type GridProps, type GridSpec, HoverCard, type HoverCardProps, MEASURE_LABEL_CLASS, MEASURE_LINE_PIXELS, MEASURE_MARKER_PIXELS, MEASURE_RENDER_ORDER, type MeasureLabelKind, type MeasureMode, MeasureTool, type MeasureToolProps, type Measurement, type NamedDirection, ORBIT_TARGET_COLOR, ORBIT_TARGET_FADE_MS, ORBIT_TARGET_FLASH_MS, ORBIT_TARGET_PIXELS, ORBIT_TARGET_RING_COLOR, ORBIT_TARGET_RING_OPACITY, ORBIT_TARGET_RING_PIXELS, ORBIT_TARGET_RING_WIDTH, POINTS_PER_MEASUREMENT, type PartContextValue, PartModel, PartModelFeature, PartModelRegion, PartPick, PartReportFormatError, Projection, type RankingContext, RegionHighlight, RegionIndex, type Retarget, type RetargetPose, SNAP_MARKER_PIXELS, SNAP_PIXELS, SectionOptions, type SectionSample, SectionState, type SectionStore, SectionTool, type SectionToolProps, SectionView, type Snap, type SnapEdges, type SnapHit, type SnapKind, Stock, type StockAllowance, type StockAppearanceProps, type StockPosition, type StockProps, type StockSource, type SurfaceOf, TAP_SLOP, type TapPoint, type TapTracker, type ToolMark, ToolMarks, type ToolMarksProps, type ToolProfilePoint, TriangleRange, UnsupportedKernelVersionError, VIEW_NAMES, VIEW_SIGNS, Vec3, ViewCube, type ViewCubeProps, type ViewKind, type ViewName, Viewer, ViewerCamera, type ViewerControls, type ViewerHandle, type ViewerProps, ViewerTheme, ViewerToolbar, type ViewerToolbarControl, type ViewerToolbarControls, type ViewerToolbarControlsProps, type ViewerToolbarProps, ViewerToolbarProvider, ViewerView, ViewportSize, angleArc, angleArcRadius, angleAt, applyCapTheme, arrowPlacement, bananaFrameBounds, bananaPosition, bestOwner, boxStockBounds, buildRegionIndex, capHit, clipSegments, createCapMaterial, createMaskMaterial, createMaskTarget, createSectionStore, createStencilMaterials, cubeOutlineGeometry, cubeZones, cycleOwner, deltaBetween, deltaLegs, directionHighlights, directionIndexOf, directionLabel, distanceBetween, featureTriangles, featureTypeRank, fixedBoxStockBounds, formatDegrees, formatMillimetres, gridGeometry, gridSpec, groupByDirection, labelGeometry, labelTexture, lockToAxis, measurementFromPoints, measurementLabel, measurementLabelAnchor, midpoint, movedFar, nextMeasurementId, orbitTargetOpacity, panelGeometry, pointInContour, rankOwners, regionAdjacency, regionEdgesGeometry, regionNormals, resolveSectionPlane, retargetPose, sameDirection, sampleSection, screenPoint, sectionContour, snapAt, squaredUp, trackDoubleTaps, trackTaps, useContentBox, usePartContext, useRetarget, useSectionStore, useTapGuard, useViewerControls, useViewerToolbar, viewKind, viewUp, viewVector, visualSurfaces };