@vertexvis/viewer 0.21.0-testing.0 → 0.21.0-testing.2

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.
Files changed (28) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +36 -38
  3. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  4. package/dist/cjs/viewer.cjs.js +1 -1
  5. package/dist/collection/components/viewer-transform-widget/util.js +4 -4
  6. package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
  7. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js +15 -13
  8. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
  9. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.css +4 -8
  10. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +34 -20
  11. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
  12. package/dist/components/vertex-viewer-transform-widget.js +37 -38
  13. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  14. package/dist/esm/loader.js +1 -1
  15. package/dist/esm/loader.mjs +1 -1
  16. package/dist/esm/vertex-viewer-transform-widget.entry.js +36 -38
  17. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  18. package/dist/esm/viewer.js +1 -1
  19. package/dist/types/components/viewer-transform-widget/util.d.ts +4 -3
  20. package/dist/types/components/viewer-transform-widget/viewer-transform-widget.d.ts +7 -3
  21. package/dist/types/components.d.ts +8 -0
  22. package/dist/viewer/p-24b66b64.entry.js +5 -0
  23. package/dist/viewer/p-24b66b64.entry.js.map +1 -0
  24. package/dist/viewer/viewer.esm.js +1 -1
  25. package/dist/viewer/viewer.esm.js.map +1 -1
  26. package/package.json +7 -7
  27. package/dist/viewer/p-ff7e05fe.entry.js +0 -5
  28. package/dist/viewer/p-ff7e05fe.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"file":"vertex-viewer-transform-widget.entry.js","mappings":"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","names":["point","Point","Vector3","ray","Ray","Plane","Matrix4","Quaternion","Euler","Rectangle","Dimensions","Angle","BoundingBox","angle","classNames"],"sources":["./src/components/viewer-transform-widget/util.ts","./src/components/viewer-transform-widget/viewer-transform-widget-components.tsx","./src/lib/transforms/axis-rotation.ts","./src/lib/transforms/hits.ts","./src/components/viewer-transform-widget/widget.ts","./src/components/viewer-transform-widget/viewer-transform-widget.css?tag=vertex-viewer-transform-widget&encapsulation=shadow","./src/components/viewer-transform-widget/viewer-transform-widget.tsx"],"sourcesContent":["import {\n Euler,\n Matrix4,\n Plane,\n Point,\n Quaternion,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n Frame,\n Viewport,\n} from '../../lib/types';\n\nexport interface PointAndPosition {\n point: Point.Point;\n position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n}\n\nexport function convertPointToCanvas(\n point: Point.Point,\n bounds?: DOMRect\n): Point.Point | undefined {\n return bounds != null\n ? Point.create(point.x - bounds.left, point.y - bounds.top)\n : undefined;\n}\n\nexport function convertCanvasPointToWorld(\n point?: Point.Point,\n frame?: Frame,\n viewport?: Viewport,\n transform?: Matrix4.Matrix4\n): Vector3.Vector3 | undefined {\n const position =\n transform != null ? Vector3.fromMatrixPosition(transform) : undefined;\n\n if (point != null && frame != null && viewport != null && position != null) {\n if (frame.scene.camera.isOrthographic()) {\n const ray = viewport.transformPointToOrthographicRay(\n point,\n frame.image,\n frame.scene.camera\n );\n // Offset the point to past the bounding sphere of the model to\n // adjust the position plane location.\n const offsetPoint = Ray.at(\n Ray.create({\n origin: position,\n direction: frame.scene.camera.direction,\n }),\n Vector3.magnitude(frame.scene.camera.viewVector) * 2\n );\n\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(\n frame.scene.camera.direction,\n offsetPoint\n )\n );\n } else {\n const ray = viewport.transformPointToRay(\n point,\n frame.image,\n frame.scene.camera\n );\n\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(frame.scene.camera.direction, position)\n );\n }\n }\n return undefined;\n}\n\nexport function computeInputTransform(\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType = 'millimeters',\n angleUnit: AngleUnitType = 'degrees'\n): Matrix4.Matrix4 {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): number => angles.convertFrom(value - lastValue);\n const position = (): number =>\n units.convertRealValueToWorld(value - lastValue);\n\n switch (identifier) {\n case 'x-translate':\n return Matrix4.makeTranslation(Vector3.create(position(), 0, 0));\n case 'y-translate':\n return Matrix4.makeTranslation(Vector3.create(0, position(), 0));\n case 'z-translate':\n return Matrix4.makeTranslation(Vector3.create(0, 0, position()));\n case 'x-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.left(), rotation())\n );\n case 'y-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.down(), rotation())\n );\n case 'z-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.forward(), rotation())\n );\n }\n return Matrix4.makeIdentity();\n}\n\nexport function computeInputDisplayValue(\n identifier: string,\n current: Matrix4.Matrix4,\n start: Matrix4.Matrix4,\n distanceUnit: DistanceUnitType = 'millimeters',\n angleUnit: AngleUnitType = 'degrees'\n): number {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): Matrix4.Matrix4 =>\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const transformDiff = (): Matrix4.Matrix4 =>\n Matrix4.multiply(current, Matrix4.invert(start));\n const relativeTranslationDiff = (): Vector3.Vector3 =>\n Vector3.transformMatrix(\n Vector3.fromMatrixPosition(transformDiff()),\n Matrix4.invert(rotation())\n );\n const relativeRotationDiff = (): Euler.Euler =>\n Euler.create(\n Vector3.transformMatrix(\n Euler.fromRotationMatrix(Matrix4.invert(transformDiff())),\n Matrix4.invert(rotation())\n )\n );\n\n switch (identifier) {\n case 'x-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().x);\n case 'y-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().y);\n case 'z-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().z);\n case 'x-rotate':\n return angles.convertTo(relativeRotationDiff().x);\n case 'y-rotate':\n return angles.convertTo(relativeRotationDiff().y);\n case 'z-rotate':\n return angles.convertTo(relativeRotationDiff().z);\n }\n return 0;\n}\n\nexport function computeUpdatedTransform(\n current: Matrix4.Matrix4,\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n viewVector: Vector3.Vector3,\n angle: number,\n identifier: string\n): Matrix4.Matrix4 {\n const delta = Vector3.subtract(next, previous);\n\n switch (identifier) {\n case 'x-translate': {\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.right(), delta)\n );\n }\n case 'y-translate':\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.up(), delta)\n );\n case 'z-translate':\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.back(), delta)\n );\n case 'x-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.right()),\n angle\n )\n )\n ),\n current\n );\n case 'y-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.up()),\n angle\n )\n )\n ),\n current\n );\n case 'z-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.forward()),\n angle\n )\n )\n ),\n current\n );\n default:\n return current;\n }\n}\n\nexport function computeRotationAxis(\n current: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n axis: Vector3.Vector3\n): Vector3.Vector3 {\n const rotation = Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const rotatedAxis = Vector3.transformMatrix(axis, rotation);\n const rotatedNegatedAxis = Vector3.transformMatrix(\n Vector3.negate(axis),\n rotation\n );\n\n return Vector3.dot(viewVector, rotatedAxis) >\n Vector3.dot(viewVector, rotatedNegatedAxis)\n ? rotatedAxis\n : rotatedNegatedAxis;\n}\n\nexport function computeTranslation(\n current: Matrix4.Matrix4,\n axis: Vector3.Vector3,\n delta: Vector3.Vector3\n): Matrix4.Matrix4 {\n const rotation = Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const rotatedAxis = Vector3.transformMatrix(axis, rotation);\n const rotatedDelta = Vector3.multiply(rotatedAxis, delta);\n\n return Matrix4.makeTranslation(\n Vector3.scale(rotatedDelta.x + rotatedDelta.y + rotatedDelta.z, axis)\n );\n}\n\n/**\n * Computes a rotation Matrix4 by applying the rotation at the given position,\n * then translating it back to convert it to a world delta.\n * @param rotation\n * @param current\n * @returns\n */\nexport function computeRotation(\n current: Matrix4.Matrix4,\n delta: Matrix4.Matrix4\n): Matrix4.Matrix4 {\n return Matrix4.multiply(\n Matrix4.multiply(\n Matrix4.makeTranslation(Vector3.fromMatrixPosition(current)),\n delta\n ),\n Matrix4.makeTranslation(Vector3.negate(Vector3.fromMatrixPosition(current)))\n );\n}\n\nexport function computeInputPosition(\n viewport: Viewport,\n bounds: Rectangle.Rectangle,\n shapePoints: Point.Point[]\n): PointAndPosition {\n const paddedBounds = Rectangle.pad(bounds, 5);\n const canvasPoints = shapePoints.map((sp) =>\n viewport.transformNdcPointToViewport(sp)\n );\n\n const topLeft = Rectangle.topLeft(paddedBounds);\n const topRight = Point.add(topLeft, Point.create(paddedBounds.width, 0));\n const bottomRight = Rectangle.bottomRight(paddedBounds);\n const bottomLeft = Point.subtract(\n bottomRight,\n Point.create(paddedBounds.width, 0)\n );\n\n const center = Point.scale(\n canvasPoints.reduce((sum, pt) => Point.add(sum, pt), Point.create()),\n 1 / canvasPoints.length,\n 1 / canvasPoints.length\n );\n\n const closestPoint = [topRight, bottomLeft, bottomRight].reduce(\n (closest, pt) =>\n Point.distance(center, pt) < Point.distance(center, closest)\n ? pt\n : closest,\n topLeft\n );\n\n switch (closestPoint) {\n case topLeft:\n return { point: closestPoint, position: 'top-left' };\n case topRight:\n return { point: closestPoint, position: 'top-right' };\n case bottomLeft:\n return { point: closestPoint, position: 'bottom-left' };\n default:\n return { point: closestPoint, position: 'bottom-right' };\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\n\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n Viewport,\n} from '../../lib/types';\n\nexport type TransformWidgetInputPlacement =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right';\n\nexport interface TransformWidgetInputProps {\n ref: (el?: HTMLInputElement) => void;\n bounds?: DOMRect;\n\n viewport: Viewport;\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n\n distance?: number;\n angle?: number;\n decimalPlaces: number;\n distanceUnit: DistanceUnitType;\n angleUnit: AngleUnitType;\n\n onChange?: (value: number) => void | Promise<void>;\n onIncrement?: VoidFunction;\n onDecrement?: VoidFunction;\n}\n\nexport const TransformWidgetInput: FunctionalComponent<\n TransformWidgetInputProps\n> = ({\n ref,\n bounds,\n viewport,\n point,\n placement,\n distance,\n angle,\n decimalPlaces,\n distanceUnit,\n angleUnit,\n onChange,\n onIncrement,\n onDecrement,\n}) => {\n const angles = new AngleUnits(angleUnit);\n const units = new DistanceUnits(distanceUnit);\n const displayValue =\n distance != null\n ? `${distance.toFixed(decimalPlaces)} ${units.unit.abbreviatedName}`\n : `${angle?.toFixed(decimalPlaces)} ${angles.unit.abbreviatedName}`;\n const inputPlacement = computeInputPlacement(\n viewport,\n bounds ?? Dimensions.create(100, 30),\n point,\n placement\n );\n\n const handleChange = (event: Event): void => {\n if (event.target != null) {\n const parsed = parseFloat((event.target as HTMLInputElement).value);\n\n if (!isNaN(parsed)) {\n onChange?.(parseFloat((event.target as HTMLInputElement).value));\n }\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'ArrowUp') {\n onIncrement?.();\n } else if (event.key === 'ArrowDown') {\n onDecrement?.();\n }\n };\n\n return (\n <div\n class=\"widget-input wrapper\"\n style={{ ...inputPlacement }}\n onKeyDown={handleKeyDown}\n >\n <input\n ref={ref}\n class=\"widget-input\"\n type=\"text\"\n value={displayValue}\n onChange={handleChange}\n ></input>\n </div>\n );\n};\n\nfunction constrainTo(dimension: number, length: number): number {\n return Math.min(dimension, Math.max(0, length));\n}\n\ninterface InputPlacement {\n left?: string;\n right?: string;\n top?: string;\n bottom?: string;\n}\n\nfunction computeInputPlacement(\n viewport: Viewport,\n inputDimensions: Dimensions.Dimensions,\n point: Point.Point,\n placement: TransformWidgetInputPlacement\n): InputPlacement {\n const { width, height } = viewport.dimensions;\n\n function toCssLength(length: number): string {\n return `${length}px`;\n }\n\n switch (placement) {\n case 'top-left':\n return {\n right: toCssLength(\n constrainTo(width - inputDimensions.width, width - point.x)\n ),\n bottom: toCssLength(\n constrainTo(height - inputDimensions.height, height - point.y)\n ),\n };\n case 'top-right':\n return {\n left: toCssLength(constrainTo(width - inputDimensions.width, point.x)),\n bottom: toCssLength(\n constrainTo(height - inputDimensions.height, height - point.y)\n ),\n };\n case 'bottom-left':\n return {\n right: toCssLength(\n constrainTo(width - inputDimensions.width, width - point.x)\n ),\n top: toCssLength(constrainTo(height - inputDimensions.height, point.y)),\n };\n case 'bottom-right':\n default:\n return {\n left: toCssLength(constrainTo(width - inputDimensions.width, point.x)),\n top: toCssLength(constrainTo(height - inputDimensions.height, point.y)),\n };\n }\n}\n","import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { TriangleMeshPoints } from './mesh';\n\nexport function xAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n Vector3.up(),\n triangleSize\n );\n}\n\nexport function yAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.back(),\n triangleSize\n );\n}\n\nexport function zAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.up(),\n triangleSize\n );\n}\n\nfunction computeRotationNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n xDirection: Vector3.Vector3,\n yDirection: Vector3.Vector3,\n triangleSize: number\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n Vector3.add(xDirection, yDirection),\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedX = Vector3.transformMatrix(\n xDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedY = Vector3.transformMatrix(\n yDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * 10, transformedDirection)\n );\n\n const xRay = Ray.create({\n origin: position,\n direction: transformedX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedY,\n });\n const rotationAxis = Vector3.cross(transformedX, transformedY);\n\n const base = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -triangleSize),\n rotationAxis,\n position\n );\n const right = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, triangleSize),\n rotationAxis,\n position\n );\n const up = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, triangleSize),\n rotationAxis,\n position\n );\n const left = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -triangleSize),\n rotationAxis,\n position\n );\n\n return new TriangleMeshPoints(\n Vector3.dot(transformedX, camera.direction) !== -1 &&\n Vector3.dot(transformedY, camera.direction) !== -1,\n base,\n left,\n right,\n up,\n Vector3.transformMatrix(base, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix)\n );\n}\n","import { BoundingBox, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Frame, Viewport } from '../../lib/types';\nimport { Drawable } from './drawable';\nimport { TriangleMesh } from './mesh';\n\nexport function testDrawable(\n drawable: Drawable,\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n if (drawable instanceof TriangleMesh) {\n return testTriangleMesh(drawable, frame, viewport, point);\n }\n return false;\n}\n\nexport function testTriangleMesh(\n mesh: TriangleMesh,\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n return (\n testTriangle(\n [mesh.points.worldLeft, mesh.points.worldRight, mesh.points.worldTip],\n frame,\n viewport,\n point\n ) ||\n testTriangle(\n [mesh.points.worldLeft, mesh.points.worldRight, mesh.points.worldBase],\n frame,\n viewport,\n point\n )\n );\n}\n\n/**\n * Adapted from https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm.\n */\nexport function testTriangle(\n points: Vector3.Vector3[],\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n if (points.length === 3) {\n const ray = frame.scene.camera.isOrthographic()\n ? viewport.transformPointToOrthographicRay(\n point,\n frame.image,\n frame.scene.camera\n )\n : viewport.transformPointToRay(point, frame.image, frame.scene.camera);\n\n const edge1 = Vector3.subtract(points[1], points[0]);\n const edge2 = Vector3.subtract(points[2], points[0]);\n\n const epsilon = BoundingBox.epsilon(\n BoundingBox.fromVectors([ray.direction, ray.origin, edge1, edge2]) ??\n BoundingBox.create(edge1, edge2)\n );\n\n const p = Vector3.cross(ray.direction, edge2);\n const det = Vector3.dot(edge1, p);\n\n // This check causes a `det` of NaN or 0 to return false\n // without needing to perform the subsequent calculations.\n if (!(Math.abs(det) >= epsilon)) {\n return false;\n }\n\n const t = Vector3.subtract(ray.origin, points[0]);\n const u = Vector3.dot(t, p) / det;\n\n if (u < 0 || u > 1) {\n return false;\n }\n\n const q = Vector3.cross(t, edge1);\n const v = Vector3.dot(ray.direction, q) / det;\n\n if (v < 0 || u + v > 1) {\n return false;\n }\n\n const r = Vector3.dot(edge2, q) / det;\n\n // Ignore the case where the computed hit position is negative\n // if in orthographic to correctly return hit results when close\n // to the camera.\n // TODO: revisit with https://vertexvis.atlassian.net/browse/PLAT-1549\n return !isNaN(r) && (r > 0 || frame.scene.camera.isOrthographic());\n }\n return false;\n}\n","import { Matrix4 } from '@vertexvis/geometry';\nimport { Point, Rectangle, Vector3 } from '@vertexvis/geometry';\nimport { Color, Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\nimport regl from 'regl';\nimport shapeBuilder from 'regl-shape';\n\nimport {\n axisPositions,\n rotationAxisPositions,\n} from '../../lib/transforms/axis-lines';\nimport {\n xAxisRotationPositions,\n yAxisRotationPositions,\n zAxisRotationPositions,\n} from '../../lib/transforms/axis-rotation';\nimport {\n xAxisArrowPositions,\n yAxisArrowPositions,\n zAxisArrowPositions,\n} from '../../lib/transforms/axis-translation';\nimport {\n computeDrawable2dBounds,\n Drawable,\n} from '../../lib/transforms/drawable';\nimport { testDrawable } from '../../lib/transforms/hits';\nimport { AxisLine, RotationLine } from '../../lib/transforms/line';\nimport { TriangleMesh } from '../../lib/transforms/mesh';\nimport { CreateShape } from '../../lib/transforms/shape';\nimport { Frame } from '../../lib/types';\nimport { ReglComponent } from '../../lib/webgl/regl-component';\n\nexport interface DrawableElementColors {\n xArrow?: Color.Color | string;\n yArrow?: Color.Color | string;\n zArrow?: Color.Color | string;\n hovered?: Color.Color | string;\n outline?: Color.Color | string;\n}\n\nexport interface DisabledAxis {\n xRotation: boolean;\n yRotation: boolean;\n zRotation: boolean;\n xTranslation: boolean;\n yTranslation: boolean;\n zTranslation: boolean;\n}\n\nexport class TransformWidget extends ReglComponent {\n private cursor?: Point.Point;\n\n private xAxis?: AxisLine;\n private yAxis?: AxisLine;\n private zAxis?: AxisLine;\n private xArrow?: TriangleMesh;\n private yArrow?: TriangleMesh;\n private zArrow?: TriangleMesh;\n private xRotation?: TriangleMesh;\n private xyRotationLine?: RotationLine;\n private xzRotationLine?: RotationLine;\n private yRotation?: TriangleMesh;\n private yxRotationLine?: RotationLine;\n private yzRotationLine?: RotationLine;\n private zRotation?: TriangleMesh;\n private zxRotationLine?: RotationLine;\n private zyRotationLine?: RotationLine;\n\n private disabledAxis: DisabledAxis = {\n xTranslation: false,\n yTranslation: false,\n zTranslation: false,\n xRotation: false,\n yRotation: false,\n zRotation: false,\n };\n\n private axisLines: AxisLine[] = [];\n private rotationLines: RotationLine[] = [];\n private translationMeshes: TriangleMesh[] = [];\n private rotationMeshes: TriangleMesh[] = [];\n private hoveredElement?: Drawable;\n\n private transform?: Matrix4.Matrix4;\n private interactiveBounds?: Rectangle.Rectangle;\n private fullBounds?: Rectangle.Rectangle;\n\n private hoveredChanged = new EventDispatcher<Drawable | undefined>();\n\n private xArrowFillColor?: Color.Color | string;\n private yArrowFillColor?: Color.Color | string;\n private zArrowFillColor?: Color.Color | string;\n\n private hoveredArrowFillColor?: Color.Color | string;\n private outlineColor?: Color.Color | string;\n\n public constructor(\n canvasElement: HTMLCanvasElement,\n colors: DrawableElementColors = {},\n initialDisabledAxes: Partial<DisabledAxis> = {}\n ) {\n super(canvasElement);\n\n this.xArrowFillColor = colors.xArrow;\n this.yArrowFillColor = colors.yArrow;\n this.zArrowFillColor = colors.zArrow;\n this.hoveredArrowFillColor = colors.hovered;\n this.outlineColor = colors.outline;\n\n this.disabledAxis.xTranslation = initialDisabledAxes.xTranslation ?? false;\n this.disabledAxis.yTranslation = initialDisabledAxes.yTranslation ?? false;\n this.disabledAxis.zTranslation = initialDisabledAxes.zTranslation ?? false;\n this.disabledAxis.xRotation = initialDisabledAxes.xRotation ?? false;\n this.disabledAxis.yRotation = initialDisabledAxes.yRotation ?? false;\n this.disabledAxis.zRotation = initialDisabledAxes.zRotation ?? false;\n }\n\n public dispose(): void {\n this.reglFrameDisposable?.cancel();\n }\n\n /**\n * @internal - visible for testing\n */\n public getDrawableElements(): Drawable[] {\n return this.drawableElements;\n }\n\n public getFullBounds(): Rectangle.Rectangle | undefined {\n return this.fullBounds;\n }\n\n public boundsContainsPoint(point: Point.Point): boolean {\n return (\n this.interactiveBounds != null &&\n this.frame != null &&\n Rectangle.containsPoints(this.interactiveBounds, point)\n );\n }\n\n public updateDisabledAxis(axis: Partial<DisabledAxis>): void {\n this.disabledAxis = {\n ...this.disabledAxis,\n ...axis,\n };\n this.updateDisabledOnDrawables();\n }\n\n public updateCursor(cursor?: Point.Point): void {\n this.cursor = cursor;\n\n if (cursor != null && this.frame != null) {\n this.updateHovered();\n } else {\n this.clearHovered();\n }\n }\n\n public updateTransform(transform?: Matrix4.Matrix4): void {\n this.transform = transform;\n\n if (transform != null && this.frame != null) {\n this.updateAndDraw();\n } else {\n this.clear();\n this.reglFrameDisposable?.cancel();\n this.reglFrameDisposable = undefined;\n }\n }\n\n public updateColors(colors: DrawableElementColors = {}): void {\n this.xArrowFillColor = colors.xArrow ?? this.xArrowFillColor;\n this.yArrowFillColor = colors.yArrow ?? this.yArrowFillColor;\n this.zArrowFillColor = colors.zArrow ?? this.zArrowFillColor;\n this.hoveredArrowFillColor = colors.hovered ?? this.hoveredArrowFillColor;\n this.outlineColor = colors.outline ?? this.outlineColor;\n\n this.xArrow?.updateFillColor(this.getXTranslationColor(), true);\n this.yArrow?.updateFillColor(this.getYTranslationColor(), true);\n this.zArrow?.updateFillColor(this.getZTranslationColor(), true);\n this.xRotation?.updateFillColor(this.getXRotationColor(), true);\n this.yRotation?.updateFillColor(this.getYRotationColor(), true);\n this.zRotation?.updateFillColor(this.getZRotationColor(), true);\n this.hoveredElement?.updateFillColor(this.hoveredArrowFillColor);\n }\n\n public onHoveredChanged(\n listener: Listener<Drawable | undefined>\n ): Disposable {\n return this.hoveredChanged.on(listener);\n }\n\n private updateDisabledOnDrawables(): void {\n this.xRotation?.setDisabled(this.disabledAxis.xRotation);\n this.xyRotationLine?.setDisabled(this.disabledAxis.xRotation);\n this.xzRotationLine?.setDisabled(this.disabledAxis.xRotation);\n\n this.yRotation?.setDisabled(this.disabledAxis.yRotation);\n this.yzRotationLine?.setDisabled(this.disabledAxis.yRotation);\n this.yxRotationLine?.setDisabled(this.disabledAxis.yRotation);\n\n this.zRotation?.setDisabled(this.disabledAxis.zRotation);\n this.zxRotationLine?.setDisabled(this.disabledAxis.zRotation);\n this.zyRotationLine?.setDisabled(this.disabledAxis.zRotation);\n\n this.xArrow?.setDisabled(this.disabledAxis.xTranslation);\n this.yArrow?.setDisabled(this.disabledAxis.yTranslation);\n this.zArrow?.setDisabled(this.disabledAxis.zTranslation);\n\n this.updateColors();\n }\n\n private updateHovered(): void {\n const previousHovered = this.hoveredElement;\n const currentFrame = this.frame;\n\n if (currentFrame != null) {\n this.hoveredElement = [...this.translationMeshes, ...this.rotationMeshes]\n .filter((el) => el.points.valid && !el.isDisabled())\n .find((m) =>\n this.cursor != null\n ? testDrawable(m, currentFrame, this.viewport, this.cursor)\n : false\n );\n\n if (this.hoveredElement !== previousHovered) {\n this.hoveredChanged.emit(this.hoveredElement);\n this.hoveredElement?.updateFillColor(this.hoveredArrowFillColor);\n previousHovered?.updateFillColor(previousHovered?.initialFillColor);\n }\n }\n }\n\n private clearHovered(): void {\n const previousHovered = this.hoveredElement;\n this.hoveredElement = undefined;\n\n if (this.hoveredElement !== previousHovered) {\n this.hoveredChanged.emit(this.hoveredElement);\n previousHovered.updateFillColor(previousHovered.initialFillColor);\n }\n }\n\n protected hasData(): boolean {\n return this.transform != null;\n }\n\n protected createOrUpdateElements(): void {\n if (this.transform != null && this.frame != null) {\n if (this.xArrow == null || this.yArrow == null || this.zArrow == null) {\n this.createElements(this.transform, this.frame);\n } else {\n this.updateElements(this.transform, this.frame);\n }\n\n this.interactiveBounds = computeDrawable2dBounds(\n this.viewport,\n ...this.rotationMeshes,\n ...this.translationMeshes\n );\n this.fullBounds = computeDrawable2dBounds(\n this.viewport,\n ...this.rotationMeshes,\n ...this.translationMeshes,\n ...this.axisLines\n );\n }\n }\n\n private createElements(transform: Matrix4.Matrix4, frame: Frame): void {\n this.reglCommand = regl({\n canvas: this.canvasElement,\n extensions: 'angle_instanced_arrays',\n });\n const { createShape } = shapeBuilder(this.reglCommand);\n\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n this.xArrow = new TriangleMesh(\n createShape,\n 'x-translate',\n xAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getXTranslationColor()\n );\n\n this.xRotation = new TriangleMesh(\n createShape,\n 'x-rotate',\n xAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getXRotationColor()\n );\n this.xAxis = new AxisLine(\n createShape,\n 'x-axis',\n axisPositions(transform, frame.scene.camera, this.xArrow),\n this.outlineColor,\n this.getXTranslationColor()\n );\n this.yArrow = new TriangleMesh(\n createShape,\n 'y-translate',\n yAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getYTranslationColor()\n );\n\n this.yRotation = new TriangleMesh(\n createShape,\n 'y-rotate',\n yAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getYRotationColor()\n );\n this.yAxis = new AxisLine(\n createShape,\n 'y-axis',\n axisPositions(transform, frame.scene.camera, this.yArrow),\n this.outlineColor,\n this.getYTranslationColor()\n );\n this.zArrow = new TriangleMesh(\n createShape,\n 'z-translate',\n zAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getZTranslationColor()\n );\n this.zAxis = new AxisLine(\n createShape,\n 'z-axis',\n axisPositions(transform, frame.scene.camera, this.zArrow),\n this.outlineColor,\n this.getZTranslationColor()\n );\n this.zRotation = new TriangleMesh(\n createShape,\n 'z-rotate',\n zAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getZRotationColor()\n );\n\n this.createRotationLines(createShape, transform, frame);\n\n this.axisLines = [this.xAxis, this.yAxis, this.zAxis];\n this.translationMeshes = [this.xArrow, this.yArrow, this.zArrow];\n this.rotationMeshes = [this.xRotation, this.yRotation, this.zRotation];\n this.updateDisabledOnDrawables();\n\n this.availableElements = [\n ...this.axisLines,\n ...this.rotationLines,\n ...this.translationMeshes,\n ...this.rotationMeshes,\n ];\n }\n\n private getXRotationColor(): Color.Color | string | undefined {\n return this.xArrowFillColor;\n }\n\n private getYRotationColor(): Color.Color | string | undefined {\n return this.yArrowFillColor;\n }\n\n private getZRotationColor(): Color.Color | string | undefined {\n return this.zArrowFillColor;\n }\n\n private getXTranslationColor(): Color.Color | string | undefined {\n return this.xArrowFillColor;\n }\n\n private getYTranslationColor(): Color.Color | string | undefined {\n return this.yArrowFillColor;\n }\n\n private getZTranslationColor(): Color.Color | string | undefined {\n return this.zArrowFillColor;\n }\n\n private createRotationLines(\n createShape: CreateShape,\n transform: Matrix4.Matrix4,\n frame: Frame\n ): void {\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n const xyRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n );\n const xzRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n );\n const yxRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n );\n const yzRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n );\n const zxRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n );\n const zyRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n );\n\n if (xyRotationLinePoints != null) {\n this.xyRotationLine = new RotationLine(\n createShape,\n 'xy-rotation-line',\n xyRotationLinePoints,\n this.outlineColor\n );\n }\n if (xzRotationLinePoints != null) {\n this.xzRotationLine = new RotationLine(\n createShape,\n 'xz-rotation-line',\n xzRotationLinePoints,\n this.outlineColor\n );\n }\n if (yxRotationLinePoints != null) {\n this.yxRotationLine = new RotationLine(\n createShape,\n 'yx-rotation-line',\n yxRotationLinePoints,\n this.outlineColor\n );\n }\n if (yzRotationLinePoints != null) {\n this.yzRotationLine = new RotationLine(\n createShape,\n 'yz-rotation-line',\n yzRotationLinePoints,\n this.outlineColor\n );\n }\n if (zxRotationLinePoints != null) {\n this.zxRotationLine = new RotationLine(\n createShape,\n 'zx-rotation-line',\n zxRotationLinePoints,\n this.outlineColor\n );\n }\n if (zyRotationLinePoints != null) {\n this.zyRotationLine = new RotationLine(\n createShape,\n 'zy-rotation-line',\n zyRotationLinePoints,\n this.outlineColor\n );\n }\n\n this.rotationLines = [\n this.xyRotationLine,\n this.xzRotationLine,\n this.yxRotationLine,\n this.yzRotationLine,\n this.zxRotationLine,\n this.zyRotationLine,\n ].filter((l) => l != null) as RotationLine[];\n }\n\n private updateElements(transform: Matrix4.Matrix4, frame: Frame): void {\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n if (this.xArrow != null) {\n this.xArrow.updatePoints(\n xAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.xAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.xArrow)\n );\n }\n this.xRotation?.updatePoints(\n xAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n if (this.yArrow != null) {\n this.yArrow.updatePoints(\n yAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.yAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.yArrow)\n );\n }\n this.yRotation?.updatePoints(\n yAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n if (this.zArrow != null) {\n this.zArrow.updatePoints(\n zAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.zAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.zArrow)\n );\n }\n this.zRotation?.updatePoints(\n zAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n this.xyRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n )\n );\n this.xzRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n )\n );\n this.yxRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n )\n );\n this.yzRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n )\n );\n this.zxRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n )\n );\n this.zyRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n )\n );\n }\n}\n",":host {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n /**\n * @prop --viewer-transform-widget-x-axis-arrow-color: A CSS color for the arrow\n * at the end of the X axis on this widget. Defaults to `#ea3324`.\n */\n --viewer-transform-widget-x-axis-arrow-color: var(--x-axis-color);\n\n /**\n * @prop --viewer-transform-widget-y-axis-arrow-color: A CSS color for the arrow\n * at the end of the Y axis on this widget. Defaults to `#4faf32`.\n */\n --viewer-transform-widget-y-axis-arrow-color: var(--y-axis-color);\n\n /**\n * @prop --viewer-transform-widget-z-axis-arrow-color: A CSS color for the arrow\n * at the end of the Z axis on this widget. Defaults to `#0000ff`.\n */\n --viewer-transform-widget-z-axis-arrow-color: var(--z-axis-color);\n\n\n /**\n * @prop --viewer-transform-widget-hovered-arrow-color: A CSS color for the arrow\n * when it is hovered. Defaults to `#ffff00`.\n */\n --viewer-transform-widget-hovered-arrow-color: #ffff00;\n\n /**\n * @prop --viewer-transform-widget-input-width: A CSS length for the width of the\n * input displayed near the handles. Defaults to `7em`.\n */\n --viewer-transform-widget-input-width: 7em;\n}\n\n.widget {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.widget.hovered {\n pointer-events: auto;\n}\n\n.widget-input.wrapper {\n position: absolute;\n box-sizing: border-box;\n pointer-events: auto;\n display: flex;\n border: 1px solid #cccccc;\n width: var(--viewer-transform-widget-input-width);\n}\n\ninput.widget-input {\n text-align: center;\n border: none;\n width: 100%;\n}\n\n.widget-input.left-step,\n.widget-input.right-step {\n display: flex;\n align-items: center;\n padding: 0;\n background-color: white;\n border: none;\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n Angle,\n Euler,\n Matrix4,\n Point,\n Quaternion,\n Vector3,\n} from '@vertexvis/geometry';\nimport { Color, Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { readDOM, writeDOM } from '../../lib/stencil';\nimport { TransformController } from '../../lib/transforms/controller';\nimport { Drawable } from '../../lib/transforms/drawable';\nimport { AngleUnitType, DistanceUnitType } from '../../lib/types';\nimport {\n computeInputDisplayValue,\n computeInputPosition,\n computeInputTransform,\n computeUpdatedTransform,\n convertCanvasPointToWorld,\n convertPointToCanvas,\n PointAndPosition,\n} from './util';\nimport { TransformWidgetInput } from './viewer-transform-widget-components';\nimport { TransformWidget } from './widget';\n\n@Component({\n tag: 'vertex-viewer-transform-widget',\n styleUrl: 'viewer-transform-widget.css',\n shadow: true,\n})\nexport class ViewerTransformWidget {\n /**\n * An event that is emitted when the position of the widget changes.\n */\n @Event({ bubbles: true })\n public positionChanged!: EventEmitter<Vector3.Vector3 | undefined>;\n\n /**\n * An event that is emitted when the rotation of the widget changes.\n */\n @Event({ bubbles: true })\n public rotationChanged!: EventEmitter<Euler.Euler | undefined>;\n\n /**\n * An event that is emitted when the interaction has ended\n */\n @Event({ bubbles: true })\n public interactionEnded!: EventEmitter<Matrix4.Matrix4 | undefined>;\n\n /**\n * An event that is emitted an interaction with the widget has started\n */\n @Event({ bubbles: true })\n public interactionStarted!: EventEmitter<void>;\n\n /**\n * The viewer to connect to transforms. If nested within a <vertex-viewer>,\n * this property will be populated automatically.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The starting position of this transform widget. This position will be updated\n * as transforms occur. Setting this value to `undefined` will remove the widget.\n */\n @Prop({ mutable: true })\n public position?: Vector3.Vector3;\n\n /**\n * The starting angle for the transform widget. This rotation will be updated\n * as the rotations occur.\n */\n @Prop({ mutable: true })\n public rotation?: Euler.Euler;\n\n /**\n * The controller that is responsible for performing transforms.\n */\n @Prop({ mutable: true })\n public controller?: TransformController;\n\n /**\n * Determines whether or not the x-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xRotationDisabled = false;\n\n /**\n * Determines whether or not the y-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yRotationDisabled = false;\n\n /**\n * Determines whether or not the z-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public zRotationDisabled = false;\n\n /**\n * Determines whether or not the x-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xTranslationDisabled = false;\n\n /**\n * Determines whether or not the y-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yTranslationDisabled = false;\n\n /**\n * Determines whether or not the z-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public zTranslationDisabled = false;\n\n /**\n * The unit to show for translation inputs. Defaults to `millimeters`.\n *\n * @see DistanceUnitType\n */\n @Prop()\n public distanceUnit: DistanceUnitType = 'millimeters';\n\n /**\n * The unit to show for rotation inputs. Defaults to `degrees`.\n *\n * @see AngleUnitType\n */\n @Prop()\n public angleUnit: AngleUnitType = 'degrees';\n\n /**\n * The number of decimal places to show in the input. Defaults to `1`.\n */\n @Prop()\n public decimalPlaces = 1;\n\n /**\n * @internal\n * @ignore\n *\n * Visible for testing.\n */\n @Prop({ mutable: true })\n public hovered?: Drawable;\n\n @State()\n protected inputPosition?: PointAndPosition;\n\n @State()\n protected inputValue?: number;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private startingTransform?: Matrix4.Matrix4;\n private currentTransform?: Matrix4.Matrix4;\n private dragStartTransform?: Matrix4.Matrix4;\n\n private xArrowColor: Color.Color | string = '#ea3324';\n private yArrowColor: Color.Color | string = '#4faf32';\n private zArrowColor: Color.Color | string = '#0000ff';\n private hoveredColor: Color.Color | string = '#ffff00';\n\n private widget?: TransformWidget;\n private lastDragged?: Drawable;\n private dragging?: Drawable;\n private lastAngle = 0;\n private lastWorldPosition?: Vector3.Vector3;\n private lastInputValue?: number;\n\n private canvasBounds?: DOMRect;\n private inputBounds?: DOMRect;\n private canvasResizeObserver?: ResizeObserver;\n private inputResizeObserver?: ResizeObserver;\n private hostStyleObserver?: MutationObserver;\n private canvasRef?: HTMLCanvasElement;\n private inputRef?: HTMLInputElement;\n\n private hoveredChangeDisposable?: Disposable;\n\n protected componentDidLoad(): void {\n window.addEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver = new ResizeObserver(this.handleResize);\n this.inputResizeObserver = new ResizeObserver(this.handleInputResize);\n this.hostStyleObserver = new MutationObserver(this.handleStyleChange);\n\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupTransformWidget(this.canvasRef);\n }\n\n this.hostStyleObserver.observe(this.hostEl, {\n attributes: true,\n attributeFilter: ['style'],\n });\n\n this.handleViewerChanged(this.viewer, undefined);\n this.handleStyleChange();\n this.handleInputResize();\n }\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver?.disconnect();\n this.inputResizeObserver?.disconnect();\n this.hostStyleObserver?.disconnect();\n\n this.hoveredChangeDisposable?.dispose();\n this.widget?.dispose();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): void {\n oldViewer?.removeEventListener('frameDrawn', this.handleViewerFrameDrawn);\n oldViewer?.removeEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange\n );\n newViewer?.addEventListener('frameDrawn', this.handleViewerFrameDrawn);\n newViewer?.addEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange\n );\n\n if (newViewer?.stream != null) {\n this.controller?.dispose();\n this.controller = new TransformController(newViewer.stream);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('xTranslationDisabled')\n @Watch('yTranslationDisabled')\n @Watch('zTranslationDisabled')\n @Watch('xRotationDisabled')\n @Watch('yRotationDisabled')\n @Watch('zRotationDisabled')\n protected handleDisabledPropertyChanged(): void {\n this.widget?.updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n }\n\n /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(\n newRotation?: Euler.Euler,\n oldRotation?: Euler.Euler\n ): void {\n const rotationToApply = newRotation ?? Euler.create();\n\n this.currentTransform = this.getTransformForNewRotation(rotationToApply);\n this.startingTransform = this.currentTransform;\n\n // If the removal of the previous rotation above results in an identity matrix,\n // clear the transformation on the widget to prevent it from appearing at the origin.\n if (\n newRotation == null &&\n this.currentTransform != null &&\n Matrix4.isIdentity(this.currentTransform)\n ) {\n this.currentTransform = undefined;\n this.startingTransform = this.currentTransform;\n }\n\n this.widget?.updateTransform(this.currentTransform);\n\n console.debug(\n `Updating widget rotation [previous=${JSON.stringify(\n oldRotation\n )}, current=${JSON.stringify(newRotation)}]`\n );\n\n this.rotationChanged.emit(newRotation);\n }\n\n /**\n * @ignore\n */\n @Watch('position')\n protected handlePositionChanged(\n newPosition?: Vector3.Vector3,\n oldPosition?: Vector3.Vector3\n ): void {\n this.currentTransform = this.getTransformForNewPosition(newPosition);\n this.startingTransform = this.currentTransform;\n\n console.debug(\n `Updating widget position [previous=${JSON.stringify(\n oldPosition\n )}, current=${JSON.stringify(newPosition)}]`\n );\n this.widget?.updateTransform(this.currentTransform);\n\n if (newPosition == null) {\n this.lastDragged = undefined;\n this.inputPosition = undefined;\n this.controller?.clearTransform();\n }\n\n this.positionChanged.emit(newPosition);\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <canvas\n ref={(el) => {\n this.canvasRef = el;\n }}\n class={classNames('widget', {\n hovered: this.hovered != null,\n })}\n width={this.viewer?.viewport.width}\n height={this.viewer?.viewport.height}\n onPointerDown={this.handleBeginDrag}\n />\n\n {this.inputPosition &&\n this.inputValue != null &&\n this.viewer?.viewport && (\n <TransformWidgetInput\n ref={(el) => {\n if (el != null) {\n this.inputResizeObserver?.observe(el);\n } else if (this.inputRef != null) {\n this.inputResizeObserver?.unobserve(this.inputRef);\n }\n this.inputRef = el;\n }}\n bounds={this.inputBounds}\n viewport={this.viewer.viewport}\n point={this.inputPosition.point}\n placement={this.inputPosition.position}\n angle={this.getDisplayedAngle()}\n distance={this.getDisplayedDistance()}\n decimalPlaces={this.decimalPlaces}\n distanceUnit={this.distanceUnit}\n angleUnit={this.angleUnit}\n onChange={this.handleInputChange}\n onIncrement={this.handleInputIncrement}\n onDecrement={this.handleInputDecrement}\n />\n )}\n </Host>\n );\n }\n\n private handleHoveredDrawableChanged = (drawable?: Drawable): void => {\n this.hovered = drawable;\n };\n\n private handleViewerFrameDrawn = (): void => {\n this.updatePropsFromViewer();\n };\n\n private handleViewerDimensionsChange = (): void => {\n writeDOM(() => {\n if (this.viewer != null && this.canvasRef != null) {\n this.canvasRef.width = this.viewer.viewport.width;\n this.canvasRef.height = this.viewer.viewport.height;\n\n this.updateCanvasBounds(this.canvasRef);\n }\n });\n };\n\n private handleResize = (): void => {\n if (this.canvasRef != null) {\n this.updateCanvasBounds(this.canvasRef);\n }\n };\n\n private handleInputResize = (): void => {\n console.log(this.inputRef);\n if (this.inputRef != null) {\n const inputElement = this.inputRef;\n\n readDOM(() => {\n this.inputBounds = inputElement.getBoundingClientRect();\n console.log(this.inputBounds);\n });\n }\n };\n\n private handleStyleChange = (): void => {\n readDOM(() => {\n const hostStyles = window.getComputedStyle(this.hostEl);\n\n this.xArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-x-axis-arrow-color')\n .trim();\n this.yArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-y-axis-arrow-color')\n .trim();\n this.zArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-z-axis-arrow-color')\n .trim();\n this.hoveredColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-hovered-arrow-color')\n .trim();\n\n this.getTransformWidget().updateColors({\n xArrow: this.xArrowColor,\n yArrow: this.yArrowColor,\n zArrow: this.zArrowColor,\n hovered: this.hoveredColor,\n });\n });\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (this.dragging == null) {\n const canvasPoint = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n this.getCanvasBounds()\n );\n const widget = this.getTransformWidget();\n\n if (canvasPoint != null && widget.boundsContainsPoint(canvasPoint)) {\n widget.updateCursor(canvasPoint);\n } else {\n widget.updateCursor(undefined);\n this.hovered = undefined;\n }\n }\n };\n\n private handleBeginDrag = async (event: PointerEvent): Promise<void> => {\n const canvasBounds = this.getCanvasBounds();\n\n if (\n this.hovered != null &&\n canvasBounds != null &&\n this.viewer != null &&\n this.position != null &&\n this.viewer.frame != null\n ) {\n this.dragging = this.hovered;\n\n if (this.dragging.identifier !== this.lastDragged?.identifier) {\n this.dragStartTransform = this.currentTransform;\n }\n this.lastDragged = undefined;\n\n const currentCanvas = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n canvasBounds\n );\n const widgetCenter = this.viewer.viewport.transformWorldToViewport(\n this.position,\n this.viewer.frame.scene.camera.projectionViewMatrix\n );\n\n this.lastAngle =\n currentCanvas != null\n ? Angle.fromPoints(widgetCenter, currentCanvas)\n : 0;\n\n this.lastWorldPosition = convertCanvasPointToWorld(\n currentCanvas,\n this.viewer?.frame,\n this.viewer?.viewport,\n this.currentTransform\n );\n\n this.interactionStarted.emit();\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointermove', this.handleDrag);\n window.addEventListener('pointerup', this.handleEndTransform);\n }\n };\n\n private handleDrag = async (event: PointerEvent): Promise<void> => {\n // Prevent selection of text and interaction with view cube while dragging the widget\n event.preventDefault();\n\n const canvasBounds = this.getCanvasBounds();\n\n if (\n this.dragging != null &&\n this.lastWorldPosition != null &&\n canvasBounds != null &&\n this.viewer != null &&\n this.viewer.frame != null &&\n this.position != null\n ) {\n // Begin the transform on the first `pointermove` event as opposed to the\n // `pointerdown` to prevent accidental no-op transforms (identity matrix).\n await this.controller?.beginTransform();\n\n const currentCanvas = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n canvasBounds\n );\n const widgetCenter = this.viewer.viewport.transformWorldToViewport(\n this.position,\n this.viewer.frame.scene.camera.projectionViewMatrix\n );\n\n const currentWorld = convertCanvasPointToWorld(\n currentCanvas,\n this.viewer?.frame,\n this.viewer?.viewport,\n this.currentTransform\n );\n\n if (\n currentWorld != null &&\n currentCanvas != null &&\n widgetCenter != null\n ) {\n const angle = Angle.fromPoints(widgetCenter, currentCanvas);\n\n this.transform(\n this.lastWorldPosition,\n currentWorld,\n angle - this.lastAngle\n );\n\n this.updateInputPosition();\n this.updateInputValue();\n\n this.lastWorldPosition = currentWorld;\n this.lastAngle = angle;\n }\n }\n };\n\n private handleEndTransform = async (event: PointerEvent): Promise<void> => {\n const canvasPoint = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n this.getCanvasBounds()\n );\n const widget = this.getTransformWidget();\n this.lastDragged = this.dragging;\n\n this.dragging = undefined;\n this.lastWorldPosition = undefined;\n this.position =\n this.currentTransform != null\n ? Vector3.fromMatrixPosition(this.currentTransform)\n : this.position;\n this.lastAngle = 0;\n\n this.updateInputPosition();\n this.updateInputValue();\n\n widget.updateCursor(canvasPoint);\n widget.updateTransform(this.currentTransform);\n\n widget.updateDisabledAxis({\n xRotation: true,\n yRotation: true,\n zRotation: true,\n xTranslation: true,\n yTranslation: true,\n zTranslation: true,\n });\n\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleEndTransform);\n\n try {\n const delta = this.controller?.getCurrentDelta();\n\n await this.controller?.endTransform();\n\n this.interactionEnded.emit(delta);\n } catch (e) {\n console.error('Failed to end transform interaction', e);\n }\n\n window.addEventListener('pointermove', this.handlePointerMove);\n\n this.getTransformWidget().updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n };\n\n private handleInputIncrement = (): void => {\n if (this.inputValue != null && this.lastInputValue != null) {\n this.inputValue = this.lastInputValue + 1;\n console.log(this.inputValue);\n this.handleInputChange(this.inputValue);\n }\n };\n\n private handleInputDecrement = (): void => {\n if (this.inputValue != null && this.lastInputValue != null) {\n this.inputValue = this.lastInputValue - 1;\n this.handleInputChange(this.inputValue);\n }\n };\n\n private handleInputChange = async (value: number): Promise<void> => {\n if (\n this.lastDragged != null &&\n this.currentTransform != null &&\n this.startingTransform != null &&\n this.lastInputValue != null\n ) {\n this.transformCurrent(\n computeInputTransform(\n this.lastDragged.identifier,\n value,\n this.lastInputValue,\n this.distanceUnit,\n this.angleUnit\n )\n );\n\n this.lastInputValue = value;\n\n await this.controller?.beginTransform();\n this.getTransformWidget().updateTransform(this.currentTransform);\n await this.controller?.updateTransform(\n Matrix4.multiply(\n this.currentTransform,\n Matrix4.invert(this.startingTransform)\n )\n );\n this.updateInputPosition();\n await this.controller?.endTransformDebounced(() => {\n this.position =\n this.currentTransform != null\n ? Vector3.fromMatrixPosition(this.currentTransform)\n : this.position;\n });\n }\n };\n\n private updatePropsFromViewer = (): void => {\n const { frame } = this.viewer || {};\n\n if (frame != null) {\n const widget = this.getTransformWidget();\n\n widget.updateFrame(frame, this.dragging == null);\n this.updateInputPosition();\n }\n };\n\n private transform(\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n angle: number\n ): void {\n if (\n this.position != null &&\n this.startingTransform != null &&\n this.currentTransform != null &&\n this.dragging != null &&\n this.viewer != null &&\n this.viewer.frame != null\n ) {\n this.currentTransform = computeUpdatedTransform(\n this.currentTransform,\n previous,\n next,\n this.viewer?.frame.scene.camera.viewVector,\n angle,\n this.dragging.identifier\n );\n\n this.getTransformWidget().updateTransform(this.currentTransform);\n this.controller?.updateTransform(\n Matrix4.multiply(\n this.currentTransform,\n Matrix4.invert(this.startingTransform)\n )\n );\n }\n }\n\n private handleSettingDisabledAxis(): void {\n if (this.widget) {\n this.widget.updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n } else {\n console.warn('Cannot set disabled values - no widget defined');\n }\n }\n\n private setupTransformWidget = (\n canvasRef: HTMLCanvasElement\n ): TransformWidget => {\n console.debug(\n `Initializing transform widget. [initial-position=${JSON.stringify(\n this.position\n )}, has-initial-frame=${this.viewer?.frame != null}]`\n );\n\n this.widget = new TransformWidget(canvasRef, {\n xArrow: this.xArrowColor,\n yArrow: this.yArrowColor,\n zArrow: this.zArrowColor,\n hovered: this.hoveredColor,\n });\n\n if (this.rotation != null) {\n this.currentTransform = this.getTransformForNewRotation(this.rotation);\n this.startingTransform = this.currentTransform;\n this.widget.updateTransform(this.currentTransform);\n }\n\n if (this.position != null) {\n this.currentTransform = this.getTransformForNewPosition(this.position);\n this.startingTransform = this.currentTransform;\n this.widget.updateTransform(this.currentTransform);\n }\n if (this.viewer?.frame != null) {\n this.widget.updateFrame(this.viewer.frame, true);\n }\n\n this.handleSettingDisabledAxis();\n\n this.hoveredChangeDisposable = this.widget.onHoveredChanged(\n this.handleHoveredDrawableChanged\n );\n\n return this.widget;\n };\n\n private updateCanvasBounds = (canvasElement: HTMLCanvasElement): void => {\n readDOM(() => {\n this.canvasBounds = canvasElement.getBoundingClientRect();\n\n this.getTransformWidget().updateDimensions(canvasElement);\n });\n };\n\n private get currentRotation(): Matrix4.Matrix4 {\n if (this.currentTransform != null) {\n return Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(this.currentTransform)\n );\n }\n return Matrix4.makeIdentity();\n }\n\n private updateInputValue = (): void => {\n const dragging = this.dragging ?? this.lastDragged;\n if (\n dragging != null &&\n this.currentTransform != null &&\n this.dragStartTransform != null\n ) {\n this.lastInputValue = this.inputValue;\n\n this.inputValue = computeInputDisplayValue(\n dragging.identifier,\n this.currentTransform,\n this.dragStartTransform,\n this.distanceUnit,\n this.angleUnit\n );\n }\n };\n\n private transformCurrent = (transform: Matrix4.Matrix4): void => {\n this.currentTransform =\n this.currentTransform != null\n ? Matrix4.multiply(this.currentTransform, transform)\n : transform;\n };\n\n private updateInputPosition = (): void => {\n const widget = this.getTransformWidget();\n const widgetBounds = widget.getFullBounds();\n const dragging = this.dragging ?? this.lastDragged;\n if (\n this.viewer?.frame != null &&\n this.position != null &&\n dragging != null &&\n widgetBounds != null\n ) {\n this.inputPosition = computeInputPosition(\n this.viewer.viewport,\n widgetBounds,\n dragging.points.toArray()\n );\n }\n };\n\n private getDisplayedAngle = (): number | undefined => {\n const draggingIdentifier =\n this.dragging?.identifier ?? this.lastDragged?.identifier;\n if (draggingIdentifier?.includes('rotate')) {\n return this.inputValue;\n }\n };\n\n private getDisplayedDistance = (): number | undefined => {\n const draggingIdentifier =\n this.dragging?.identifier ?? this.lastDragged?.identifier;\n if (draggingIdentifier?.includes('translate')) {\n return this.inputValue;\n }\n };\n\n private getTransformForNewPosition = (\n newPosition?: Vector3.Vector3\n ): Matrix4.Matrix4 | undefined => {\n if (newPosition != null) {\n const c =\n this.currentTransform != null\n ? this.currentTransform\n : Matrix4.makeIdentity();\n\n const currentRotation = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(c)\n );\n const position = Matrix4.makeTranslation(newPosition);\n\n return Matrix4.multiply(position, currentRotation);\n }\n };\n\n private getTransformForNewRotation = (\n newRotationEuler: Euler.Euler\n ): Matrix4.Matrix4 | undefined => {\n const c =\n this.currentTransform != null\n ? this.currentTransform\n : Matrix4.makeIdentity();\n\n const oldRotation = Matrix4.invert(\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(c))\n );\n\n const newRotation = Matrix4.makeRotation(\n Quaternion.fromEuler(newRotationEuler)\n );\n const oldTranslation = Matrix4.multiply(c, oldRotation);\n\n return Matrix4.multiply(oldTranslation, newRotation);\n };\n\n private getCanvasBounds = (): DOMRect | undefined => {\n if (this.canvasBounds != null) {\n return this.canvasBounds;\n } else if (this.canvasRef != null) {\n this.updateCanvasBounds(this.canvasRef);\n return this.canvasBounds;\n }\n };\n\n private getTransformWidget = (): TransformWidget => {\n if (this.widget == null && this.canvasRef != null) {\n return this.setupTransformWidget(this.canvasRef);\n } else if (this.widget != null) {\n return this.widget;\n } else {\n throw new Error(\n 'Transform widget was not initialized. The canvas element may not have been initialized.'\n );\n }\n };\n}\n"],"version":3}
