{"version":3,"sources":["resources/cirlce.png","resources/gold.png","resources/silver.png","resources/gem.png","resources/band.png","Scoller.js","resources/white-gold.png","resources/rose-gold.png","resources/platinum.png","resources/logo.png","ring.js","RingFinger.js","TryOnCanvas.js","App.js","index.js","HandSkeleton.js"],"names":["PINK_GOLD","assetId","WHITE_GOLD","YELLOW_GOLD","PLATINUM","RUBY_COLOR","SAPPHIRE","EMERALD","DIAMOND","TEST_COLOR","Scroller","setGemColor","setBandColor","useState","swiperIndex","setSwiperIndex","swiper","setSwiper","gemSwiper","setGemSwiper","bandSwiper","setBandSwiper","gemIndex","setGemIndex","bandIndex","setBandIndex","useEffect","className","spaceBetween","centeredSlides","slidesPerView","onSlideChange","activeIndex","handleSlideChange","onSwiper","slideTo","initSwiper","onClick","id","style","transform","src","iconSix","iconSeven","bottom","circle","iconTwo","iconOne","Ring","position","rotation","scale","proximalBoneLength","handModel","gemColor","bandColor","env","org","token","fallback","configuration","CameraController","useThree","camera","gl","controls","OrbitControls","domElement","minDistance","maxDistance","dispose","ResizeHandler","aspect","left","right","top","updateProjectionMatrix","DefaultCamera","set","Math","PI","zoom","RingFinger","width","height","prediction","updateDisplay","leftHandSkeleton","useMemo","HandSkeleton","Handedness","Left","useFrame","bone","undefined","image","update","getFeatureBone","getFeatureKey","Bone","Vector3","Quaternion","matrixWorld","decompose","y","rotationEuler","Euler","setFromQuaternion","multiHandLandmarks","length","TryOnCanvas","forwardRef","ref","onImageReady","videoWidth","videoHeight","isMirrored","webcamRef","useRef","offScreenCanvasRef","displayCanvasRef","croppedCanvasRef","videoAspect","videoConstraints","facingMode","useImperativeHandle","sendNextImage","offscreenCanvas","current","displayCtx","getContext","drawImage","video","offScreenCtx","croppedCanvas","croppedCanvasCtx","zIndex","onUserMedia","display","App","splashScreen","setSplashScreen","setPrediction","tryOnCanvasRef","URLSearchParams","window","location","search","get","hands","MediaPipeHands","locateFile","file","setOptions","minDetectionConfidence","minTrackingConfidence","onResults","setTimeout","logo","alt","send","marginLeft","innerHeight","onCreated","lookAt","orthographic","near","far","Environment","background","files","path","console","log","render","document","getElementById","Object","defineProperty","exports","value","convertPoseArrayToWorldFeatures","featureIndexToKey","fromPoseToWorldSpace","test","FeatureLength","FeatureNames","FingerNames","THREE","require","three_1","getZAxis","xAxis","yAxis","result","copy","cross","normalize","getXAxis","zAxis","equals","Error","featureName","jointIndex","featureKey","posePosition","viewWidth","viewHeight","x","z","array","worldFeatures","forEach","index","concat","handedness","_this","this","root","Group","debugAxes","debugSpheres","debugSkeleton","debugRadius","featureKeyToBoneMap","fingerCurl","palmFlatness","handMargin","numberOfHands","rightHandedness","name","urlParams","palmBaseBone","add","fingerName","fingerIndex","jointParentBone","jointBone","bones","traverse","object","type","matrixAutoUpdate","axesHelper","AxesHelper","push","skeletonHelper","SkeletonHelper","skeleton","Skeleton","prototype","results","found","multiHandedness","handednessLabel","Right","getHandednessFromLabel","label","updateBonesFromWorldPositions","visible","getGuidanceText","feedback","join","worldPositions","palmYForward","indexFinger0","clone","sub","palmBase","palmXIndexToRingAcross","ringFinger0","negate","palmZUp","maxCurvature","minCurvature","curvatureSum","finger0","finger1","finger2","finger3","delta01","delta12","delta23","curvature012","dot","curvature123","min","max","avgCurvature","bbox","Box3","expandByPoint","getWorldPosition","abs","worldToPalmBasis","Matrix4","makeBasis","worldToPalmRotation","setFromRotationMatrix","palmToWorldBasis","invert","makeRotationFromQuaternion","extractBasis","quaternion","worldJointPositions","j","parentToWorldBasis","boneYDirection","boneXAcross","prevBoneYDirection","multiplyScalar","boneZUp","worldToBoneBasis","parentToBoneBasis","multiplyMatrices","updateBonesFromWorldPositionsOld"],"mappings":"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","file":"static/js/main.c2dc177f.chunk.js","sourcesContent":["export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/gold.6a97cbf3.png\";","export default __webpack_public_path__ + \"static/media/silver.73184856.png\";","export default __webpack_public_path__ + \"static/media/gem.5b1f1ec2.png\";","export default __webpack_public_path__ + \"static/media/band.02e48296.png\";","import circle from \"./resources/cirlce.png\";\n\nimport { useState, useEffect } from \"react\";\nimport { Swiper, SwiperSlide } from \"swiper/react\";\nimport \"swiper/swiper-bundle.min.css\";\nimport \"swiper/swiper.min.css\";\n\nimport iconOne from \"./resources/gold.png\";\nimport iconTwo from \"./resources/silver.png\";\nimport iconRoseGold from \"./resources/rose-gold.png\";\nimport iconWhiteGold from \"./resources/white-gold.png\";\nimport iconPlatinum from \"./resources/platinum.png\";\nimport iconSix from \"./resources/gem.png\";\nimport iconSeven from \"./resources/band.png\";\n\n// Band colors\nconst PINK_GOLD = { assetId: \"17254639-0f89-4146-b8d4-c51aaf0d8170\" };\nconst WHITE_GOLD = { assetId: \"59849d0f-aeb6-45d9-92ec-6fed6daf052f\" };\nconst YELLOW_GOLD = { assetId: \"f31255b1-7f2e-4bf1-985b-eb424b4e843d\" };\nconst PLATINUM = { assetId: \"17bda33e-57e1-457c-95a0-d5b1b39f72ce\" };\nconst SAPPHIRE_COLOR = \"0c3ba6\";\n// Gemstone Colors\nconst RUBY_COLOR = { assetId: \"68f93597-e9d1-4c7a-bb5c-a2c13fcd6da9\" };\nconst SAPPHIRE = { assetId: \"1b57b15c-6e7f-4ac4-a6a6-8d05fefc0f31\" };\nconst EMERALD = { assetId: \"31f582d6-8ee8-4c0a-bd36-c0fcd48ee8cc\" };\nconst DIAMOND = { assetId: \"85e8e466-929b-4e6d-8b1a-f0bb2b25336b\" };\nconst TEST_COLOR = { assetId: \"28c7b63d-9608-41c1-9d68-1f4429706214\" };\n\n// const RUBY_COLOR = { assetId: \"28c7b63d-9608-41c1-9d68-1f4429706214\" };\n// const SAPPHIRE = { assetId: \"28c7b63d-9608-41c1-9d68-1f4429706214\" };\n// const EMERALD = { assetId: \"28c7b63d-9608-41c1-9d68-1f4429706214\" };\n// const DIAMOND = { assetId: \"28c7b63d-9608-41c1-9d68-1f4429706214\" };\n\n// export default function Scroller ({ setGemColor, setBandColor }) {\n// const [swiperIndex, setSwiperIndex] = useState(1);\n// const [swiper, setSwiper] = useState();\n\n// function handleSlideChange (swiper) {\n// setSwiperIndex(swiper.activeIndex);\n// }\n\n// useEffect(() => {\n// if (swiperIndex === 0) {\n// setBandColor(PINK_GOLD);\n// } else if (swiperIndex === 1) {\n// setBandColor(WHITE_GOLD);\n// } else if (swiperIndex === 2) {\n// setBandColor(YELLOW_GOLD);\n// } else if (swiperIndex === 3) {\n// setBandColor(PLATINUM);\n// }\n// }, [swiperIndex]);\n\n// function initSwiper (swiper) {\n// swiper.slideTo(1, 0);\n// }\n// return (\n//
\n// handleSlideChange(swiper)}\n// onSwiper={swiper => {\n// initSwiper(swiper);\n// setSwiper(swiper);\n// }}>\n// {/* Gem */}\n// swiper.slideTo(0, 300)} id={0}>\n// \n// \n// {/* Band */}\n// swiper.slideTo(1, 300)} id={1}>\n// \n// \n// \n// handleSlideChange(swiper)}\n// onSwiper={swiper => {\n// initSwiper(swiper);\n// setSwiper(swiper);\n// }}>\n// swiper.slideTo(0, 300)} id={0}>\n// \n// \n// swiper.slideTo(1, 300)} id={1}>\n// \n// \n// swiper.slideTo(2, 300)} id={2}>\n// \n// {\" \"}\n// swiper.slideTo(3, 300)} id={3}>\n// \n// \n// \n// \n//
\n// );\n// }\n\nexport default function Scroller ({ setGemColor, setBandColor }) {\n const [swiperIndex, setSwiperIndex] = useState(0);\n const [swiper, setSwiper] = useState();\n const [gemSwiper, setGemSwiper] = useState();\n const [bandSwiper, setBandSwiper] = useState();\n const [gemIndex, setGemIndex] = useState(1);\n const [bandIndex, setBandIndex] = useState(0);\n\n function handleSlideChange (swiper) {\n setSwiperIndex(swiper.activeIndex);\n }\n\n function initSwiper (swiper) {\n swiper.slideTo(0, 0);\n }\n\n useEffect(() => {\n if (gemIndex === 0) {\n setGemColor(DIAMOND);\n } else if (gemIndex === 1) {\n setGemColor(RUBY_COLOR);\n } else if (gemIndex === 2) {\n setGemColor(SAPPHIRE);\n } else if (gemIndex === 3) {\n setGemColor(EMERALD);\n } else if (gemIndex === 4) {\n setGemColor(TEST_COLOR);\n }\n }, [gemIndex]);\n\n useEffect(() => {\n if (bandIndex === 0) {\n setBandColor(WHITE_GOLD);\n } else if (bandIndex === 1) {\n setBandColor(PINK_GOLD);\n } else if (bandIndex === 2) {\n setBandColor(YELLOW_GOLD);\n } else if (bandIndex === 3) {\n setBandColor(PLATINUM);\n }\n }, [bandIndex]);\n\n return (\n
\n handleSlideChange(swiper)}\n onSwiper={swiper => {\n initSwiper(swiper);\n setSwiper(swiper);\n }}>\n swiper.slideTo(0, 300)} id={0}>\n \n \n\n swiper.slideTo(1, 300)} id={1}>\n \n \n \n\n \n \n\n {swiperIndex === 0 && (\n setGemIndex(swiper.activeIndex)}\n onSwiper={swiper => {\n swiper.slideTo(gemIndex, 0);\n setGemSwiper(swiper);\n }}>\n {/* Diamond */}\n gemSwiper.slideTo(0, 300)} id={1}>\n \n \n {/* Ruby */}\n gemSwiper.slideTo(1, 300)} id={1}>\n \n \n {/* Sapphire */}\n gemSwiper.slideTo(2, 300)} id={1}>\n \n \n {/* Emerald */}\n gemSwiper.slideTo(2, 300)} id={1}>\n \n \n {/* Test */}\n gemSwiper.slideTo(2, 300)} id={1}>\n \n \n \n )}\n\n {swiperIndex === 1 && (\n setBandIndex(swiper.activeIndex)}\n onSwiper={swiper => {\n swiper.slideTo(bandIndex, 0);\n setBandSwiper(swiper);\n }}>\n {/* White Gold */}\n bandSwiper.slideTo(0, 300)} id={1}>\n \n \n {/* Pink Gold`` */}\n bandSwiper.slideTo(1, 300)} id={1}>\n \n \n {/* Yellow Gold */}\n bandSwiper.slideTo(1, 300)} id={1}>\n \n \n {/* Platinum */}\n bandSwiper.slideTo(1, 300)} id={1}>\n \n \n \n )}\n
\n );\n}\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/logo.c48f9f36.png\";","import { Suspense } from \"react\";\nimport { Asset, ThreekitSource } from \"@threekit/lignin\";\n\nconst RING_POSITION = 0.2;\nconst RING_SCALE = 0.1;\n\nexport default function Ring ({ position, rotation, scale, proximalBoneLength, handModel, gemColor, bandColor }) {\n return (\n \n \n \n \n \n\n {/* {handModel && (\n \n \n \n \n )} */}\n \n \n \n \n );\n}\n","import { useEffect } from \"react\";\nimport { Vector3, Euler, Quaternion, Bone } from \"three\";\nimport { useMemo } from \"react\";\nimport Ring from \"./ring.js\";\nimport { HandSkeleton, Handedness, getFeatureKey } from \"./HandSkeleton.js\";\nimport { OrbitControls } from \"three/examples/jsm/controls/OrbitControls\";\nimport { useThree } from \"@react-three/fiber\";\nimport { useFrame } from '@react-three/fiber'\n\nconst CameraController = () => {\n const { camera, gl } = useThree();\n useEffect(\n () => {\n const controls = new OrbitControls(camera, gl.domElement);\n controls.minDistance = 3;\n controls.maxDistance = 20;\n return () => {\n controls.dispose();\n };\n },\n [camera, gl]\n );\n return null;\n};\n\nconst ResizeHandler = ({ aspect }) => {\n const { camera } = useThree();\n camera.left = -0.5 * aspect;\n camera.right = 0.5 * aspect;\n camera.top = 0.5;\n camera.bottom = -0.5;\n camera.updateProjectionMatrix(); \n\n return null;\n}\n\nfunction DefaultCamera(){\n const { camera } = useThree();\n\n useEffect(\n () => {\n camera.position.set( 0, 0, -0.5 );\n camera.rotation.set( Math.PI, 0, Math.PI );\n camera.zoom = 1;\n camera.updateProjectionMatrix(); \n },\n [camera]\n );\n return null;\n} \n\n\nexport default function RingFinger({ width, height, prediction, aspect, bandColor, gemColor, updateDisplay}) {\n let leftHandSkeleton = useMemo(() => {\n return new HandSkeleton(Handedness.Left, width, height);\n }, [width, height]);\n useFrame(() => {\n \n })\n\n const bone = useMemo(() => {\n if (prediction.image !== undefined) {\n leftHandSkeleton.update(prediction);\n updateDisplay();\n return leftHandSkeleton.getFeatureBone(getFeatureKey(\"ringFinger\", 1));\n }\n return new Bone();\n }, [prediction]);\n \n let position = new Vector3();\n let rotation = new Quaternion();\n let scale = new Vector3();\n\n let matrixWorld = bone.matrixWorld;\n matrixWorld.decompose(position, rotation, scale);\n\n const ringMediaBone = leftHandSkeleton.getFeatureBone(getFeatureKey(\"ringFinger\", 1))\n let proximalBoneLength = ringMediaBone.position.y;\n\n let rotationEuler = new Euler().setFromQuaternion(rotation);\n\n if (prediction.image && prediction.multiHandLandmarks.length) {\n return (\n \n \n \n \n \n );\n }\n else{\n return(\n \n \n \n \n \n );\n }\n\n}\n","import { forwardRef, useRef, useImperativeHandle, useEffect } from \"react\";\nimport Webcam from \"react-webcam\";\n\nconst TryOnCanvas = forwardRef(({ onImageReady, videoWidth, videoHeight, prediction, isMirrored }, ref) => {\n const webcamRef = useRef();\n const offScreenCanvasRef = useRef();\n const displayCanvasRef = useRef();\n const croppedCanvasRef = useRef();\n const videoAspect = videoWidth / videoHeight;\n\n const videoConstraints = {\n width: videoWidth,\n height: videoHeight,\n facingMode: \"user\",\n };\n\n useImperativeHandle(ref, () => ({\n sendNextImage: () => {\n sendNextImage();\n },\n updateDisplay: () => {\n updateDisplay();\n },\n }));\n\n const updateDisplay = () => {\n if (prediction.image !== undefined) {\n const offscreenCanvas = offScreenCanvasRef.current;\n const displayCtx = displayCanvasRef.current.getContext(\"2d\");\n if (offscreenCanvas.height !== 0) {\n displayCtx.drawImage(offscreenCanvas, 0, 0, videoWidth, videoHeight);\n }\n }\n };\n\n const sendNextImage = () => {\n let video = webcamRef.current.video;\n\n const offscreenCanvas = offScreenCanvasRef.current;\n const offScreenCtx = offscreenCanvas.getContext(\"2d\");\n\n const croppedCanvas = croppedCanvasRef.current;\n const croppedCanvasCtx = croppedCanvas.getContext(\"2d\");\n\n const width = croppedCanvas.height * videoAspect;\n\n const left = (croppedCanvas.width - width) * 0.5;\n const top = 0;\n const height = croppedCanvas.height;\n croppedCanvasCtx.drawImage(video, left, top, width, height);\n\n offScreenCtx.drawImage(video, 0, 0);\n onImageReady(croppedCanvas);\n };\n\n return (\n
\n {\n sendNextImage();\n }}\n videoConstraints={videoConstraints}\n />\n
\n \n
\n
\n \n
\n
\n \n
\n
\n );\n});\n\nexport default TryOnCanvas;\n","import { useState, useEffect, useRef, Suspense, useMemo } from \"react\";\nimport \"./styles.css\";\nimport Scroller from \"./Scoller.js\";\n\nimport \"@mediapipe/hands\";\nimport logo from \"./resources/logo.png\";\nimport * as MediaPipeHands from \"@mediapipe/hands\";\nimport RingFinger from \"./RingFinger\";\nimport TryOnCanvas from \"./TryOnCanvas\";\n\nimport { Canvas } from \"@react-three/fiber\";\nimport { Environment } from \"@react-three/drei\";\n\nconsole.log( \"build 2022-05-16 - 1\");\n\nexport default function App() {\n const [splashScreen, setSplashScreen] = useState(true);\n const [prediction, setPrediction] = useState({});\n const [gemColor, setGemColor] = useState(\"00ff00\");\n const [bandColor, setBandColor] = useState({assetId: '17254639-0f89-4146-b8d4-c51aaf0d8170'});\n const tryOnCanvasRef = useRef();\n\n let videoWidth = 1280,\n videoHeight = 720;\n const videoAspect = videoWidth / videoHeight;\n let isMirrored = true;\n const urlParams = new URLSearchParams(window.location.search);\n\n if (urlParams.get(\"mirror\") === \"false\") {\n isMirrored = false;\n }\n\n let hands = useMemo(() => {\n const hands = new MediaPipeHands.Hands({\n locateFile: (file) => `https://cdn.jsdelivr.net/npm/@mediapipe/hands@0.3.1632795355/${file}`,\n });\n hands.setOptions({ minDetectionConfidence: 0.7, minTrackingConfidence: 0.7 });\n hands.onResults(setPrediction);\n return hands;\n }, [\"hands\"]);\n\n function onImageReady(croppedCanvas) {\n hands.send({ image: croppedCanvas });\n }\n\n useEffect(() => {\n\n if (prediction.image !== undefined) {\n if (splashScreen) {\n setSplashScreen(false);\n }\n setTimeout(() => {\n tryOnCanvasRef.current.sendNextImage();\n }, 10);\n }\n }, [prediction]);\n\n return (\n
\n {splashScreen && (\n
\n \"\"\n
\n )}\n {!splashScreen && }\n \n\n
\n \n {\n camera.left = -0.5 * videoAspect * (isMirrored ? -1 : 1);\n camera.right = 0.5 * videoAspect * (isMirrored ? -1 : 1);\n camera.top = 0.5;\n camera.bottom = -0.5;\n camera.lookAt(0, 0, 1);\n camera.updateProjectionMatrix();\n }}\n orthographic\n camera={{\n near: -300,\n far: 300,\n position: [0, 0, -0.5],\n }}>\n \n {/* */}\n \n\n {/* */}\n {!splashScreen && (\n tryOnCanvasRef.current.updateDisplay()}\n gemColor={gemColor}\n bandColor={bandColor}\n prediction={prediction}\n aspect={(isMirrored ? -1 : 1) * videoAspect}\n width={videoWidth}\n height={videoHeight}\n />\n )}\n \n \n
\n
\n \n );\n}\n","import { render } from \"react-dom\"\nimport React from \"react\"\nimport App from \"./App\"\nimport \"./styles.css\"\n\nrender(, document.getElementById(\"root\"))\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HandSkeleton = exports.Handedness = exports.convertPoseArrayToWorldFeatures = exports.featureIndexToKey = exports.fromPoseToWorldSpace = exports.getFeatureKey = exports.test = exports.FeatureLength = exports.FeatureNames = exports.FingerNames = void 0;\nvar THREE = require(\"three\");\nvar three_1 = require(\"three\");\nexports.FingerNames = ['thumb', 'indexFinger', 'middleFinger', 'ringFinger', 'pinky'];\nexports.FeatureNames = ['palmBase'].concat(exports.FingerNames);\nexports.FeatureLength = {\n 'palmBase': 1,\n 'thumb': 4,\n 'indexFinger': 4,\n 'middleFinger': 4,\n 'fingFinger': 4,\n 'pinky': 4\n};\nfunction getZAxis(xAxis, yAxis, result) {\n if (result === void 0) { result = new THREE.Vector3(); }\n return result.copy(xAxis).cross(yAxis).normalize();\n}\nfunction getXAxis(yAxis, zAxis, result) {\n if (result === void 0) { result = new THREE.Vector3(); }\n return result.copy(yAxis).cross(zAxis).normalize();\n}\nfunction test() {\n var xAxis = new THREE.Vector3(1, 0, 0);\n var yAxis = new THREE.Vector3(0, 1, 0);\n var zAxis = new THREE.Vector3(0, 0, 1);\n if (!getZAxis(xAxis, yAxis).equals(zAxis))\n throw new Error(\"bad zAxis\");\n if (!getXAxis(yAxis, zAxis).equals(xAxis))\n throw new Error(\"bad xAxis\");\n}\nexports.test = test;\nfunction getFeatureKey(featureName, jointIndex) {\n if (jointIndex === void 0) { jointIndex = undefined; }\n var featureKey = featureName;\n if (jointIndex !== undefined) {\n featureKey += jointIndex;\n }\n return featureKey;\n}\nexports.getFeatureKey = getFeatureKey;\nfunction fromPoseToWorldSpace(posePosition, viewWidth, viewHeight) {\n return new THREE.Vector3(-(posePosition.x - 1 / 2), -(posePosition.y - 1 / 2), posePosition.z * 0.5);\n}\nexports.fromPoseToWorldSpace = fromPoseToWorldSpace;\nexports.featureIndexToKey = {\n 0: 'palmBase',\n 1: 'thumb0',\n 2: 'thumb1',\n 3: 'thumb2',\n 4: 'thumb3',\n 5: 'indexFinger0',\n 6: 'indexFinger1',\n 7: 'indexFinger2',\n 8: 'indexFinger3',\n 9: 'middleFinger0',\n 10: 'middleFinger1',\n 11: 'middleFinger2',\n 12: 'middleFinger3',\n 13: 'ringFinger0',\n 14: 'ringFinger1',\n 15: 'ringFinger2',\n 16: 'ringFinger3',\n 17: 'pinky0',\n 18: 'pinky1',\n 19: 'pinky2',\n 20: 'pinky3'\n};\nfunction convertPoseArrayToWorldFeatures(array, viewWidth, viewHeight) {\n var worldFeatures = {};\n array.forEach(function (value, index) {\n var featureKey = exports.featureIndexToKey[index];\n worldFeatures[featureKey] = fromPoseToWorldSpace(value, viewWidth, viewHeight);\n });\n return worldFeatures;\n}\nexports.convertPoseArrayToWorldFeatures = convertPoseArrayToWorldFeatures;\nvar Handedness;\n(function (Handedness) {\n Handedness[Handedness[\"Left\"] = 0] = \"Left\";\n Handedness[Handedness[\"Right\"] = 1] = \"Right\";\n})(Handedness = exports.Handedness || (exports.Handedness = {}));\n;\nfunction getHandednessFromLabel(handednessLabel) {\n switch (handednessLabel) {\n case 'Right': return Handedness.Right;\n case 'Left': return Handedness.Left;\n default: throw new Error(\"Bad label \".concat(handednessLabel));\n }\n}\nvar HandSkeleton = /** @class */ (function () {\n function HandSkeleton(handedness, viewWidth, viewHeight) {\n var _this = this;\n this.handedness = handedness;\n this.viewWidth = viewWidth;\n this.viewHeight = viewHeight;\n this.root = new THREE.Group();\n this.debugAxes = false;\n this.debugSpheres = true;\n this.debugSkeleton = false;\n this.debugRadius = 0.1;\n this.featureKeyToBoneMap = {}; // incrementally cache bones by bone names.\n this.fingerCurl = 0;\n this.palmFlatness = 1;\n this.handMargin = 0.5;\n this.numberOfHands = 0;\n this.rightHandedness = false;\n this.root.name = \"root\";\n test();\n var urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('axes')) {\n this.debugAxes = true;\n }\n if (urlParams.get('skeleton')) {\n this.debugSkeleton = true;\n }\n var palmBaseBone = new THREE.Bone();\n palmBaseBone.name = getFeatureKey('palmBase');\n this.root.add(palmBaseBone);\n exports.FingerNames.forEach(function (fingerName, fingerIndex) {\n var jointParentBone = palmBaseBone;\n for (var jointIndex = 0; jointIndex < 4; jointIndex++) {\n var jointBone = new THREE.Bone();\n jointBone.name = getFeatureKey(fingerName, jointIndex);\n jointParentBone.add(jointBone);\n jointParentBone = jointBone;\n }\n });\n // collect bones, create lookup map and set common options\n var bones = [];\n this.root.traverse(function (object) {\n if (object.type !== 'Bone')\n return; // ignore non-bones.\n var bone = object;\n bone.matrixAutoUpdate = true;\n if (_this.debugAxes) {\n //if( bone.name == \"palmBase\") {\n var axesHelper = new THREE.AxesHelper(_this.debugRadius);\n bone.add(axesHelper);\n //}\n }\n bones.push(bone);\n _this.featureKeyToBoneMap[bone.name] = bone;\n });\n if (this.debugSkeleton) {\n var skeletonHelper = new THREE.SkeletonHelper(palmBaseBone);\n this.root.add(skeletonHelper);\n }\n this.skeleton = new THREE.Skeleton(bones);\n }\n HandSkeleton.prototype.getFeatureBone = function (featureKey) {\n return this.featureKeyToBoneMap[featureKey];\n };\n HandSkeleton.prototype.update = function (results) {\n var _this = this;\n var found = false;\n this.numberOfHands = 0;\n if (results.multiHandedness !== undefined) {\n this.numberOfHands = results.multiHandedness.length;\n results.multiHandedness.forEach(function (multiHandedness, index) {\n // if( this.handedness === getHandednessFromLabel( multiHandedness.label ) ) {\n if (!found) {\n // console.log('results.multiHandedness', results.multiHandedness);\n //console.log(results);\n var multiHandLandmarks = results.multiHandLandmarks[index];\n // console.log('multiHandLandmarks', multiHandLandmarks);\n var worldFeatures = convertPoseArrayToWorldFeatures(multiHandLandmarks, _this.viewWidth, _this.viewHeight);\n _this.handedness = getHandednessFromLabel(results.multiHandedness[index].label);\n // console.log(\"this.handedness\", _this.handedness);\n _this.updateBonesFromWorldPositions(worldFeatures);\n found = true;\n }\n // }\n });\n }\n this.root.visible = found;\n };\n HandSkeleton.prototype.getGuidanceText = function () {\n var feedback = [];\n // most important last, least important first.\n if (this.fingerCurl > 0.25) {\n feedback = [\"Uncurl Fingers\"]; // (curl=${this.fingerCurl.toFixed(2)})`];\n }\n if (this.palmFlatness < 0.6) {\n feedback = [\"Flatten Palm\"]; // (flatness=${this.palmFlatness.toFixed(2)})`];\n }\n if (this.handMargin <= 0.12) {\n feedback = [\"Fit Hand in View\"]; // (margin=${this.handMargin.toFixed(2)})`];\n }\n if (this.numberOfHands === 0) {\n feedback = ['No Hand Found'];\n }\n if (this.numberOfHands === 2) {\n feedback = ['Too Many Hands'];\n }\n //if( this.handedness === Handedness.Right ) {\n // feedback = ['Use Left Hand'];\n //}\n return feedback.join(', ');\n };\n HandSkeleton.prototype.updateBonesFromWorldPositions = function (worldPositions) {\n var _this = this;\n var palmToIndexFinger0 = worldPositions.indexFinger0.clone().sub(worldPositions.palmBase);\n var palmYForward = palmToIndexFinger0.clone().normalize();\n var palmXIndexToRingAcross = worldPositions.indexFinger0.clone().sub(worldPositions.ringFinger0).normalize();\n if (this.handedness === Handedness.Left) {\n palmXIndexToRingAcross.negate();\n }\n var palmZUp = palmYForward.clone().cross(palmXIndexToRingAcross);\n getZAxis(palmXIndexToRingAcross, palmYForward, palmZUp);\n // if right hand, this needs to be negated.\n var maxCurvature = 0, minCurvature = 0, curvatureSum = 0;\n exports.FingerNames.forEach(function (fingerName, fingerIndex) {\n // 4 joint positions\n var finger0 = worldPositions[getFeatureKey(fingerName, 0)];\n var finger1 = worldPositions[getFeatureKey(fingerName, 1)];\n var finger2 = worldPositions[getFeatureKey(fingerName, 2)];\n var finger3 = worldPositions[getFeatureKey(fingerName, 3)];\n // 3 digit segments\n var delta01 = finger1.clone().sub(finger0).normalize();\n var delta12 = finger2.clone().sub(finger1).normalize();\n var delta23 = finger3.clone().sub(finger2).normalize();\n // 2 joint curvatures\n var curvature012 = delta01.clone().cross(delta12).dot(palmXIndexToRingAcross);\n var curvature123 = delta12.clone().cross(delta23).dot(palmXIndexToRingAcross);\n minCurvature = Math.min(minCurvature, curvature012, curvature123);\n maxCurvature = Math.max(maxCurvature, curvature012, curvature123);\n curvatureSum += curvature012 + curvature123;\n });\n var avgCurvature = curvatureSum / 8;\n // negative curl means it is right hand.\n // if (avgCurvature > 0.0) {\n // palmXRightAcross.negate();\n // }\n // const palmZUp = new THREE.Vector3();\n // getZAxis(palmXRightAcross, palmYForward, palmZUp);\n // ensure orthogonal\n getXAxis(palmYForward, palmZUp, palmXIndexToRingAcross);\n var bbox = new THREE.Box3();\n var bones = [];\n this.root.traverse(function (object) {\n if (object.type !== 'Bone')\n return; // ignore non-bones.\n bbox.expandByPoint(object.getWorldPosition(new THREE.Vector3(0, 0, 0)));\n });\n this.handMargin = 0.5 - Math.max(Math.abs(bbox.min.x), Math.abs(bbox.max.x), Math.abs(bbox.min.y), Math.abs(bbox.max.y));\n this.fingerCurl = Math.abs(avgCurvature);\n this.palmFlatness = Math.abs(palmZUp.z);\n // determine palm orientation\n var worldToPalmBasis = new THREE.Matrix4().makeBasis(palmXIndexToRingAcross, palmYForward, palmZUp);\n // console.log( 'worldToPalmBasis', worldToPalmBasis );\n var worldToPalmRotation = new THREE.Quaternion().setFromRotationMatrix(worldToPalmBasis);\n worldToPalmRotation.normalize();\n var palmToWorldBasis = worldToPalmBasis.clone().invert();\n worldToPalmBasis.makeRotationFromQuaternion(worldToPalmRotation);\n worldToPalmBasis.extractBasis(palmXIndexToRingAcross, palmYForward, palmZUp);\n // console.log( 'worldToPalmBasis basics', palmXAcross, palmYForward, palmZUp );\n var palmBase = this.getFeatureBone('palmBase');\n palmBase.quaternion.copy(worldToPalmRotation);\n palmBase.position.copy(worldPositions.palmBase);\n exports.FingerNames.forEach(function (fingerName, fingerIndex) {\n var worldJointPositions = [worldPositions.palmBase];\n for (var j = 0; j < 4; j++) {\n worldJointPositions.push(worldPositions[getFeatureKey(fingerName, j)]);\n }\n var parentToWorldBasis = palmToWorldBasis.clone();\n for (var j = 0; j < worldJointPositions.length - 1; j++) {\n var bone = _this.getFeatureBone(getFeatureKey(fingerName, j));\n if (j - 1 >= 0) {\n bone.position.y = worldJointPositions[j].clone().sub(worldJointPositions[j - 1]).length();\n }\n else {\n bone.position.y = 0;\n }\n var boneYDirection = new THREE.Vector3(0, 1, 0);\n if ((j + 1) < worldJointPositions.length) {\n boneYDirection.copy(worldJointPositions[j + 1]).sub(worldJointPositions[j]).normalize();\n }\n var boneXAcross = palmXIndexToRingAcross;\n if (j > 1 && (j + 1) < worldJointPositions.length) {\n var prevBoneYDirection = new three_1.Vector3();\n prevBoneYDirection.copy(worldJointPositions[j]).sub(worldJointPositions[j - 1]).normalize();\n boneXAcross = boneYDirection.clone().cross(prevBoneYDirection).normalize();\n if (boneXAcross.dot(palmXIndexToRingAcross) < 0) {\n boneXAcross.multiplyScalar(-1);\n }\n }\n //const boneXAcross = palmXAcross;\n var boneZUp = new THREE.Vector3();\n getZAxis(boneXAcross, boneYDirection, boneZUp);\n getXAxis(boneYDirection, boneZUp, boneXAcross); // ensure orthogonality\n var worldToBoneBasis = new THREE.Matrix4().makeBasis(boneXAcross, boneYDirection, boneZUp);\n var parentToBoneBasis = new THREE.Matrix4().multiplyMatrices(parentToWorldBasis, worldToBoneBasis);\n parentToWorldBasis.copy(worldToBoneBasis).invert();\n bone.quaternion.setFromRotationMatrix(parentToBoneBasis);\n }\n });\n };\n HandSkeleton.prototype.updateBonesFromWorldPositionsOld = function (worldPositions) {\n var _this = this;\n var palmToIndexFinger0 = worldPositions.indexFinger0.clone().sub(worldPositions.palmBase);\n var palmYForward = palmToIndexFinger0.clone().normalize();\n var palmXIndexToRingAcross = worldPositions.indexFinger0.clone().sub(worldPositions.ringFinger0).normalize();\n if (this.handedness === Handedness.Right) {\n palmXIndexToRingAcross.negate();\n }\n var palmZUp = palmYForward.clone().cross(palmXIndexToRingAcross);\n getZAxis(palmXIndexToRingAcross, palmYForward, palmZUp);\n // if right hand, this needs to be negated.\n var maxCurvature = 0, minCurvature = 0, curvatureSum = 0;\n exports.FingerNames.forEach(function (fingerName, fingerIndex) {\n // 4 joint positions\n var finger0 = worldPositions[getFeatureKey(fingerName, 0)];\n var finger1 = worldPositions[getFeatureKey(fingerName, 1)];\n var finger2 = worldPositions[getFeatureKey(fingerName, 2)];\n var finger3 = worldPositions[getFeatureKey(fingerName, 3)];\n // 3 digit segments\n var delta01 = finger1.clone().sub(finger0).normalize();\n var delta12 = finger2.clone().sub(finger1).normalize();\n var delta23 = finger3.clone().sub(finger2).normalize();\n // 2 joint curvatures\n var curvature012 = delta01.clone().cross(delta12).dot(palmXIndexToRingAcross);\n var curvature123 = delta12.clone().cross(delta23).dot(palmXIndexToRingAcross);\n minCurvature = Math.min(minCurvature, curvature012, curvature123);\n maxCurvature = Math.max(maxCurvature, curvature012, curvature123);\n curvatureSum += curvature012 + curvature123;\n });\n var avgCurvature = curvatureSum / 8;\n // negative curl means it is right hand.\n // if (avgCurvature > 0.0) {\n // palmXRightAcross.negate();\n // }\n // const palmZUp = new THREE.Vector3();\n // getZAxis(palmXRightAcross, palmYForward, palmZUp);\n // ensure orthogonal\n getXAxis(palmYForward, palmZUp, palmXIndexToRingAcross);\n var bbox = new THREE.Box3();\n var bones = [];\n this.root.traverse(function (object) {\n if (object.type !== 'Bone')\n return; // ignore non-bones.\n bbox.expandByPoint(object.getWorldPosition(new THREE.Vector3(0, 0, 0)));\n });\n this.handMargin = 0.5 - Math.max(Math.abs(bbox.min.x), Math.abs(bbox.max.x), Math.abs(bbox.min.y), Math.abs(bbox.max.y));\n this.fingerCurl = Math.abs(avgCurvature);\n this.palmFlatness = Math.abs(palmZUp.z);\n // determine palm orientation\n var worldToPalmBasis = new THREE.Matrix4().makeBasis(palmXIndexToRingAcross, palmYForward, palmZUp);\n // console.log( 'worldToPalmBasis', worldToPalmBasis );\n var worldToPalmRotation = new THREE.Quaternion().setFromRotationMatrix(worldToPalmBasis);\n worldToPalmRotation.normalize();\n var palmToWorldBasis = worldToPalmBasis.clone().invert();\n worldToPalmBasis.makeRotationFromQuaternion(worldToPalmRotation);\n worldToPalmBasis.extractBasis(palmXIndexToRingAcross, palmYForward, palmZUp);\n // console.log( 'worldToPalmBasis basics', palmXAcross, palmYForward, palmZUp );\n var palmBase = this.getFeatureBone('palmBase');\n palmBase.quaternion.copy(worldToPalmRotation);\n palmBase.position.copy(worldPositions.palmBase);\n exports.FingerNames.forEach(function (fingerName, fingerIndex) {\n var worldJointPositions = [worldPositions.palmBase];\n for (var j = 0; j < 4; j++) {\n worldJointPositions.push(worldPositions[getFeatureKey(fingerName, j)]);\n }\n var parentToWorldBasis = palmToWorldBasis.clone();\n for (var j = 0; j < worldJointPositions.length - 1; j++) {\n var bone = _this.getFeatureBone(getFeatureKey(fingerName, j));\n if (j - 1 >= 0) {\n bone.position.y = worldJointPositions[j].clone().sub(worldJointPositions[j - 1]).length();\n }\n else {\n bone.position.y = 0;\n }\n var boneYDirection = new THREE.Vector3(0, 1, 0);\n if ((j + 1) < worldJointPositions.length) {\n boneYDirection.copy(worldJointPositions[j + 1]).sub(worldJointPositions[j]).normalize();\n }\n var boneXAcross = palmXIndexToRingAcross;\n if (j > 1 && (j + 1) < worldJointPositions.length) {\n var prevBoneYDirection = new three_1.Vector3();\n prevBoneYDirection.copy(worldJointPositions[j]).sub(worldJointPositions[j - 1]).normalize();\n boneXAcross = boneYDirection.clone().cross(prevBoneYDirection).normalize();\n if (boneXAcross.dot(palmXIndexToRingAcross) < 0) {\n boneXAcross.multiplyScalar(-1);\n }\n }\n //const boneXAcross = palmXAcross;\n var boneZUp = new THREE.Vector3();\n getZAxis(boneXAcross, boneYDirection, boneZUp);\n getXAxis(boneYDirection, boneZUp, boneXAcross); // ensure orthogonality\n var worldToBoneBasis = new THREE.Matrix4().makeBasis(boneXAcross, boneYDirection, boneZUp);\n var parentToBoneBasis = new THREE.Matrix4().multiplyMatrices(parentToWorldBasis, worldToBoneBasis);\n parentToWorldBasis.copy(worldToBoneBasis).invert();\n bone.quaternion.setFromRotationMatrix(parentToBoneBasis);\n }\n });\n };\n return HandSkeleton;\n}());\nexports.HandSkeleton = HandSkeleton;\n"],"sourceRoot":""}