awv3
Version:
⚡ AWV3 embedded CAD
293 lines (221 loc) • 13.2 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 _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;