UNPKG

awv3

Version:
241 lines (202 loc) 10.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _map = require('babel-runtime/core-js/map'); var _map2 = _interopRequireDefault(_map); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); 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 _elements = require('../../session/elements'); var _helpers = require('../../session/helpers'); var _plugin = require('../../session/plugin'); var _plugin2 = _interopRequireDefault(_plugin); var _object = require('../../three/object3'); var _object2 = _interopRequireDefault(_object); var _graphics = require('./graphics'); var _graphics2 = _interopRequireDefault(_graphics); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Dimension = function (_Plugin) { (0, _inherits3.default)(Dimension, _Plugin); function Dimension(session, args) { (0, _classCallCheck3.default)(this, Dimension); var _this = (0, _possibleConstructorReturn3.default)(this, (Dimension.__proto__ || (0, _getPrototypeOf2.default)(Dimension)).call(this, session, (0, _extends3.default)({ type: 'Dimensions' }, args))); _this.dimensions = new _map2.default(); _this.onChange = _this.onChange.bind(_this); _this.onRemove = _this.onRemove.bind(_this); _this.filter = new _elements.Input(_this, { name: "Filter" }); _this.addElement(new _elements.Group(_this, { format: _elements.Group.Format.Table, children: [_this.filter] })); _this.addElement(new _elements.Group(_this, { format: _elements.Group.Format.Rows, children: [new _elements.Label(_this, { value: "Name", header: true }), new _elements.Label(_this, { value: "Expression", header: true }), new _elements.Label(_this, { value: "Value", header: true })] })); return _this; } (0, _createClass3.default)(Dimension, [{ key: 'onEnabled', value: function onEnabled() { var _this2 = this; this.session.pool.fadeOut(); this.filter.value = ""; var feature = (this.session.plugins[this.parent] || {}).feature; if (feature) this.connection.execute('VAR obj, set;\n obj = CADH_RealToId(' + feature + ');\n set = @BaseModelingCommonFuncs.GetDimensionSet(obj);\n set.CreateDimensions(obj);'); var tree = this.connection.tree; this.expressionSet = tree[tree.root].children.find(function (child) { return tree[child].class === 'CC_ExpressionSet'; }); this.connection.observe(function (state) { return state.tree[state.tree.root].dimensions; }, function (next, prev) { return (0, _helpers.arrayDiff)(next, prev, function (newDims) { return newDims.forEach(function (id) { var tree = _this2.connection.tree; if (feature && feature !== tree[tree[id].parent].members.owner.value) return; // skip dimensions of different features _this2.connection.observe(function (state) { return state.tree[id]; }, _this2.onChange, { manager: _this2.addSubscription.bind(_this2), onRemove: _this2.onRemove, fireOnStart: true, unsubscribeOnUndefined: true }); }); }); }, { manager: this.addSubscription.bind(this), fireOnStart: true }); } }, { key: 'onDisabled', value: function onDisabled() { this.session.pool.fadeIn(); this.destroyElements(); } }, { key: 'onChange', value: function onChange(dimension) { var id = dimension.id; var element = void 0, graphics = void 0; if (this.dimensions.has(id)) { var _dimensions$get = this.dimensions.get(id); element = _dimensions$get.element; graphics = _dimensions$get.graphics; } else { element = this.makeDimensionElement(id); this.addElement(element); graphics = (0, _graphics2.default)(dimension.class, this); this.pool.add(graphics); this.dimensions.set(id, { element: element, graphics: graphics }); } graphics.updateFromState(dimension); graphics.onRender(); } }, { key: 'onRemove', value: function onRemove(dimension, unsubscribe) { var id = dimension.id; var _dimensions$get2 = this.dimensions.get(id), element = _dimensions$get2.element, graphics = _dimensions$get2.graphics; this.dimensions.delete(id); element.removeSubscriptions(); this.removeElement(element); graphics.destroy(); this.removeSubscription(unsubscribe); } }, { key: 'makeDimensionElement', value: function makeDimensionElement(id) { var nameDescriptor = this.getMemberDescriptor(id, 'paramName'); var nameElement = this.makeInputElement(nameDescriptor, 'value'); var expressionDescriptor = this.getDimensionExpressionDescriptor(id); var expressionElement = this.makeInputElement(expressionDescriptor, 'expression'); var valueElement = this.makeLabelElement(expressionDescriptor, 'value'); var element = new _elements.Group(this, { format: _elements.Group.Format.Rows, children: [nameElement, expressionElement, valueElement] }); this.filter.observe(function (state) { return state.value; }, function (value) { return element.visible = nameElement.value.includes(value); }, { fireOnStart: true, manager: element.addSubscription.bind(element) }); return element; } }, { key: 'makeInputElement', value: function makeInputElement(descriptor, descriptorMember) { var element = new _elements.Input(this); element.observe(function (state) { return state.lastEvent; }, function (event) { if (event.key === 'Enter') descriptor[descriptorMember] = element.value; }); descriptor.observe(function (state) { return state[descriptorMember]; }, function (value) { return element.value = value; }, { fireOnStart: true, manager: element.addSubscription.bind(element) }); return element; } }, { key: 'makeLabelElement', value: function makeLabelElement(descriptor, descriptorMember) { var element = new _elements.Label(this); descriptor.observe(function (state) { return state[descriptorMember]; }, function (value) { return element.value = value; }, { fireOnStart: true, manager: element.addSubscription.bind(element) }); return element; } }, { key: 'getDimensionExpressionDescriptor', value: function getDimensionExpressionDescriptor(id) { var tree = this.connection.tree, dimension = tree[id]; var master = tree[dimension.members.master.value]; // extrusion or constraint var masterLinkName = master.class === 'CC_Extrusion' ? dimension.name : master.members.userValue ? 'userValue' : 'value'; var match = master.members[masterLinkName].expression.match(/ExpressionSet\.(\w+)/); if (match) return this.getMemberDescriptor(this.expressionSet, match[1], true);else return this.getMemberDescriptor(dimension.members.master.value, masterLinkName, true); } }, { key: 'getMemberDescriptor', value: function getMemberDescriptor(id, memberName) { var globalRecalc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; return { get value() { return this.connection.tree[id].members[memberName].value; }, set value(value) { this.connection.execute('VAR o;\n o = CADH_RealToId(' + id + ');\n o.' + memberName + ' = ' + (0, _stringify2.default)(value) + ';'); }, get expression() { return this.connection.tree[id].members[memberName].expression; }, set expression(value) { this.connection.execute('VAR o;\n o = CADH_RealToId(' + id + ');\n CADH_SetMemberExpr(o.' + memberName + ', ' + (0, _stringify2.default)(value) + ');\n o.OBJ_Recalc();' + (globalRecalc ? '\n _C.GlobaleFunktionen.UseOnStartRecalc(_O);' : '')); }, observe: function observe(select, onChange, options) { return this.connection.observe(function (state) { return state.tree[id] && select(state.tree[id].members[memberName]); }, onChange, options); }, connection: this.connection }; } }]); return Dimension; }(_plugin2.default); exports.default = Dimension;