awv3
Version:
⚡ AWV3 embedded CAD
81 lines (73 loc) • 4.05 kB
JavaScript
import Plugin from '../../session/plugin';
import { Button, Input, Label, Checkbox, Group } from '../../session/elements';
const resources = ['isometric'].reduce((prev, item) => ({ ...prev, [item]: require('!!url-loader!awv3-icons/32x32/' + item + '.png') }), {});
function setResults(label, results) {
label.value = results.reduce(
(text, result) => {
text = result.errors.reduce((t, e) => t + e.errorMessage + '\n', text);
return result.results.reduce((t, r) => t + r.result + '\n', text);
},
''
);
}
export default class Interpreter extends Plugin {
constructor(session, args) {
super(session, { type: 'Interpreter', icon: 'isometric', resources, ...args });
this.chunks = true;
this.sequence = new Checkbox(this, { name: 'Sequence', value: this.chunks });
this.addElement(new Group(this, { format: Group.Format.Table, children: [this.sequence] }));
this.input = new Input(this, {
name: 'Command',
value: `_O.ToolBuilder.LoadComponent("iBridge","Drawings/component/boring/A40_NXLA35_AQ2106_CSYS_SIM_NoBolt.stp");
_O.ToolBuilder.AddAssemblyNode(["a1"]);
_O.ToolBuilder.AddComponentNode(["iBridge","iBridge_1"], ["a1"]);
_O.ToolBuilder.AddAssemblyNode(["a2_0"],["a1"]);
_O.ToolBuilder.LoadComponent("iAdapter1","Drawings/component/boring/A35_RXLS24_A060_CSYS_SIM.stp");
_O.ToolBuilder.AddComponentNode(["iAdapter1","iAdapter1_1","MCS"], ["a2_0"], ["iBridge_1","CSW1"]);
_O.ToolBuilder.AddAssemblyNode(["a2_1"],["a1"]);
_O.ToolBuilder.AddComponentNode(["iAdapter1","iAdapter1_2","MCS"], ["a2_1"], ["iBridge_1","CSW2"]);
_O.ToolBuilder.AddAssemblyNode(["a3_0"],["a2_0"]);
_O.ToolBuilder.LoadComponent("iAdapter2","Drawings/component/boring/S24_R820XLS12_012_CSYS_SIM.stp");
_O.ToolBuilder.AddComponentNode(["iAdapter2","iAdapter2_1","MCS"], ["a3_0"], ["iAdapter1_1","CSW"]);
_O.ToolBuilder.AddAssemblyNode(["a3_1"],["a2_1"]);
_O.ToolBuilder.AddComponentNode(["iAdapter2","iAdapter2_2","MCS"], ["a3_1"], ["iAdapter1_2","CSW"]);
_O.ToolBuilder.LoadComponent("iCassette","Drawings/component/boring/Cartridge_S12_CSYS_assy_1_SIM.stp");
_O.ToolBuilder.SetContoursToCutContoursStyle(1);
_O.ToolBuilder.AddComponentNode(["iCassette","iCassette_1","MCS"], ["a3_0"], ["iAdapter2_1","CSW"]);
_O.ToolBuilder.AddComponentNode(["iCassette","iCassette_2","MCS"], ["a3_1"], ["iAdapter2_2","CSW"]);`,
format: Input.Format.MultiLine,
style: { fontSize: '0.8em', fontFamily: 'monospace' }
});
this.addElement(this.input);
this.label = new Label(this, { name: 'Result', value: '' });
this.addElement(this.label);
this.okButton = new Button(this, { name: 'Execute', color: 'blue' });
this.clearButton = new Button(this, { name: 'Clear', color: 'red' });
this.addElement(new Group(this, { format: Group.Format.Buttons, children: [this.clearButton, this.okButton] }));
}
onEnabled() {
this.resetElements();
this.clearButton.observe(state => state.lastEvent, event => {
this.session.activeConnectionClass.execute('_O.ToolBuilder.Clear();');
});
this.okButton.observe(state => state.lastEvent, async event => {
console.time('INTERPRETER');
let results;
if (this.chunks) {
results = await Promise.all(
this.input.value
.split(';')
.filter(e => e)
.map(command => command.length && this.session.activeConnectionClass.execute(command + ';'))
);
} else {
results = [await this.session.activeConnectionClass.execute(this.input.value)];
}
this.connection.updateView();
this.view.controls.focus().zoom();
console.timeEnd('INTERPRETER');
setResults(this.label, results);
});
this.sequence.observe(state => state.value, value => this.chunks = value);
}
}