@vertexvis/viewer 0.17.2-canary.0 → 0.17.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/cjs/controller-b93c925e.js +126 -0
  2. package/dist/cjs/controller-b93c925e.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +79 -7
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +18 -121
  6. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  7. package/dist/collection/components/viewer-transform-widget/util.js +9 -2
  8. package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
  9. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +7 -2
  10. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
  11. package/dist/collection/index.js +1 -0
  12. package/dist/collection/index.js.map +1 -1
  13. package/dist/collection/lib/transforms/index.js +7 -0
  14. package/dist/collection/lib/transforms/index.js.map +1 -0
  15. package/dist/collection/lib/transforms/transformation-delta.js +67 -0
  16. package/dist/collection/lib/transforms/transformation-delta.js.map +1 -0
  17. package/dist/collection/testing/random.js +12 -0
  18. package/dist/collection/testing/random.js.map +1 -1
  19. package/dist/custom-elements/index.js +204 -121
  20. package/dist/custom-elements/index.js.map +1 -1
  21. package/dist/esm/controller-bf3848bf.js +124 -0
  22. package/dist/esm/controller-bf3848bf.js.map +1 -0
  23. package/dist/esm/index.js +75 -1
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/index.mjs +75 -1
  26. package/dist/esm/vertex-viewer-transform-widget.entry.js +18 -121
  27. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  28. package/dist/types/components/viewer-transform-widget/util.d.ts +8 -1
  29. package/dist/types/components/viewer-transform-widget/viewer-transform-widget.d.ts +1 -1
  30. package/dist/types/index.d.ts +1 -0
  31. package/dist/types/lib/transforms/index.d.ts +3 -0
  32. package/dist/types/lib/transforms/transformation-delta.d.ts +34 -0
  33. package/dist/types/testing/random.d.ts +1 -0
  34. package/dist/viewer/index.esm.js +1 -1
  35. package/dist/viewer/index.esm.js.map +1 -1
  36. package/dist/viewer/p-4025ad8d.js +5 -0
  37. package/dist/viewer/p-4025ad8d.js.map +1 -0
  38. package/dist/viewer/p-839064b7.entry.js +5 -0
  39. package/dist/viewer/p-839064b7.entry.js.map +1 -0
  40. package/dist/viewer/viewer.esm.js +1 -1
  41. package/package.json +7 -7
  42. package/readme.md +4 -4
  43. package/dist/viewer/p-844f80b3.entry.js +0 -5
  44. package/dist/viewer/p-844f80b3.entry.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Copyright (c) 2023 Vertex Software LLC. All rights reserved.
