diff --git a/index.html b/index.html index 0e97190..bb3ffc7 100644 --- a/index.html +++ b/index.html @@ -3284,6 +3284,12 @@ function startDraw2D(){ function pinchPrimaryDraw2DStarted(event){ // creates an offset between last pinch and last index tip position // could merge them by updating the previous line end to the current pinch position + // could add a new line between both + if (points2D.length && points2D.length > 0){ + let lastPoint = points2D[points2D.length-1] + let previouspos = + lastPoint.getAttribute("line__0").end.clone().add( lastPoint.getAttribute('position') ) + } controlSphere = document.createElement("a-sphere") points2D.push( controlSphere ) let pos = event.detail.position.clone() @@ -3311,31 +3317,73 @@ function startDraw2D(){ } } +function colorGradient(fadeFraction, rgbColor1, rgbColor2, rgbColor3) { +// https://gist.github.com/gskema/2f56dc2e087894ffc756c11e6de1b5ed + var color1 = rgbColor1; + var color2 = rgbColor2; + var fade = fadeFraction; + + // Do we have 3 colors for the gradient? Need to adjust the params. + if (rgbColor3) { + fade = fade * 2; + + // Find which interval to use and adjust the fade percentage + if (fade >= 1) { + fade -= 1; + color1 = rgbColor2; + color2 = rgbColor3; + } + } + + var diffRed = color2.red - color1.red; + var diffGreen = color2.green - color1.green; + var diffBlue = color2.blue - color1.blue; + + var gradient = { + red: parseInt(Math.floor(color1.red + (diffRed * fade)), 10), + green: parseInt(Math.floor(color1.green + (diffGreen * fade)), 10), + blue: parseInt(Math.floor(color1.blue + (diffBlue * fade)), 10), + }; + + return 'rgb(' + Math.max(0,gradient.red) + ',' + Math.max(0,gradient.green) + ',' + Math.max(0,gradient.blue) + ')'; +} + +function presetColorGradient(fadeFraction){ + let highColor = { red: 217, green: 83, blue: 79 }; + let mediumColor = { red: 240, green: 173, blue: 78 }; + let lowColor = { red: 92, green: 184, blue: 91 }; + + return colorGradient(fadeFraction, lowColor, mediumColor, highColor); +} + +function tensionVisualized(){ + let p = document.querySelector('[pinchprimary]') + let ptarget = new THREE.Vector3(); // create once an reuse it + let s = document.querySelector('[pinchsecondary]') + let starget = new THREE.Vector3(); // create once an reuse it + let entity = document.createElement("a-entity") + AFRAME.scenes[0].appendChild( entity ) + entity.setAttribute("line__0", `start: 0 0 0; end : 0 0 0; opacity: 1; color:purple;`) + let indexesTipTracking = setInterval( _ => { + ptarget = p.components['hand-tracking-controls'].indexTipPosition + starget = s.components['hand-tracking-controls'].indexTipPosition + // sometimes getting strange values, might check against null/0 + let line = entity.getAttribute("line__0") + if (line){ + let start = AFRAME.utils.coordinates.stringify( ptarget ) + entity.setAttribute("line__0", "start", start) + let end = AFRAME.utils.coordinates.stringify( starget ) + entity.setAttribute("line__0", "end", end) + entity.setAttribute("line__0", "color", presetColorGradient( ptarget.distanceTo(starget)) ) + } + }, 20) +} + // used for testing AFRAME.registerComponent('startfunctions', { init: function () { - document.body.addEventListener( "highlighterready", (e) => { - let ed3 = addCodeEditor( 'Math.random()', 'javascript', '-.9 1.8 -.5') - addConnectorsToCodeEditor( ed3, false, true) - let ed1 = addCodeEditor( 'nodalValue*nodalValue', 'javascript', '-.3 1.6 -.5') - addConnectorsToCodeEditor( ed1 ) - let ed2 = addCodeEditor( 'addNewNote("nodalValue: "+nodalValue)', 'javascript', '.2 1.4 -.5') - addConnectorsToCodeEditor( ed2, true, false ) - setTimeout( _ => { - //console.log( connectionsBetweenEditors( editors[0], editors[2] ) ) - let g = generateGraphFromEditors(editors) - //console.log( numberOfPredecessors( g ), numberOfSuccessors( g ) ) - traverseFunctionGraph( g ).map( e => { - try { - nodalValue = eval?.( e.editor.page ) - } catch (error) { - console.error(`Evaluation failed with ${error}`); - } - } ) - } , 1000 ) - // should be done after each codeEditors gets connectors added then on editor moves - }, false); - startDraw2D() + + tensionVisualized() //startExperience() //doublePinchToScale() //emptyPinchToMove() @@ -3410,7 +3458,7 @@ AFRAME.registerComponent('startfunctions', { - +