{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/groupchaining/node-modules/selection-with-zoom.js"],"names":["inside","mp2","mb2","vec3","INDIVIDUAL_COLOR_SELECTED","INDIVIDUAL_COLOR","INDIVIDUAL_TYPE","Selector","constructor","interactiveCanvas","selectedNodes","highlightColor","r","g","b","opacity","history","mousePressed","canvas","mousePosition","registerClickedDownHandler","selectedNodesPreviousColor","selector","on","left","clickedNodesIndices","calculateNodeIndicesUnderMousePointer","nodes","transform","scale","selectedNode","getSelectedIndividual","length","drawing","tcolor","inspectNode","data","drawNodes","forEach","node","index","drawingInfo","getZoomedDrawingInformation","point_polygon","x","size","y","push","clickedPointsIndices","selectedIndividual","nodeType","drawingInformation","zoomedDrawingInformation","normalizedPosition","getNormalizedCords","tx","ty","width","height","vec3oldPosition","fromValues","vec3zoomedPosition","create","transformMat3","zoomedPosition","getDenormalizedCords","tsize","xNorm","yNorm"],"mappings":"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","file":"selection-with-zoom.js","sourcesContent":["import inside from \"https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/npm-modules/npm-point-in-polygon.js\";\nimport mp2 from \"https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/npm-modules/npm-mouse-position.js\";\nimport mb2 from \"https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/npm-modules/npm-mouse-pressed.js\"; \nimport { vec3 } from \"https://cdnjs.cloudflare.com/ajax/libs/gl-matrix/2.8.1/gl-matrix.js\";\nimport { INDIVIDUAL_COLOR_SELECTED, INDIVIDUAL_COLOR, INDIVIDUAL_TYPE } from \"./groupingTryOut.js\" \n\n\n\nexport class Selector {\n  constructor(interactiveCanvas) {\n    this.interactiveCanvas = interactiveCanvas;\n    this.selectedNodes = {};\n    this.highlightColor = {r: 0, g: 0, b: 0, opacity: 1}\n    this.history = [];\n    this.mousePressed = mb2(this.interactiveCanvas.canvas);\n    this.mousePosition = mp2(this.interactiveCanvas.canvas);\n    this.registerClickedDownHandler();\n    this.selectedNodesPreviousColor = {};\n  }\n  \n  registerClickedDownHandler() {\n    let selector = this;\n    \n    this.mousePressed.on('down', function() {\n      if (selector.mousePressed.left) {\n        var clickedNodesIndices = selector.calculateNodeIndicesUnderMousePointer(selector,\n          selector.mousePosition, \n          selector.interactiveCanvas.nodes,\n          selector.interactiveCanvas.transform,\n          selector.interactiveCanvas.scale\n        );\n        let selectedNode = selector.getSelectedIndividual(clickedNodesIndices);\n        // selector.updateSelectedObjects(selector.nodes, selector.mousePosition);\n        if(selectedNode.length > 0){\n          //Check if Node is alreadySelected\n          selectedNode = selectedNode[0];\n          if(selectedNode.drawing[\"selected\"]) {\n            selectedNode.drawing[\"selected\"] = false;\n            selectedNode.drawing.tcolor = INDIVIDUAL_COLOR;\n          } else {\n            selectedNode.drawing[\"selected\"] = true;\n            selector.interactiveCanvas.inspectNode(selectedNode.data);\n            selectedNode.drawing.tcolor = INDIVIDUAL_COLOR_SELECTED;\n\n          }\n          selector.interactiveCanvas.drawNodes();\n        }\n        \n      } \n    })\n  }\n  \n   calculateNodeIndicesUnderMousePointer(selector, mousePosition, nodes, transform, scale) {\n               \n     let clickedNodesIndices = [];\n     nodes.forEach((node, index) => {\n       \n       let drawingInfo = selector.getZoomedDrawingInformation(\n         node.drawing,\n         transform,\n         scale);\n       \n       var point_polygon = [\n           [drawingInfo.x - drawingInfo.size/2, drawingInfo.y - drawingInfo.size/2],\n           [drawingInfo.x + drawingInfo.size/2, drawingInfo.y - drawingInfo.size/2],\n           [drawingInfo.x + drawingInfo.size/2, drawingInfo.y + drawingInfo.size/2],\n           [drawingInfo.x - drawingInfo.size/2, drawingInfo.y + drawingInfo.size/2]\n         ]\n       \n       if (inside(mousePosition, point_polygon)) {\n         clickedNodesIndices.push(index)\n       }\n     })\n     return clickedNodesIndices;\n  }\n  \n  getSelectedIndividual(clickedPointsIndices){\n    let selectedIndividual = []\n    clickedPointsIndices.forEach( (index) => {\n      if (this.interactiveCanvas.nodes[index].data.nodeType == INDIVIDUAL_TYPE) {\n        selectedIndividual.push(this.interactiveCanvas.nodes[index]);  \n      }\n    })\n    return selectedIndividual;\n  }\n  \n  getZoomedDrawingInformation(drawingInformation, transform, scale){\n    let zoomedDrawingInformation = {};\n    let normalizedPosition = this.getNormalizedCords(\n      drawingInformation.tx, \n      drawingInformation.ty,\n      this.interactiveCanvas.canvas.width,\n      this.interactiveCanvas.canvas.height)\n    \n    let vec3oldPosition = vec3.fromValues(normalizedPosition.x, normalizedPosition.y, 1);\n    let vec3zoomedPosition = vec3.create();\n    vec3.transformMat3(vec3zoomedPosition, vec3oldPosition, transform);\n    \n    let zoomedPosition = this.getDenormalizedCords(\n      vec3zoomedPosition[0],\n      vec3zoomedPosition[1],\n      this.interactiveCanvas.canvas.width,\n      this.interactiveCanvas.canvas.height\n      )\n    zoomedDrawingInformation[\"size\"] = scale * drawingInformation.tsize;\n    zoomedDrawingInformation[\"x\"] = zoomedPosition.x;\n    zoomedDrawingInformation[\"y\"] = zoomedPosition.y;\n    \n    return zoomedDrawingInformation;\n  }\n  \n  getNormalizedCords(x, y, width, height){\n    let xNorm = 2.0 * ((x / width) - 0.5);\n    let yNorm = -1.0 * (2.0 * ((y / height) - 0.5));\n    \n    return {x: xNorm, y: yNorm}\n  }  \n  \n  getDenormalizedCords(xNorm, yNorm, width, height){\n    let x = ((xNorm / 2.0) + 0.5) * width;\n    let y = (-0.5 * yNorm + 0.5) * height;\n\n    \n    return {x: x, y: y};\n  }\n\n}"]}