awv3
Version:
⚡ AWV3 embedded CAD
44 lines (35 loc) • 1.54 kB
JavaScript
;
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;
}