56 lines
1.9 KiB
JavaScript
56 lines
1.9 KiB
JavaScript
|
define((require, exports, module) => {
|
||
|
const storeManager = require('State')
|
||
|
const { scene } = require('THREEScene')
|
||
|
const robotStore = require('Robot')
|
||
|
|
||
|
const THREESimulationRobot = new THREE.Group()
|
||
|
scene.add(THREESimulationRobot)
|
||
|
|
||
|
const robotTHREEStore = storeManager.createStore('RobotTHREE', {})
|
||
|
|
||
|
let VisualRobot
|
||
|
robotStore.listen([state => state.geometry, state => state.jointLimits], (geometry, jointLimits) => {
|
||
|
buildRobot({ geometry, jointLimits }) // after GUI loaded in the stored values
|
||
|
})
|
||
|
|
||
|
const cacheState = {
|
||
|
jointOutOfBound: [false, false, false, false, false, false],
|
||
|
}
|
||
|
robotStore.listen((state) => {
|
||
|
const angles = Object.values(state.angles)
|
||
|
VisualRobot.setAngles(angles)
|
||
|
|
||
|
for (let i = 0; i < 6; i++) { // do some caching
|
||
|
if (!cacheState.jointOutOfBound[i] && state.jointOutOfBound[i]) { // highlight only on change
|
||
|
VisualRobot.highlightJoint(i, 0xff0000)
|
||
|
} else if (cacheState.jointOutOfBound[i] && !state.jointOutOfBound[i]) {
|
||
|
VisualRobot.highlightJoint(i)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
cacheState.jointOutOfBound = state.jointOutOfBound
|
||
|
})
|
||
|
|
||
|
function buildRobot(state) {
|
||
|
if (state.geometry.V3.y !== 0 || state.geometry.V3.z !== 0 || state.geometry.V4.y !== 0 || state.geometry.V4.z !== 0) {
|
||
|
alert('geometry where V3 y,z not 0 and V4 x,z not 0 are not supported, yet')
|
||
|
state.geometry.V3.y =
|
||
|
state.geometry.V3.z =
|
||
|
state.geometry.V4.y =
|
||
|
state.geometry.V4.x = 0
|
||
|
}
|
||
|
|
||
|
while (THREESimulationRobot.children.length) {
|
||
|
THREESimulationRobot.remove(THREESimulationRobot.children[0])
|
||
|
}
|
||
|
// object to nested arrays
|
||
|
const geometry = Object.values(state.geometry).map((val, i, array) => [val.x, val.y, val.z])
|
||
|
const jointLimits = Object.values(state.jointLimits)
|
||
|
|
||
|
VisualRobot = new THREERobot(geometry, jointLimits, THREESimulationRobot)
|
||
|
}
|
||
|
|
||
|
|
||
|
module.exports = robotStore
|
||
|
})
|