UNPKG

awv3

Version:
583 lines (496 loc) 18.7 kB
import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose"; import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized"; /** * @module Properties plugin for awv3 */ import * as THREE from 'three'; import Plugin from '../../session/plugin'; import { Group, Button, Input, Selection, Checkbox } from '../../session/elements'; /** * 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 = /*#__PURE__*/ function () { function BendingParameters(bendingObject) { if (bendingObject === void 0) { bendingObject = undefined; } 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; } } var _proto = BendingParameters.prototype; _proto.getParameterString = 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. */ var Properties = /*#__PURE__*/ function (_Plugin) { _inheritsLoose(Properties, _Plugin); function Properties(session, _temp) { var _this; var _ref = _temp === void 0 ? {} : _temp, _ref$name = _ref.name, name = _ref$name === void 0 ? 'Properties' : _ref$name, _ref$icon = _ref.icon, icon = _ref$icon === void 0 ? 'align center' : _ref$icon; _this = _Plugin.call(this, session, { type: 'Properties', name: name, icon: icon }) || this; _this.bendLineColor = new THREE.Color(0x00ff00); _this.signatureLineColor = 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 Selection(_assertThisInitialized(_this), { name: 'Lines', limit: 1, types: ['LineSegments'], active: true }); // bending _this.isBendLine = new Checkbox(_assertThisInitialized(_this), { name: 'Bendline', value: false, Tooltip: 'define as bend line', visible: true }); _this.foldUp = new Checkbox(_assertThisInitialized(_this), { name: 'Fold up', value: false, Tooltip: 'fold downwards', visible: false }); _this.foldDown = new Checkbox(_assertThisInitialized(_this), { name: 'Fold down', value: false, Tooltip: 'fold upwards', visible: false }); _this.bend = new Checkbox(_assertThisInitialized(_this), { name: 'Bend', value: true, Tooltip: 'bend', visible: false }); _this.kFactor = new Input(_assertThisInitialized(_this), { name: 'k-Factor', Tooltip: 'The k-Factor is...', visible: true }); _this.radius = new Input(_assertThisInitialized(_this), { name: 'Inner radius', Tooltip: 'The inner radius is...', visible: true }); _this.angle = new Input(_assertThisInitialized(_this), { name: 'Angle', visible: false, optional: false }); _this.bendDeduction = new Input(_assertThisInitialized(_this), { name: 'Bend deduction', visible: false, optional: false }); _this.selectionGroup = new Group(_assertThisInitialized(_this), { name: 'Selection', children: [_this.selection] }); _this.upperTool = new Input(_assertThisInitialized(_this), { name: 'Upper Tool', readonly: true }); _this.lowerTool = new Input(_assertThisInitialized(_this), { name: 'Lower Tool', readonly: true }); _this.bending = new Group(_assertThisInitialized(_this), { name: 'Bending', format: Group.Format.Table, children: [_this.upperTool, _this.lowerTool, _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 Checkbox(_assertThisInitialized(_this), { name: 'Lasersignature', value: false, Tooltip: 'Define as signature line', visible: true }); _this.laserGroup = new Group(_assertThisInitialized(_this), { name: 'Laser', format: Group.Format.Table, children: [_this.isLaserSignature] }); // buttons _this.acceptButton = new Button(_assertThisInitialized(_this), { name: 'Accept', color: 'blue' }); _this.deleteButton = new Button(_assertThisInitialized(_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); return _this; } /** * Called when the plugin is enabled. */ var _proto2 = Properties.prototype; _proto2.onEnabled = function onEnabled() { var _this2 = this; this.resetElements(); // selection changed this.selection.observe(function (state) { return state.children; }, function (value) { var selectedElements = _this2.session.selector.selectedObjects; 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.isBendLine.value = true; _this2.upperTool.value = bending.members.upperTool.value; _this2.lowerTool.value = bending.members.lowerTool.value; _this2.radius.value = bending.members.bendRadius.value; 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.selectedObjects; if (selectedElements.length === 0) { return; } var lineId = _this2.getOwnerId(selectedElements[0]); var lineIds = _this2.getOwnerIds(selectedElements); if (lineId === undefined) { return; } // make all lines un-dashed selectedElements.forEach(function (element) { element.gapSize = 0; element.dashSize = 1; }); // TODO validate var sketchId = _this2.getSketchId(lineId); if (_this2.isBendLine.value) { // get information from line-object var bending; 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(); _this2.session.selector.unselectElements(selectedElements); console.log("_C.SheetDesigner.ChangeLinesToBendLines(" + sketchId + ", [" + lineIds + "], [" + params + "]);"); _this2.connection.execute("_C.SheetDesigner.ChangeLinesToBendLines(" + sketchId + ", [" + lineIds + "], [" + params + "]);"); selectedElements.forEach(function (element) { return element.animate({ color: _this2.bendLineColor.clone() }).start(500); }); // make bend lines with negative bending angle dashed if (bending.angle < 0) selectedElements.forEach(function (element) { element.gapSize = 2; element.dashSize = 2; }); } else if (_this2.isLaserSignature.value) { _this2.session.selector.unselectElements(selectedElements); console.log("_C.SheetDesigner.ChangeLinesToSignatureLines(" + sketchId + ", [" + lineIds + "]);"); _this2.connection.execute("_C.SheetDesigner.ChangeLinesToSignatureLines(" + sketchId + ", [" + lineIds + "]);"); selectedElements.forEach(function (element) { return element.animate({ color: _this2.signatureLineColor.clone() }).start(500); }); } else { _this2.session.selector.unselectElements(selectedElements); console.log("_C.SheetDesigner.ChangeLinesToContourLines(" + sketchId + ", [" + lineIds + "]);"); _this2.connection.execute("_C.SheetDesigner.ChangeLinesToContourLines(" + sketchId + ", [" + lineIds + "]);"); selectedElements.forEach(function (element) { return element.animate({ color: _this2.contourLineColor.clone() }).start(500); }); } } }); this.deleteButton.observe(function (state) { return state.lastEvent; }, function (event) { if (event.type === 'click') { var ownerIds = _this2.getOwnerIds(_this2.session.selector.selectedObjects); _this2.connection.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); }; /** * 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 */ _proto2.getOwnerIds = function getOwnerIds(selectedElements) { var ownerIds = []; selectedElements.forEach(function (element) { element.meta && element.meta.owner && ownerIds.push(element.meta.owner); }); return ownerIds; }; _proto2.getOwnerId = function getOwnerId(selectedElement) { var id; if (selectedElement.meta && selectedElement.meta.owner) { id = selectedElement.meta.owner; } return id; }; _proto2.getOwners = function getOwners(selectedElements) { var _this3 = this; var owners = []; selectedElements.forEach(function (element) { var owner = _this3.getOwner(element); owner && owner.push(owner); }); return owners; }; _proto2.getOwner = function getOwner(element) { var owner; 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. * @return undefined, if no sketch was found. */ _proto2.getSketchId = function getSketchId(lineId) { var sketchId; var parentId = this.session.tree[lineId] ? this.session.tree[lineId].parent : undefined; while (parentId !== undefined) { if (this.session.tree[parentId]) { if (this.session.tree[parentId].class === 'CC_Sketch') { sketchId = parentId; break; } else { parentId = this.session.tree[parentId].parent; } } else { parentId = undefined; } } return sketchId; }; _proto2.resetProperties = function resetProperties() { this.lowerTool.reset(); this.upperTool.reset(); 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. */ _proto2.onDisabled = function onDisabled() {}; return Properties; }(Plugin); export { Properties as default };