awv3
Version:
⚡ AWV3 embedded CAD
583 lines (496 loc) • 18.7 kB
JavaScript
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 };