3
+ */
4
+ import{r as i,c as t,h as s,H as n,g as o}from"./p-50533a46.js";import{p as h,v as l,r as e,f as r,q as a,m as d,c as u,b as v,e as c}from"./p-71fbe522.js";import{c as f}from"./p-9fe3f791.js";import{w,r as p}from"./p-f3383096.js";import{T as g}from"./p-4025ad8d.js";import{E as m}from"./p-7f54de9d.js";import{d as x,T as y,R as b,e as z,r as C,s as T,x as R,A as D,b as j,y as P,z as O,f as E,g as S}from"./p-881418cd.js";import"./p-9acf99ad.js";import"./p-f12cfb57.js";import"./p-e8f14257.js";import"./p-e1d82323.js";import"./p-1bb66e64.js";function N(i,t){return t!=null?h.create(i.x-t.left,i.y-t.top):undefined}function A(i,t,s,n){const o=n!=null?l.fromMatrixPosition(n):undefined;if(i!=null&&t!=null&&s!=null&&o!=null){if(t.scene.camera.isOrthographic()){const n=s.transformPointToOrthographicRay(i,t.image,t.scene.camera);const h=e.at(e.create({origin:o,direction:t.scene.camera.direction}),l.magnitude(t.scene.camera.viewVector)*2);return e.intersectPlane(n,r.fromNormalAndCoplanarPoint(t.scene.camera.direction,h))}else{const n=s.transformPointToRay(i,t.image,t.scene.camera);return e.intersectPlane(n,r.fromNormalAndCoplanarPoint(t.scene.camera.direction,o))}}return undefined}function $(i,t,s,n,o,h){switch(h){case"x-translate":{return d.multiply(i,d.makeTranslation(l.create(J(i,t,s,l.right()),0,0)))}case"y-translate":return d.multiply(i,d.makeTranslation(l.create(0,J(i,t,s,l.up()),0)));case"z-translate":return d.multiply(i,d.makeTranslation(l.create(0,0,J(i,t,s,l.back()))));case"x-rotate":{const t=a.fromMatrixRotation(i);const s=l.transformMatrix(l.right(),d.makeRotation(t));const h=l.transformMatrix(l.left(),d.makeRotation(t));const e=l.dot(n,s)>l.dot(n,h)?s:h;return _(a.fromAxisAngle(e,o),i)}case"y-rotate":{const t=a.fromMatrixRotation(i);const s=l.transformMatrix(l.up(),d.makeRotation(t));const h=l.transformMatrix(l.down(),d.makeRotation(t));const e=l.dot(n,s)>l.dot(n,h)?s:h;return _(a.fromAxisAngle(e,o),i)}case"z-rotate":{const t=a.fromMatrixRotation(i);const s=l.transformMatrix(l.forward(),d.makeRotation(t));const h=l.transformMatrix(l.back(),d.makeRotation(t));const e=l.dot(n,s)>l.dot(n,h)?s:h;return _(a.fromAxisAngle(e,o),i)}default:return i}}function J(i,t,s,n){const o=l.transformMatrix(n,d.makeRotation(a.fromMatrixRotation(i)));const h=l.multiply(o,l.subtract(s,t));return h.x+h.y+h.z}function _(i,t){return d.multiply(d.multiply(d.multiply(d.makeTranslation(l.fromMatrixPosition(t)),d.makeRotation(i)),d.makeTranslation(l.negate(l.fromMatrixPosition(t)))),t)}function H(i,t,s=3){return V(i,t,l.back(),l.up(),s)}function U(i,t,s=3){return V(i,t,l.right(),l.back(),s)}function L(i,t,s=3){return V(i,t,l.right(),l.up(),s)}function V(i,t,s,n,o){const h=l.transformMatrix(l.add(s,n),d.makeRotation(a.fromMatrixRotation(i)));const r=l.transformMatrix(s,d.makeRotation(a.fromMatrixRotation(i)));const v=l.transformMatrix(n,d.makeRotation(a.fromMatrixRotation(i)));const c=l.fromMatrixPosition(i);const f=l.add(c,l.scale(o*10,h));const w=e.create({origin:f,direction:r});const p=e.create({origin:f,direction:v});const g=l.cross(r,v);const m=l.rotateAboutAxis(u.toRadians(45),e.at(p,-o),g,f);const y=l.rotateAboutAxis(u.toRadians(45),e.at(w,o),g,f);const b=l.rotateAboutAxis(u.toRadians(45),e.at(p,o),g,f);const z=l.rotateAboutAxis(u.toRadians(45),e.at(w,-o),g,f);return new x(l.dot(r,t.direction)!==-1&&l.dot(v,t.direction)!==-1,m,z,y,b,l.transformMatrix(m,t.projectionViewMatrix),l.transformMatrix(z,t.projectionViewMatrix),l.transformMatrix(y,t.projectionViewMatrix),l.transformMatrix(b,t.projectionViewMatrix))}function X(i,t,s,n){if(i instanceof y){return Y(i,t,s,n)}return false}function Y(i,t,s,n){return Z([i.points.worldLeft,i.points.worldRight,i.points.worldTip],t,s,n)||Z([i.points.worldLeft,i.points.worldRight,i.points.worldBase],t,s,n)}function Z(i,t,s,n){var o;if(i.length===3){const h=t.scene.camera.isOrthographic()?s.transformPointToOrthographicRay(n,t.image,t.scene.camera):s.transformPointToRay(n,t.image,t.scene.camera);const e=l.subtract(i[1],i[0]);const r=l.subtract(i[2],i[0]);const a=v.epsilon((o=v.fromVectors([h.direction,h.origin,e,r]))!==null&&o!==void 0?o:v.create(e,r));const d=l.cross(h.direction,r);const u=l.dot(e,d);if(!(Math.abs(u)>=a)){return false}const c=l.subtract(h.origin,i[0]);const f=l.dot(c,d)/u;if(f<0||f>1){return false}const w=l.cross(c,e);const p=l.dot(h.direction,w)/u;if(p<0||f+p>1){return false}const g=l.dot(r,w)/u;return!isNaN(g)&&(g>0||t.scene.camera.isOrthographic())}return false}class k extends b{constructor(i,t={}){var s;super(i);this.disabledAxis={xTranslation:false,yTranslation:false,zTranslation:false,xRotation:false,yRotation:false,zRotation:false};this.axisLines=[];this.rotationLines=[];this.translationMeshes=[];this.rotationMeshes=[];this.hoveredChanged=new m;this.xArrowFillColor=t.xArrow;this.yArrowFillColor=t.yArrow;this.zArrowFillColor=t.zArrow;this.hoveredArrowFillColor=t.hovered;this.outlineColor=t.outline;this.disabledColor=(s=t.disabledColor)!==null&&s!==void 0?s:"#cccccc"}dispose(){var i;(i=this.reglFrameDisposable)===null||i===void 0?void 0:i.cancel()}getDrawableElements(){return this.drawableElements}boundsContainsPoint(i){return this.bounds!=null&&this.frame!=null&&c.containsPoints(this.bounds,i)}updateDisabledAxis(i){this.disabledAxis=Object.assign(Object.assign({},this.disabledAxis),i);this.updateDisabledOnTriangles()}updateCursor(i){this.cursor=i;if(i!=null&&this.frame!=null){this.updateHovered()}else{this.clearHovered()}}updateTransform(i){var t;this.transform=i;if(i!=null&&this.frame!=null){this.updateAndDraw()}else{this.clear();(t=this.reglFrameDisposable)===null||t===void 0?void 0:t.cancel();this.reglFrameDisposable=undefined}}updateColors(i={}){var t,s,n,o,h,l,e,r,a,d,u,v,c,f,w;this.xArrowFillColor=(t=i.xArrow)!==null&&t!==void 0?t:this.xArrowFillColor;this.yArrowFillColor=(s=i.yArrow)!==null&&s!==void 0?s:this.yArrowFillColor;this.zArrowFillColor=(n=i.zArrow)!==null&&n!==void 0?n:this.zArrowFillColor;this.hoveredArrowFillColor=(o=i.hovered)!==null&&o!==void 0?o:this.hoveredArrowFillColor;this.outlineColor=(h=i.outline)!==null&&h!==void 0?h:this.outlineColor;(l=this.xAxis)===null||l===void 0?void 0:l.updateFillColor(this.disabledColor);(e=this.yAxis)===null||e===void 0?void 0:e.updateFillColor(this.disabledColor);(r=this.zAxis)===null||r===void 0?void 0:r.updateFillColor(this.disabledColor);(a=this.xArrow)===null||a===void 0?void 0:a.updateFillColor(this.getXTranslationColor());(d=this.yArrow)===null||d===void 0?void 0:d.updateFillColor(this.getYTranslationColor());(u=this.zArrow)===null||u===void 0?void 0:u.updateFillColor(this.getZTranslationColor());(v=this.xRotation)===null||v===void 0?void 0:v.updateFillColor(this.getXRotationColor());(c=this.yRotation)===null||c===void 0?void 0:c.updateFillColor(this.getYRotationColor());(f=this.zRotation)===null||f===void 0?void 0:f.updateFillColor(this.getZRotationColor());(w=this.hoveredElement)===null||w===void 0?void 0:w.updateFillColor(this.hoveredArrowFillColor)}onHoveredChanged(i){return this.hoveredChanged.on(i)}updateDisabledOnTriangles(){var i,t,s,n,o,h;(i=this.xRotation)===null||i===void 0?void 0:i.setDisabled(this.disabledAxis.xRotation);(t=this.yRotation)===null||t===void 0?void 0:t.setDisabled(this.disabledAxis.yRotation);(s=this.zRotation)===null||s===void 0?void 0:s.setDisabled(this.disabledAxis.zRotation);(n=this.xArrow)===null||n===void 0?void 0:n.setDisabled(this.disabledAxis.xTranslation);(o=this.yArrow)===null||o===void 0?void 0:o.setDisabled(this.disabledAxis.yTranslation);(h=this.zArrow)===null||h===void 0?void 0:h.setDisabled(this.disabledAxis.zTranslation);this.updateColors()}updateHovered(){var i;const t=this.hoveredElement;const s=this.frame;if(s!=null){this.hoveredElement=[...this.translationMeshes,...this.rotationMeshes].filter((i=>i.points.valid&&!i.isDisabled())).find((i=>this.cursor!=null?X(i,s,this.viewport,this.cursor):false));if(this.hoveredElement!==t){this.hoveredChanged.emit(this.hoveredElement);(i=this.hoveredElement)===null||i===void 0?void 0:i.updateFillColor(this.hoveredArrowFillColor);t===null||t===void 0?void 0:t.updateFillColor(t===null||t===void 0?void 0:t.initialFillColor)}}}clearHovered(){const i=this.hoveredElement;this.hoveredElement=undefined;if(this.hoveredElement!==i){this.hoveredChanged.emit(this.hoveredElement);i.updateFillColor(i.initialFillColor)}}hasData(){return this.transform!=null}createOrUpdateElements(){if(this.transform!=null&&this.frame!=null){if(this.xArrow==null||this.yArrow==null||this.zArrow==null){this.createElements(this.transform,this.frame)}else{this.updateElements(this.transform,this.frame)}this.bounds=z(this.viewport,...this.rotationMeshes,...this.translationMeshes)}}createElements(i,t){this.reglCommand=C({canvas:this.canvasElement,extensions:"angle_instanced_arrays"});const{createShape:s}=T(this.reglCommand);const n=this.computeTriangleSize(l.fromMatrixPosition(i),t);this.xArrow=new y(s,"x-translate",R(i,t.scene.camera,n),this.outlineColor,this.getXTranslationColor());this.xRotation=new y(s,"x-rotate",H(i,t.scene.camera,n),this.outlineColor,this.getXRotationColor());this.xAxis=new D(s,"x-axis",j(i,t.scene.camera,this.xArrow),this.outlineColor,this.getXTranslationColor());this.yArrow=new y(s,"y-translate",P(i,t.scene.camera,n),this.outlineColor,this.getYTranslationColor());this.yRotation=new y(s,"y-rotate",U(i,t.scene.camera,n),this.outlineColor,this.getYRotationColor());this.yAxis=new D(s,"y-axis",j(i,t.scene.camera,this.yArrow),this.outlineColor,this.getYTranslationColor());this.zArrow=new y(s,"z-translate",O(i,t.scene.camera,n),this.outlineColor,this.getZTranslationColor());this.zAxis=new D(s,"z-axis",j(i,t.scene.camera,this.zArrow),this.outlineColor,this.getZTranslationColor());this.zRotation=new y(s,"z-rotate",L(i,t.scene.camera,n),this.outlineColor,this.getZRotationColor());this.createRotationLines(s,i,t);this.axisLines=[this.xAxis,this.yAxis,this.zAxis];this.translationMeshes=[this.xArrow,this.yArrow,this.zArrow];this.rotationMeshes=[this.xRotation,this.yRotation,this.zRotation];this.updateDisabledOnTriangles();this.availableElements=[...this.axisLines,...this.rotationLines,...this.translationMeshes,...this.rotationMeshes]}getXRotationColor(){var i;return((i=this.xRotation)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.xArrowFillColor}getYRotationColor(){var i;return((i=this.yRotation)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.yArrowFillColor}getZRotationColor(){var i;return((i=this.zRotation)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.zArrowFillColor}getXTranslationColor(){var i;return((i=this.xArrow)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.xArrowFillColor}getYTranslationColor(){var i;return((i=this.yArrow)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.yArrowFillColor}getZTranslationColor(){var i;return((i=this.zArrow)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.zArrowFillColor}createRotationLines(i,t,s){var n,o,h,e,r,a;const d=this.computeTriangleSize(l.fromMatrixPosition(t),s);const u=E(s.scene.camera,this.xRotation,(n=this.yArrow)===null||n===void 0?void 0:n.points.worldTip,d);const v=E(s.scene.camera,this.xRotation,(o=this.zArrow)===null||o===void 0?void 0:o.points.worldTip,d);const c=E(s.scene.camera,this.yRotation,(h=this.xArrow)===null||h===void 0?void 0:h.points.worldTip,d);const f=E(s.scene.camera,this.yRotation,(e=this.zArrow)===null||e===void 0?void 0:e.points.worldTip,d);const w=E(s.scene.camera,this.zRotation,(r=this.xArrow)===null||r===void 0?void 0:r.points.worldTip,d);const p=E(s.scene.camera,this.zRotation,(a=this.yArrow)===null||a===void 0?void 0:a.points.worldTip,d);if(u!=null){this.xyRotationLine=new S(i,"xy-rotation-line",u,this.outlineColor)}if(v!=null){this.xzRotationLine=new S(i,"xz-rotation-line",v,this.outlineColor)}if(c!=null){this.yxRotationLine=new S(i,"yx-rotation-line",c,this.outlineColor)}if(f!=null){this.yzRotationLine=new S(i,"yz-rotation-line",f,this.outlineColor)}if(w!=null){this.zxRotationLine=new S(i,"zx-rotation-line",w,this.outlineColor)}if(p!=null){this.zyRotationLine=new S(i,"zy-rotation-line",p,this.outlineColor)}this.rotationLines=[this.xyRotationLine,this.xzRotationLine,this.yxRotationLine,this.yzRotationLine,this.zxRotationLine,this.zyRotationLine].filter((i=>i!=null))}updateElements(i,t){var s,n,o,h,e,r,a,d,u,v,c,f,w,p,g,m,x,y;const b=this.computeTriangleSize(l.fromMatrixPosition(i),t);if(this.xArrow!=null){this.xArrow.updatePoints(R(i,t.scene.camera,b));(s=this.xAxis)===null||s===void 0?void 0:s.updatePoints(j(i,t.scene.camera,this.xArrow))}(n=this.xRotation)===null||n===void 0?void 0:n.updatePoints(H(i,t.scene.camera,b));if(this.yArrow!=null){this.yArrow.updatePoints(P(i,t.scene.camera,b));(o=this.yAxis)===null||o===void 0?void 0:o.updatePoints(j(i,t.scene.camera,this.yArrow))}(h=this.yRotation)===null||h===void 0?void 0:h.updatePoints(U(i,t.scene.camera,b));if(this.zArrow!=null){this.zArrow.updatePoints(O(i,t.scene.camera,b));(e=this.zAxis)===null||e===void 0?void 0:e.updatePoints(j(i,t.scene.camera,this.zArrow))}(r=this.zRotation)===null||r===void 0?void 0:r.updatePoints(L(i,t.scene.camera,b));(a=this.xyRotationLine)===null||a===void 0?void 0:a.updatePoints(E(t.scene.camera,this.xRotation,(d=this.yArrow)===null||d===void 0?void 0:d.points.worldTip,b));(u=this.xzRotationLine)===null||u===void 0?void 0:u.updatePoints(E(t.scene.camera,this.xRotation,(v=this.zArrow)===null||v===void 0?void 0:v.points.worldTip,b));(c=this.yxRotationLine)===null||c===void 0?void 0:c.updatePoints(E(t.scene.camera,this.yRotation,(f=this.xArrow)===null||f===void 0?void 0:f.points.worldTip,b));(w=this.yzRotationLine)===null||w===void 0?void 0:w.updatePoints(E(t.scene.camera,this.yRotation,(p=this.zArrow)===null||p===void 0?void 0:p.points.worldTip,b));(g=this.zxRotationLine)===null||g===void 0?void 0:g.updatePoints(E(t.scene.camera,this.zRotation,(m=this.xArrow)===null||m===void 0?void 0:m.points.worldTip,b));(x=this.zyRotationLine)===null||x===void 0?void 0:x.updatePoints(E(t.scene.camera,this.zRotation,(y=this.yArrow)===null||y===void 0?void 0:y.points.worldTip,b))}}const q=":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;--viewer-transform-widget-x-axis-arrow-color:var(--x-axis-color);--viewer-transform-widget-y-axis-arrow-color:var(--y-axis-color);--viewer-transform-widget-z-axis-arrow-color:var(--z-axis-color);--viewer-transform-widget-hovered-arrow-color:#ffff00;--viewer-transform-widget-disabled-arrow-color:#cccccc}.widget{position:absolute;top:0;left:0}.widget.hovered{pointer-events:auto}";const F=class{constructor(s){i(this,s);this.positionChanged=t(this,"positionChanged",7);this.rotationChanged=t(this,"rotationChanged",7);this.interactionEnded=t(this,"interactionEnded",7);this.interactionStarted=t(this,"interactionStarted",7);this.xRotationDisabled=false;this.yRotationDisabled=false;this.zRotationDisabled=false;this.xTranslationDisabled=false;this.yTranslationDisabled=false;this.zTranslationDisabled=false;this.xArrowColor="#ea3324";this.yArrowColor="#4faf32";this.zArrowColor="#0000ff";this.hoveredColor="#ffff00";this.disabledColor="#cccccc";this.lastAngle=0;this.handleHoveredDrawableChanged=i=>{this.hovered=i};this.handleViewerFrameDrawn=()=>{this.updatePropsFromViewer()};this.handleViewerDimensionsChange=()=>{w((()=>{if(this.viewer!=null&&this.canvasRef!=null){this.canvasRef.width=this.viewer.viewport.width;this.canvasRef.height=this.viewer.viewport.height;this.updateCanvasBounds(this.canvasRef)}}))};this.handleResize=()=>{if(this.canvasRef!=null){this.updateCanvasBounds(this.canvasRef)}};this.handlePointerMove=i=>{if(this.dragging==null){const t=N(h.create(i.clientX,i.clientY),this.getCanvasBounds());const s=this.getTransformWidget();if(t!=null&&s.boundsContainsPoint(t)){s.updateCursor(t)}else{s.updateCursor(undefined);this.hovered=undefined}}};this.handleBeginDrag=async i=>{var t,s,n;const o=this.getCanvasBounds();if(this.hovered!=null&&o!=null&&this.viewer!=null&&this.position!=null&&this.viewer.frame!=null){this.dragging=this.hovered;const l=N(h.create(i.clientX,i.clientY),o);const e=this.viewer.viewport.transformWorldToViewport(this.position,this.viewer.frame.scene.camera.projectionViewMatrix);this.lastAngle=l!=null?u.fromPoints(e,l):0;this.lastWorldPosition=A(l,(t=this.viewer)===null||t===void 0?void 0:t.frame,(s=this.viewer)===null||s===void 0?void 0:s.viewport,this.currentTransform);(n=this.controller)===null||n===void 0?void 0:n.beginTransform();this.interactionStarted.emit();window.removeEventListener("pointermove",this.handlePointerMove);window.addEventListener("pointermove",this.handleDrag);window.addEventListener("pointerup",this.handleEndTransform)}};this.handleDrag=async i=>{var t,s;i.preventDefault();const n=this.getCanvasBounds();if(this.dragging!=null&&this.lastWorldPosition!=null&&n!=null&&this.viewer!=null&&this.viewer.frame!=null&&this.position!=null){const o=N(h.create(i.clientX,i.clientY),n);const l=this.viewer.viewport.transformWorldToViewport(this.position,this.viewer.frame.scene.camera.projectionViewMatrix);const e=A(o,(t=this.viewer)===null||t===void 0?void 0:t.frame,(s=this.viewer)===null||s===void 0?void 0:s.viewport,this.currentTransform);if(e!=null&&o!=null&&l!=null){const i=u.fromPoints(l,o);this.transform(this.lastWorldPosition,e,i-this.lastAngle);this.lastWorldPosition=e;this.lastAngle=i}}};this.handleEndTransform=async i=>{var t,s;const n=N(h.create(i.clientX,i.clientY),this.getCanvasBounds());const o=this.getTransformWidget();this.dragging=undefined;this.lastWorldPosition=undefined;this.position=this.currentTransform!=null?l.fromMatrixPosition(this.currentTransform):this.position;this.lastAngle=0;o.updateCursor(n);o.updateTransform(this.currentTransform);o.updateDisabledAxis({xRotation:true,yRotation:true,zRotation:true,xTranslation:true,yTranslation:true,zTranslation:true});window.removeEventListener("pointermove",this.handleDrag);window.removeEventListener("pointerup",this.handleEndTransform);try{const i=(t=this.controller)===null||t===void 0?void 0:t.getCurrentDelta();await((s=this.controller)===null||s===void 0?void 0:s.endTransform());this.interactionEnded.emit(i)}catch(i){console.error("Failed to end transform interaction",i)}window.addEventListener("pointermove",this.handlePointerMove);this.getTransformWidget().updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})};this.updatePropsFromViewer=()=>{const{frame:i}=this.viewer||{};if(i!=null){const t=this.getTransformWidget();t.updateFrame(i,this.dragging==null)}};this.setupTransformWidget=i=>{var t,s;console.debug(`Initializing transform widget. [initial-position=${JSON.stringify(this.position)}, has-initial-frame=${((t=this.viewer)===null||t===void 0?void 0:t.frame)!=null}]`);this.widget=new k(i,{xArrow:this.xArrowColor,yArrow:this.yArrowColor,zArrow:this.zArrowColor,hovered:this.hoveredColor,disabledColor:this.disabledColor});if(this.rotation!=null){this.currentTransform=this.getTransformForNewRotation(this.rotation);this.startingTransform=this.currentTransform;this.widget.updateTransform(this.currentTransform)}if(this.position!=null){this.currentTransform=d.makeTranslation(this.position);this.startingTransform=this.currentTransform;this.widget.updateTransform(this.currentTransform)}if(((s=this.viewer)===null||s===void 0?void 0:s.frame)!=null){this.widget.updateFrame(this.viewer.frame,true)}this.handleSettingDisabledAxis();this.hoveredChangeDisposable=this.widget.onHoveredChanged(this.handleHoveredDrawableChanged);return this.widget};this.updateCanvasBounds=i=>{p((()=>{this.canvasBounds=i.getBoundingClientRect();this.getTransformWidget().updateDimensions(i)}))};this.getTransformForNewPosition=i=>{if(i!=null){const t=this.currentTransform!=null?this.currentTransform:d.makeIdentity();const s=d.makeRotation(a.fromMatrixRotation(t));const n=d.makeTranslation(i);return d.multiply(n,s)}else if(i!=null){return d.makeTranslation(i)}};this.getTransformForNewRotation=i=>{const t=this.currentTransform!=null?this.currentTransform:d.makeIdentity();const s=d.invert(d.makeRotation(a.fromMatrixRotation(t)));const n=d.makeRotation(a.fromEuler(i));const o=d.multiply(t,s);return d.multiply(o,n)};this.getCanvasBounds=()=>{if(this.canvasBounds!=null){return this.canvasBounds}else if(this.canvasRef!=null){this.updateCanvasBounds(this.canvasRef);return this.canvasBounds}};this.getTransformWidget=()=>{if(this.widget==null&&this.canvasRef!=null){return this.setupTransformWidget(this.canvasRef)}else if(this.widget!=null){return this.widget}else{throw new Error("Transform widget was not initialized. The canvas element may not have been initialized.")}}}componentDidLoad(){window.addEventListener("pointermove",this.handlePointerMove);this.canvasResizeObserver=new ResizeObserver(this.handleResize);if(this.canvasRef!=null){this.canvasResizeObserver.observe(this.canvasRef);this.setupTransformWidget(this.canvasRef)}this.handleViewerChanged(this.viewer,undefined);p((()=>{const i=window.getComputedStyle(this.hostEl);this.xArrowColor=i.getPropertyValue("--viewer-transform-widget-x-axis-arrow-color").trim();this.yArrowColor=i.getPropertyValue("--viewer-transform-widget-y-axis-arrow-color").trim();this.zArrowColor=i.getPropertyValue("--viewer-transform-widget-z-axis-arrow-color").trim();this.hoveredColor=i.getPropertyValue("--viewer-transform-widget-hovered-arrow-color").trim();this.disabledColor=i.getPropertyValue("--viewer-transform-widget-disabled-arrow-color").trim()}))}disconnectedCallback(){var i,t,s;window.removeEventListener("pointermove",this.handlePointerMove);(i=this.canvasResizeObserver)===null||i===void 0?void 0:i.disconnect();(t=this.hoveredChangeDisposable)===null||t===void 0?void 0:t.dispose();(s=this.widget)===null||s===void 0?void 0:s.dispose()}handleViewerChanged(i,t){var s;t===null||t===void 0?void 0:t.removeEventListener("frameDrawn",this.handleViewerFrameDrawn);t===null||t===void 0?void 0:t.removeEventListener("dimensionschange",this.handleViewerDimensionsChange);i===null||i===void 0?void 0:i.addEventListener("frameDrawn",this.handleViewerFrameDrawn);i===null||i===void 0?void 0:i.addEventListener("dimensionschange",this.handleViewerDimensionsChange);if((i===null||i===void 0?void 0:i.stream)!=null){(s=this.controller)===null||s===void 0?void 0:s.dispose();this.controller=new g(i.stream)}}handleDisabledPropertyChanged(){this.getTransformWidget().updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})}handleRotationChanged(i,t){var s;this.currentTransform=this.getTransformForNewRotation(i);this.startingTransform=this.currentTransform;(s=this.widget)===null||s===void 0?void 0:s.updateTransform(this.currentTransform);console.debug(`Updating widget rotation [previous=${JSON.stringify(t)}, current=${JSON.stringify(i)}]`);this.rotationChanged.emit(i)}handlePositionChanged(i,t){var s,n;this.currentTransform=this.getTransformForNewPosition(i);this.startingTransform=this.currentTransform;console.debug(`Updating widget position [previous=${JSON.stringify(t)}, current=${JSON.stringify(i)}]`);(s=this.widget)===null||s===void 0?void 0:s.updateTransform(this.currentTransform);if(i==null){(n=this.controller)===null||n===void 0?void 0:n.clearTransform()}this.positionChanged.emit(i)}render(){var i,t;return s(n,null,s("canvas",{ref:i=>{this.canvasRef=i},class:f("widget",{hovered:this.hovered!=null}),width:(i=this.viewer)===null||i===void 0?void 0:i.viewport.width,height:(t=this.viewer)===null||t===void 0?void 0:t.viewport.height,onPointerDown:this.handleBeginDrag}))}transform(i,t,s){var n,o;if(this.position!=null&&this.startingTransform!=null&&this.currentTransform!=null&&this.dragging!=null&&this.viewer!=null&&this.viewer.frame!=null){this.currentTransform=$(this.currentTransform,i,t,(n=this.viewer)===null||n===void 0?void 0:n.frame.scene.camera.viewVector,s,this.dragging.identifier);this.getTransformWidget().updateTransform(this.currentTransform);(o=this.controller)===null||o===void 0?void 0:o.updateTransform(d.multiply(this.currentTransform,d.invert(this.startingTransform)))}}handleSettingDisabledAxis(){if(this.widget){this.widget.updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})}else{console.warn("Cannot set disabled values - no widget defined")}}get hostEl(){return o(this)}static get watchers(){return{viewer:["handleViewerChanged"],xTranslationDisabled:["handleDisabledPropertyChanged"],yTranslationDisabled:["handleDisabledPropertyChanged"],zTranslationDisabled:["handleDisabledPropertyChanged"],xRotationDisabled:["handleDisabledPropertyChanged"],yRotationDisabled:["handleDisabledPropertyChanged"],zRotationDisabled:["handleDisabledPropertyChanged"],rotation:["handleRotationChanged"],position:["handlePositionChanged"]}}};F.style=q;export{F as vertex_viewer_transform_widget};
5
+ //# sourceMappingURL=p-839064b7.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"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"],"names":["convertPointToCanvas","point","bounds","Point","create","x","left","y","top","undefined","convertCanvasPointToWorld","frame","viewport","transform","position","Vector3","fromMatrixPosition","scene","camera","isOrthographic","ray","transformPointToOrthographicRay","image","offsetPoint","Ray","at","origin","direction","magnitude","viewVector","intersectPlane","Plane","fromNormalAndCoplanarPoint","transformPointToRay","computeUpdatedTransform","current","previous","next","angle","identifier","Matrix4","multiply","makeTranslation","computeTranslation","right","up","back","rotation","Quaternion","fromMatrixRotation","rotatedRight","transformMatrix","makeRotation","rotatedLeft","rotationAxis","dot","computeRotation","fromAxisAngle","rotatedUp","rotatedDown","down","rotatedForward","forward","rotatedBack","rotatedTranslationAxis","rotatedDelta","subtract","z","negate","xAxisRotationPositions","widgetTransform","triangleSize","computeRotationNdcValues","yAxisRotationPositions","zAxisRotationPositions","xDirection","yDirection","transformedDirection","add","transformedX","transformedY","basePosition","scale","xRay","yRay","cross","base","rotateAboutAxis","Angle","toRadians","TriangleMeshPoints","projectionViewMatrix","testDrawable","drawable","TriangleMesh","testTriangleMesh","mesh","testTriangle","points","worldLeft","worldRight","worldTip","worldBase","length","edge1","edge2","epsilon","BoundingBox","_a","fromVectors","p","det","Math","abs","t","u","q","v","r","isNaN","TransformWidget","ReglComponent","[object Object]","canvasElement","colors","super","this","disabledAxis","xTranslation","yTranslation","zTranslation","xRotation","yRotation","zRotation","axisLines","rotationLines","translationMeshes","rotationMeshes","hoveredChanged","EventDispatcher","xArrowFillColor","xArrow","yArrowFillColor","yArrow","zArrowFillColor","zArrow","hoveredArrowFillColor","hovered","outlineColor","outline","disabledColor","reglFrameDisposable","cancel","drawableElements","Rectangle","containsPoints","axis","Object","assign","updateDisabledOnTriangles","cursor","updateHovered","clearHovered","updateAndDraw","clear","_b","_c","_d","_e","_f","xAxis","updateFillColor","_g","yAxis","_h","zAxis","_j","getXTranslationColor","_k","getYTranslationColor","_l","getZTranslationColor","_m","getXRotationColor","_o","getYRotationColor","_p","getZRotationColor","_q","hoveredElement","listener","on","setDisabled","updateColors","previousHovered","currentFrame","filter","el","valid","isDisabled","find","m","emit","initialFillColor","createElements","updateElements","computeDrawable2dBounds","reglCommand","regl","canvas","extensions","createShape","shapeBuilder","computeTriangleSize","xAxisArrowPositions","AxisLine","axisPositions","yAxisArrowPositions","zAxisArrowPositions","createRotationLines","availableElements","xyRotationLinePoints","rotationAxisPositions","xzRotationLinePoints","yxRotationLinePoints","yzRotationLinePoints","zxRotationLinePoints","zyRotationLinePoints","xyRotationLine","RotationLine","xzRotationLine","yxRotationLine","yzRotationLine","zxRotationLine","zyRotationLine","l","updatePoints","_r","_s","_t","viewerTransformWidgetCss","ViewerTransformWidget","hostRef","xRotationDisabled","yRotationDisabled","zRotationDisabled","xTranslationDisabled","yTranslationDisabled","zTranslationDisabled","xArrowColor","yArrowColor","zArrowColor","hoveredColor","lastAngle","handleHoveredDrawableChanged","handleViewerFrameDrawn","updatePropsFromViewer","handleViewerDimensionsChange","writeDOM","viewer","canvasRef","width","height","updateCanvasBounds","handleResize","handlePointerMove","event","dragging","canvasPoint","clientX","clientY","getCanvasBounds","widget","getTransformWidget","boundsContainsPoint","updateCursor","handleBeginDrag","async","canvasBounds","currentCanvas","widgetCenter","transformWorldToViewport","fromPoints","lastWorldPosition","currentTransform","controller","beginTransform","interactionStarted","window","removeEventListener","addEventListener","handleDrag","handleEndTransform","preventDefault","currentWorld","updateTransform","updateDisabledAxis","delta","getCurrentDelta","endTransform","interactionEnded","e","console","error","updateFrame","setupTransformWidget","debug","JSON","stringify","getTransformForNewRotation","startingTransform","handleSettingDisabledAxis","hoveredChangeDisposable","onHoveredChanged","readDOM","getBoundingClientRect","updateDimensions","getTransformForNewPosition","newPosition","c","makeIdentity","currentRotation","newRotationEuler","oldRotation","invert","newRotation","fromEuler","oldTranslation","Error","canvasResizeObserver","ResizeObserver","observe","handleViewerChanged","hostStyles","getComputedStyle","hostEl","getPropertyValue","trim","disconnect","dispose","newViewer","oldViewer","stream","TransformController","rotationChanged","oldPosition","clearTransform","positionChanged","h","Host","ref","class","classNames","onPointerDown","warn"],"mappings":"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","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"]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Copyright (c) 2023 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import{d as e,N as t,w as r,p as a,b as i}from"./p-50533a46.js";import{g as o}from"./p-146e5d45.js";import"./p-9acf99ad.js";const n=e=>`__sc_import_${e.replace(/\s|-/g,"_")}`;const s=()=>{const i=Array.from(e.querySelectorAll("script")).find((e=>new RegExp(`/${t}(\\.esm)?\\.js($|\\?|#)`).test(e.src)||e.getAttribute("data-stencil-namespace")===t));const o="";const n={};if(o!==""){n.resourcesUrl=new URL(".",o).href}else{n.resourcesUrl=new URL(".",new URL(i.getAttribute("data-resources-url")||i.src,r.location.href)).href;{l(n.resourcesUrl,i)}if(!r.customElements){return __sc_import_viewer("./p-1afa84ed.js").then((()=>n))}}return a(n)};const l=(a,i)=>{const o=n(t);try{r[o]=new Function("w",`return import(w);//${Math.random()}`)}catch(t){const n=new Map;r[o]=t=>{const s=new URL(t,a).href;let l=n.get(s);if(!l){const t=e.createElement("script");t.type="module";t.crossOrigin=i.crossOrigin;t.src=URL.createObjectURL(new Blob([`import * as m from '${s}'; window.${o}.m = m;`],{type:"application/javascript"}));l=new Promise((e=>{t.onload=()=>{e(r[o].m);t.remove()}}));n.set(s,l);e.head.appendChild(t)}return l}}};s().then((e=>{o();return i(JSON.parse('[["p-c86537d8",[[1,"vertex-viewer-pin-tool",{"pinController":[1040],"pinModel":[16],"viewer":[16],"tool":[1025],"mode":[1025],"primaryColor":[1025,"primary-color"],"accentColor":[1025,"accent-color"],"pins":[32],"selectedPinId":[32],"elementBounds":[32],"projectionViewMatrix":[32]}]]],["p-3c9bf8c2",[[1,"vertex-scene-tree",{"overScanCount":[2,"over-scan-count"],"viewerSelector":[1,"viewer-selector"],"viewer":[1040],"rowData":[16],"config":[1],"configEnv":[1,"config-env"],"controller":[1040],"metadataSearchExactMatch":[1028,"metadata-search-exact-match"],"metadataSearchKeys":[1040],"metadataKeys":[16],"rows":[32],"totalRows":[32],"showLoader":[32],"stateMap":[32],"errorDetails":[32],"attemptingRetry":[32],"invalidateRows":[64],"scrollToIndex":[64],"scrollToItem":[64],"expandAll":[64],"collapseAll":[64],"expandItem":[64],"collapseItem":[64],"toggleExpandItem":[64],"toggleItemVisibility":[64],"hideItem":[64],"showItem":[64],"selectItem":[64],"deselectItem":[64],"getRowAtIndex":[64],"getRowForEvent":[64],"getRowAtClientY":[64],"filterItems":[64],"selectFilteredItems":[64],"fetchMetadataKeys":[64]},[[0,"search","handleSearch"],[0,"cellLoaded","handleCellLoaded"]]]]],["p-a96559b7",[[1,"vertex-viewer-default-toolbar",{"viewer":[16],"placement":[1],"direction":[1],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"]}]]],["p-6bc3cc72",[[1,"vertex-viewer-markup",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"selectedMarkupId":[1025,"selected-markup-id"],"selectNew":[4,"select-new"],"toSelectMarkupId":[32],"pointerDownPosition":[32],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[1,"pointerdown","handleMarkupPointerDown"]]]]],["p-eaebbc17",[[1,"vertex-viewer-markup-tool",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"stateMap":[32],"reset":[64]}]]],["p-e3b121c2",[[1,"vertex-viewer-view-cube",{"xPositiveLabel":[1,"x-positive-label"],"xNegativeLabel":[1,"x-negative-label"],"yPositiveLabel":[1,"y-positive-label"],"yNegativeLabel":[1,"y-negative-label"],"zPositiveLabel":[1,"z-positive-label"],"zNegativeLabel":[1,"z-negative-label"],"standardViewsOff":[4,"standard-views-off"],"animationDuration":[2,"animation-duration"],"triadOff":[4,"triad-off"],"worldOrientation":[1040],"camera":[1040],"viewer":[16],"boxLength":[32],"triadPosition":[32]}]]],["p-adcbbd79",[[1,"vertex-viewer-measurement-distance",{"start":[1040],"startJson":[1,"start-json"],"end":[1040],"endJson":[1,"end-json"],"distance":[1026],"showAxisReferenceLines":[4,"show-axis-reference-lines"],"snapDistance":[2,"snap-distance"],"units":[1],"fractionalDigits":[2,"fractional-digits"],"labelFormatter":[16],"anchorLabelOffset":[2,"anchor-label-offset"],"lineCapLength":[2,"line-cap-length"],"mode":[513],"interactingAnchor":[1537,"interacting-anchor"],"invalid":[1540],"camera":[16],"hitProvider":[16],"indicatorPt":[1040],"viewer":[16],"measurementModel":[16],"viewport":[32],"elementBounds":[32],"interactionCount":[32],"internalCamera":[32],"invalidateStateCounter":[32],"stateMap":[32],"measurementUnits":[32],"computeElementMetrics":[64]}]]],["p-09bc8b36",[[1,"vertex-viewer-measurement-precise",{"measurementModel":[16],"measurementOverlays":[16],"measurementController":[1040],"measurableEntityTypes":[16],"viewer":[16],"configEnv":[1,"config-env"],"config":[1]}]]],["p-5e1040f4",[[1,"vertex-viewer-box-query-tool",{"viewer":[16],"controller":[1040],"model":[1040],"operationType":[1,"operation-type"],"mode":[1],"details":[32]}]]],["p-9320ca95",[[1,"vertex-scene-tree-table-cell",{"node":[16],"tree":[16],"value":[1],"placeholder":[1],"hovered":[1028],"isScrolling":[4,"is-scrolling"],"expandToggle":[4,"expand-toggle"],"visibilityToggle":[4,"visibility-toggle"],"selectionHandler":[16],"visibilityHandler":[16],"expansionHandler":[16],"hoverController":[16]}]]],["p-7e6ce60f",[[1,"vertex-scene-tree-table-column",{"initialWidth":[2,"initial-width"],"minWidth":[2,"min-width"],"maxWidth":[2,"max-width"]}]]],["p-f10a020b",[[1,"vertex-scene-tree-table-header"]]],["p-1ec5dc51",[[1,"vertex-scene-tree-table-resize-divider",{"dragging":[32]}]]],["p-e9a6f6ff",[[1,"vertex-scene-tree-toolbar-group"]]],["p-0bba0b20",[[1,"vertex-viewer",{"src":[1],"clientId":[1,"client-id"],"deviceId":[1025,"device-id"],"config":[1],"configEnv":[1,"config-env"],"resolvedConfig":[1040],"cameraControls":[4,"camera-controls"],"cameraType":[1537,"camera-type"],"keyboardControls":[4,"keyboard-controls"],"rotateAroundTapPoint":[4,"rotate-around-tap-point"],"token":[1025],"depthBuffers":[1,"depth-buffers"],"experimentalGhostingOpacity":[2,"experimental-ghosting-opacity"],"noDefaultLights":[4,"no-default-lights"],"experimentalRenderingOptions":[1,"experimental-rendering-options"],"featureLines":[16],"selectionHighlighting":[16],"featureHighlighting":[16],"featureMaps":[1,"feature-maps"],"resizeDebounce":[2,"resize-debounce"],"frame":[1040],"stream":[1040],"stencilBuffer":[1040],"viewport":[1040],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget_DEPRECATED":[64],"addCursor":[64],"getInteractionHandlers":[64],"getKeyInteractions":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"scene":[64],"isSceneReady":[64]},[[0,"tap","handleTapEvent"]]]]],["p-ef1fb760",[[1,"vertex-viewer-hit-result-indicator",{"viewer":[16],"position":[1040],"normal":[1040]}]]],["p-73bfcd72",[[1,"vertex-viewer-measurement-details",{"measurementModel":[16],"measurementOverlays":[16],"measurementOutcome":[1040],"distanceUnits":[1,"distance-units"],"angleUnits":[1,"angle-units"],"fractionalDigits":[2,"fractional-digits"],"distanceFormatter":[16],"angleFormatter":[16],"areaFormatter":[16],"resultTypes":[16],"overlay":[32],"distanceMeasurementUnits":[32],"angleMeasurementUnits":[32],"areaMeasurementUnits":[32]}]]],["p-844f80b3",[[1,"vertex-viewer-transform-widget",{"viewer":[16],"position":[1040],"rotation":[1040],"controller":[1040],"xRotationDisabled":[1028,"x-rotation-disabled"],"yRotationDisabled":[1028,"y-rotation-disabled"],"zRotationDisabled":[1028,"z-rotation-disabled"],"xTranslationDisabled":[1028,"x-translation-disabled"],"yTranslationDisabled":[1028,"y-translation-disabled"],"zTranslationDisabled":[1028,"z-translation-disabled"],"hovered":[1040]}]]],["p-369cf923",[[1,"vertex-viewer-icon",{"name":[1],"size":[1]}]]],["p-c090c678",[[0,"vertex-viewer-pin-group",{"pin":[16],"matrix":[1040],"projectionViewMatrix":[16],"elementBounds":[1040],"pinModel":[16],"pinController":[16],"selected":[4],"invalidateStateCounter":[32]}]]],["p-88fd3d19",[[1,"vertex-viewer-dom-group",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040]}]]],["p-87d386a1",[[1,"vertex-viewer-spinner",{"size":[1]}]]],["p-3560f148",[[1,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"controller":[16],"value":[1025],"focused":[32],"isSearching":[32],"setFocus":[64]}],[1,"vertex-scene-tree-table-layout",{"tree":[16],"controller":[16],"rows":[16],"totalRows":[2,"total-rows"],"rowHeight":[1026,"row-height"],"overScanCount":[2,"over-scan-count"],"rowData":[16],"layoutOffset":[1026,"layout-offset"],"scrollOffset":[1026,"scroll-offset"],"layoutHeight":[1026,"layout-height"],"layoutWidth":[1026,"layout-width"],"viewportStartIndex":[1026,"viewport-start-index"],"viewportEndIndex":[1026,"viewport-end-index"],"columnGridLayout":[32],"columnGridFixedLayout":[32],"isComputingCellHeight":[32],"lastDividerPointerPosition":[32],"resizingColumnIndex":[32],"isScrolling":[32],"scrollTimer":[32],"stateMap":[32],"scrollToPosition":[64]}],[1,"vertex-scene-tree-toolbar"]]],["p-be6b15b3",[[1,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]]],["p-13bf559e",[[1,"vertex-viewer-toolbar",{"placement":[1],"direction":[1]}],[1,"vertex-viewer-button"],[1,"vertex-viewer-toolbar-group",{"direction":[1]}]]],["p-f13b7f7b",[[0,"vertex-viewer-pin-label",{"pin":[16],"elementBounds":[16],"value":[1025],"pinController":[16],"focused":[32],"computedScreenPosition":[32],"textareaRows":[32],"contentElBounds":[32],"setFocus":[64]}],[0,"vertex-viewer-pin-label-line",{"pinPoint":[16],"labelPoint":[16],"pin":[16]}]]],["p-3a19ea35",[[1,"vertex-viewer-measurement-overlays",{"measurementOverlays":[16],"camera":[1040],"viewer":[16],"overlays":[32]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]],["p-cf82037c",[[1,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32]},[[0,"propertyChange","handlePropertyChange"]]],[1,"vertex-viewer-dom-element",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040],"occlusionOff":[4,"occlusion-off"],"occluded":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]}]]],["p-5742c9cd",[[1,"vertex-viewer-markup-arrow",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-circle",{"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-freeform",{"points":[1040],"pointsJson":[1,"points"],"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"screenPoints":[32],"dispose":[64]}]]]]'),e)}));
4
+ import{d as e,N as t,w as r,p as a,b as i}from"./p-50533a46.js";import{g as o}from"./p-146e5d45.js";import"./p-9acf99ad.js";const n=e=>`__sc_import_${e.replace(/\s|-/g,"_")}`;const s=()=>{const i=Array.from(e.querySelectorAll("script")).find((e=>new RegExp(`/${t}(\\.esm)?\\.js($|\\?|#)`).test(e.src)||e.getAttribute("data-stencil-namespace")===t));const o="";const n={};if(o!==""){n.resourcesUrl=new URL(".",o).href}else{n.resourcesUrl=new URL(".",new URL(i.getAttribute("data-resources-url")||i.src,r.location.href)).href;{l(n.resourcesUrl,i)}if(!r.customElements){return __sc_import_viewer("./p-1afa84ed.js").then((()=>n))}}return a(n)};const l=(a,i)=>{const o=n(t);try{r[o]=new Function("w",`return import(w);//${Math.random()}`)}catch(t){const n=new Map;r[o]=t=>{const s=new URL(t,a).href;let l=n.get(s);if(!l){const t=e.createElement("script");t.type="module";t.crossOrigin=i.crossOrigin;t.src=URL.createObjectURL(new Blob([`import * as m from '${s}'; window.${o}.m = m;`],{type:"application/javascript"}));l=new Promise((e=>{t.onload=()=>{e(r[o].m);t.remove()}}));n.set(s,l);e.head.appendChild(t)}return l}}};s().then((e=>{o();return i(JSON.parse('[["p-c86537d8",[[1,"vertex-viewer-pin-tool",{"pinController":[1040],"pinModel":[16],"viewer":[16],"tool":[1025],"mode":[1025],"primaryColor":[1025,"primary-color"],"accentColor":[1025,"accent-color"],"pins":[32],"selectedPinId":[32],"elementBounds":[32],"projectionViewMatrix":[32]}]]],["p-3c9bf8c2",[[1,"vertex-scene-tree",{"overScanCount":[2,"over-scan-count"],"viewerSelector":[1,"viewer-selector"],"viewer":[1040],"rowData":[16],"config":[1],"configEnv":[1,"config-env"],"controller":[1040],"metadataSearchExactMatch":[1028,"metadata-search-exact-match"],"metadataSearchKeys":[1040],"metadataKeys":[16],"rows":[32],"totalRows":[32],"showLoader":[32],"stateMap":[32],"errorDetails":[32],"attemptingRetry":[32],"invalidateRows":[64],"scrollToIndex":[64],"scrollToItem":[64],"expandAll":[64],"collapseAll":[64],"expandItem":[64],"collapseItem":[64],"toggleExpandItem":[64],"toggleItemVisibility":[64],"hideItem":[64],"showItem":[64],"selectItem":[64],"deselectItem":[64],"getRowAtIndex":[64],"getRowForEvent":[64],"getRowAtClientY":[64],"filterItems":[64],"selectFilteredItems":[64],"fetchMetadataKeys":[64]},[[0,"search","handleSearch"],[0,"cellLoaded","handleCellLoaded"]]]]],["p-a96559b7",[[1,"vertex-viewer-default-toolbar",{"viewer":[16],"placement":[1],"direction":[1],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"]}]]],["p-6bc3cc72",[[1,"vertex-viewer-markup",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"selectedMarkupId":[1025,"selected-markup-id"],"selectNew":[4,"select-new"],"toSelectMarkupId":[32],"pointerDownPosition":[32],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[1,"pointerdown","handleMarkupPointerDown"]]]]],["p-eaebbc17",[[1,"vertex-viewer-markup-tool",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"stateMap":[32],"reset":[64]}]]],["p-e3b121c2",[[1,"vertex-viewer-view-cube",{"xPositiveLabel":[1,"x-positive-label"],"xNegativeLabel":[1,"x-negative-label"],"yPositiveLabel":[1,"y-positive-label"],"yNegativeLabel":[1,"y-negative-label"],"zPositiveLabel":[1,"z-positive-label"],"zNegativeLabel":[1,"z-negative-label"],"standardViewsOff":[4,"standard-views-off"],"animationDuration":[2,"animation-duration"],"triadOff":[4,"triad-off"],"worldOrientation":[1040],"camera":[1040],"viewer":[16],"boxLength":[32],"triadPosition":[32]}]]],["p-adcbbd79",[[1,"vertex-viewer-measurement-distance",{"start":[1040],"startJson":[1,"start-json"],"end":[1040],"endJson":[1,"end-json"],"distance":[1026],"showAxisReferenceLines":[4,"show-axis-reference-lines"],"snapDistance":[2,"snap-distance"],"units":[1],"fractionalDigits":[2,"fractional-digits"],"labelFormatter":[16],"anchorLabelOffset":[2,"anchor-label-offset"],"lineCapLength":[2,"line-cap-length"],"mode":[513],"interactingAnchor":[1537,"interacting-anchor"],"invalid":[1540],"camera":[16],"hitProvider":[16],"indicatorPt":[1040],"viewer":[16],"measurementModel":[16],"viewport":[32],"elementBounds":[32],"interactionCount":[32],"internalCamera":[32],"invalidateStateCounter":[32],"stateMap":[32],"measurementUnits":[32],"computeElementMetrics":[64]}]]],["p-09bc8b36",[[1,"vertex-viewer-measurement-precise",{"measurementModel":[16],"measurementOverlays":[16],"measurementController":[1040],"measurableEntityTypes":[16],"viewer":[16],"configEnv":[1,"config-env"],"config":[1]}]]],["p-5e1040f4",[[1,"vertex-viewer-box-query-tool",{"viewer":[16],"controller":[1040],"model":[1040],"operationType":[1,"operation-type"],"mode":[1],"details":[32]}]]],["p-9320ca95",[[1,"vertex-scene-tree-table-cell",{"node":[16],"tree":[16],"value":[1],"placeholder":[1],"hovered":[1028],"isScrolling":[4,"is-scrolling"],"expandToggle":[4,"expand-toggle"],"visibilityToggle":[4,"visibility-toggle"],"selectionHandler":[16],"visibilityHandler":[16],"expansionHandler":[16],"hoverController":[16]}]]],["p-7e6ce60f",[[1,"vertex-scene-tree-table-column",{"initialWidth":[2,"initial-width"],"minWidth":[2,"min-width"],"maxWidth":[2,"max-width"]}]]],["p-f10a020b",[[1,"vertex-scene-tree-table-header"]]],["p-1ec5dc51",[[1,"vertex-scene-tree-table-resize-divider",{"dragging":[32]}]]],["p-e9a6f6ff",[[1,"vertex-scene-tree-toolbar-group"]]],["p-0bba0b20",[[1,"vertex-viewer",{"src":[1],"clientId":[1,"client-id"],"deviceId":[1025,"device-id"],"config":[1],"configEnv":[1,"config-env"],"resolvedConfig":[1040],"cameraControls":[4,"camera-controls"],"cameraType":[1537,"camera-type"],"keyboardControls":[4,"keyboard-controls"],"rotateAroundTapPoint":[4,"rotate-around-tap-point"],"token":[1025],"depthBuffers":[1,"depth-buffers"],"experimentalGhostingOpacity":[2,"experimental-ghosting-opacity"],"noDefaultLights":[4,"no-default-lights"],"experimentalRenderingOptions":[1,"experimental-rendering-options"],"featureLines":[16],"selectionHighlighting":[16],"featureHighlighting":[16],"featureMaps":[1,"feature-maps"],"resizeDebounce":[2,"resize-debounce"],"frame":[1040],"stream":[1040],"stencilBuffer":[1040],"viewport":[1040],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget_DEPRECATED":[64],"addCursor":[64],"getInteractionHandlers":[64],"getKeyInteractions":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"scene":[64],"isSceneReady":[64]},[[0,"tap","handleTapEvent"]]]]],["p-ef1fb760",[[1,"vertex-viewer-hit-result-indicator",{"viewer":[16],"position":[1040],"normal":[1040]}]]],["p-73bfcd72",[[1,"vertex-viewer-measurement-details",{"measurementModel":[16],"measurementOverlays":[16],"measurementOutcome":[1040],"distanceUnits":[1,"distance-units"],"angleUnits":[1,"angle-units"],"fractionalDigits":[2,"fractional-digits"],"distanceFormatter":[16],"angleFormatter":[16],"areaFormatter":[16],"resultTypes":[16],"overlay":[32],"distanceMeasurementUnits":[32],"angleMeasurementUnits":[32],"areaMeasurementUnits":[32]}]]],["p-839064b7",[[1,"vertex-viewer-transform-widget",{"viewer":[16],"position":[1040],"rotation":[1040],"controller":[1040],"xRotationDisabled":[1028,"x-rotation-disabled"],"yRotationDisabled":[1028,"y-rotation-disabled"],"zRotationDisabled":[1028,"z-rotation-disabled"],"xTranslationDisabled":[1028,"x-translation-disabled"],"yTranslationDisabled":[1028,"y-translation-disabled"],"zTranslationDisabled":[1028,"z-translation-disabled"],"hovered":[1040]}]]],["p-369cf923",[[1,"vertex-viewer-icon",{"name":[1],"size":[1]}]]],["p-c090c678",[[0,"vertex-viewer-pin-group",{"pin":[16],"matrix":[1040],"projectionViewMatrix":[16],"elementBounds":[1040],"pinModel":[16],"pinController":[16],"selected":[4],"invalidateStateCounter":[32]}]]],["p-88fd3d19",[[1,"vertex-viewer-dom-group",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040]}]]],["p-87d386a1",[[1,"vertex-viewer-spinner",{"size":[1]}]]],["p-3560f148",[[1,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"controller":[16],"value":[1025],"focused":[32],"isSearching":[32],"setFocus":[64]}],[1,"vertex-scene-tree-table-layout",{"tree":[16],"controller":[16],"rows":[16],"totalRows":[2,"total-rows"],"rowHeight":[1026,"row-height"],"overScanCount":[2,"over-scan-count"],"rowData":[16],"layoutOffset":[1026,"layout-offset"],"scrollOffset":[1026,"scroll-offset"],"layoutHeight":[1026,"layout-height"],"layoutWidth":[1026,"layout-width"],"viewportStartIndex":[1026,"viewport-start-index"],"viewportEndIndex":[1026,"viewport-end-index"],"columnGridLayout":[32],"columnGridFixedLayout":[32],"isComputingCellHeight":[32],"lastDividerPointerPosition":[32],"resizingColumnIndex":[32],"isScrolling":[32],"scrollTimer":[32],"stateMap":[32],"scrollToPosition":[64]}],[1,"vertex-scene-tree-toolbar"]]],["p-be6b15b3",[[1,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]]],["p-13bf559e",[[1,"vertex-viewer-toolbar",{"placement":[1],"direction":[1]}],[1,"vertex-viewer-button"],[1,"vertex-viewer-toolbar-group",{"direction":[1]}]]],["p-f13b7f7b",[[0,"vertex-viewer-pin-label",{"pin":[16],"elementBounds":[16],"value":[1025],"pinController":[16],"focused":[32],"computedScreenPosition":[32],"textareaRows":[32],"contentElBounds":[32],"setFocus":[64]}],[0,"vertex-viewer-pin-label-line",{"pinPoint":[16],"labelPoint":[16],"pin":[16]}]]],["p-3a19ea35",[[1,"vertex-viewer-measurement-overlays",{"measurementOverlays":[16],"camera":[1040],"viewer":[16],"overlays":[32]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]],["p-cf82037c",[[1,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32]},[[0,"propertyChange","handlePropertyChange"]]],[1,"vertex-viewer-dom-element",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040],"occlusionOff":[4,"occlusion-off"],"occluded":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]}]]],["p-5742c9cd",[[1,"vertex-viewer-markup-arrow",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-circle",{"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-freeform",{"points":[1040],"pointsJson":[1,"points"],"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"screenPoints":[32],"dispose":[64]}]]]]'),e)}));
5
5
  //# sourceMappingURL=viewer.esm.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertexvis/viewer",
