diff --git a/client/ui/robotRepresentation.js b/client/ui/robotRepresentation.js index 2664eb18f8523a8e2d91b1b4a234462f82986be9..891fe7e6c07ca203a9ef75562869fc5581729c96 100644 --- a/client/ui/robotRepresentation.js +++ b/client/ui/robotRepresentation.js @@ -46,8 +46,10 @@ near: camera.near, far: camera.far }) - var mesh = new THREE.Mesh(meshline.geometry, material) - scene.add(mesh) + var meshlineMesh = new THREE.Mesh(meshline.geometry, material) + scene.add(meshlineMesh) + + var var controls = new THREE.OrbitControls(camera, container) diff --git a/client/ui/robotRepresentationTubes.js b/client/ui/robotRepresentationTubes.js new file mode 100644 index 0000000000000000000000000000000000000000..b4e01b995866910c341b5a1770b11bc08f441cb2 --- /dev/null +++ b/client/ui/robotRepresentationTubes.js @@ -0,0 +1,124 @@ +(function() { + // generic / example three.js canvas + /* KRITICAL STEP */ + // this is our object, that we will later append + // to the .lump position + var threeCanvas = {} + + var verbose = false + + // now three stuff + var container = document.createElement('div') + var scene = new THREE.Scene() + scene.background = new THREE.Color(0xd6d6d6) + var camera = new THREE.PerspectiveCamera(75, 1, 0.01, 1000) + camera.up.set(0, 0, 1) + var renderer = new THREE.WebGLRenderer() + renderer.setSize(696, 796) + container.appendChild(renderer.domElement) + + // axes + var axesHelper = new THREE.AxesHelper(0.1) + scene.add(axesHelper) + + // grid + /* + var gridHelper = new THREE.GridHelper(10, 100) + gridHelper.translateOnAxis(new THREE.Vector3(0, 0, 1), -0.01) + gridHelper.rotateX(-Math.PI / 2) + scene.add(gridHelper) + */ + + // one line + var tsLineOne = new THREE.LineCurve3(new THREE.Vector3(0, 0, 0), new THREE.Vector3(0.5, 0, 0.5)) + var tsSecOne = new THREE.TubeGeometry(tsLineOne, 3, 0.03, 12, true) + var material = new THREE.MeshBasicMaterial({ color: 0x797e87 }) + var meshOne = new THREE.Mesh(tsSecOne, material) + + var tsLineTwo = new THREE.LineCurve3(new THREE.Vector3(0.5, 0, 0.5), new THREE.Vector3(1, 0, 1)) + var tsSecTwo = new THREE.TubeGeometry(tsLineTwo, 3, 0.03, 12, true) + var meshTwo = new THREE.Mesh(tsSecTwo, material) + + scene.add(meshOne) + scene.add(meshTwo) + + var controls = new THREE.OrbitControls(camera, container) + + camera.position.set(0.5, -1, 0.5) + controls.update() + + console.log(tsSecOne.parameters) + + var animate = function() { + requestAnimationFrame(animate) + controls.update() + renderer.render(scene, camera) + } + // kickstart + animate() + + // set class, etc, put canvas in class, etc + // and then + /* KRITICAL STEP */ + // we have to give our 'lump' object a .domElem, this + // will be referenced upstream to append to the right module + // append it to the dom so that it can be appended on init + threeCanvas.domElem = container + + /* KRITICAL STEP */ + // whatever is posted to .lump will receive messages through + // .onMessage, so if we don't write one, we'll cause errors + // upstream, and besides, wouldn't be able to get anything from + // the server + threeCanvas.onMessage = function(msg) { + //console.log('got message in client side ui object', msg) + if (msg.calls == 'updateXY1') { + if (verbose) console.log('updateXY1', msg.argument) + } else if (msg.calls == 'updateXY2') { + if (verbose) console.log('updateXY2', msg.argument) + tsLineOne.v2.set(msg.argument[0], msg.argument[1], msg.argument[2]) + tsLineOne.verticesNeedUpdate = true + tsLineTwo.v1.set(msg.argument[0], msg.argument[1], msg.argument[2]) + tsLineTwo.verticesNeedUpdate = true + scene.remove(meshOne) + scene.remove(meshTwo) + tsSecOne = new THREE.TubeGeometry(tsLineOne, 12, 0.03, 12, true) + tsSecTwo = new THREE.TubeGeometry(tsLineTwo, 12, 0.03, 12, true) + meshOne = new THREE.Mesh(tsSecOne, material) + meshTwo = new THREE.Mesh(tsSecTwo, material) + scene.add(meshOne) + scene.add(meshTwo) + } else if (msg.calls == 'updateXY3') { + if (verbose) console.log('updateXY3', msg.argument) + tsLineTwo.v2.set(msg.argument[0], msg.argument[1], msg.argument[2]) + tsLineTwo.verticesNeedUpdate = true + scene.remove(meshTwo) + tsSecTwo = new THREE.TubeGeometry(tsLineTwo, 12, 0.03, 12, true) + meshTwo = new THREE.Mesh(tsSecTwo, material) + scene.add(meshTwo) + } else { + console.log('default msg because none from sys at threejs clientside') + console.log(msg) + } + } + + /* KRITICAL STEP */ + // expect this to only be used once + // it's basically our init function + // and gets called once the module is loaded + window.registerNewModule = function(id, key) { + threeCanvas.parentId = id + threeCanvas.key = key + // affectionately named lump of code, insert ourselves here + program.modules[id].ui[key].lump = threeCanvas + // and call-back to do onload things + var data = { + id: threeCanvas.parentId, + key: threeCanvas.key, + msg: { + key: 'onload' + } + } + socketSend('put ui change', data) + } +})() \ No newline at end of file diff --git a/modules/ui/robotCanvas.js b/modules/ui/robotCanvas.js index 28b0d7c47d86c766013d738b906094eeece12bd8..7a00775262b52ba321b3d7744ce4ff877376b632 100644 --- a/modules/ui/robotCanvas.js +++ b/modules/ui/robotCanvas.js @@ -36,7 +36,7 @@ function RobotCanvas() { rbtCanvas.ui = UI() var ui = rbtCanvas.ui - ui.addElement('canvas', 'ui/robotRepresentation.js') + ui.addElement('canvas', 'ui/robotRepresentationTubes.js') // add bonus lib path ui.canvas.libPath = 'ui/libs/three.js' ui.canvas.subscribe('onload', function(msg){ diff --git a/robot.js b/robot.js index 77c9b52372f352fcd8678a316e2cf675a155f541..237da62097dc69fcf93df5b33b01788d01ecd4c5 100644 --- a/robot.js +++ b/robot.js @@ -68,6 +68,8 @@ delay.outputs.out.attach(gate.inputs.thru) gate.outputs.out.attach(button.inputs.thru) var transform = Programs.loadModuleFromSource(program, './modules/robot/forwardTransform.js') +transform.state.lA = 0.37 +transform.state.lB = 0.25 Programs.setUI(transform, 1225, 650) var log1 = Programs.loadModuleFromSource(program, './modules/util/log.js')