awv3
Version:
⚡ AWV3 embedded CAD
241 lines (202 loc) • 10.5 kB
JavaScript
'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;