3
- "version": "0.17.2-canary.0",
3
+ "version": "0.17.2",
4
4
  "description": "The Vertex SDK for viewing models.",
5
5
  "license": "MIT",
6
6
  "author": "Vertex Developers <support@vertexvis.com> (https://developer.vertexvis.com)",
@@ -50,12 +50,12 @@
50
50
  "@stencil/core": "^2.16.1",
51
51
  "@types/classnames": "^2.3.1",
52
52
  "@vertexvis/frame-streaming-protos": "^0.9.0",
53
- "@vertexvis/geometry": "0.17.2-canary.0",
54
- "@vertexvis/html-templates": "0.17.2-canary.0",
53
+ "@vertexvis/geometry": "0.17.2",
54
+ "@vertexvis/html-templates": "0.17.2",
55
55
  "@vertexvis/scene-tree-protos": "^0.1.15",
56
56
  "@vertexvis/scene-view-protos": "^0.1.8",
57
- "@vertexvis/stream-api": "0.17.2-canary.0",
58
- "@vertexvis/utils": "0.17.2-canary.0",
57
+ "@vertexvis/stream-api": "0.17.2",
58
+ "@vertexvis/utils": "0.17.2",
59
59
  "@vertexvis/web-workers": "^0.1.0",
60
60
  "camel-case": "^4.1.2",
