UNPKG

awv3

Version:
222 lines (172 loc) 10.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends3 = require('babel-runtime/helpers/extends'); var _extends4 = _interopRequireDefault(_extends3); var _three = require('three'); var THREE = _interopRequireWildcard(_three); var _plugin = require('../../session/plugin'); var _plugin2 = _interopRequireDefault(_plugin); var _helpers = require('../../session/helpers'); var _elements = require('../../session/elements'); 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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var resources = ["csys"].reduce(function (prev, item) { return (0, _extends4.default)({}, prev, (0, _defineProperty3.default)({}, item, require('./resources/' + item + '.png'))); }, {}); var Csys = function (_Plugin) { (0, _inherits3.default)(Csys, _Plugin); function Csys(session, args) { (0, _classCallCheck3.default)(this, Csys); var _this = (0, _possibleConstructorReturn3.default)(this, (Csys.__proto__ || (0, _getPrototypeOf2.default)(Csys)).call(this, session, (0, _extends4.default)({ type: "Csys", icon: "csys", resources: resources }, args))); _this.origin = new _elements.Selection(_this, { name: "Origin", types: ['Point'] }); _this.axis = new _elements.Selection(_this, { name: "Axis", types: ['Mesh', 'LineSegments'] }); _this.secondary = new _elements.Selection(_this, { name: "Secondary", types: ['Mesh', 'LineSegments'] }); _this.refsGroup = new _elements.Group(_this, { format: _elements.Group.Format.Table, children: [_this.origin, _this.axis, _this.secondary] }); _this.collapse = new _elements.Group(_this, { name: "References", children: [_this.refsGroup], format: _elements.Group.Format.Collapse }); _this.addElement(_this.collapse); _this.offsetInput = new _elements.Input(_this, { name: "Offset", value: "0,0,0", format: _elements.Input.Format.Vector }); _this.sliderX = new _elements.Slider(_this, { name: "Rotation X", max: 360, step: 10, positions: { 0: '0°', 90: '90°', 180: '180°', 270: '270°', 360: '360°' } }); _this.sliderY = new _elements.Slider(_this, { name: "Rotation Y", max: 360, step: 10, positions: { 0: '0°', 90: '90°', 180: '180°', 270: '270°', 360: '360°' } }); _this.sliderZ = new _elements.Slider(_this, { name: "Rotation Z", max: 360, step: 10, positions: { 0: '0°', 90: '90°', 180: '180°', 270: '270°', 360: '360°' } }); _this.main = new _elements.Group(_this, { format: _elements.Group.Format.Table, children: [_this.offsetInput, _this.sliderX, _this.sliderY, _this.sliderZ] }); _this.addElement(_this.main); var coords = args.feature.coordinateSystem; _this.position = new (Function.prototype.bind.apply(THREE.Vector3, [null].concat((0, _toConsumableArray3.default)(coords[0]))))(); _this.rotation = new THREE.Euler(); var x = new (Function.prototype.bind.apply(THREE.Vector3, [null].concat((0, _toConsumableArray3.default)(coords[1]))))(); var y = new (Function.prototype.bind.apply(THREE.Vector3, [null].concat((0, _toConsumableArray3.default)(coords[2]))))(); var m = new THREE.Matrix4().makeBasis(x, y, x.clone().cross(y)); _this.xAxis = m; _this.yAxis = new THREE.Matrix4(); _this.offset = new THREE.Vector3(); _this.csys = new THREE.AxisHelper(_this.pool.getRadius() / 10); _this.csys.interactive = false; _this.csys.matrixAutoUpdate = false; _this.pool.add(_this.csys); _this.translate(); return _this; } (0, _createClass3.default)(Csys, [{ key: 'onEnabled', value: function onEnabled() { var _this2 = this; this.apply.observe(function (state) { return state.lastEvent; }, function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(event) { var feature, xAxis, yAxis, zAxis, pos, path; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: feature = _this2.tree[_this2.feature]; xAxis = new THREE.Vector3(), yAxis = new THREE.Vector3(), zAxis = new THREE.Vector3(); _this2.csys.matrix.extractBasis(xAxis, yAxis, zAxis); pos = new THREE.Vector3().setFromMatrixPosition(_this2.csys.matrix); path = (0, _helpers.buildFeaturePath)(_this2.tree, feature.id); _context.next = 7; return _this2.connection.execute(path + '.SetName("' + feature.name + '");'); case 7: path = (0, _helpers.buildFeaturePath)(_this2.tree, feature.id); _this2.connection.execute(path + '.OBJ_SetCoordSystem({' + pos.toArray().join(',') + '},{' + xAxis.toArray().join(',') + '},{' + yAxis.toArray().join(',') + '});'); _this2.connection.recalc(); case 10: case 'end': return _context.stop(); } } }, _callee, _this2); })); return function (_x) { return _ref.apply(this, arguments); }; }()); this.origin.observe(function (state) { return state.children; }, function (selection) { if (selection.length) { _this2.position = _this2.session.selector.getSelectedElements()[0].meta.position; _this2.translate(); } }); this.sliderX.observe(function (state) { return state.value; }, function (value) { _this2.rotation.x = value * Math.PI / 180;_this2.translate(); }); this.sliderY.observe(function (state) { return state.value; }, function (value) { _this2.rotation.y = value * Math.PI / 180;_this2.translate(); }); this.sliderZ.observe(function (state) { return state.value; }, function (value) { _this2.rotation.z = value * Math.PI / 180;_this2.translate(); }); this.offsetInput.observe(function (state) { return state.value; }, function (value) { _this2.offset = new (Function.prototype.bind.apply(THREE.Vector3, [null].concat((0, _toConsumableArray3.default)(value.split(',')))))(); _this2.translate(); }); this.axis.observe(function (state) { return state.children; }, function (selection) { return _this2.rotate(selection, 'x'); }); this.secondary.observe(function (state) { return state.children; }, function (selection) { return _this2.rotate(selection, 'y'); }); } }, { key: 'onDestroyed', value: function onDestroyed() { this.csys.destroy(); } }, { key: 'translate', value: function translate() { var _ref2; this.csys.matrix = new THREE.Matrix4().setPosition(this.position).multiply(this.xAxis).multiply(this.yAxis).multiply(new THREE.Matrix4().makeRotationFromEuler(this.rotation)).multiply((_ref2 = new THREE.Matrix4()).makeTranslation.apply(_ref2, (0, _toConsumableArray3.default)(this.offset.toArray()))); this.pool.view.invalidate(); } }, { key: 'rotate', value: function rotate(selection, whichAxis) { if (selection.length) { var meta = this.session.selector.getSelectedElements()[0].meta; if (meta.type === "line") var dir = meta.end.clone().sub(meta.start.clone()).normalize();else if (meta.type === "plane") var dir = meta.normal.clone(); var axis = whichAxis === 'x' ? new THREE.Vector3(1, 0, 0) : new THREE.Vector3(0, 1, 0); var rotAxis = axis.clone().cross(dir).normalize(); var angle = axis.angleTo(dir); this[whichAxis + 'Axis'] = new THREE.Matrix4().makeRotationAxis(rotAxis, angle); this.translate(); } } }]); return Csys; }(_plugin2.default); exports.default = Csys;