@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.
- package/README.md +110 -43
- package/dist/{chunk-WTTOUG4P.js → chunk-N54FHMTG.js} +1023 -313
- package/dist/engine/index.d.ts +2 -2
- package/dist/engine/index.js +1 -1
- package/dist/index.d.ts +7 -205
- package/dist/index.js +155 -108
- package/dist/{normalize--FiXUhO4.d.ts → normalize-C4Wj4IGK.d.ts} +333 -3
- package/package.json +1 -1
package/dist/engine/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as PartModel, a as PartMeshRefs } from '../normalize
|
|
2
|
-
export { E as EnginePart, b as EnginePartProps, M as MIN_KERNEL_VERSION, c as assertSupportedKernelVersion, n as normalizePartReport, s as smoothRegionNormals } from '../normalize
|
|
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
|
|
package/dist/engine/index.js
CHANGED
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,
|
|
2
|
-
export { A as AXES_PLANE_OFFSET,
|
|
3
|
-
import { BufferGeometry, Box3, CanvasTexture, Plane, Vector3,
|
|
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,
|
|
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 };
|