UNPKG

awv3

Version:
44 lines (35 loc) 1.54 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.calcSketchPos = calcSketchPos; exports.calcWorldToPixelScale = calcWorldToPixelScale; var _three = require('three'); var THREE = _interopRequireWildcard(_three); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function calcSketchPos(ray, sketch) { //transform line from world to sketch coords var worldToLocal = new THREE.Matrix4().getInverse(sketch.getMatrixWorld()); ray.applyMatrix4(worldToLocal); //calculate intersection of line with z = 0 plane var param = (0 - ray.origin.z) / ray.direction.z; var sketchPoint = ray.at(param); sketchPoint.z = 0; //ensure it is exactly zero return sketchPoint; } function calcWorldToPixelScale(view, pos) { var dirs = [[1, 0], [0, 1], [-1, 0], [0, -1]]; var step = 1e-3; var toScreen = function toScreen(pos) { return view.getPoint2(pos.clone()); }; var maxCoeff = 1e-3; var posScr = toScreen(pos); for (var i = 0; i < dirs.length; i++) { var mutPos = new THREE.Vector3(dirs[i][0], dirs[i][1], 0).multiplyScalar(step).add(pos); var mutPosScr = toScreen(mutPos); var coeff = mutPosScr.distanceTo(posScr) / step; maxCoeff = Math.max(maxCoeff, coeff); } return maxCoeff; }