awv3
Version:
⚡ AWV3 embedded CAD
591 lines (532 loc) • 24.2 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
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.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 _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.upperTool = new _elements.Input(_this, {
name: 'Upper Tool',
readonly: true
});
_this.lowerTool = new _elements.Input(_this, {
name: 'Lower Tool',
readonly: true
});
_this.bending = new _elements.Group(_this, {
name: 'Bending',
format: _elements.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 _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.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);
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.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.getSelectedElements();
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 = 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();
_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.getSelectedElements());
_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
*/
}, {
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.
* @return undefined, if no sketch was found.
*/
}, {
key: 'getSketchId',
value: function getSketchId(lineId) {
var sketchId = void 0;
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;
}
}, {
key: 'resetProperties',
value: 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.
*/
}, {
key: 'onDisabled',
value: function onDisabled() {}
}]);
return Properties;
}(_plugin2.default);
exports.default = Properties;