1
+ {"file":"vertex-viewer-transform-widget.entry.js","mappings":"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","names":["point","Point","Vector3","ray","Ray","Plane","Matrix4","Quaternion","Euler","Rectangle","Dimensions","Angle","BoundingBox","angle","classNames"],"sources":["./src/components/viewer-transform-widget/util.ts","./src/components/viewer-transform-widget/viewer-transform-widget-components.tsx","./src/lib/transforms/axis-rotation.ts","./src/lib/transforms/hits.ts","./src/components/viewer-transform-widget/widget.ts","./src/components/viewer-transform-widget/viewer-transform-widget.css?tag=vertex-viewer-transform-widget&encapsulation=shadow","./src/components/viewer-transform-widget/viewer-transform-widget.tsx"],"sourcesContent":["import {\n Euler,\n Matrix4,\n Plane,\n Point,\n Quaternion,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n Frame,\n Viewport,\n} from '../../lib/types';\nimport { TransformWidgetInputPlacement } from './viewer-transform-widget-components';\n\nexport interface PointAndPlacement {\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n}\n\nexport function convertPointToCanvas(\n point: Point.Point,\n bounds?: DOMRect\n): Point.Point | undefined {\n return bounds != null\n ? Point.create(point.x - bounds.left, point.y - bounds.top)\n : undefined;\n}\n\nexport function convertCanvasPointToWorld(\n point?: Point.Point,\n frame?: Frame,\n viewport?: Viewport,\n transform?: Matrix4.Matrix4\n): Vector3.Vector3 | undefined {\n const position =\n transform != null ? Vector3.fromMatrixPosition(transform) : undefined;\n\n if (point != null && frame != null && viewport != null && position != null) {\n if (frame.scene.camera.isOrthographic()) {\n const ray = viewport.transformPointToOrthographicRay(\n point,\n frame.image,\n frame.scene.camera\n );\n // Offset the point to past the bounding sphere of the model to\n // adjust the position plane location.\n const offsetPoint = Ray.at(\n Ray.create({\n origin: position,\n direction: frame.scene.camera.direction,\n }),\n Vector3.magnitude(frame.scene.camera.viewVector) * 2\n );\n\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(\n frame.scene.camera.direction,\n offsetPoint\n )\n );\n } else {\n const ray = viewport.transformPointToRay(\n point,\n frame.image,\n frame.scene.camera\n );\n\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(frame.scene.camera.direction, position)\n );\n }\n }\n return undefined;\n}\n\nexport function computeInputTransform(\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType = 'millimeters',\n angleUnit: AngleUnitType = 'degrees'\n): Matrix4.Matrix4 {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): number => angles.convertFrom(value - lastValue);\n const position = (): number =>\n units.convertRealValueToWorld(value - lastValue);\n\n switch (identifier) {\n case 'x-translate':\n return Matrix4.makeTranslation(Vector3.create(position(), 0, 0));\n case 'y-translate':\n return Matrix4.makeTranslation(Vector3.create(0, position(), 0));\n case 'z-translate':\n return Matrix4.makeTranslation(Vector3.create(0, 0, position()));\n case 'x-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.left(), rotation())\n );\n case 'y-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.down(), rotation())\n );\n case 'z-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.forward(), rotation())\n );\n }\n return Matrix4.makeIdentity();\n}\n\nexport function computeInputDisplayValue(\n identifier: string,\n current: Matrix4.Matrix4,\n start: Matrix4.Matrix4,\n distanceUnit: DistanceUnitType = 'millimeters',\n angleUnit: AngleUnitType = 'degrees'\n): number {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): Matrix4.Matrix4 =>\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const transformDiff = (): Matrix4.Matrix4 =>\n Matrix4.multiply(current, Matrix4.invert(start));\n const relativeTranslationDiff = (): Vector3.Vector3 =>\n Vector3.transformMatrix(\n Vector3.fromMatrixPosition(transformDiff()),\n Matrix4.invert(rotation())\n );\n const relativeRotationDiff = (): Euler.Euler =>\n Euler.create(\n Vector3.transformMatrix(\n Euler.fromRotationMatrix(Matrix4.invert(transformDiff())),\n Matrix4.invert(rotation())\n )\n );\n\n switch (identifier) {\n case 'x-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().x);\n case 'y-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().y);\n case 'z-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().z);\n case 'x-rotate':\n return angles.convertTo(relativeRotationDiff().x);\n case 'y-rotate':\n return angles.convertTo(relativeRotationDiff().y);\n case 'z-rotate':\n return angles.convertTo(relativeRotationDiff().z);\n }\n return 0;\n}\n\nexport function computeUpdatedTransform(\n current: Matrix4.Matrix4,\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n viewVector: Vector3.Vector3,\n angle: number,\n identifier: string\n): Matrix4.Matrix4 {\n const delta = Vector3.subtract(next, previous);\n\n switch (identifier) {\n case 'x-translate': {\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.right(), delta)\n );\n }\n case 'y-translate':\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.up(), delta)\n );\n case 'z-translate':\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.back(), delta)\n );\n case 'x-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.right()),\n angle\n )\n )\n ),\n current\n );\n case 'y-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.up()),\n angle\n )\n )\n ),\n current\n );\n case 'z-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.forward()),\n angle\n )\n )\n ),\n current\n );\n default:\n return current;\n }\n}\n\nexport function computeRotationAxis(\n current: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n axis: Vector3.Vector3\n): Vector3.Vector3 {\n const rotation = Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const rotatedAxis = Vector3.transformMatrix(axis, rotation);\n const rotatedNegatedAxis = Vector3.transformMatrix(\n Vector3.negate(axis),\n rotation\n );\n\n return Vector3.dot(viewVector, rotatedAxis) >\n Vector3.dot(viewVector, rotatedNegatedAxis)\n ? rotatedAxis\n : rotatedNegatedAxis;\n}\n\nexport function computeTranslation(\n current: Matrix4.Matrix4,\n axis: Vector3.Vector3,\n delta: Vector3.Vector3\n): Matrix4.Matrix4 {\n const rotation = Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const rotatedAxis = Vector3.transformMatrix(axis, rotation);\n const rotatedDelta = Vector3.multiply(rotatedAxis, delta);\n\n return Matrix4.makeTranslation(\n Vector3.scale(rotatedDelta.x + rotatedDelta.y + rotatedDelta.z, axis)\n );\n}\n\n/**\n * Computes a rotation Matrix4 by applying the rotation at the given position,\n * then translating it back to convert it to a world delta.\n * @param rotation\n * @param current\n * @returns\n */\nexport function computeRotation(\n current: Matrix4.Matrix4,\n delta: Matrix4.Matrix4\n): Matrix4.Matrix4 {\n return Matrix4.multiply(\n Matrix4.multiply(\n Matrix4.makeTranslation(Vector3.fromMatrixPosition(current)),\n delta\n ),\n Matrix4.makeTranslation(Vector3.negate(Vector3.fromMatrixPosition(current)))\n );\n}\n\nexport function computeInputPosition(\n viewport: Viewport,\n bounds: Rectangle.Rectangle,\n shapePoints: Point.Point[]\n): PointAndPlacement {\n const paddedBounds = Rectangle.pad(bounds, 5);\n const canvasPoints = shapePoints.map((sp) =>\n viewport.transformNdcPointToViewport(sp)\n );\n\n const topLeft = Rectangle.topLeft(paddedBounds);\n const topRight = Point.add(topLeft, Point.create(paddedBounds.width, 0));\n const bottomRight = Rectangle.bottomRight(paddedBounds);\n const bottomLeft = Point.subtract(\n bottomRight,\n Point.create(paddedBounds.width, 0)\n );\n\n const center = Point.scale(\n canvasPoints.reduce((sum, pt) => Point.add(sum, pt), Point.create()),\n 1 / canvasPoints.length,\n 1 / canvasPoints.length\n );\n\n const closestPoint = [topRight, bottomLeft, bottomRight].reduce(\n (closest, pt) =>\n Point.distance(center, pt) < Point.distance(center, closest)\n ? pt\n : closest,\n topLeft\n );\n\n switch (closestPoint) {\n case topLeft:\n return { point: closestPoint, placement: 'top-left' };\n case topRight:\n return { point: closestPoint, placement: 'top-right' };\n case bottomLeft:\n return { point: closestPoint, placement: 'bottom-left' };\n default:\n return { point: closestPoint, placement: 'bottom-right' };\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\n\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n Viewport,\n} from '../../lib/types';\n\nexport type TransformWidgetInputPlacement =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right';\n\nexport interface TransformWidgetInputProps {\n ref: (el?: HTMLInputElement) => void;\n bounds?: DOMRect;\n\n viewport: Viewport;\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n\n distance?: number;\n angle?: number;\n decimalPlaces: number;\n distanceUnit: DistanceUnitType;\n angleUnit: AngleUnitType;\n\n onChange?: (value: number) => void | Promise<void>;\n onIncrement?: VoidFunction;\n onDecrement?: VoidFunction;\n}\n\nexport const TransformWidgetInput: FunctionalComponent<\n TransformWidgetInputProps\n> = ({\n ref,\n bounds,\n viewport,\n point,\n placement,\n distance,\n angle,\n decimalPlaces,\n distanceUnit,\n angleUnit,\n onChange,\n onIncrement,\n onDecrement,\n}) => {\n const angles = new AngleUnits(angleUnit);\n const units = new DistanceUnits(distanceUnit);\n const definedValue = distance ?? angle ?? 0;\n const displayValue = `${parseFloat(definedValue.toFixed(decimalPlaces))} ${\n distance != null ? units.unit.abbreviatedName : angles.unit.abbreviatedName\n }`;\n const inputPlacement = constrainInputToViewport(\n viewport,\n bounds ?? Dimensions.create(0, 0),\n point,\n placement\n );\n\n const handleChange = (event: Event): void => {\n if (event.target != null) {\n const parsed = parseFloat((event.target as HTMLInputElement).value);\n\n if (!isNaN(parsed)) {\n onChange?.(parseFloat((event.target as HTMLInputElement).value));\n }\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'ArrowUp') {\n onIncrement?.();\n } else if (event.key === 'ArrowDown') {\n onDecrement?.();\n }\n };\n\n return (\n <div\n class=\"widget-input wrapper\"\n style={{ ...inputPlacement }}\n onKeyDown={handleKeyDown}\n >\n <input\n ref={ref}\n class=\"widget-input\"\n type=\"text\"\n value={displayValue}\n onChange={handleChange}\n ></input>\n </div>\n );\n};\n\nfunction constrainTo(dimension: number, length: number): number {\n return Math.min(dimension, Math.max(0, length));\n}\n\ninterface InputPlacement {\n left?: string;\n right?: string;\n top?: string;\n bottom?: string;\n}\n\nfunction constrainInputToViewport(\n viewport: Viewport,\n inputDimensions: Dimensions.Dimensions,\n point: Point.Point,\n placement: TransformWidgetInputPlacement,\n padding = 5\n): InputPlacement {\n const { width, height } = viewport.dimensions;\n const paddedWidth = inputDimensions.width + padding;\n const paddedHeight = inputDimensions.height + padding;\n\n function toCssLength(length: number): string {\n return `${length}px`;\n }\n\n switch (placement) {\n case 'top-left':\n return {\n right: toCssLength(constrainTo(width - paddedWidth, width - point.x)),\n bottom: toCssLength(\n constrainTo(height - paddedHeight, height - point.y)\n ),\n };\n case 'top-right':\n return {\n left: toCssLength(constrainTo(width - paddedWidth, point.x)),\n bottom: toCssLength(\n constrainTo(height - paddedHeight, height - point.y)\n ),\n };\n case 'bottom-left':\n return {\n right: toCssLength(constrainTo(width - paddedWidth, width - point.x)),\n top: toCssLength(constrainTo(height - paddedHeight, point.y)),\n };\n case 'bottom-right':\n default:\n return {\n left: toCssLength(constrainTo(width - paddedWidth, point.x)),\n top: toCssLength(constrainTo(height - paddedHeight, point.y)),\n };\n }\n}\n","import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { TriangleMeshPoints } from './mesh';\n\nexport function xAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n Vector3.up(),\n triangleSize\n );\n}\n\nexport function yAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.back(),\n triangleSize\n );\n}\n\nexport function zAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.up(),\n triangleSize\n );\n}\n\nfunction computeRotationNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n xDirection: Vector3.Vector3,\n yDirection: Vector3.Vector3,\n triangleSize: number\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n Vector3.add(xDirection, yDirection),\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedX = Vector3.transformMatrix(\n xDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedY = Vector3.transformMatrix(\n yDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * 10, transformedDirection)\n );\n\n const xRay = Ray.create({\n origin: position,\n direction: transformedX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedY,\n });\n const rotationAxis = Vector3.cross(transformedX, transformedY);\n\n const base = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -triangleSize),\n rotationAxis,\n position\n );\n const right = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, triangleSize),\n rotationAxis,\n position\n );\n const up = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, triangleSize),\n rotationAxis,\n position\n );\n const left = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -triangleSize),\n rotationAxis,\n position\n );\n\n return new TriangleMeshPoints(\n Vector3.dot(transformedX, camera.direction) !== -1 &&\n Vector3.dot(transformedY, camera.direction) !== -1,\n base,\n left,\n right,\n up,\n Vector3.transformMatrix(base, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix)\n );\n}\n","import { BoundingBox, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Frame, Viewport } from '../../lib/types';\nimport { Drawable } from './drawable';\nimport { TriangleMesh } from './mesh';\n\nexport function testDrawable(\n drawable: Drawable,\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n if (drawable instanceof TriangleMesh) {\n return testTriangleMesh(drawable, frame, viewport, point);\n }\n return false;\n}\n\nexport function testTriangleMesh(\n mesh: TriangleMesh,\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n return (\n testTriangle(\n [mesh.points.worldLeft, mesh.points.worldRight, mesh.points.worldTip],\n frame,\n viewport,\n point\n ) ||\n testTriangle(\n [mesh.points.worldLeft, mesh.points.worldRight, mesh.points.worldBase],\n frame,\n viewport,\n point\n )\n );\n}\n\n/**\n * Adapted from https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm.\n */\nexport function testTriangle(\n points: Vector3.Vector3[],\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n if (points.length === 3) {\n const ray = frame.scene.camera.isOrthographic()\n ? viewport.transformPointToOrthographicRay(\n point,\n frame.image,\n frame.scene.camera\n )\n : viewport.transformPointToRay(point, frame.image, frame.scene.camera);\n\n const edge1 = Vector3.subtract(points[1], points[0]);\n const edge2 = Vector3.subtract(points[2], points[0]);\n\n const epsilon = BoundingBox.epsilon(\n BoundingBox.fromVectors([ray.direction, ray.origin, edge1, edge2]) ??\n BoundingBox.create(edge1, edge2)\n );\n\n const p = Vector3.cross(ray.direction, edge2);\n const det = Vector3.dot(edge1, p);\n\n // This check causes a `det` of NaN or 0 to return false\n // without needing to perform the subsequent calculations.\n if (!(Math.abs(det) >= epsilon)) {\n return false;\n }\n\n const t = Vector3.subtract(ray.origin, points[0]);\n const u = Vector3.dot(t, p) / det;\n\n if (u < 0 || u > 1) {\n return false;\n }\n\n const q = Vector3.cross(t, edge1);\n const v = Vector3.dot(ray.direction, q) / det;\n\n if (v < 0 || u + v > 1) {\n return false;\n }\n\n const r = Vector3.dot(edge2, q) / det;\n\n // Ignore the case where the computed hit position is negative\n // if in orthographic to correctly return hit results when close\n // to the camera.\n // TODO: revisit with https://vertexvis.atlassian.net/browse/PLAT-1549\n return !isNaN(r) && (r > 0 || frame.scene.camera.isOrthographic());\n }\n return false;\n}\n","import { Matrix4 } from '@vertexvis/geometry';\nimport { Point, Rectangle, Vector3 } from '@vertexvis/geometry';\nimport { Color, Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\nimport regl from 'regl';\nimport shapeBuilder from 'regl-shape';\n\nimport {\n axisPositions,\n rotationAxisPositions,\n} from '../../lib/transforms/axis-lines';\nimport {\n xAxisRotationPositions,\n yAxisRotationPositions,\n zAxisRotationPositions,\n} from '../../lib/transforms/axis-rotation';\nimport {\n xAxisArrowPositions,\n yAxisArrowPositions,\n zAxisArrowPositions,\n} from '../../lib/transforms/axis-translation';\nimport {\n computeDrawable2dBounds,\n Drawable,\n} from '../../lib/transforms/drawable';\nimport { testDrawable } from '../../lib/transforms/hits';\nimport { AxisLine, RotationLine } from '../../lib/transforms/line';\nimport { TriangleMesh } from '../../lib/transforms/mesh';\nimport { CreateShape } from '../../lib/transforms/shape';\nimport { Frame } from '../../lib/types';\nimport { ReglComponent } from '../../lib/webgl/regl-component';\n\nexport interface DrawableElementColors {\n xArrow?: Color.Color | string;\n yArrow?: Color.Color | string;\n zArrow?: Color.Color | string;\n hovered?: Color.Color | string;\n outline?: Color.Color | string;\n}\n\nexport interface DisabledAxis {\n xRotation: boolean;\n yRotation: boolean;\n zRotation: boolean;\n xTranslation: boolean;\n yTranslation: boolean;\n zTranslation: boolean;\n}\n\nexport class TransformWidget extends ReglComponent {\n private cursor?: Point.Point;\n\n private xAxis?: AxisLine;\n private yAxis?: AxisLine;\n private zAxis?: AxisLine;\n private xArrow?: TriangleMesh;\n private yArrow?: TriangleMesh;\n private zArrow?: TriangleMesh;\n private xRotation?: TriangleMesh;\n private xyRotationLine?: RotationLine;\n private xzRotationLine?: RotationLine;\n private yRotation?: TriangleMesh;\n private yxRotationLine?: RotationLine;\n private yzRotationLine?: RotationLine;\n private zRotation?: TriangleMesh;\n private zxRotationLine?: RotationLine;\n private zyRotationLine?: RotationLine;\n\n private disabledAxis: DisabledAxis = {\n xTranslation: false,\n yTranslation: false,\n zTranslation: false,\n xRotation: false,\n yRotation: false,\n zRotation: false,\n };\n\n private axisLines: AxisLine[] = [];\n private rotationLines: RotationLine[] = [];\n private translationMeshes: TriangleMesh[] = [];\n private rotationMeshes: TriangleMesh[] = [];\n private hoveredElement?: Drawable;\n\n private transform?: Matrix4.Matrix4;\n private interactiveBounds?: Rectangle.Rectangle;\n private fullBounds?: Rectangle.Rectangle;\n\n private hoveredChanged = new EventDispatcher<Drawable | undefined>();\n\n private xArrowFillColor?: Color.Color | string;\n private yArrowFillColor?: Color.Color | string;\n private zArrowFillColor?: Color.Color | string;\n\n private hoveredArrowFillColor?: Color.Color | string;\n private outlineColor?: Color.Color | string;\n\n public constructor(\n canvasElement: HTMLCanvasElement,\n colors: DrawableElementColors = {},\n initialDisabledAxes: Partial<DisabledAxis> = {}\n ) {\n super(canvasElement);\n\n this.xArrowFillColor = colors.xArrow;\n this.yArrowFillColor = colors.yArrow;\n this.zArrowFillColor = colors.zArrow;\n this.hoveredArrowFillColor = colors.hovered;\n this.outlineColor = colors.outline;\n\n this.disabledAxis.xTranslation = initialDisabledAxes.xTranslation ?? false;\n this.disabledAxis.yTranslation = initialDisabledAxes.yTranslation ?? false;\n this.disabledAxis.zTranslation = initialDisabledAxes.zTranslation ?? false;\n this.disabledAxis.xRotation = initialDisabledAxes.xRotation ?? false;\n this.disabledAxis.yRotation = initialDisabledAxes.yRotation ?? false;\n this.disabledAxis.zRotation = initialDisabledAxes.zRotation ?? false;\n }\n\n public dispose(): void {\n this.reglFrameDisposable?.cancel();\n }\n\n /**\n * @internal - visible for testing\n */\n public getDrawableElements(): Drawable[] {\n return this.drawableElements;\n }\n\n public getFullBounds(): Rectangle.Rectangle | undefined {\n return this.fullBounds;\n }\n\n public boundsContainsPoint(point: Point.Point): boolean {\n return (\n this.interactiveBounds != null &&\n this.frame != null &&\n Rectangle.containsPoints(this.interactiveBounds, point)\n );\n }\n\n public updateDisabledAxis(axis: Partial<DisabledAxis>): void {\n this.disabledAxis = {\n ...this.disabledAxis,\n ...axis,\n };\n this.updateDisabledOnDrawables();\n }\n\n public updateCursor(cursor?: Point.Point): void {\n this.cursor = cursor;\n\n if (cursor != null && this.frame != null) {\n this.updateHovered();\n } else {\n this.clearHovered();\n }\n }\n\n public updateTransform(transform?: Matrix4.Matrix4): void {\n this.transform = transform;\n\n if (transform != null && this.frame != null) {\n this.updateAndDraw();\n } else {\n this.clear();\n this.reglFrameDisposable?.cancel();\n this.reglFrameDisposable = undefined;\n }\n }\n\n public updateColors(colors: DrawableElementColors = {}): void {\n this.xArrowFillColor = colors.xArrow ?? this.xArrowFillColor;\n this.yArrowFillColor = colors.yArrow ?? this.yArrowFillColor;\n this.zArrowFillColor = colors.zArrow ?? this.zArrowFillColor;\n this.hoveredArrowFillColor = colors.hovered ?? this.hoveredArrowFillColor;\n this.outlineColor = colors.outline ?? this.outlineColor;\n\n this.xArrow?.updateFillColor(this.getXTranslationColor(), true);\n this.yArrow?.updateFillColor(this.getYTranslationColor(), true);\n this.zArrow?.updateFillColor(this.getZTranslationColor(), true);\n this.xRotation?.updateFillColor(this.getXRotationColor(), true);\n this.yRotation?.updateFillColor(this.getYRotationColor(), true);\n this.zRotation?.updateFillColor(this.getZRotationColor(), true);\n this.hoveredElement?.updateFillColor(this.hoveredArrowFillColor);\n }\n\n public onHoveredChanged(\n listener: Listener<Drawable | undefined>\n ): Disposable {\n return this.hoveredChanged.on(listener);\n }\n\n private updateDisabledOnDrawables(): void {\n this.xRotation?.setDisabled(this.disabledAxis.xRotation);\n this.xyRotationLine?.setDisabled(this.disabledAxis.xRotation);\n this.xzRotationLine?.setDisabled(this.disabledAxis.xRotation);\n\n this.yRotation?.setDisabled(this.disabledAxis.yRotation);\n this.yzRotationLine?.setDisabled(this.disabledAxis.yRotation);\n this.yxRotationLine?.setDisabled(this.disabledAxis.yRotation);\n\n this.zRotation?.setDisabled(this.disabledAxis.zRotation);\n this.zxRotationLine?.setDisabled(this.disabledAxis.zRotation);\n this.zyRotationLine?.setDisabled(this.disabledAxis.zRotation);\n\n this.xArrow?.setDisabled(this.disabledAxis.xTranslation);\n this.yArrow?.setDisabled(this.disabledAxis.yTranslation);\n this.zArrow?.setDisabled(this.disabledAxis.zTranslation);\n\n this.updateColors();\n }\n\n private updateHovered(): void {\n const previousHovered = this.hoveredElement;\n const currentFrame = this.frame;\n\n if (currentFrame != null) {\n this.hoveredElement = [...this.translationMeshes, ...this.rotationMeshes]\n .filter((el) => el.points.valid && !el.isDisabled())\n .find((m) =>\n this.cursor != null\n ? testDrawable(m, currentFrame, this.viewport, this.cursor)\n : false\n );\n\n if (this.hoveredElement !== previousHovered) {\n this.hoveredChanged.emit(this.hoveredElement);\n this.hoveredElement?.updateFillColor(this.hoveredArrowFillColor);\n previousHovered?.updateFillColor(previousHovered?.initialFillColor);\n }\n }\n }\n\n private clearHovered(): void {\n const previousHovered = this.hoveredElement;\n this.hoveredElement = undefined;\n\n if (this.hoveredElement !== previousHovered) {\n this.hoveredChanged.emit(this.hoveredElement);\n previousHovered.updateFillColor(previousHovered.initialFillColor);\n }\n }\n\n protected hasData(): boolean {\n return this.transform != null;\n }\n\n protected createOrUpdateElements(): void {\n if (this.transform != null && this.frame != null) {\n if (this.xArrow == null || this.yArrow == null || this.zArrow == null) {\n this.createElements(this.transform, this.frame);\n } else {\n this.updateElements(this.transform, this.frame);\n }\n\n this.interactiveBounds = computeDrawable2dBounds(\n this.viewport,\n ...this.rotationMeshes,\n ...this.translationMeshes\n );\n this.fullBounds = computeDrawable2dBounds(\n this.viewport,\n ...this.rotationMeshes,\n ...this.translationMeshes,\n ...this.axisLines\n );\n }\n }\n\n private createElements(transform: Matrix4.Matrix4, frame: Frame): void {\n this.reglCommand = regl({\n canvas: this.canvasElement,\n extensions: 'angle_instanced_arrays',\n });\n const { createShape } = shapeBuilder(this.reglCommand);\n\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n this.xArrow = new TriangleMesh(\n createShape,\n 'x-translate',\n xAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getXTranslationColor()\n );\n\n this.xRotation = new TriangleMesh(\n createShape,\n 'x-rotate',\n xAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getXRotationColor()\n );\n this.xAxis = new AxisLine(\n createShape,\n 'x-axis',\n axisPositions(transform, frame.scene.camera, this.xArrow),\n this.outlineColor,\n this.getXTranslationColor()\n );\n this.yArrow = new TriangleMesh(\n createShape,\n 'y-translate',\n yAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getYTranslationColor()\n );\n\n this.yRotation = new TriangleMesh(\n createShape,\n 'y-rotate',\n yAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getYRotationColor()\n );\n this.yAxis = new AxisLine(\n createShape,\n 'y-axis',\n axisPositions(transform, frame.scene.camera, this.yArrow),\n this.outlineColor,\n this.getYTranslationColor()\n );\n this.zArrow = new TriangleMesh(\n createShape,\n 'z-translate',\n zAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getZTranslationColor()\n );\n this.zAxis = new AxisLine(\n createShape,\n 'z-axis',\n axisPositions(transform, frame.scene.camera, this.zArrow),\n this.outlineColor,\n this.getZTranslationColor()\n );\n this.zRotation = new TriangleMesh(\n createShape,\n 'z-rotate',\n zAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getZRotationColor()\n );\n\n this.createRotationLines(createShape, transform, frame);\n\n this.axisLines = [this.xAxis, this.yAxis, this.zAxis];\n this.translationMeshes = [this.xArrow, this.yArrow, this.zArrow];\n this.rotationMeshes = [this.xRotation, this.yRotation, this.zRotation];\n this.updateDisabledOnDrawables();\n\n this.availableElements = [\n ...this.axisLines,\n ...this.rotationLines,\n ...this.translationMeshes,\n ...this.rotationMeshes,\n ];\n }\n\n private getXRotationColor(): Color.Color | string | undefined {\n return this.xArrowFillColor;\n }\n\n private getYRotationColor(): Color.Color | string | undefined {\n return this.yArrowFillColor;\n }\n\n private getZRotationColor(): Color.Color | string | undefined {\n return this.zArrowFillColor;\n }\n\n private getXTranslationColor(): Color.Color | string | undefined {\n return this.xArrowFillColor;\n }\n\n private getYTranslationColor(): Color.Color | string | undefined {\n return this.yArrowFillColor;\n }\n\n private getZTranslationColor(): Color.Color | string | undefined {\n return this.zArrowFillColor;\n }\n\n private createRotationLines(\n createShape: CreateShape,\n transform: Matrix4.Matrix4,\n frame: Frame\n ): void {\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n const xyRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n );\n const xzRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n );\n const yxRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n );\n const yzRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n );\n const zxRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n );\n const zyRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n );\n\n if (xyRotationLinePoints != null) {\n this.xyRotationLine = new RotationLine(\n createShape,\n 'xy-rotation-line',\n xyRotationLinePoints,\n this.outlineColor\n );\n }\n if (xzRotationLinePoints != null) {\n this.xzRotationLine = new RotationLine(\n createShape,\n 'xz-rotation-line',\n xzRotationLinePoints,\n this.outlineColor\n );\n }\n if (yxRotationLinePoints != null) {\n this.yxRotationLine = new RotationLine(\n createShape,\n 'yx-rotation-line',\n yxRotationLinePoints,\n this.outlineColor\n );\n }\n if (yzRotationLinePoints != null) {\n this.yzRotationLine = new RotationLine(\n createShape,\n 'yz-rotation-line',\n yzRotationLinePoints,\n this.outlineColor\n );\n }\n if (zxRotationLinePoints != null) {\n this.zxRotationLine = new RotationLine(\n createShape,\n 'zx-rotation-line',\n zxRotationLinePoints,\n this.outlineColor\n );\n }\n if (zyRotationLinePoints != null) {\n this.zyRotationLine = new RotationLine(\n createShape,\n 'zy-rotation-line',\n zyRotationLinePoints,\n this.outlineColor\n );\n }\n\n this.rotationLines = [\n this.xyRotationLine,\n this.xzRotationLine,\n this.yxRotationLine,\n this.yzRotationLine,\n this.zxRotationLine,\n this.zyRotationLine,\n ].filter((l) => l != null) as RotationLine[];\n }\n\n private updateElements(transform: Matrix4.Matrix4, frame: Frame): void {\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n if (this.xArrow != null) {\n this.xArrow.updatePoints(\n xAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.xAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.xArrow)\n );\n }\n this.xRotation?.updatePoints(\n xAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n if (this.yArrow != null) {\n this.yArrow.updatePoints(\n yAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.yAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.yArrow)\n );\n }\n this.yRotation?.updatePoints(\n yAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n if (this.zArrow != null) {\n this.zArrow.updatePoints(\n zAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.zAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.zArrow)\n );\n }\n this.zRotation?.updatePoints(\n zAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n this.xyRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n )\n );\n this.xzRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n )\n );\n this.yxRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n )\n );\n this.yzRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n )\n );\n this.zxRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n )\n );\n this.zyRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n )\n );\n }\n}\n",":host {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n /**\n * @prop --viewer-transform-widget-x-axis-arrow-color: A CSS color for the arrow\n * at the end of the X axis on this widget. Defaults to `#ea3324`.\n */\n --viewer-transform-widget-x-axis-arrow-color: var(--x-axis-color);\n\n /**\n * @prop --viewer-transform-widget-y-axis-arrow-color: A CSS color for the arrow\n * at the end of the Y axis on this widget. Defaults to `#4faf32`.\n */\n --viewer-transform-widget-y-axis-arrow-color: var(--y-axis-color);\n\n /**\n * @prop --viewer-transform-widget-z-axis-arrow-color: A CSS color for the arrow\n * at the end of the Z axis on this widget. Defaults to `#0000ff`.\n */\n --viewer-transform-widget-z-axis-arrow-color: var(--z-axis-color);\n\n\n /**\n * @prop --viewer-transform-widget-hovered-arrow-color: A CSS color for the arrow\n * when it is hovered. Defaults to `#ffff00`.\n */\n --viewer-transform-widget-hovered-arrow-color: #ffff00;\n\n /**\n * @prop --viewer-transform-widget-input-width: A CSS length for the width of the\n * input displayed near the handles. Defaults to `7em`.\n */\n --viewer-transform-widget-input-width: 7em;\n}\n\n.widget {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.widget.hovered {\n pointer-events: auto;\n}\n\n.widget-input.wrapper {\n position: absolute;\n pointer-events: auto;\n display: flex;\n border: 1px solid #cccccc;\n width: var(--viewer-transform-widget-input-width);\n}\n\ninput.widget-input {\n box-sizing: border-box;\n text-align: center;\n border: none;\n width: 100%;\n outline: none;\n}\n\ninput.widget-input:focus {\n outline: none;\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n Angle,\n Euler,\n Matrix4,\n Point,\n Quaternion,\n Vector3,\n} from '@vertexvis/geometry';\nimport { Color, Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { readDOM, writeDOM } from '../../lib/stencil';\nimport { TransformController } from '../../lib/transforms/controller';\nimport { Drawable } from '../../lib/transforms/drawable';\nimport { AngleUnitType, DistanceUnitType } from '../../lib/types';\nimport {\n computeInputDisplayValue,\n computeInputPosition,\n computeInputTransform,\n computeUpdatedTransform,\n convertCanvasPointToWorld,\n convertPointToCanvas,\n PointAndPlacement,\n} from './util';\nimport { TransformWidgetInput } from './viewer-transform-widget-components';\nimport { TransformWidget } from './widget';\n\n@Component({\n tag: 'vertex-viewer-transform-widget',\n styleUrl: 'viewer-transform-widget.css',\n shadow: true,\n})\nexport class ViewerTransformWidget {\n /**\n * An event that is emitted when the position of the widget changes.\n */\n @Event({ bubbles: true })\n public positionChanged!: EventEmitter<Vector3.Vector3 | undefined>;\n\n /**\n * An event that is emitted when the rotation of the widget changes.\n */\n @Event({ bubbles: true })\n public rotationChanged!: EventEmitter<Euler.Euler | undefined>;\n\n /**\n * An event that is emitted when the interaction has ended\n */\n @Event({ bubbles: true })\n public interactionEnded!: EventEmitter<Matrix4.Matrix4 | undefined>;\n\n /**\n * An event that is emitted an interaction with the widget has started\n */\n @Event({ bubbles: true })\n public interactionStarted!: EventEmitter<void>;\n\n /**\n * The viewer to connect to transforms. If nested within a <vertex-viewer>,\n * this property will be populated automatically.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The starting position of this transform widget. This position will be updated\n * as transforms occur. Setting this value to `undefined` will remove the widget.\n */\n @Prop({ mutable: true })\n public position?: Vector3.Vector3;\n\n /**\n * The starting angle for the transform widget. This rotation will be updated\n * as the rotations occur.\n */\n @Prop({ mutable: true })\n public rotation?: Euler.Euler;\n\n /**\n * The controller that is responsible for performing transforms.\n */\n @Prop({ mutable: true })\n public controller?: TransformController;\n\n /**\n * Determines whether or not the x-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xRotationDisabled = false;\n\n /**\n * Determines whether or not the y-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yRotationDisabled = false;\n\n /**\n * Determines whether or not the z-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public zRotationDisabled = false;\n\n /**\n * Determines whether or not the x-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xTranslationDisabled = false;\n\n /**\n * Determines whether or not the y-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yTranslationDisabled = false;\n\n /**\n * Determines whether or not the z-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public zTranslationDisabled = false;\n\n /**\n * Whether to show inputs beside the widget handles when they are interacted with.\n * Defaults to `true`.\n */\n @Prop()\n public showInputs = true;\n\n /**\n * The unit to show for translation inputs. Defaults to `millimeters`.\n *\n * @see DistanceUnitType\n */\n @Prop()\n public distanceUnit: DistanceUnitType = 'millimeters';\n\n /**\n * The unit to show for rotation inputs. Defaults to `degrees`.\n *\n * @see AngleUnitType\n */\n @Prop()\n public angleUnit: AngleUnitType = 'degrees';\n\n /**\n * The number of decimal places to show in the input. Defaults to `1`.\n */\n @Prop()\n public decimalPlaces = 1;\n\n /**\n * @internal\n * @ignore\n *\n * Visible for testing.\n */\n @Prop({ mutable: true })\n public hovered?: Drawable;\n\n @State()\n protected inputPosition?: PointAndPlacement;\n\n @State()\n protected inputValue?: number;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private startingTransform?: Matrix4.Matrix4;\n private currentTransform?: Matrix4.Matrix4;\n private dragStartTransform?: Matrix4.Matrix4;\n\n private xArrowColor: Color.Color | string = '#ea3324';\n private yArrowColor: Color.Color | string = '#4faf32';\n private zArrowColor: Color.Color | string = '#0000ff';\n private hoveredColor: Color.Color | string = '#ffff00';\n\n private widget?: TransformWidget;\n private lastDragged?: Drawable;\n private dragging?: Drawable;\n private lastAngle = 0;\n private lastWorldPosition?: Vector3.Vector3;\n private lastInputValue?: number;\n\n private canvasBounds?: DOMRect;\n private inputBounds?: DOMRect;\n private canvasResizeObserver?: ResizeObserver;\n private inputResizeObserver?: ResizeObserver;\n private hostStyleObserver?: MutationObserver;\n private canvasRef?: HTMLCanvasElement;\n private inputRef?: HTMLInputElement;\n\n private hoveredChangeDisposable?: Disposable;\n\n protected componentDidLoad(): void {\n window.addEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver = new ResizeObserver(this.handleResize);\n this.inputResizeObserver = new ResizeObserver(this.handleInputResize);\n this.hostStyleObserver = new MutationObserver(this.handleStyleChange);\n\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupTransformWidget(this.canvasRef);\n }\n\n this.hostStyleObserver.observe(this.hostEl, {\n attributes: true,\n attributeFilter: ['style'],\n });\n\n this.handleViewerChanged(this.viewer, undefined);\n this.handleStyleChange();\n }\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver?.disconnect();\n this.inputResizeObserver?.disconnect();\n this.hostStyleObserver?.disconnect();\n\n this.hoveredChangeDisposable?.dispose();\n this.widget?.dispose();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): void {\n oldViewer?.removeEventListener('frameDrawn', this.handleViewerFrameDrawn);\n oldViewer?.removeEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange\n );\n newViewer?.addEventListener('frameDrawn', this.handleViewerFrameDrawn);\n newViewer?.addEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange\n );\n\n if (newViewer?.stream != null) {\n this.controller?.dispose();\n this.controller = new TransformController(newViewer.stream);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('xTranslationDisabled')\n @Watch('yTranslationDisabled')\n @Watch('zTranslationDisabled')\n @Watch('xRotationDisabled')\n @Watch('yRotationDisabled')\n @Watch('zRotationDisabled')\n protected handleDisabledPropertyChanged(): void {\n this.widget?.updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n }\n\n /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(\n newRotation?: Euler.Euler,\n oldRotation?: Euler.Euler\n ): void {\n const rotationToApply = newRotation ?? Euler.create();\n\n this.currentTransform = this.getTransformForNewRotation(rotationToApply);\n this.startingTransform = this.currentTransform;\n\n // If the removal of the previous rotation above results in an identity matrix,\n // clear the transformation on the widget to prevent it from appearing at the origin.\n if (\n newRotation == null &&\n this.currentTransform != null &&\n Matrix4.isIdentity(this.currentTransform)\n ) {\n this.currentTransform = undefined;\n this.startingTransform = this.currentTransform;\n }\n\n this.widget?.updateTransform(this.currentTransform);\n\n console.debug(\n `Updating widget rotation [previous=${JSON.stringify(\n oldRotation\n )}, current=${JSON.stringify(newRotation)}]`\n );\n\n this.rotationChanged.emit(newRotation);\n }\n\n /**\n * @ignore\n */\n @Watch('position')\n protected handlePositionChanged(\n newPosition?: Vector3.Vector3,\n oldPosition?: Vector3.Vector3\n ): void {\n this.currentTransform = this.getTransformForNewPosition(newPosition);\n this.startingTransform = this.currentTransform;\n\n console.debug(\n `Updating widget position [previous=${JSON.stringify(\n oldPosition\n )}, current=${JSON.stringify(newPosition)}]`\n );\n this.widget?.updateTransform(this.currentTransform);\n\n if (newPosition == null) {\n this.lastDragged = undefined;\n this.inputPosition = undefined;\n this.controller?.clearTransform();\n }\n\n this.positionChanged.emit(newPosition);\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <canvas\n ref={(el) => {\n this.canvasRef = el;\n }}\n class={classNames('widget', {\n hovered: this.hovered != null,\n })}\n width={this.viewer?.viewport.width}\n height={this.viewer?.viewport.height}\n onPointerDown={this.handleBeginDrag}\n />\n\n {this.showInputs && this.inputPosition && this.viewer?.viewport && (\n <TransformWidgetInput\n ref={(el) => {\n if (el != null) {\n this.inputResizeObserver?.observe(el);\n } else if (this.inputRef != null) {\n this.inputResizeObserver?.unobserve(this.inputRef);\n }\n this.inputRef = el;\n }}\n bounds={this.inputBounds}\n viewport={this.viewer.viewport}\n point={this.inputPosition.point}\n placement={this.inputPosition.placement}\n angle={this.getDisplayedAngle()}\n distance={this.getDisplayedDistance()}\n decimalPlaces={this.decimalPlaces}\n distanceUnit={this.distanceUnit}\n angleUnit={this.angleUnit}\n onChange={this.handleInputChange}\n onIncrement={this.handleInputIncrement}\n onDecrement={this.handleInputDecrement}\n />\n )}\n </Host>\n );\n }\n\n private handleHoveredDrawableChanged = (drawable?: Drawable): void => {\n this.hovered = drawable;\n };\n\n private handleViewerFrameDrawn = (): void => {\n this.updatePropsFromViewer();\n };\n\n private handleViewerDimensionsChange = (): void => {\n writeDOM(() => {\n if (this.viewer != null && this.canvasRef != null) {\n this.canvasRef.width = this.viewer.viewport.width;\n this.canvasRef.height = this.viewer.viewport.height;\n\n this.updateCanvasBounds(this.canvasRef);\n }\n });\n };\n\n private handleResize = (): void => {\n if (this.canvasRef != null) {\n this.updateCanvasBounds(this.canvasRef);\n }\n };\n\n private handleInputResize = (): void => {\n if (this.inputRef != null) {\n const inputElement = this.inputRef;\n\n readDOM(() => {\n this.inputBounds = inputElement.getBoundingClientRect();\n });\n }\n };\n\n private handleStyleChange = (): void => {\n readDOM(() => {\n const hostStyles = window.getComputedStyle(this.hostEl);\n\n this.xArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-x-axis-arrow-color')\n .trim();\n this.yArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-y-axis-arrow-color')\n .trim();\n this.zArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-z-axis-arrow-color')\n .trim();\n this.hoveredColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-hovered-arrow-color')\n .trim();\n\n this.getTransformWidget().updateColors({\n xArrow: this.xArrowColor,\n yArrow: this.yArrowColor,\n zArrow: this.zArrowColor,\n hovered: this.hoveredColor,\n });\n });\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (this.dragging == null) {\n const canvasPoint = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n this.getCanvasBounds()\n );\n const widget = this.getTransformWidget();\n\n if (canvasPoint != null && widget.boundsContainsPoint(canvasPoint)) {\n widget.updateCursor(canvasPoint);\n } else {\n widget.updateCursor(undefined);\n this.hovered = undefined;\n }\n }\n };\n\n private handleBeginDrag = async (event: PointerEvent): Promise<void> => {\n const canvasBounds = this.getCanvasBounds();\n\n if (\n this.hovered != null &&\n canvasBounds != null &&\n this.viewer != null &&\n this.position != null &&\n this.viewer.frame != null\n ) {\n this.dragging = this.hovered;\n\n if (this.dragging.identifier !== this.lastDragged?.identifier) {\n this.dragStartTransform = this.currentTransform;\n }\n this.lastDragged = undefined;\n\n const currentCanvas = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n canvasBounds\n );\n const widgetCenter = this.viewer.viewport.transformWorldToViewport(\n this.position,\n this.viewer.frame.scene.camera.projectionViewMatrix\n );\n\n this.lastAngle =\n currentCanvas != null\n ? Angle.fromPoints(widgetCenter, currentCanvas)\n : 0;\n\n this.lastWorldPosition = convertCanvasPointToWorld(\n currentCanvas,\n this.viewer?.frame,\n this.viewer?.viewport,\n this.currentTransform\n );\n\n this.interactionStarted.emit();\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointermove', this.handleDrag);\n window.addEventListener('pointerup', this.handleEndTransform);\n }\n };\n\n private handleDrag = async (event: PointerEvent): Promise<void> => {\n // Prevent selection of text and interaction with view cube while dragging the widget\n event.preventDefault();\n\n const canvasBounds = this.getCanvasBounds();\n\n if (\n this.dragging != null &&\n this.lastWorldPosition != null &&\n canvasBounds != null &&\n this.viewer != null &&\n this.viewer.frame != null &&\n this.position != null\n ) {\n // Begin the transform on the first `pointermove` event as opposed to the\n // `pointerdown` to prevent accidental no-op transforms (identity matrix).\n await this.controller?.beginTransform();\n\n const currentCanvas = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n canvasBounds\n );\n const widgetCenter = this.viewer.viewport.transformWorldToViewport(\n this.position,\n this.viewer.frame.scene.camera.projectionViewMatrix\n );\n\n const currentWorld = convertCanvasPointToWorld(\n currentCanvas,\n this.viewer?.frame,\n this.viewer?.viewport,\n this.currentTransform\n );\n\n if (\n currentWorld != null &&\n currentCanvas != null &&\n widgetCenter != null\n ) {\n const angle = Angle.fromPoints(widgetCenter, currentCanvas);\n\n this.transform(\n this.lastWorldPosition,\n currentWorld,\n angle - this.lastAngle\n );\n\n this.updateInputPosition();\n this.updateInputValue();\n\n this.lastWorldPosition = currentWorld;\n this.lastAngle = angle;\n }\n }\n };\n\n private handleEndTransform = async (event: PointerEvent): Promise<void> => {\n const canvasPoint = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n this.getCanvasBounds()\n );\n const widget = this.getTransformWidget();\n this.lastDragged = this.dragging;\n\n this.dragging = undefined;\n this.lastWorldPosition = undefined;\n this.position =\n this.currentTransform != null\n ? Vector3.fromMatrixPosition(this.currentTransform)\n : this.position;\n this.lastAngle = 0;\n\n this.updateInputPosition();\n this.updateInputValue();\n\n widget.updateCursor(canvasPoint);\n widget.updateTransform(this.currentTransform);\n\n widget.updateDisabledAxis({\n xRotation: true,\n yRotation: true,\n zRotation: true,\n xTranslation: true,\n yTranslation: true,\n zTranslation: true,\n });\n\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleEndTransform);\n\n try {\n const delta = this.controller?.getCurrentDelta();\n\n await this.controller?.endTransform();\n\n this.interactionEnded.emit(delta);\n } catch (e) {\n console.error('Failed to end transform interaction', e);\n }\n\n window.addEventListener('pointermove', this.handlePointerMove);\n\n this.getTransformWidget().updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n };\n\n private handleInputIncrement = (): void => {\n if (this.inputValue != null && this.lastInputValue != null) {\n this.inputValue = this.lastInputValue + 1;\n this.handleInputChange(this.inputValue);\n }\n };\n\n private handleInputDecrement = (): void => {\n if (this.inputValue != null && this.lastInputValue != null) {\n this.inputValue = this.lastInputValue - 1;\n this.handleInputChange(this.inputValue);\n }\n };\n\n private handleInputChange = async (value: number): Promise<void> => {\n if (\n this.lastDragged != null &&\n this.currentTransform != null &&\n this.startingTransform != null &&\n this.lastInputValue != null\n ) {\n this.transformCurrent(\n computeInputTransform(\n this.lastDragged.identifier,\n value,\n this.lastInputValue,\n this.distanceUnit,\n this.angleUnit\n )\n );\n\n this.lastInputValue = value;\n\n await this.controller?.beginTransform();\n this.getTransformWidget().updateTransform(this.currentTransform);\n await this.controller?.updateTransform(\n Matrix4.multiply(\n this.currentTransform,\n Matrix4.invert(this.startingTransform)\n )\n );\n this.updateInputPosition();\n await this.controller?.endTransformDebounced(() => {\n this.position =\n this.currentTransform != null\n ? Vector3.fromMatrixPosition(this.currentTransform)\n : this.position;\n });\n }\n };\n\n private updatePropsFromViewer = (): void => {\n const { frame } = this.viewer || {};\n\n if (frame != null) {\n const widget = this.getTransformWidget();\n\n widget.updateFrame(frame, this.dragging == null);\n this.updateInputPosition();\n }\n };\n\n private transform(\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n angle: number\n ): void {\n if (\n this.position != null &&\n this.startingTransform != null &&\n this.currentTransform != null &&\n this.dragging != null &&\n this.viewer != null &&\n this.viewer.frame != null\n ) {\n this.currentTransform = computeUpdatedTransform(\n this.currentTransform,\n previous,\n next,\n this.viewer?.frame.scene.camera.viewVector,\n angle,\n this.dragging.identifier\n );\n\n this.getTransformWidget().updateTransform(this.currentTransform);\n this.controller?.updateTransform(\n Matrix4.multiply(\n this.currentTransform,\n Matrix4.invert(this.startingTransform)\n )\n );\n }\n }\n\n private handleSettingDisabledAxis(): void {\n if (this.widget) {\n this.widget.updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n } else {\n console.warn('Cannot set disabled values - no widget defined');\n }\n }\n\n private setupTransformWidget = (\n canvasRef: HTMLCanvasElement\n ): TransformWidget => {\n console.debug(\n `Initializing transform widget. [initial-position=${JSON.stringify(\n this.position\n )}, has-initial-frame=${this.viewer?.frame != null}]`\n );\n\n this.widget = new TransformWidget(canvasRef, {\n xArrow: this.xArrowColor,\n yArrow: this.yArrowColor,\n zArrow: this.zArrowColor,\n hovered: this.hoveredColor,\n });\n\n if (this.rotation != null) {\n this.currentTransform = this.getTransformForNewRotation(this.rotation);\n this.startingTransform = this.currentTransform;\n this.widget.updateTransform(this.currentTransform);\n }\n\n if (this.position != null) {\n this.currentTransform = this.getTransformForNewPosition(this.position);\n this.startingTransform = this.currentTransform;\n this.widget.updateTransform(this.currentTransform);\n }\n if (this.viewer?.frame != null) {\n this.widget.updateFrame(this.viewer.frame, true);\n }\n\n this.handleSettingDisabledAxis();\n\n this.hoveredChangeDisposable = this.widget.onHoveredChanged(\n this.handleHoveredDrawableChanged\n );\n\n return this.widget;\n };\n\n private updateCanvasBounds = (canvasElement: HTMLCanvasElement): void => {\n readDOM(() => {\n this.canvasBounds = canvasElement.getBoundingClientRect();\n\n this.getTransformWidget().updateDimensions(canvasElement);\n });\n };\n\n private updateInputValue = (): void => {\n const dragging = this.dragging ?? this.lastDragged;\n if (\n dragging != null &&\n this.currentTransform != null &&\n this.dragStartTransform != null\n ) {\n this.lastInputValue = this.inputValue;\n\n this.inputValue = computeInputDisplayValue(\n dragging.identifier,\n this.currentTransform,\n this.dragStartTransform,\n this.distanceUnit,\n this.angleUnit\n );\n }\n };\n\n private transformCurrent = (transform: Matrix4.Matrix4): void => {\n this.currentTransform =\n this.currentTransform != null\n ? Matrix4.multiply(this.currentTransform, transform)\n : transform;\n };\n\n private updateInputPosition = (): void => {\n const dragging = this.dragging ?? this.lastDragged;\n if (\n this.showInputs &&\n this.viewer?.frame != null &&\n this.position != null &&\n dragging != null\n ) {\n const widget = this.getTransformWidget();\n const widgetBounds = widget.getFullBounds();\n\n this.inputPosition =\n widgetBounds != null\n ? computeInputPosition(\n this.viewer.viewport,\n widgetBounds,\n dragging.points.toArray()\n )\n : undefined;\n }\n };\n\n private getDisplayedAngle = (): number | undefined => {\n const draggingIdentifier =\n this.dragging?.identifier ?? this.lastDragged?.identifier;\n if (draggingIdentifier?.includes('rotate')) {\n return this.inputValue;\n }\n };\n\n private getDisplayedDistance = (): number | undefined => {\n const draggingIdentifier =\n this.dragging?.identifier ?? this.lastDragged?.identifier;\n if (draggingIdentifier?.includes('translate')) {\n return this.inputValue;\n }\n };\n\n private getTransformForNewPosition = (\n newPosition?: Vector3.Vector3\n ): Matrix4.Matrix4 | undefined => {\n if (newPosition != null) {\n const c =\n this.currentTransform != null\n ? this.currentTransform\n : Matrix4.makeIdentity();\n\n const currentRotation = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(c)\n );\n const position = Matrix4.makeTranslation(newPosition);\n\n return Matrix4.multiply(position, currentRotation);\n }\n };\n\n private getTransformForNewRotation = (\n newRotationEuler: Euler.Euler\n ): Matrix4.Matrix4 | undefined => {\n const c =\n this.currentTransform != null\n ? this.currentTransform\n : Matrix4.makeIdentity();\n\n const oldRotation = Matrix4.invert(\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(c))\n );\n\n const newRotation = Matrix4.makeRotation(\n Quaternion.fromEuler(newRotationEuler)\n );\n const oldTranslation = Matrix4.multiply(c, oldRotation);\n\n return Matrix4.multiply(oldTranslation, newRotation);\n };\n\n private getCanvasBounds = (): DOMRect | undefined => {\n if (this.canvasBounds != null) {\n return this.canvasBounds;\n } else if (this.canvasRef != null) {\n this.updateCanvasBounds(this.canvasRef);\n return this.canvasBounds;\n }\n };\n\n private getTransformWidget = (): TransformWidget => {\n if (this.widget == null && this.canvasRef != null) {\n return this.setupTransformWidget(this.canvasRef);\n } else if (this.widget != null) {\n return this.widget;\n } else {\n throw new Error(\n 'Transform widget was not initialized. The canvas element may not have been initialized.'\n );\n }\n };\n}\n"],"version":3}