61
61
  "classnames": "^2.3.1",
@@ -81,7 +81,7 @@
81
81
  "@vertexvis/eslint-config-vertexvis-typescript": "^0.5.0",
82
82
  "@vertexvis/rollup-plugin-web-workers": "^0.1.0",
83
83
  "@vertexvis/typescript-config-vertexvis": "1.1.0",
84
- "@vertexwebsdk/build": "0.17.2-canary.0",
84
+ "@vertexwebsdk/build": "0.17.2",
85
85
  "abortcontroller-polyfill": "^1.7.3",
86
86
  "chance": "^1.1.8",
87
87
  "eslint": "^8.17.0",
@@ -96,5 +96,5 @@
96
96
  "typedoc": "^0.22.17",
97
97
  "typescript": "^4.5.4"
98
98
  },
99
- "gitHead": "3388840a81b0e81eb6f2f894f304b87089f6eaeb"
99
+ "gitHead": "f3d7db2e36503dbd9dbe3a079a2a8fd095174731"
100
100
  }
package/readme.md CHANGED
@@ -27,11 +27,11 @@ file that references our published JS bundles from a CDN.
27
27
  <head>
28
28
  <link
29
29
  rel="stylesheet"
30
- href="https://unpkg.com/@vertexvis/viewer@0.17.1/dist/viewer/viewer.css"
30
+ href="https://unpkg.com/@vertexvis/viewer@0.17.2/dist/viewer/viewer.css"
31
31
  />
