UNPKG

awv3

Version:
607 lines (542 loc) 24.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _three = require('three'); var THREE = _interopRequireWildcard(_three); var _plugin = require('../session/plugin'); var _plugin2 = _interopRequireDefault(_plugin); var _elements = require('../session/elements'); 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 }; } /** * Class representing the CC_Bending class with equal member-names. * bendAngle = params[0]; * preAngle = params[1]; * bendRadiusDB = params[2]; * bendRadius = params[3]; * color = params[4]; * lineType = params[5]; * bendDeduction = params[6]; * upperTool = params[7]; * lowerTool = params[8]; * bendType = params[9]; * bendMethod = params[10]; * bendTechnique = params[11]; */ var BendingParameters = function () { function BendingParameters() { var bendingObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; (0, _classCallCheck3.default)(this, BendingParameters); if (bendingObject) { this.bendAngle = bendingObject.members.bendAngle.value; this.preAngle = bendingObject.members.preAngle.value; this.bendRadiusDB = bendingObject.members.bendRadiusDB.value; this.bendRadius = bendingObject.members.bendRadius.value; this.color = bendingObject.members.color.value; this.lineType = bendingObject.members.lineType.value; this.bendDeduction = bendingObject.members.bendDeduction.value; this.upperTool = bendingObject.members.upperTool.value; this.lowerTool = bendingObject.members.lowerTool.value; this.bendType = bendingObject.members.bendType.value; this.bendMethod = bendingObject.members.bendMethod.value; this.bendTechnique = bendingObject.members.bendTechnique.value; } else { this.bendAngle = 0; this.preAngle = 0; this.bendRadiusDB = 0; this.bendRadius = 0; this.color = 3; this.lineType = 0; this.bendDeduction = 0; this.upperTool = ''; this.lowerTool = ''; this.bendType = 0; this.bendMethod = 0; this.bendTechnique = 0; } } (0, _createClass3.default)(BendingParameters, [{ key: 'getParameterString', value: function getParameterString() { var str = this.angle + ', ' + (this.preAngle + ', ') + (this.bendRadiusDB + ', ') + (this.radius + ', ') + (this.color + ', ') + (this.lineType + ', ') + (this.bendDeduction + ', ') + ('"' + this.upperTool + '", ') + ('"' + this.lowerTool + '", ') + (this.bendType + ', ') + (this.bendMethod + ', ') + ('' + this.bendTechnique); return str; } }]); return BendingParameters; }(); /** * Class Properties is based on awv3's plugin architecture. It can be used to * define bend- and signature-lines in the 2D view. */ /** * @module Properties plugin for awv3 */ var Properties = function (_Plugin) { (0, _inherits3.default)(Properties, _Plugin); function Properties(session) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$name = _ref.name, name = _ref$name === undefined ? 'Properties' : _ref$name, _ref$icon = _ref.icon, icon = _ref$icon === undefined ? 'align center' : _ref$icon; (0, _classCallCheck3.default)(this, Properties); var _this = (0, _possibleConstructorReturn3.default)(this, (Properties.__proto__ || (0, _getPrototypeOf2.default)(Properties)).call(this, session, { type: 'Properties', name: name, icon: icon })); _this.bendLineColor = new THREE.Color(0x00FF00); _this.sigatureLineColor = new THREE.Color(0xFF0000); _this.contourLineColor = new THREE.Color(0x000000); // constant settings by Blexon _this.foldUpAngle = 180; _this.foldUpPreAngle = 30; _this.foldDownAngle = -180; _this.foldDownPreAngle = -30; _this.foldRadius = 0.05; // Thomas: (Spaltbreite des Falz = 0.1 (fix) => RadiusStart = Spaltbreite / 2) _this.foldType = 1; _this.foldMethod = 2; _this.foldTechnique = 1; // selection _this.selection = new _elements.Selection(_this, { name: 'Lines', limit: 1, types: ['LineSegments'], active: true }); // bending _this.isBendLine = new _elements.Checkbox(_this, { name: 'Bendline', value: false, Tooltip: 'define as bend line', visible: true }); _this.foldUp = new _elements.Checkbox(_this, { name: 'Fold up', value: false, Tooltip: 'fold downwards', visible: false }); _this.foldDown = new _elements.Checkbox(_this, { name: 'Fold down', value: false, Tooltip: 'fold upwards', visible: false }); _this.bend = new _elements.Checkbox(_this, { name: 'Bend', value: true, Tooltip: 'bend', visible: false }); _this.kFactor = new _elements.Input(_this, { name: 'k-Factor', Tooltip: 'The k-Factor is...', visible: true }); _this.radius = new _elements.Input(_this, { name: 'Inner radius', Tooltip: 'The inner radius is...', visible: true }); _this.angle = new _elements.Input(_this, { name: 'Angle', visible: false, optional: false }); _this.bendDeduction = new _elements.Input(_this, { name: 'Bend deduction', visible: false, optional: false }); _this.selectionGroup = new _elements.Group(_this, { name: 'Selection', children: [_this.selection] }); _this.bending = new _elements.Group(_this, { name: 'Bending', format: _elements.Group.Format.Table, children: [_this.kFactor, _this.radius, _this.isBendLine, _this.foldUp, _this.foldDown, _this.bend, _this.angle, _this.bendDeduction] }); _this.bendProperties = [_this.foldUp, _this.foldDown, _this.bend, _this.angle, _this.bendDeduction]; _this.foldLock = false; // laser signature _this.isLaserSignature = new _elements.Checkbox(_this, { name: 'Lasersignature', value: false, Tooltip: 'Define as signature line', visible: true }); _this.laserGroup = new _elements.Group(_this, { name: 'Laser', format: _elements.Group.Format.Table, children: [_this.isLaserSignature] }); // buttons _this.saveButton = new _elements.Button(_this, { name: 'Save', color: 'green' }); _this.acceptButton = new _elements.Button(_this, { name: 'Accept', color: 'blue' }); _this.deleteButton = new _elements.Button(_this, { name: 'Delete', color: 'red' }); // order of elements _this.addElement(_this.selectionGroup); _this.addElement(_this.deleteButton); _this.addElement(_this.bending); _this.addElement(_this.acceptButton); _this.addElement(_this.laserGroup); _this.addElement(_this.saveButton); return _this; } /** * Called when the plugin is enabled. */ (0, _createClass3.default)(Properties, [{ key: 'onEnabled', value: function onEnabled() { var _this2 = this; this.resetElements(); // selection changed this.selection.observe(function (state) { return state.children; }, function (value) { var selectedElements = _this2.session.selector.getSelectedElements(); if (selectedElements.length > 0) { var lineId = _this2.getOwnerId(selectedElements[0]); if (lineId) { // get information from line-object var parentId = _this2.session.tree[lineId].parent; if (_this2.session.tree[parentId].class === 'CC_Bending') { var bending = _this2.session.tree[parentId]; if (bending) { _this2.radius.value = bending.members.bendRadius.value; _this2.isBendLine.value = true; if (bending.members.bendType.value === 1 && bending.members.bendMethod.value === 2 && bending.members.bendTechnique.value === 1) { if (bending.members.preAngle.value > 0) { // 30 degrees _this2.foldUp.value = true; _this2.radius.value = bending.members.bendRadius.value; } else { _this2.foldDown.value = true; // -30 degrees _this2.radius.value = bending.members.bendRadius.value; } } else { _this2.bend.value = true; } _this2.angle.value = bending.members.bendAngle.value; _this2.bendDeduction.value = bending.members.bendDeduction.value; } else { _this2.resetProperties(); } // console.log('bending', bending) } else if (_this2.session.tree[parentId].class === 'CC_SignatureContainer') { _this2.isLaserSignature.value = true; } else { _this2.resetProperties(); } } } else { _this2.resetProperties(); } }); // bending this.isBendLine.observe(function (state) { return state.value; }, function (value) { _this2.bendProperties.forEach(function (element) { return element.visible = value; }); if (value) { var bending = new BendingParameters(); _this2.kFactor.value = 0.0; _this2.radius.value = bending.bendRadius; _this2.angle.value = bending.bendAngle; _this2.bendDeduction.value = bending.bendDeduction; } }); this.foldUp.observe(function (state) { return state.value; }, function (value) { if (!_this2.foldLock && value) { _this2.foldLock = true; _this2.radius.value = _this2.foldRadius; _this2.foldDown.value = false; _this2.bend.value = false; _this2.foldLock = false; } }); this.foldDown.observe(function (state) { return state.value; }, function (value) { if (!_this2.foldLock && value) { _this2.foldLock = true; _this2.radius.value = _this2.foldRadius; _this2.foldUp.value = false; _this2.bend.value = false; _this2.foldLock = false; } }); this.bend.observe(function (state) { return state.value; }, function (value) { if (!_this2.foldLock && value) { _this2.foldLock = true; _this2.bendDeduction.visible = true; _this2.angle.visible = true; _this2.foldDown.value = false; _this2.foldUp.value = false; _this2.foldLock = false; } if (!value) { _this2.bendDeduction.visible = false; _this2.angle.visible = false; } }); this.kFactor.observe(function (state) { return state.value; }, function (value) { console.log('kFactor changed', value); }); this.radius.observe(function (state) { return state.value; }, function (value) { console.log('radius changed', value); }); this.angle.observe(function (state) { return state.value; }, function (value) { console.log('angle changed', value); }); this.bendDeduction.observe(function (state) { return state.value; }, function (value) { console.log('bendDeduction changed', value); }); // laser this.isLaserSignature.observe(function (state) { return state.value; }, function (value) { if (value) { _this2.isBendLine.value = false; } }); // buttons this.acceptButton.observe(function (state) { return state.lastEvent; }, function (event) { if (event.type === 'click') { var params = ''; console.log('accept values'); // get bending var selectedElements = _this2.session.selector.getSelectedElements(); if (selectedElements.length === 0) { return; } var lineId = _this2.getOwnerId(selectedElements[0]); if (lineId === undefined) { return; } // TODO validate // let sketchId = this.sketchLineMap.get(lineId) var sketchId = _this2.getSketchId(lineId); if (_this2.isBendLine.value) { // get information from line-object var bending = void 0; var parentId = _this2.session.tree[lineId].parent; if (_this2.session.tree[parentId].class === 'CC_Bending') { bending = new BendingParameters(_this2.session.tree[parentId]); } else { bending = new BendingParameters(); } if (_this2.bend.value) { bending.angle = _this2.angle.value; bending.radius = _this2.radius.value; bending.bendDeduction = _this2.bendDeduction.value; } else if (_this2.foldUp.value) { bending.angle = _this2.foldUpAngle; bending.preAngle = _this2.foldUpPreAngle; bending.radius = _this2.foldRadius; bending.bendDeduction = _this2.bendDeduction.value; bending.bendType = _this2.foldType; bending.bendMethod = _this2.foldMethod; bending.bendTechnique = _this2.foldTechnique; } else if (_this2.foldDown.value) { bending.angle = _this2.foldDownAngle; bending.preAngle = _this2.foldDownPreAngle; bending.radius = _this2.foldRadius; bending.bendDeduction = _this2.bendDeduction.value; bending.bendType = _this2.foldType; bending.bendMethod = _this2.foldMethod; bending.bendTechnique = _this2.foldTechnique; } params = bending.getParameterString(); console.log('_C.SheetDesigner.ChangeLinesToBendLines(' + sketchId + ', [' + lineId + '], [' + params + ']);'); _this2.session.execute('_C.SheetDesigner.ChangeLinesToBendLines(' + sketchId + ', [' + lineId + '], [' + params + ']);'); } else if (_this2.isLaserSignature.value) { console.log('_C.SheetDesigner.ChangeLinesToSignatureLines(' + sketchId + ', [' + lineId + ']);'); _this2.session.execute('_C.SheetDesigner.ChangeLinesToSignatureLines(' + sketchId + ', [' + lineId + ']);'); } else { console.log('_C.SheetDesigner.ChangeLinesToContourLines(' + sketchId + ', [' + lineId + ']);'); _this2.session.execute('_C.SheetDesigner.ChangeLinesToContourLines(' + sketchId + ', [' + lineId + ']);'); } } }); this.saveButton.observe(function (state) { return state.lastEvent; }, function (event) { if (event.type === 'click') { console.log('save values'); } }); this.deleteButton.observe(function (state) { return state.lastEvent; }, function (event) { if (event.type === 'click') { var ownerIds = _this2.getOwnerIds(_this2.session.selector.getSelectedElements()); _this2.session.execute('_C.SheetDesigner.DeleteLines([' + ownerIds + ']);'); _this2.session.selector.removeAll(); console.log('_C.SheetDesigner.DeleteLines([' + ownerIds + ']);'); } }); // Plugins can observe the whole session including the tree // The second arg to observe fires on init // this.session.observe(state => state.tree.features, features => { // this.dropdown.children = features.map(item => this.session.tree[item].name) // }, true); // Store original handlers, leave marker hadlers as they are this.hover = this.session.selector.options.hover; this.unhover = this.session.selector.options.unhover; this.select = this.session.selector.options.select; this.unselect = this.session.selector.options.unselect; // Override hover event handlers this.session.selector.options.hover = function (data, selected) { if (selected || data.material.meta.type === 'bendline') return; _this2.session.selector.materialStore.store(data.material); data.material.animate({ color: new THREE.Color(0x28d79f), opacity: 1, linewidth: 2 }).start(0); }; // Override unhover event this.session.selector.options.unhover = function (data, selected) { if (selected || data.material.meta.type === 'bendline') return; _this2.session.selector.materialStore.restore(data.material, 1000); }; // Override unselect function this.session.selector.options.unselect = function (material) { if (material.meta.type === 'bendline') { material.color.copy(_this2.bendLineColor); } else { _this2.session.selector.materialStore.restore(material, 1000); } }; // Increase line precision this.linePrecision = this.session.pool.view.interaction.raycaster.linePrecision; this.session.pool.view.interaction.raycaster.linePrecision = 3; } /* * Get the ids of the owner of the selected elements. * @param { array } selectedElements - array of materials with meta-info * @return { array } - owners of the selected elements */ }, { key: 'getOwnerIds', value: function getOwnerIds(selectedElements) { var ownerIds = []; selectedElements.forEach(function (element) { element.meta && element.meta.owner && ownerIds.push(element.meta.owner); }); return ownerIds; } }, { key: 'getOwnerId', value: function getOwnerId(selectedElement) { var id = void 0; if (selectedElement.meta && selectedElement.meta.owner) { id = selectedElement.meta.owner; } return id; } }, { key: 'getOwners', value: function getOwners(selectedElements) { var _this3 = this; var owners = []; selectedElements.forEach(function (element) { var owner = _this3.getOwner(element); owner && owner.push(owner); }); return owners; } }, { key: 'getOwner', value: function getOwner(element) { var owner = void 0; if (element.meta && element.meta.owner) { owner = this.session.tree[element.meta.owner]; } return owner; } /** * Climbs up the object tree to find the sketch this line belongs to. * Returns undefined, if no sketch was found. */ }, { key: 'getSketchId', value: function getSketchId(lineId) { var sketchId = void 0; var parentId = this.session.tree[lineId].parent; while (parentId !== undefined) { if (this.session.tree[parentId].class === 'CC_Sketch') { sketchId = parentId; break; } parentId = this.session.tree[parentId].parent; } return sketchId; } }, { key: 'resetProperties', value: function resetProperties() { this.kFactor.reset(); this.radius.reset(); this.isBendLine.reset(); this.foldUp.reset(); this.foldDown.reset(); this.bend.reset(); this.angle.reset(); this.bendDeduction.reset(); this.isLaserSignature.reset(); } /** * Called when the plugin is being disabled. Clean up * plugin-specific things in here. */ }, { key: 'onDisabled', value: function onDisabled() { // Cleanup this.session.pool.view.interaction.raycaster.linePrecision = this.linePrecision; this.session.selector.options.hover = this.hover; this.session.selector.options.unhover = this.unhover; this.session.selector.options.select = this.select; this.session.selector.options.unselect = this.unselect; } }]); return Properties; }(_plugin2.default); exports.default = Properties;