awv3
Version:
⚡ AWV3 embedded CAD
252 lines (202 loc) • 10.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
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 _class, _temp;
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('!!url-loader!awv3-icons/32x32/' + item + '.png')));
}, {});
var Csys = (_temp = _class = 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() / 5);
_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), _class.persistent = true, _temp);
exports.default = Csys;