UNPKG

awv3

Version:
293 lines (221 loc) 13.2 kB
'use strict'; 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 _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 _redux = require('redux'); var _connections = require('../../session/store/connections'); var _elements = require('../../session/store/elements'); var _plugin = require('../../session/plugin'); var _plugin2 = _interopRequireDefault(_plugin); var _dimension = require('../dimension/'); var _dimension2 = _interopRequireDefault(_dimension); var _helpers = require('../../session/helpers'); var _elements2 = require('../../session/elements'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var resources = ['isometric'].reduce(function (prev, item) { return (0, _extends4.default)({}, prev, (0, _defineProperty3.default)({}, item, require('!!url-loader!awv3-icons/32x32/' + item + '.png'))); }, {}); var Fillet = function (_Plugin) { (0, _inherits3.default)(Fillet, _Plugin); function Fillet(session, args) { (0, _classCallCheck3.default)(this, Fillet); var _this = (0, _possibleConstructorReturn3.default)(this, (Fillet.__proto__ || (0, _getPrototypeOf2.default)(Fillet)).call(this, session, (0, _extends4.default)({ type: 'Fillet', icon: 'isometric', selectionVisible: true, resources: resources }, args))); _this.actions = (0, _redux.bindActionCreators)({ execute: _connections.actions.execute }, _this.session.store.dispatch); _this.elementSelection = new _elements2.Selection(_this, { name: 'Target', types: ['Mesh', 'LineSegments'], limit: 1, visible: _this.selectionVisible }); _this.elementType = new _elements2.Dropdown(_this, { name: 'Type', children: ['Fillet', 'Chamfer'], value: 'Fillet' }); _this.elementRadius = new _elements2.Input(_this, { name: 'Radius', visible: false, hint: 'expression' }); _this.elementVertical = new _elements2.Input(_this, { name: 'Vertical', visible: false, hint: 'expression' }); _this.elementHorizontal = new _elements2.Input(_this, { name: 'Horizontal', visible: false, hint: 'expression' }); _this.elementCreate = new _elements2.Button(_this, { name: 'Create', visible: false }); _this.fillets = new _elements2.Group(_this, { name: "Fillets", format: _elements2.Group.Format.Collapse }); _this.addElement(new _elements2.Group(_this, { name: "Create Fillet", format: _elements2.Group.Format.Collapse, children: [new _elements2.Group(_this, { format: _elements2.Group.Format.Table, children: [_this.elementSelection, _this.elementType, _this.elementRadius, _this.elementVertical, _this.elementHorizontal] }), _this.elementCreate] }), new _elements2.Spacer(_this), _this.fillets); return _this; } (0, _createClass3.default)(Fillet, [{ key: 'collectFillets', value: function collectFillets() { var _this2 = this; var part = this.tree[this.tree.root]; if (part && part.features) { var oldChildren = this.fillets.children; this.fillets.children = part.features.filter(function (feature) { return _this2.tree[feature].class.indexOf('Fillet') != -1; }).map(function (feature) { var label = new _elements2.Label(_this2, { value: _this2.tree[feature].name }); label.observe(function (state) { return state.lastEvent; }, function (event) { return console.log(event); }); var group = new _elements2.Group(_this2, { format: _elements2.Group.Format.Rows, children: [label, new _elements2.Input(_this2, { value: _this2.tree[feature].members.radius.value, flex: 2 }), new _elements2.Button(_this2, { name: "Update" }), new _elements2.Button(_this2, { name: "Delete", color: 'black' })] }); return group.id; }); oldChildren.forEach(function (element) { return _this2.session.dispatch(_elements.actions.unregister(element)); }); } } }, { key: 'onEnabled', value: function onEnabled() { var _this3 = this; this.collectFillets(); this.connection.observe(function (state) { return state.tree.root; }, function (root) { return _this3.collectFillets(); }, { unsubscribeOnUndefined: true, fireOnStart: true }); this.elementType.observe(function (state) { return state.value; }, function (value) { _this3.elementRadius.visible = value === 'Fillet'; _this3.elementVertical.visible = value === 'Chamfer'; _this3.elementHorizontal.visible = value === 'Chamfer'; }, { fireOnStart: true }); this.elementSelection.observe(function (state) { return state.children; }, function () { var hit = _this3.connection.pool.findMaterial(function (material) { return material.meta && material.meta.id === _this3.elementSelection.children[0]; }); if (hit) { var operation = _this3.tree[hit.material.meta.operationId]; if (operation && (operation.class.indexOf('Fillet') != -1 || operation.class.indexOf('Chamfer') != -1)) { // We're in a previously created fillet feature _this3.elementType.value = operation.class.indexOf('Fillet') ? 'Fillet' : 'Chamfer'; _this3.elementRadius.value = operation.members.radius.value; _this3.elementCreate.visible = false; return; } // We have a positive hit, but no fillet yet _this3.elementCreate.visible = true; _this3.elementRadius.value = 1; return; } _this3.elementCreate.visible = false; _this3.elementRadius.value = undefined; }); this.elementRadius.observe(function (state) { return state.lastEvent; }, function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(event) { var hit, operation, _connection$pool$find, material; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(event.key === 'Enter')) { _context.next = 9; break; } hit = _this3.connection.pool.findMaterial(function (material) { return material.meta && material.meta.id === _this3.elementSelection.children[0]; }); if (!hit) { _context.next = 9; break; } operation = _this3.tree[hit.material.meta.operationId]; if (!(operation && _this3.elementRadius.value > 0 && (operation.class.indexOf('Fillet') != -1 || operation.class.indexOf('Chamfer') != -1))) { _context.next = 9; break; } _context.next = 7; return _this3.actions.execute(_this3.connection.id, '_C.CADApplication.SetFeatureParams(' + operation.id + ', [' + _this3.elementRadius.value + '], 1);'); case 7: _connection$pool$find = _this3.connection.pool.findMaterial(function (material) { return material.meta && material.meta.operationId === operation.id; }), material = _connection$pool$find.material; _this3.elementSelection.children = [material.meta.id]; case 9: case 'end': return _context.stop(); } } }, _callee, _this3); })); return function (_x) { return _ref.apply(this, arguments); }; }()); this.elementCreate.observe(function (state) { return state.lastEvent; }, (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() { var hit, id, operation, _connection$pool$find2, material; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: hit = _this3.connection.pool.findMaterial(function (material) { return material.meta && material.meta.id === _this3.elementSelection.children[0]; }); if (!(hit && _this3.elementRadius.value > 0)) { _context2.next = 14; break; } id = hit.material.meta.originalId; _context2.next = 5; return _this3.actions.execute(_this3.connection.id, '_C.CADApplication.NewFeature(' + _this3.tree.root + ', "CC_ConstantRadiusFillet", "Fillet");'); case 5: operation = _this3.tree[_this3.root.features[_this3.root.features.length - 1]].id; _context2.next = 8; return _this3.actions.execute(_this3.connection.id, '_C.CADApplication.FeatureBuildReferences(' + operation + ', [' + id + ']);'); case 8: if (!_this3.elementRadius.value) _this3.elementRadius.value = 0.1; _context2.next = 11; return _this3.actions.execute(_this3.connection.id, '_C.CADApplication.SetFeatureParams(' + operation + ', [' + _this3.elementRadius.value + '], 1);'); case 11: _connection$pool$find2 = _this3.connection.pool.findMaterial(function (material) { return material.meta && material.meta.operationId === operation; }), material = _connection$pool$find2.material; _this3.elementSelection.children = [material.meta.id]; _this3.collectFillets(); case 14: case 'end': return _context2.stop(); } } }, _callee2, _this3); }))); } }, { key: 'onDisabled', value: function onDisabled() { this.resetElements(); } }]); return Fillet; }(_plugin2.default); exports.default = Fillet;