@vertexvis/viewer 0.17.2 → 0.17.3-canary.1

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.
@@ -627,7 +627,7 @@ const ViewerTransformWidget = class {
627
627
  this.widget.updateTransform(this.currentTransform);
628
628
  }
629
629
  if (this.position != null) {
630
- this.currentTransform = bundle_esm.matrix4.makeTranslation(this.position);
630
+ this.currentTransform = this.getTransformForNewPosition(this.position);
631
631
  this.startingTransform = this.currentTransform;
632
632
  this.widget.updateTransform(this.currentTransform);
633
633
  }
@@ -1 +1 @@
1
- {"file":"vertex-viewer-transform-widget.entry.cjs.js","mappings":"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","names":["Point","Vector3","Ray","Plane","Matrix4","Quaternion","Angle","TriangleMeshPoints","TriangleMesh","BoundingBox","ReglComponent","EventDispatcher","Rectangle","computeDrawable2dBounds","regl","shapeBuilder","xAxisArrowPositions","AxisLine","axisPositions","yAxisArrowPositions","zAxisArrowPositions","rotationAxisPositions","RotationLine","writeDOM","readDOM","TransformController","h","Host","classNames"],"sources":["./src/components/viewer-transform-widget/util.ts","./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 Matrix4,\n Plane,\n Point,\n Quaternion,\n Ray,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport { Frame, Viewport } from '../../lib/types';\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 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 switch (identifier) {\n case 'x-translate': {\n return Matrix4.multiply(\n current,\n Matrix4.makeTranslation(\n Vector3.create(\n computeTranslation(current, previous, next, Vector3.right()),\n 0,\n 0\n )\n )\n );\n }\n case 'y-translate':\n return Matrix4.multiply(\n current,\n Matrix4.makeTranslation(\n Vector3.create(\n 0,\n computeTranslation(current, previous, next, Vector3.up()),\n 0\n )\n )\n );\n case 'z-translate':\n return Matrix4.multiply(\n current,\n Matrix4.makeTranslation(\n Vector3.create(\n 0,\n 0,\n computeTranslation(current, previous, next, Vector3.back())\n )\n )\n );\n case 'x-rotate': {\n const rotation = Quaternion.fromMatrixRotation(current);\n const rotatedRight = Vector3.transformMatrix(\n Vector3.right(),\n Matrix4.makeRotation(rotation)\n );\n const rotatedLeft = Vector3.transformMatrix(\n Vector3.left(),\n Matrix4.makeRotation(rotation)\n );\n\n const rotationAxis =\n Vector3.dot(viewVector, rotatedRight) >\n Vector3.dot(viewVector, rotatedLeft)\n ? rotatedRight\n : rotatedLeft;\n\n return computeRotation(\n Quaternion.fromAxisAngle(rotationAxis, angle),\n current\n );\n }\n case 'y-rotate': {\n const rotation = Quaternion.fromMatrixRotation(current);\n const rotatedUp = Vector3.transformMatrix(\n Vector3.up(),\n Matrix4.makeRotation(rotation)\n );\n const rotatedDown = Vector3.transformMatrix(\n Vector3.down(),\n Matrix4.makeRotation(rotation)\n );\n\n const rotationAxis =\n Vector3.dot(viewVector, rotatedUp) >\n Vector3.dot(viewVector, rotatedDown)\n ? rotatedUp\n : rotatedDown;\n\n return computeRotation(\n Quaternion.fromAxisAngle(rotationAxis, angle),\n current\n );\n }\n case 'z-rotate': {\n const rotation = Quaternion.fromMatrixRotation(current);\n const rotatedForward = Vector3.transformMatrix(\n Vector3.forward(),\n Matrix4.makeRotation(rotation)\n );\n const rotatedBack = Vector3.transformMatrix(\n Vector3.back(),\n Matrix4.makeRotation(rotation)\n );\n\n const rotationAxis =\n Vector3.dot(viewVector, rotatedForward) >\n Vector3.dot(viewVector, rotatedBack)\n ? rotatedForward\n : rotatedBack;\n\n return computeRotation(\n Quaternion.fromAxisAngle(rotationAxis, angle),\n current\n );\n }\n default:\n return current;\n }\n}\n\nfunction computeTranslation(\n current: Matrix4.Matrix4,\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n direction: Vector3.Vector3\n): number {\n const rotatedTranslationAxis = Vector3.transformMatrix(\n direction,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(current))\n );\n const rotatedDelta = Vector3.multiply(\n rotatedTranslationAxis,\n Vector3.subtract(next, previous)\n );\n\n return rotatedDelta.x + rotatedDelta.y + rotatedDelta.z;\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 rotation: Quaternion.Quaternion,\n current: Matrix4.Matrix4\n): Matrix4.Matrix4 {\n return Matrix4.multiply(\n Matrix4.multiply(\n Matrix4.multiply(\n Matrix4.makeTranslation(Vector3.fromMatrixPosition(current)),\n Matrix4.makeRotation(rotation)\n ),\n Matrix4.makeTranslation(\n Vector3.negate(Vector3.fromMatrixPosition(current))\n )\n ),\n current\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 disabledColor?: 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 bounds?: 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 private disabledColor: Color.Color | string;\n\n public constructor(\n canvasElement: HTMLCanvasElement,\n colors: DrawableElementColors = {}\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 this.disabledColor = colors.disabledColor ?? '#cccccc';\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 boundsContainsPoint(point: Point.Point): boolean {\n return (\n this.bounds != null &&\n this.frame != null &&\n Rectangle.containsPoints(this.bounds, point)\n );\n }\n\n public updateDisabledAxis(axis: Partial<DisabledAxis>): void {\n this.disabledAxis = {\n ...this.disabledAxis,\n ...axis,\n };\n this.updateDisabledOnTriangles();\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.xAxis?.updateFillColor(this.disabledColor);\n this.yAxis?.updateFillColor(this.disabledColor);\n this.zAxis?.updateFillColor(this.disabledColor);\n\n this.xArrow?.updateFillColor(this.getXTranslationColor());\n this.yArrow?.updateFillColor(this.getYTranslationColor());\n this.zArrow?.updateFillColor(this.getZTranslationColor());\n this.xRotation?.updateFillColor(this.getXRotationColor());\n this.yRotation?.updateFillColor(this.getYRotationColor());\n this.zRotation?.updateFillColor(this.getZRotationColor());\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 updateDisabledOnTriangles(): void {\n this.xRotation?.setDisabled(this.disabledAxis.xRotation);\n this.yRotation?.setDisabled(this.disabledAxis.yRotation);\n this.zRotation?.setDisabled(this.disabledAxis.zRotation);\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.bounds = computeDrawable2dBounds(\n this.viewport,\n ...this.rotationMeshes,\n ...this.translationMeshes\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.updateDisabledOnTriangles();\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.xRotation?.isDisabled()\n ? this.disabledColor\n : this.xArrowFillColor;\n }\n\n private getYRotationColor(): Color.Color | string | undefined {\n return this.yRotation?.isDisabled()\n ? this.disabledColor\n : this.yArrowFillColor;\n }\n\n private getZRotationColor(): Color.Color | string | undefined {\n return this.zRotation?.isDisabled()\n ? this.disabledColor\n : this.zArrowFillColor;\n }\n\n private getXTranslationColor(): Color.Color | string | undefined {\n return this.xArrow?.isDisabled()\n ? this.disabledColor\n : this.xArrowFillColor;\n }\n\n private getYTranslationColor(): Color.Color | string | undefined {\n return this.yArrow?.isDisabled()\n ? this.disabledColor\n : this.yArrowFillColor;\n }\n\n private getZTranslationColor(): Color.Color | string | undefined {\n return this.zArrow?.isDisabled()\n ? this.disabledColor\n : 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-disabled-arrow-color: A CSS color for the arrow\n * when it is disabled. Defaults to `#cccccc`.\n */\n --viewer-transform-widget-disabled-arrow-color: #cccccc;\n}\n\n.widget {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.widget.hovered {\n pointer-events: auto;\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\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 {\n computeUpdatedTransform,\n convertCanvasPointToWorld,\n convertPointToCanvas,\n} from './util';\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 * @internal\n * @ignore\n *\n * Visible for testing.\n */\n @Prop({ mutable: true })\n public hovered?: Drawable;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private startingTransform?: Matrix4.Matrix4;\n private currentTransform?: 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 private disabledColor: Color.Color | string = '#cccccc';\n\n private widget?: TransformWidget;\n private dragging?: Drawable;\n private lastAngle = 0;\n private lastWorldPosition?: Vector3.Vector3;\n\n private canvasBounds?: DOMRect;\n private canvasResizeObserver?: ResizeObserver;\n private canvasRef?: HTMLCanvasElement;\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\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupTransformWidget(this.canvasRef);\n }\n\n this.handleViewerChanged(this.viewer, undefined);\n\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 this.disabledColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-disabled-arrow-color')\n .trim();\n });\n }\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver?.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.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 /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(\n newRotation: Euler.Euler,\n oldRotation?: Euler.Euler\n ): void {\n this.currentTransform = this.getTransformForNewRotation(newRotation);\n this.startingTransform = this.currentTransform;\n this.widget?.updateTransform(this.currentTransform);\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.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 </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 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 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.controller?.beginTransform();\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 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.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\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 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 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 }\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 disabledColor: this.disabledColor,\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 = Matrix4.makeTranslation(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 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 } else if (newPosition != null) {\n return Matrix4.makeTranslation(newPosition);\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.cjs.js","mappings":"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","names":["Point","Vector3","Ray","Plane","Matrix4","Quaternion","Angle","TriangleMeshPoints","TriangleMesh","BoundingBox","ReglComponent","EventDispatcher","Rectangle","computeDrawable2dBounds","regl","shapeBuilder","xAxisArrowPositions","AxisLine","axisPositions","yAxisArrowPositions","zAxisArrowPositions","rotationAxisPositions","RotationLine","writeDOM","readDOM","TransformController","h","Host","classNames"],"sources":["./src/components/viewer-transform-widget/util.ts","./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 Matrix4,\n Plane,\n Point,\n Quaternion,\n Ray,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport { Frame, Viewport } from '../../lib/types';\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 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 switch (identifier) {\n case 'x-translate': {\n return Matrix4.multiply(\n current,\n Matrix4.makeTranslation(\n Vector3.create(\n computeTranslation(current, previous, next, Vector3.right()),\n 0,\n 0\n )\n )\n );\n }\n case 'y-translate':\n return Matrix4.multiply(\n current,\n Matrix4.makeTranslation(\n Vector3.create(\n 0,\n computeTranslation(current, previous, next, Vector3.up()),\n 0\n )\n )\n );\n case 'z-translate':\n return Matrix4.multiply(\n current,\n Matrix4.makeTranslation(\n Vector3.create(\n 0,\n 0,\n computeTranslation(current, previous, next, Vector3.back())\n )\n )\n );\n case 'x-rotate': {\n const rotation = Quaternion.fromMatrixRotation(current);\n const rotatedRight = Vector3.transformMatrix(\n Vector3.right(),\n Matrix4.makeRotation(rotation)\n );\n const rotatedLeft = Vector3.transformMatrix(\n Vector3.left(),\n Matrix4.makeRotation(rotation)\n );\n\n const rotationAxis =\n Vector3.dot(viewVector, rotatedRight) >\n Vector3.dot(viewVector, rotatedLeft)\n ? rotatedRight\n : rotatedLeft;\n\n return computeRotation(\n Quaternion.fromAxisAngle(rotationAxis, angle),\n current\n );\n }\n case 'y-rotate': {\n const rotation = Quaternion.fromMatrixRotation(current);\n const rotatedUp = Vector3.transformMatrix(\n Vector3.up(),\n Matrix4.makeRotation(rotation)\n );\n const rotatedDown = Vector3.transformMatrix(\n Vector3.down(),\n Matrix4.makeRotation(rotation)\n );\n\n const rotationAxis =\n Vector3.dot(viewVector, rotatedUp) >\n Vector3.dot(viewVector, rotatedDown)\n ? rotatedUp\n : rotatedDown;\n\n return computeRotation(\n Quaternion.fromAxisAngle(rotationAxis, angle),\n current\n );\n }\n case 'z-rotate': {\n const rotation = Quaternion.fromMatrixRotation(current);\n const rotatedForward = Vector3.transformMatrix(\n Vector3.forward(),\n Matrix4.makeRotation(rotation)\n );\n const rotatedBack = Vector3.transformMatrix(\n Vector3.back(),\n Matrix4.makeRotation(rotation)\n );\n\n const rotationAxis =\n Vector3.dot(viewVector, rotatedForward) >\n Vector3.dot(viewVector, rotatedBack)\n ? rotatedForward\n : rotatedBack;\n\n return computeRotation(\n Quaternion.fromAxisAngle(rotationAxis, angle),\n current\n );\n }\n default:\n return current;\n }\n}\n\nfunction computeTranslation(\n current: Matrix4.Matrix4,\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n direction: Vector3.Vector3\n): number {\n const rotatedTranslationAxis = Vector3.transformMatrix(\n direction,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(current))\n );\n const rotatedDelta = Vector3.multiply(\n rotatedTranslationAxis,\n Vector3.subtract(next, previous)\n );\n\n return rotatedDelta.x + rotatedDelta.y + rotatedDelta.z;\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 rotation: Quaternion.Quaternion,\n current: Matrix4.Matrix4\n): Matrix4.Matrix4 {\n return Matrix4.multiply(\n Matrix4.multiply(\n Matrix4.multiply(\n Matrix4.makeTranslation(Vector3.fromMatrixPosition(current)),\n Matrix4.makeRotation(rotation)\n ),\n Matrix4.makeTranslation(\n Vector3.negate(Vector3.fromMatrixPosition(current))\n )\n ),\n current\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 disabledColor?: 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 bounds?: 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 private disabledColor: Color.Color | string;\n\n public constructor(\n canvasElement: HTMLCanvasElement,\n colors: DrawableElementColors = {}\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 this.disabledColor = colors.disabledColor ?? '#cccccc';\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 boundsContainsPoint(point: Point.Point): boolean {\n return (\n this.bounds != null &&\n this.frame != null &&\n Rectangle.containsPoints(this.bounds, point)\n );\n }\n\n public updateDisabledAxis(axis: Partial<DisabledAxis>): void {\n this.disabledAxis = {\n ...this.disabledAxis,\n ...axis,\n };\n this.updateDisabledOnTriangles();\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.xAxis?.updateFillColor(this.disabledColor);\n this.yAxis?.updateFillColor(this.disabledColor);\n this.zAxis?.updateFillColor(this.disabledColor);\n\n this.xArrow?.updateFillColor(this.getXTranslationColor());\n this.yArrow?.updateFillColor(this.getYTranslationColor());\n this.zArrow?.updateFillColor(this.getZTranslationColor());\n this.xRotation?.updateFillColor(this.getXRotationColor());\n this.yRotation?.updateFillColor(this.getYRotationColor());\n this.zRotation?.updateFillColor(this.getZRotationColor());\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 updateDisabledOnTriangles(): void {\n this.xRotation?.setDisabled(this.disabledAxis.xRotation);\n this.yRotation?.setDisabled(this.disabledAxis.yRotation);\n this.zRotation?.setDisabled(this.disabledAxis.zRotation);\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.bounds = computeDrawable2dBounds(\n this.viewport,\n ...this.rotationMeshes,\n ...this.translationMeshes\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.updateDisabledOnTriangles();\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.xRotation?.isDisabled()\n ? this.disabledColor\n : this.xArrowFillColor;\n }\n\n private getYRotationColor(): Color.Color | string | undefined {\n return this.yRotation?.isDisabled()\n ? this.disabledColor\n : this.yArrowFillColor;\n }\n\n private getZRotationColor(): Color.Color | string | undefined {\n return this.zRotation?.isDisabled()\n ? this.disabledColor\n : this.zArrowFillColor;\n }\n\n private getXTranslationColor(): Color.Color | string | undefined {\n return this.xArrow?.isDisabled()\n ? this.disabledColor\n : this.xArrowFillColor;\n }\n\n private getYTranslationColor(): Color.Color | string | undefined {\n return this.yArrow?.isDisabled()\n ? this.disabledColor\n : this.yArrowFillColor;\n }\n\n private getZTranslationColor(): Color.Color | string | undefined {\n return this.zArrow?.isDisabled()\n ? this.disabledColor\n : 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-disabled-arrow-color: A CSS color for the arrow\n * when it is disabled. Defaults to `#cccccc`.\n */\n --viewer-transform-widget-disabled-arrow-color: #cccccc;\n}\n\n.widget {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.widget.hovered {\n pointer-events: auto;\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\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 {\n computeUpdatedTransform,\n convertCanvasPointToWorld,\n convertPointToCanvas,\n} from './util';\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 * @internal\n * @ignore\n *\n * Visible for testing.\n */\n @Prop({ mutable: true })\n public hovered?: Drawable;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private startingTransform?: Matrix4.Matrix4;\n private currentTransform?: 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 private disabledColor: Color.Color | string = '#cccccc';\n\n private widget?: TransformWidget;\n private dragging?: Drawable;\n private lastAngle = 0;\n private lastWorldPosition?: Vector3.Vector3;\n\n private canvasBounds?: DOMRect;\n private canvasResizeObserver?: ResizeObserver;\n private canvasRef?: HTMLCanvasElement;\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\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupTransformWidget(this.canvasRef);\n }\n\n this.handleViewerChanged(this.viewer, undefined);\n\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 this.disabledColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-disabled-arrow-color')\n .trim();\n });\n }\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver?.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.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 /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(\n newRotation: Euler.Euler,\n oldRotation?: Euler.Euler\n ): void {\n this.currentTransform = this.getTransformForNewRotation(newRotation);\n this.startingTransform = this.currentTransform;\n this.widget?.updateTransform(this.currentTransform);\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.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 </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 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 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.controller?.beginTransform();\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 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.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\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 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 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 }\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 disabledColor: this.disabledColor,\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 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 } else if (newPosition != null) {\n return Matrix4.makeTranslation(newPosition);\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}
@@ -184,7 +184,7 @@ export class ViewerTransformWidget {
184
184
  this.widget.updateTransform(this.currentTransform);
185
185
  }
186
186
  if (this.position != null) {
187
- this.currentTransform = Matrix4.makeTranslation(this.position);
187
+ this.currentTransform = this.getTransformForNewPosition(this.position);
188
188
  this.startingTransform = this.currentTransform;
189
189
  this.widget.updateTransform(this.currentTransform);
190
190
  }
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-transform-widget.js","sourceRoot":"","sources":["../../../src/components/viewer-transform-widget/viewer-transform-widget.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\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 {\n computeUpdatedTransform,\n convertCanvasPointToWorld,\n convertPointToCanvas,\n} from './util';\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 * @internal\n * @ignore\n *\n * Visible for testing.\n */\n @Prop({ mutable: true })\n public hovered?: Drawable;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private startingTransform?: Matrix4.Matrix4;\n private currentTransform?: 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 private disabledColor: Color.Color | string = '#cccccc';\n\n private widget?: TransformWidget;\n private dragging?: Drawable;\n private lastAngle = 0;\n private lastWorldPosition?: Vector3.Vector3;\n\n private canvasBounds?: DOMRect;\n private canvasResizeObserver?: ResizeObserver;\n private canvasRef?: HTMLCanvasElement;\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\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupTransformWidget(this.canvasRef);\n }\n\n this.handleViewerChanged(this.viewer, undefined);\n\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 this.disabledColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-disabled-arrow-color')\n .trim();\n });\n }\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver?.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.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 /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(\n newRotation: Euler.Euler,\n oldRotation?: Euler.Euler\n ): void {\n this.currentTransform = this.getTransformForNewRotation(newRotation);\n this.startingTransform = this.currentTransform;\n this.widget?.updateTransform(this.currentTransform);\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.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 </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 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 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.controller?.beginTransform();\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 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.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\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 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 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 }\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 disabledColor: this.disabledColor,\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 = Matrix4.makeTranslation(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 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 } else if (newPosition != null) {\n return Matrix4.makeTranslation(newPosition);\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"]}
1
+ {"version":3,"file":"viewer-transform-widget.js","sourceRoot":"","sources":["../../../src/components/viewer-transform-widget/viewer-transform-widget.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\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 {\n computeUpdatedTransform,\n convertCanvasPointToWorld,\n convertPointToCanvas,\n} from './util';\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 * @internal\n * @ignore\n *\n * Visible for testing.\n */\n @Prop({ mutable: true })\n public hovered?: Drawable;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private startingTransform?: Matrix4.Matrix4;\n private currentTransform?: 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 private disabledColor: Color.Color | string = '#cccccc';\n\n private widget?: TransformWidget;\n private dragging?: Drawable;\n private lastAngle = 0;\n private lastWorldPosition?: Vector3.Vector3;\n\n private canvasBounds?: DOMRect;\n private canvasResizeObserver?: ResizeObserver;\n private canvasRef?: HTMLCanvasElement;\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\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupTransformWidget(this.canvasRef);\n }\n\n this.handleViewerChanged(this.viewer, undefined);\n\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 this.disabledColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-disabled-arrow-color')\n .trim();\n });\n }\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver?.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.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 /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(\n newRotation: Euler.Euler,\n oldRotation?: Euler.Euler\n ): void {\n this.currentTransform = this.getTransformForNewRotation(newRotation);\n this.startingTransform = this.currentTransform;\n this.widget?.updateTransform(this.currentTransform);\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.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 </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 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 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.controller?.beginTransform();\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 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.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\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 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 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 }\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 disabledColor: this.disabledColor,\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 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 } else if (newPosition != null) {\n return Matrix4.makeTranslation(newPosition);\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"]}
@@ -130019,7 +130019,7 @@ const ViewerTransformWidget = class extends HTMLElement$1 {
130019
130019
  this.widget.updateTransform(this.currentTransform);
130020
130020
  }
130021
130021
  if (this.position != null) {
130022
- this.currentTransform = matrix4.makeTranslation(this.position);
130022
+ this.currentTransform = this.getTransformForNewPosition(this.position);
130023
130023
  this.startingTransform = this.currentTransform;
130024
130024
  this.widget.updateTransform(this.currentTransform);
130025
130025
  }