32
32
  <script
33
33
  type="module"
34
- src="https://unpkg.com/@vertexvis/viewer@0.17.1/dist/viewer/viewer.esm.js"
34
+ src="https://unpkg.com/@vertexvis/viewer@0.17.2/dist/viewer/viewer.esm.js"
35
35
  ></script>
36
36
  </head>
37
37
 
@@ -53,7 +53,7 @@ These utilities can be imported from a CDN as shown below:
53
53
  </head>
54
54
  <body>
55
55
  <script type="module">
56
- import { ColorMaterial } from 'https://unpkg.com/@vertexvis/viewer@0.17.1/dist/esm/index.mjs';
56
+ import { ColorMaterial } from 'https://unpkg.com/@vertexvis/viewer@0.17.2/dist/esm/index.mjs';
57
57
 
58
58
  function main() {
59
59
  const color = ColorMaterial.fromHex('#ff0000');
@@ -90,7 +90,7 @@ dependency to your `package.json`:
90
90
  ```json
91
91
  {
92
92
  "dependencies": {
93
- "@vertexvis/viewer": "^0.17.1"
93
+ "@vertexvis/viewer": "^0.17.2"
94
94
  }
95
95
  }
96
96
  ```
@@ -1,5 +0,0 @@
1
- /*!
2
- * Copyright (c) 2023 Vertex Software LLC. All rights reserved.
3
- */
4
- import{r as i,c as t,h as s,H as n,g as o}from"./p-50533a46.js";import{m as h,p as l,v as e,r,f as a,q as d,c as u,b as v,e as c}from"./p-71fbe522.js";import{c as f}from"./p-9fe3f791.js";import{w,r as p}from"./p-f3383096.js";import{E as g}from"./p-7f54de9d.js";import{d as m,T as x,R as y,e as b,r as z,s as T,x as C,A as R,b as D,y as j,z as P,f as O,g as E}from"./p-881418cd.js";import"./p-9acf99ad.js";import"./p-f12cfb57.js";import"./p-e8f14257.js";import"./p-e1d82323.js";import"./p-1bb66e64.js";class S{constructor(i){this.stream=i;this.isTransforming=false;this.currentDelta=h.makeIdentity()}async dispose(){if(this.isTransforming){this.endTransform()}}async beginTransform(i=h.makeIdentity()){if(!this.isTransforming){this.currentDelta=i;this.isTransforming=true;console.debug("Beginning transform interaction");await this.stream.beginInteraction({transform:{delta:this.toDeltaTransform(i)}})}}async updateTransform(i){this.currentDelta=i;await this.stream.updateInteraction({transform:{delta:this.toDeltaTransform(this.currentDelta,true)}})}async updateTranslation(i){this.currentDelta=h.makeTranslation(i);await this.stream.updateInteraction({transform:{delta:this.toDeltaTransform(this.currentDelta)}})}getCurrentDelta(){return this.currentDelta}async endTransform(){if(this.isTransforming){console.debug(`Ending transform interaction [delta=${this.currentDelta}]`);await this.stream.endInteraction({transform:{delta:this.toDeltaTransform(this.currentDelta)}});this.isTransforming=false;this.currentDelta=h.makeIdentity()}}async endInteraction(){if(this.isTransforming){await this.stream.endInteraction();this.isTransforming=false;this.currentDelta=h.makeIdentity()}}clearTransform(){this.currentDelta=h.makeIdentity();this.endTransform()}toDeltaTransform(i,t=false){const s=h.toObject(i);const n=t?{x:s.m11,y:s.m21,z:s.m31}:{x:s.m11,y:s.m12,z:s.m13};const o=t?{x:s.m12,y:s.m22,z:s.m32}:{x:s.m21,y:s.m22,z:s.m23};const l=t?{x:s.m13,y:s.m23,z:s.m33}:{x:s.m31,y:s.m32,z:s.m33};return{basisX:n,basisY:o,basisZ:l,xlate:{x:s.m14,y:s.m24,z:s.m34},scale:s.m44}}}function N(i,t){return t!=null?l.create(i.x-t.left,i.y-t.top):undefined}function $(i,t,s,n){const o=n!=null?e.fromMatrixPosition(n):undefined;if(i!=null&&t!=null&&s!=null&&o!=null){if(t.scene.camera.isOrthographic()){const n=s.transformPointToOrthographicRay(i,t.image,t.scene.camera);const h=r.at(r.create({origin:o,direction:t.scene.camera.direction}),e.magnitude(t.scene.camera.viewVector)*2);return r.intersectPlane(n,a.fromNormalAndCoplanarPoint(t.scene.camera.direction,h))}else{const n=s.transformPointToRay(i,t.image,t.scene.camera);return r.intersectPlane(n,a.fromNormalAndCoplanarPoint(t.scene.camera.direction,o))}}return undefined}function A(i,t,s,n,o,l){switch(l){case"x-translate":{return h.multiply(i,h.makeTranslation(e.create(J(i,t,s,e.right()),0,0)))}case"y-translate":return h.multiply(i,h.makeTranslation(e.create(0,J(i,t,s,e.up()),0)));case"z-translate":return h.multiply(i,h.makeTranslation(e.create(0,0,J(i,t,s,e.back()))));case"x-rotate":{const t=d.fromMatrixRotation(i);const s=e.transformMatrix(e.right(),h.makeRotation(t));const l=e.transformMatrix(e.left(),h.makeRotation(t));const r=e.dot(n,s)>e.dot(n,l)?s:l;return _(d.fromAxisAngle(r,o),i)}case"y-rotate":{const t=d.fromMatrixRotation(i);const s=e.transformMatrix(e.up(),h.makeRotation(t));const l=e.transformMatrix(e.down(),h.makeRotation(t));const r=e.dot(n,s)>e.dot(n,l)?s:l;return _(d.fromAxisAngle(r,o),i)}case"z-rotate":{const t=d.fromMatrixRotation(i);const s=e.transformMatrix(e.forward(),h.makeRotation(t));const l=e.transformMatrix(e.back(),h.makeRotation(t));const r=e.dot(n,s)>e.dot(n,l)?s:l;return _(d.fromAxisAngle(r,o),i)}default:return i}}function J(i,t,s,n){const o=e.transformMatrix(n,h.makeRotation(d.fromMatrixRotation(i)));const l=e.multiply(o,e.subtract(s,t));return l.x+l.y+l.z}function _(i,t){return h.multiply(h.multiply(h.multiply(h.makeTranslation(e.fromMatrixPosition(t)),h.makeRotation(i)),h.makeTranslation(e.negate(e.fromMatrixPosition(t)))),t)}function H(i,t,s=3){return Y(i,t,e.back(),e.up(),s)}function U(i,t,s=3){return Y(i,t,e.right(),e.back(),s)}function X(i,t,s=3){return Y(i,t,e.right(),e.up(),s)}function Y(i,t,s,n,o){const l=e.transformMatrix(e.add(s,n),h.makeRotation(d.fromMatrixRotation(i)));const a=e.transformMatrix(s,h.makeRotation(d.fromMatrixRotation(i)));const v=e.transformMatrix(n,h.makeRotation(d.fromMatrixRotation(i)));const c=e.fromMatrixPosition(i);const f=e.add(c,e.scale(o*10,l));const w=r.create({origin:f,direction:a});const p=r.create({origin:f,direction:v});const g=e.cross(a,v);const x=e.rotateAboutAxis(u.toRadians(45),r.at(p,-o),g,f);const y=e.rotateAboutAxis(u.toRadians(45),r.at(w,o),g,f);const b=e.rotateAboutAxis(u.toRadians(45),r.at(p,o),g,f);const z=e.rotateAboutAxis(u.toRadians(45),r.at(w,-o),g,f);return new m(e.dot(a,t.direction)!==-1&&e.dot(v,t.direction)!==-1,x,z,y,b,e.transformMatrix(x,t.projectionViewMatrix),e.transformMatrix(z,t.projectionViewMatrix),e.transformMatrix(y,t.projectionViewMatrix),e.transformMatrix(b,t.projectionViewMatrix))}function Z(i,t,s,n){if(i instanceof x){return I(i,t,s,n)}return false}function I(i,t,s,n){return L([i.points.worldLeft,i.points.worldRight,i.points.worldTip],t,s,n)||L([i.points.worldLeft,i.points.worldRight,i.points.worldBase],t,s,n)}function L(i,t,s,n){var o;if(i.length===3){const h=t.scene.camera.isOrthographic()?s.transformPointToOrthographicRay(n,t.image,t.scene.camera):s.transformPointToRay(n,t.image,t.scene.camera);const l=e.subtract(i[1],i[0]);const r=e.subtract(i[2],i[0]);const a=v.epsilon((o=v.fromVectors([h.direction,h.origin,l,r]))!==null&&o!==void 0?o:v.create(l,r));const d=e.cross(h.direction,r);const u=e.dot(l,d);if(!(Math.abs(u)>=a)){return false}const c=e.subtract(h.origin,i[0]);const f=e.dot(c,d)/u;if(f<0||f>1){return false}const w=e.cross(c,l);const p=e.dot(h.direction,w)/u;if(p<0||f+p>1){return false}const g=e.dot(r,w)/u;return!isNaN(g)&&(g>0||t.scene.camera.isOrthographic())}return false}class V extends y{constructor(i,t={}){var s;super(i);this.disabledAxis={xTranslation:false,yTranslation:false,zTranslation:false,xRotation:false,yRotation:false,zRotation:false};this.axisLines=[];this.rotationLines=[];this.translationMeshes=[];this.rotationMeshes=[];this.hoveredChanged=new g;this.xArrowFillColor=t.xArrow;this.yArrowFillColor=t.yArrow;this.zArrowFillColor=t.zArrow;this.hoveredArrowFillColor=t.hovered;this.outlineColor=t.outline;this.disabledColor=(s=t.disabledColor)!==null&&s!==void 0?s:"#cccccc"}dispose(){var i;(i=this.reglFrameDisposable)===null||i===void 0?void 0:i.cancel()}getDrawableElements(){return this.drawableElements}boundsContainsPoint(i){return this.bounds!=null&&this.frame!=null&&c.containsPoints(this.bounds,i)}updateDisabledAxis(i){this.disabledAxis=Object.assign(Object.assign({},this.disabledAxis),i);this.updateDisabledOnTriangles()}updateCursor(i){this.cursor=i;if(i!=null&&this.frame!=null){this.updateHovered()}else{this.clearHovered()}}updateTransform(i){var t;this.transform=i;if(i!=null&&this.frame!=null){this.updateAndDraw()}else{this.clear();(t=this.reglFrameDisposable)===null||t===void 0?void 0:t.cancel();this.reglFrameDisposable=undefined}}updateColors(i={}){var t,s,n,o,h,l,e,r,a,d,u,v,c,f,w;this.xArrowFillColor=(t=i.xArrow)!==null&&t!==void 0?t:this.xArrowFillColor;this.yArrowFillColor=(s=i.yArrow)!==null&&s!==void 0?s:this.yArrowFillColor;this.zArrowFillColor=(n=i.zArrow)!==null&&n!==void 0?n:this.zArrowFillColor;this.hoveredArrowFillColor=(o=i.hovered)!==null&&o!==void 0?o:this.hoveredArrowFillColor;this.outlineColor=(h=i.outline)!==null&&h!==void 0?h:this.outlineColor;(l=this.xAxis)===null||l===void 0?void 0:l.updateFillColor(this.disabledColor);(e=this.yAxis)===null||e===void 0?void 0:e.updateFillColor(this.disabledColor);(r=this.zAxis)===null||r===void 0?void 0:r.updateFillColor(this.disabledColor);(a=this.xArrow)===null||a===void 0?void 0:a.updateFillColor(this.getXTranslationColor());(d=this.yArrow)===null||d===void 0?void 0:d.updateFillColor(this.getYTranslationColor());(u=this.zArrow)===null||u===void 0?void 0:u.updateFillColor(this.getZTranslationColor());(v=this.xRotation)===null||v===void 0?void 0:v.updateFillColor(this.getXRotationColor());(c=this.yRotation)===null||c===void 0?void 0:c.updateFillColor(this.getYRotationColor());(f=this.zRotation)===null||f===void 0?void 0:f.updateFillColor(this.getZRotationColor());(w=this.hoveredElement)===null||w===void 0?void 0:w.updateFillColor(this.hoveredArrowFillColor)}onHoveredChanged(i){return this.hoveredChanged.on(i)}updateDisabledOnTriangles(){var i,t,s,n,o,h;(i=this.xRotation)===null||i===void 0?void 0:i.setDisabled(this.disabledAxis.xRotation);(t=this.yRotation)===null||t===void 0?void 0:t.setDisabled(this.disabledAxis.yRotation);(s=this.zRotation)===null||s===void 0?void 0:s.setDisabled(this.disabledAxis.zRotation);(n=this.xArrow)===null||n===void 0?void 0:n.setDisabled(this.disabledAxis.xTranslation);(o=this.yArrow)===null||o===void 0?void 0:o.setDisabled(this.disabledAxis.yTranslation);(h=this.zArrow)===null||h===void 0?void 0:h.setDisabled(this.disabledAxis.zTranslation);this.updateColors()}updateHovered(){var i;const t=this.hoveredElement;const s=this.frame;if(s!=null){this.hoveredElement=[...this.translationMeshes,...this.rotationMeshes].filter((i=>i.points.valid&&!i.isDisabled())).find((i=>this.cursor!=null?Z(i,s,this.viewport,this.cursor):false));if(this.hoveredElement!==t){this.hoveredChanged.emit(this.hoveredElement);(i=this.hoveredElement)===null||i===void 0?void 0:i.updateFillColor(this.hoveredArrowFillColor);t===null||t===void 0?void 0:t.updateFillColor(t===null||t===void 0?void 0:t.initialFillColor)}}}clearHovered(){const i=this.hoveredElement;this.hoveredElement=undefined;if(this.hoveredElement!==i){this.hoveredChanged.emit(this.hoveredElement);i.updateFillColor(i.initialFillColor)}}hasData(){return this.transform!=null}createOrUpdateElements(){if(this.transform!=null&&this.frame!=null){if(this.xArrow==null||this.yArrow==null||this.zArrow==null){this.createElements(this.transform,this.frame)}else{this.updateElements(this.transform,this.frame)}this.bounds=b(this.viewport,...this.rotationMeshes,...this.translationMeshes)}}createElements(i,t){this.reglCommand=z({canvas:this.canvasElement,extensions:"angle_instanced_arrays"});const{createShape:s}=T(this.reglCommand);const n=this.computeTriangleSize(e.fromMatrixPosition(i),t);this.xArrow=new x(s,"x-translate",C(i,t.scene.camera,n),this.outlineColor,this.getXTranslationColor());this.xRotation=new x(s,"x-rotate",H(i,t.scene.camera,n),this.outlineColor,this.getXRotationColor());this.xAxis=new R(s,"x-axis",D(i,t.scene.camera,this.xArrow),this.outlineColor,this.getXTranslationColor());this.yArrow=new x(s,"y-translate",j(i,t.scene.camera,n),this.outlineColor,this.getYTranslationColor());this.yRotation=new x(s,"y-rotate",U(i,t.scene.camera,n),this.outlineColor,this.getYRotationColor());this.yAxis=new R(s,"y-axis",D(i,t.scene.camera,this.yArrow),this.outlineColor,this.getYTranslationColor());this.zArrow=new x(s,"z-translate",P(i,t.scene.camera,n),this.outlineColor,this.getZTranslationColor());this.zAxis=new R(s,"z-axis",D(i,t.scene.camera,this.zArrow),this.outlineColor,this.getZTranslationColor());this.zRotation=new x(s,"z-rotate",X(i,t.scene.camera,n),this.outlineColor,this.getZRotationColor());this.createRotationLines(s,i,t);this.axisLines=[this.xAxis,this.yAxis,this.zAxis];this.translationMeshes=[this.xArrow,this.yArrow,this.zArrow];this.rotationMeshes=[this.xRotation,this.yRotation,this.zRotation];this.updateDisabledOnTriangles();this.availableElements=[...this.axisLines,...this.rotationLines,...this.translationMeshes,...this.rotationMeshes]}getXRotationColor(){var i;return((i=this.xRotation)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.xArrowFillColor}getYRotationColor(){var i;return((i=this.yRotation)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.yArrowFillColor}getZRotationColor(){var i;return((i=this.zRotation)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.zArrowFillColor}getXTranslationColor(){var i;return((i=this.xArrow)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.xArrowFillColor}getYTranslationColor(){var i;return((i=this.yArrow)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.yArrowFillColor}getZTranslationColor(){var i;return((i=this.zArrow)===null||i===void 0?void 0:i.isDisabled())?this.disabledColor:this.zArrowFillColor}createRotationLines(i,t,s){var n,o,h,l,r,a;const d=this.computeTriangleSize(e.fromMatrixPosition(t),s);const u=O(s.scene.camera,this.xRotation,(n=this.yArrow)===null||n===void 0?void 0:n.points.worldTip,d);const v=O(s.scene.camera,this.xRotation,(o=this.zArrow)===null||o===void 0?void 0:o.points.worldTip,d);const c=O(s.scene.camera,this.yRotation,(h=this.xArrow)===null||h===void 0?void 0:h.points.worldTip,d);const f=O(s.scene.camera,this.yRotation,(l=this.zArrow)===null||l===void 0?void 0:l.points.worldTip,d);const w=O(s.scene.camera,this.zRotation,(r=this.xArrow)===null||r===void 0?void 0:r.points.worldTip,d);const p=O(s.scene.camera,this.zRotation,(a=this.yArrow)===null||a===void 0?void 0:a.points.worldTip,d);if(u!=null){this.xyRotationLine=new E(i,"xy-rotation-line",u,this.outlineColor)}if(v!=null){this.xzRotationLine=new E(i,"xz-rotation-line",v,this.outlineColor)}if(c!=null){this.yxRotationLine=new E(i,"yx-rotation-line",c,this.outlineColor)}if(f!=null){this.yzRotationLine=new E(i,"yz-rotation-line",f,this.outlineColor)}if(w!=null){this.zxRotationLine=new E(i,"zx-rotation-line",w,this.outlineColor)}if(p!=null){this.zyRotationLine=new E(i,"zy-rotation-line",p,this.outlineColor)}this.rotationLines=[this.xyRotationLine,this.xzRotationLine,this.yxRotationLine,this.yzRotationLine,this.zxRotationLine,this.zyRotationLine].filter((i=>i!=null))}updateElements(i,t){var s,n,o,h,l,r,a,d,u,v,c,f,w,p,g,m,x,y;const b=this.computeTriangleSize(e.fromMatrixPosition(i),t);if(this.xArrow!=null){this.xArrow.updatePoints(C(i,t.scene.camera,b));(s=this.xAxis)===null||s===void 0?void 0:s.updatePoints(D(i,t.scene.camera,this.xArrow))}(n=this.xRotation)===null||n===void 0?void 0:n.updatePoints(H(i,t.scene.camera,b));if(this.yArrow!=null){this.yArrow.updatePoints(j(i,t.scene.camera,b));(o=this.yAxis)===null||o===void 0?void 0:o.updatePoints(D(i,t.scene.camera,this.yArrow))}(h=this.yRotation)===null||h===void 0?void 0:h.updatePoints(U(i,t.scene.camera,b));if(this.zArrow!=null){this.zArrow.updatePoints(P(i,t.scene.camera,b));(l=this.zAxis)===null||l===void 0?void 0:l.updatePoints(D(i,t.scene.camera,this.zArrow))}(r=this.zRotation)===null||r===void 0?void 0:r.updatePoints(X(i,t.scene.camera,b));(a=this.xyRotationLine)===null||a===void 0?void 0:a.updatePoints(O(t.scene.camera,this.xRotation,(d=this.yArrow)===null||d===void 0?void 0:d.points.worldTip,b));(u=this.xzRotationLine)===null||u===void 0?void 0:u.updatePoints(O(t.scene.camera,this.xRotation,(v=this.zArrow)===null||v===void 0?void 0:v.points.worldTip,b));(c=this.yxRotationLine)===null||c===void 0?void 0:c.updatePoints(O(t.scene.camera,this.yRotation,(f=this.xArrow)===null||f===void 0?void 0:f.points.worldTip,b));(w=this.yzRotationLine)===null||w===void 0?void 0:w.updatePoints(O(t.scene.camera,this.yRotation,(p=this.zArrow)===null||p===void 0?void 0:p.points.worldTip,b));(g=this.zxRotationLine)===null||g===void 0?void 0:g.updatePoints(O(t.scene.camera,this.zRotation,(m=this.xArrow)===null||m===void 0?void 0:m.points.worldTip,b));(x=this.zyRotationLine)===null||x===void 0?void 0:x.updatePoints(O(t.scene.camera,this.zRotation,(y=this.yArrow)===null||y===void 0?void 0:y.points.worldTip,b))}}const k=":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;--viewer-transform-widget-x-axis-arrow-color:var(--x-axis-color);--viewer-transform-widget-y-axis-arrow-color:var(--y-axis-color);--viewer-transform-widget-z-axis-arrow-color:var(--z-axis-color);--viewer-transform-widget-hovered-arrow-color:#ffff00;--viewer-transform-widget-disabled-arrow-color:#cccccc}.widget{position:absolute;top:0;left:0}.widget.hovered{pointer-events:auto}";const q=class{constructor(s){i(this,s);this.positionChanged=t(this,"positionChanged",7);this.rotationChanged=t(this,"rotationChanged",7);this.interactionEnded=t(this,"interactionEnded",7);this.interactionStarted=t(this,"interactionStarted",7);this.xRotationDisabled=false;this.yRotationDisabled=false;this.zRotationDisabled=false;this.xTranslationDisabled=false;this.yTranslationDisabled=false;this.zTranslationDisabled=false;this.xArrowColor="#ea3324";this.yArrowColor="#4faf32";this.zArrowColor="#0000ff";this.hoveredColor="#ffff00";this.disabledColor="#cccccc";this.lastAngle=0;this.handleHoveredDrawableChanged=i=>{this.hovered=i};this.handleViewerFrameDrawn=()=>{this.updatePropsFromViewer()};this.handleViewerDimensionsChange=()=>{w((()=>{if(this.viewer!=null&&this.canvasRef!=null){this.canvasRef.width=this.viewer.viewport.width;this.canvasRef.height=this.viewer.viewport.height;this.updateCanvasBounds(this.canvasRef)}}))};this.handleResize=()=>{if(this.canvasRef!=null){this.updateCanvasBounds(this.canvasRef)}};this.handlePointerMove=i=>{if(this.dragging==null){const t=N(l.create(i.clientX,i.clientY),this.getCanvasBounds());const s=this.getTransformWidget();if(t!=null&&s.boundsContainsPoint(t)){s.updateCursor(t)}else{s.updateCursor(undefined);this.hovered=undefined}}};this.handleBeginDrag=async i=>{var t,s,n;const o=this.getCanvasBounds();if(this.hovered!=null&&o!=null&&this.viewer!=null&&this.position!=null&&this.viewer.frame!=null){this.dragging=this.hovered;const h=N(l.create(i.clientX,i.clientY),o);const e=this.viewer.viewport.transformWorldToViewport(this.position,this.viewer.frame.scene.camera.projectionViewMatrix);this.lastAngle=h!=null?u.fromPoints(e,h):0;this.lastWorldPosition=$(h,(t=this.viewer)===null||t===void 0?void 0:t.frame,(s=this.viewer)===null||s===void 0?void 0:s.viewport,this.currentTransform);(n=this.controller)===null||n===void 0?void 0:n.beginTransform();this.interactionStarted.emit();window.removeEventListener("pointermove",this.handlePointerMove);window.addEventListener("pointermove",this.handleDrag);window.addEventListener("pointerup",this.handleEndTransform)}};this.handleDrag=async i=>{var t,s;i.preventDefault();const n=this.getCanvasBounds();if(this.dragging!=null&&this.lastWorldPosition!=null&&n!=null&&this.viewer!=null&&this.viewer.frame!=null&&this.position!=null){const o=N(l.create(i.clientX,i.clientY),n);const h=this.viewer.viewport.transformWorldToViewport(this.position,this.viewer.frame.scene.camera.projectionViewMatrix);const e=$(o,(t=this.viewer)===null||t===void 0?void 0:t.frame,(s=this.viewer)===null||s===void 0?void 0:s.viewport,this.currentTransform);if(e!=null&&o!=null&&h!=null){const i=u.fromPoints(h,o);this.transform(this.lastWorldPosition,e,i-this.lastAngle);this.lastWorldPosition=e;this.lastAngle=i}}};this.handleEndTransform=async i=>{var t,s;const n=N(l.create(i.clientX,i.clientY),this.getCanvasBounds());const o=this.getTransformWidget();this.dragging=undefined;this.lastWorldPosition=undefined;this.position=this.currentTransform!=null?e.fromMatrixPosition(this.currentTransform):this.position;this.lastAngle=0;o.updateCursor(n);o.updateTransform(this.currentTransform);o.updateDisabledAxis({xRotation:true,yRotation:true,zRotation:true,xTranslation:true,yTranslation:true,zTranslation:true});window.removeEventListener("pointermove",this.handleDrag);window.removeEventListener("pointerup",this.handleEndTransform);try{const i=(t=this.controller)===null||t===void 0?void 0:t.getCurrentDelta();await((s=this.controller)===null||s===void 0?void 0:s.endTransform());this.interactionEnded.emit(i)}catch(i){console.error("Failed to end transform interaction",i)}window.addEventListener("pointermove",this.handlePointerMove);this.getTransformWidget().updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})};this.updatePropsFromViewer=()=>{const{frame:i}=this.viewer||{};if(i!=null){const t=this.getTransformWidget();t.updateFrame(i,this.dragging==null)}};this.setupTransformWidget=i=>{var t,s;console.debug(`Initializing transform widget. [initial-position=${JSON.stringify(this.position)}, has-initial-frame=${((t=this.viewer)===null||t===void 0?void 0:t.frame)!=null}]`);this.widget=new V(i,{xArrow:this.xArrowColor,yArrow:this.yArrowColor,zArrow:this.zArrowColor,hovered:this.hoveredColor,disabledColor:this.disabledColor});if(this.position!=null){this.currentTransform=h.makeTranslation(this.position);this.startingTransform=this.currentTransform;this.widget.updateTransform(this.currentTransform)}if(((s=this.viewer)===null||s===void 0?void 0:s.frame)!=null){this.widget.updateFrame(this.viewer.frame,true)}this.handleSettingDisabledAxis();this.hoveredChangeDisposable=this.widget.onHoveredChanged(this.handleHoveredDrawableChanged);return this.widget};this.updateCanvasBounds=i=>{p((()=>{this.canvasBounds=i.getBoundingClientRect();this.getTransformWidget().updateDimensions(i)}))};this.getTransformForNewPosition=i=>{if(i!=null){const t=this.currentTransform!=null?this.currentTransform:h.makeIdentity();const s=h.makeRotation(d.fromMatrixRotation(t));const n=h.makeTranslation(i);return h.multiply(n,s)}else if(i!=null){return h.makeTranslation(i)}};this.getTransformForHewRotation=i=>{const t=this.currentTransform!=null?this.currentTransform:h.makeIdentity();const s=h.invert(h.makeRotation(d.fromMatrixRotation(t)));const n=h.makeRotation(d.fromEuler(i));const o=h.multiply(t,s);return h.multiply(o,n)};this.getCanvasBounds=()=>{if(this.canvasBounds!=null){return this.canvasBounds}else if(this.canvasRef!=null){this.updateCanvasBounds(this.canvasRef);return this.canvasBounds}};this.getTransformWidget=()=>{if(this.widget==null&&this.canvasRef!=null){return this.setupTransformWidget(this.canvasRef)}else if(this.widget!=null){return this.widget}else{throw new Error("Transform widget was not initialized. The canvas element may not have been initialized.")}}}componentDidLoad(){window.addEventListener("pointermove",this.handlePointerMove);this.canvasResizeObserver=new ResizeObserver(this.handleResize);if(this.canvasRef!=null){this.canvasResizeObserver.observe(this.canvasRef);this.setupTransformWidget(this.canvasRef)}this.handleViewerChanged(this.viewer,undefined);p((()=>{const i=window.getComputedStyle(this.hostEl);this.xArrowColor=i.getPropertyValue("--viewer-transform-widget-x-axis-arrow-color").trim();this.yArrowColor=i.getPropertyValue("--viewer-transform-widget-y-axis-arrow-color").trim();this.zArrowColor=i.getPropertyValue("--viewer-transform-widget-z-axis-arrow-color").trim();this.hoveredColor=i.getPropertyValue("--viewer-transform-widget-hovered-arrow-color").trim();this.disabledColor=i.getPropertyValue("--viewer-transform-widget-disabled-arrow-color").trim()}))}disconnectedCallback(){var i,t,s;window.removeEventListener("pointermove",this.handlePointerMove);(i=this.canvasResizeObserver)===null||i===void 0?void 0:i.disconnect();(t=this.hoveredChangeDisposable)===null||t===void 0?void 0:t.dispose();(s=this.widget)===null||s===void 0?void 0:s.dispose()}handleViewerChanged(i,t){var s;t===null||t===void 0?void 0:t.removeEventListener("frameDrawn",this.handleViewerFrameDrawn);t===null||t===void 0?void 0:t.removeEventListener("dimensionschange",this.handleViewerDimensionsChange);i===null||i===void 0?void 0:i.addEventListener("frameDrawn",this.handleViewerFrameDrawn);i===null||i===void 0?void 0:i.addEventListener("dimensionschange",this.handleViewerDimensionsChange);if((i===null||i===void 0?void 0:i.stream)!=null){(s=this.controller)===null||s===void 0?void 0:s.dispose();this.controller=new S(i.stream)}}handleDisabledPropertyChanged(){this.getTransformWidget().updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})}handleRotationChanged(i,t){var s;this.currentTransform=this.getTransformForHewRotation(i);this.startingTransform=this.currentTransform;(s=this.widget)===null||s===void 0?void 0:s.updateTransform(this.currentTransform);console.debug(`Updating widget rotation [previous=${JSON.stringify(t)}, current=${JSON.stringify(i)}]`);this.rotationChanged.emit(i)}handlePositionChanged(i,t){var s,n;this.currentTransform=this.getTransformForNewPosition(i);this.startingTransform=this.currentTransform;console.debug(`Updating widget position [previous=${JSON.stringify(t)}, current=${JSON.stringify(i)}]`);(s=this.widget)===null||s===void 0?void 0:s.updateTransform(this.currentTransform);if(i==null){(n=this.controller)===null||n===void 0?void 0:n.clearTransform()}this.positionChanged.emit(i)}render(){var i,t;return s(n,null,s("canvas",{ref:i=>{this.canvasRef=i},class:f("widget",{hovered:this.hovered!=null}),width:(i=this.viewer)===null||i===void 0?void 0:i.viewport.width,height:(t=this.viewer)===null||t===void 0?void 0:t.viewport.height,onPointerDown:this.handleBeginDrag}))}transform(i,t,s){var n,o;if(this.position!=null&&this.startingTransform!=null&&this.currentTransform!=null&&this.dragging!=null&&this.viewer!=null&&this.viewer.frame!=null){this.currentTransform=A(this.currentTransform,i,t,(n=this.viewer)===null||n===void 0?void 0:n.frame.scene.camera.viewVector,s,this.dragging.identifier);this.getTransformWidget().updateTransform(this.currentTransform);(o=this.controller)===null||o===void 0?void 0:o.updateTransform(h.multiply(this.currentTransform,h.invert(this.startingTransform)))}}handleSettingDisabledAxis(){if(this.widget){this.widget.updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})}else{console.warn("Cannot set disabled values - no widget defined")}}get hostEl(){return o(this)}static get watchers(){return{viewer:["handleViewerChanged"],xTranslationDisabled:["handleDisabledPropertyChanged"],yTranslationDisabled:["handleDisabledPropertyChanged"],zTranslationDisabled:["handleDisabledPropertyChanged"],xRotationDisabled:["handleDisabledPropertyChanged"],yRotationDisabled:["handleDisabledPropertyChanged"],zRotationDisabled:["handleDisabledPropertyChanged"],rotation:["handleRotationChanged"],position:["handlePositionChanged"]}}};q.style=k;export{q as vertex_viewer_transform_widget};
5
- //# sourceMappingURL=p-844f80b3.entry.js.map