awv3
Version:
⚡ AWV3 embedded CAD
356 lines (301 loc) • 14.9 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _extends3 = require('babel-runtime/helpers/extends');
var _extends4 = _interopRequireDefault(_extends3);
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 _dec, _class, _dec2, _class2;
var _three = require('three');
var THREE = _interopRequireWildcard(_three);
var _plugin = require('../../session/plugin');
var _plugin2 = _interopRequireDefault(_plugin);
var _elements = require('../../session/elements');
var _renderer = require('../../session/renderer');
var _renderer2 = _interopRequireDefault(_renderer);
var _globals = require('../../session/store/globals');
var _hud = require('../../core/hud');
var _hud2 = _interopRequireDefault(_hud);
var _graphics = require('./graphics');
var _graphics2 = _interopRequireDefault(_graphics);
var _handle = require('./handle');
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 Dimension = (_dec = (0, _renderer.connect)(function (state, _ref) {
var connection = _ref.connection,
key = _ref.key;
return {
day: state.globals.day,
dimension: state.connections[connection] && state.connections[connection].tree[key]
};
}), _dec(_class = function (_Component) {
(0, _inherits3.default)(Dimension, _Component);
function Dimension() {
(0, _classCallCheck3.default)(this, Dimension);
return (0, _possibleConstructorReturn3.default)(this, (Dimension.__proto__ || (0, _getPrototypeOf2.default)(Dimension)).apply(this, arguments));
}
(0, _createClass3.default)(Dimension, [{
key: 'componentWillMount',
value: function componentWillMount() {
this.info = this.getDimensionInfo(this.props);
this.state = { inputValue: this.info.value, inputName: this.info.name };
this.graphics = (0, _graphics2.default)(this.info.dimension.class, this.plugin);
this.plugin.hud.scene.add(this.graphics);
this.graphics.updateFromState(this.info);
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.graphics && this.graphics.destroy();
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(props) {
if (props.dimension) {
this.info = this.getDimensionInfo(props);
if (!this.graphics) this.graphics = (0, _graphics2.default)(this.info.dimension.class, this.plugin);
this.graphics.updateFromState(this.info);
} else {
this.graphics.destroy();
this.graphics = undefined;
}
// This is kind of a hack. Which value should "win"? The one that the user typed, or the one
// that comes through the wire from ClassCAD? The current solution overrides the input value.
this.state = (0, _extends4.default)({}, this.state, { inputValue: this.info.value });
}
}, {
key: 'setExpression',
value: function setExpression(target, name, expression) {
var expressionSet = target.class === 'CC_ExpressionSet';
var flag = this.plugin.recalc && expressionSet ? 1 : 2;
this.plugin.connection.execute('_C.CADApplication.SetExpressions(' + target.id + ',["' + name + '"],[' + (0, _stringify2.default)(expression) + '],' + flag + ');');
this.plugin.afterSetCallback();
}
}, {
key: 'setMember',
value: function setMember(target, name, value) {
this.plugin.connection.execute('VAR o; o = CADH_RealToId(' + target.id + '); o.' + name + ' = ' + (0, _stringify2.default)(value) + ';');
}
}, {
key: 'getDimensionInfo',
value: function getDimensionInfo(props) {
var scope = this;
var dimension = props.dimension,
expressions = props.expressions,
feature = props.feature,
search = props.search;
dimension.previewValue = undefined;
var master = dimension.members.master ? this.plugin.tree[dimension.members.master.value] : dimension;
var driven = (dimension.members.isDriven || {}).value;
var linkName = master.class === 'CC_Extrusion' ? dimension.name : master.members.userValue ? 'userValue' : 'value';
var expression = master.members[linkName].expression;
var angle = expression.match(/^ *a_r\((.*)\) *$/);
if (angle) expression = angle[1];
var matches = expression.match(/^ *ExpressionSet\.(\w+) *$/);
var target = matches ? expressions : master;
var memberName = matches ? matches[1] : linkName;
var owner = (this.plugin.tree[dimension.parent].members.owner || {}).value;
var visible = (!search || dimension.members.paramName.value.toLowerCase().indexOf(search) != -1) && (!feature || owner === feature);
var setMember = this.setMember.bind(this);
var setExpression = this.setExpression.bind(this);
return {
dimension: dimension,
angle: angle,
driven: driven,
visible: visible,
get name() {
return dimension.members.paramName.value;
},
set name(value) {
setMember(dimension, 'paramName', value);
},
get value() {
return target.members[memberName].value;
},
set value(value) {
setMember(target, memberName, value);
},
get expression() {
return target.members[memberName].expression || target.members[memberName].value;
},
set expression(value) {
setExpression(target, memberName, value);
},
set dimPt(value) {
setExpression(dimension, 'dimPt', value);
}
};
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
if (!this.info) return null;
var _info = this.info,
dimension = _info.dimension,
visible = _info.visible,
name = _info.name,
value = _info.value,
driven = _info.driven;
return _renderer2.default.createElement(
_elements.Group,
{ visible: visible, format: _elements.Group.Format.Rows },
_renderer2.default.createElement(_elements.Input, {
value: this.state.inputName,
onValue: function onValue(inputName) {
return _this2.setState({ inputName: inputName });
},
onLastEvent: function onLastEvent(e) {
return e.key === 'Enter' && (_this2.info.name = _this2.state.inputName);
},
readonly: !!driven,
flex: 1
}),
_renderer2.default.createElement(_elements.Input, {
format: _elements.Input.Format.Number,
value: this.state.inputValue,
onValue: function onValue(inputValue) {
return _this2.setState({ inputValue: inputValue });
},
onLastEvent: function onLastEvent(e) {
return e.key === 'Enter' && (_this2.info.expression = _this2.state.inputValue);
},
readonly: !!driven,
flex: 2
}),
_renderer2.default.createElement(_elements.Button, {
name: driven ? '🔒' : '🔓',
disabled: driven === undefined,
onLastEvent: function onLastEvent() {
return _this2.setMember(dimension, 'isDriven', !!driven ? 0 : 1);
},
flex: 0
})
);
}
}]);
return Dimension;
}(_renderer.Component)) || _class);
var Root = (_dec2 = (0, _renderer.connect)(function (state, props) {
var connection = state.globals.activeConnection;
if (!state.globals.activeConnection) return {};
var tree = state.connections[connection].tree;
var root = tree[tree.root].item || tree.root;
var expressions = tree[root].expressionSet;
var parent = state.plugins[props.id] && state.plugins[props.id].parent;
var feature = parent && state.plugins[parent] && state.plugins[parent].feature;
return { connection: connection, root: root, feature: feature, dimensions: tree[root].dimensions, expressions: tree[expressions] };
}), _dec2(_class2 = function (_Component2) {
(0, _inherits3.default)(Root, _Component2);
function Root() {
var _ref2;
var _temp, _this3, _ret;
(0, _classCallCheck3.default)(this, Root);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this3 = (0, _possibleConstructorReturn3.default)(this, (_ref2 = Root.__proto__ || (0, _getPrototypeOf2.default)(Root)).call.apply(_ref2, [this].concat(args))), _this3), _this3.state = { search: '' }, _temp), (0, _possibleConstructorReturn3.default)(_this3, _ret);
}
(0, _createClass3.default)(Root, [{
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(props) {
var hud = this.plugin.hud;
var tree = this.plugin.tree;
var itemRef = (tree[tree.root].instances || []).find(function (instance) {
return tree[instance].link === props.root;
}) || props.root;
var csys = tree[itemRef].coordinateSystem.map(function (row) {
return new THREE.Vector3().fromArray(row);
});
hud.scene.matrix.makeBasis(csys[1], csys[2], csys[3]).setPosition(csys[0]).decompose(hud.scene.position, hud.scene.quaternion, hud.scene.scale);
hud.scene.matrixWorldNeedsUpdate = true;
}
}, {
key: 'render',
value: function render() {
var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
connection = _ref4.connection,
root = _ref4.root,
feature = _ref4.feature,
expressions = _ref4.expressions,
_ref4$dimensions = _ref4.dimensions,
dimensions = _ref4$dimensions === undefined ? [] : _ref4$dimensions;
var _ref3 = arguments[1];
var search = _ref3.search;
var set = arguments[2];
var commons = { feature: feature, search: search, expressions: expressions, connection: connection };
return _renderer2.default.createElement(
_elements.Group,
null,
_renderer2.default.createElement(
_elements.Group,
{ format: _elements.Group.Format.Rows },
_renderer2.default.createElement(_elements.Input, { value: search, placeholder: 'Search...', onValue: function onValue(search) {
return set({ search: search });
} }),
_renderer2.default.createElement(_elements.Button, { name: '\u2718', flex: 0, disabled: !search, onLastEvent: function onLastEvent() {
return set({ search: '' });
} })
),
_renderer2.default.createElement(_elements.Spacer, null),
dimensions.map(function (id) {
return _renderer2.default.createElement(Dimension, (0, _extends4.default)({ key: id }, commons));
})
);
}
}]);
return Root;
}(_renderer.Component)) || _class2);
var resources = ['dimension'].reduce(function (prev, item) {
return (0, _extends4.default)({}, prev, (0, _defineProperty3.default)({}, item, require('!!url-loader!awv3-icons/32x32/' + item + '.png')));
}, {});
var _default = function (_Plugin) {
(0, _inherits3.default)(_default, _Plugin);
function _default(session, args) {
(0, _classCallCheck3.default)(this, _default);
var _this4 = (0, _possibleConstructorReturn3.default)(this, (_default.__proto__ || (0, _getPrototypeOf2.default)(_default)).call(this, session, (0, _extends4.default)({
type: 'Dimensions',
icon: 'dimension',
recalc: true,
handlePrototypes: [_handle.PositionHandle, _handle.ValueHandle],
resources: resources
}, args)));
_this4.selector = undefined;
_this4.afterSetCallback = function () {};
return _this4;
}
(0, _createClass3.default)(_default, [{
key: 'render',
value: function render() {
return _renderer2.default.createElement(Root, { id: this.id });
}
}, {
key: 'onEnabled',
value: function onEnabled() {
this.hud = new _hud2.default(this.view);
this.view.addHud(this.hud);
}
}, {
key: 'onDisabled',
value: function onDisabled() {
this.view.removeHud(this.hud);
this.hud.destroy();
}
}]);
return _default;
}(_plugin2.default);
exports.default = _default;