Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 29 additions & 49 deletions labextension/vpython/src/glowcommlab.js
Original file line number Diff line number Diff line change
@@ -1,57 +1,31 @@
//define(["nbextensions/vpython_libraries/plotly.min",
// "nbextensions/vpython_libraries/glow.min",
// "nbextensions/vpython_libraries/jquery-ui.custom.min"], function(Plotly) {

import 'script-loader!./vpython_libraries/jquery.min.js';
import 'script-loader!./vpython_libraries/jquery-ui.custom.min.js';
import 'script-loader!./vpython_libraries/glow.min.js';
import 'script-loader!./vpython_libraries/plotly.min.js';
import '../style/jquery-ui.custom.css'
import '../style/ide.css'

// Ensure downstream JupyterLab webpack places the fonts and images in predictable locations
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/earth_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/favicon.ico'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/flower_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/granite_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/gravel_bumpmap.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/gravel_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/metal_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/NimbusRomNo9L-Med.otf'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/Roboto-Medium.ttf'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/rock_bumpmap.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/rock_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/rough_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/rug_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/stones_bumpmap.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/stones_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/stucco_bumpmap.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/stucco_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/wood_old_bumpmap.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/wood_old_texture.jpg'
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/wood_texture.jpg'

export var comm
var ws = null
var isopen = false

console.log('START OF GLOWCOMM')

export function createWebsocket(msg, serviceUrl) {
export function createWebsocket(msg) {
if (msg.content.data.wsport !== undefined) {
// create websocket instance
var port = msg.content.data.wsport
var uri = msg.content.data.wsuri
var url;

if (document.location.hostname.includes("localhost")){
url = "ws://localhost:" + port + uri;
}
else {
url = serviceUrl + port + uri;
}
ws = new WebSocket(url);
ws.binaryType = "arraybuffer";
var port = msg.content.data.wsport
var uri = msg.content.data.wsuri
ws = new WebSocket("ws://localhost:" + port + uri);
ws.binaryType = "arraybuffer";

// Handle incoming websocket message callback
ws.onmessage = function(evt) {
console.log("WebSocket Message Received: " + evt.data)
console.log("WebSocket Message Received: " + evt.data)
};

// Close Websocket callback
Expand All @@ -69,22 +43,25 @@ export function createWebsocket(msg, serviceUrl) {
}
}

function wscheckfontsloaded(msg,serviceUrl) {
var wsmsg

function wscheckfontsloaded() {
"use strict";
if (window.__font_sans === undefined || window.__font_serif === undefined) {
setTimeout(wscheckfontsloaded,10,msg,serviceUrl)
setTimeout(wscheckfontsloaded,10)
} else {
createWebsocket(msg,serviceUrl)
createWebsocket(wsmsg)
}
}

export function setupWebsocket(msg,serviceUrl) {
export function setupWebsocket(msg) {
"use strict";
wscheckfontsloaded(msg,serviceUrl)
wsmsg = msg
wscheckfontsloaded()
}

var datadir = './static/lab/vpython_data/'
window.Jupyter_VPython = "./static/lab/vpython_data/" // prefix used by glow.min.js for textures
var datadir = window.location.href + '/static/vpython_data/'
window.Jupyter_VPython = "/lab/static/vpython_data/" // prefix used by glow.min.js for textures

function fontloading() {
"use strict";
Expand Down Expand Up @@ -649,7 +626,7 @@ function handle_cmds(dcmds) {
}
cfg[attr] = ptlist
} else if (attr === "axis" && obj == 'arrow') {
cfg['axis_and_length'] = o2vec3(val)
cfg['axis_and_length'] = o2vec3(val)
} else if (vlst.indexOf(attr) !== -1) {
cfg[attr] = o2vec3(val)
} else if (triangle_quad.indexOf(attr) !== -1) {
Expand Down Expand Up @@ -705,6 +682,8 @@ function handle_cmds(dcmds) {
}
// creating the objects
cfg.idx = idx // reinsert idx, having looped thru all other attributes
// triangle and quad objects should not have a canvas attribute; canvas is provided in the vertex objectsE
if ((obj == 'triangle' || obj == 'quad') && cfg.canvas !== undefined) delete cfg.canvas
switch (obj) {
case 'box': {glowObjs[idx] = box(cfg); break}
case 'sphere': {glowObjs[idx] = sphere(cfg); break}
Expand Down Expand Up @@ -923,7 +902,7 @@ function handle_cmds(dcmds) {
} // end of cmds (constructors and special data)
}

function handle_methods(dmeth) {
async function handle_methods(dmeth) {
"use strict";
//console.log('METHODS')
for (var idmeth=0; idmeth<dmeth.length; idmeth++) { // methods; cmd is ['idx':idx, 'attr':method, 'val':val]
Expand Down Expand Up @@ -965,7 +944,7 @@ function handle_methods(dmeth) {
} else if (method === "follow") {
obj.camera.follow(glowObjs[val])
} else if (method === "capture") {
obj.capture(val)
await obj.capture(val)
} else if (method === 'waitfor') {
waitfor_canvas = idx
waitfor_options = val
Expand All @@ -974,10 +953,11 @@ function handle_methods(dmeth) {
waitfor_canvas = idx
waitfor_options = 'click'
if (val.length > 0) {
obj.pause(val, process_pause)
await obj.pause(val)
} else {
obj.pause(process_pause)
await obj.pause()
}
process_pause()
} else if (method === 'pick') {
var p = glowObjs[val].mouse.pick() // wait for pick render; val is canvas
var seg = null
Expand Down Expand Up @@ -1039,4 +1019,4 @@ function handle_attrs(dattrs) {
}
console.log("END OF GLOWCOMM")

//});
//});
4 changes: 2 additions & 2 deletions vpython/vpython_libraries/glow.min.js

Large diffs are not rendered by default.

13 changes: 8 additions & 5 deletions vpython/vpython_libraries/glowcomm.html
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,7 @@
}
cfg[attr] = ptlist
} else if (attr === "axis" && obj == 'arrow') {
cfg['axis_and_length'] = o2vec3(val)
cfg['axis_and_length'] = o2vec3(val)
} else if (vlst.indexOf(attr) !== -1) {
cfg[attr] = o2vec3(val)
} else if (triangle_quad.indexOf(attr) !== -1) {
Expand Down Expand Up @@ -629,6 +629,8 @@
}
// creating the objects
cfg.idx = idx // reinsert idx, having looped thru all other attributes
// triangle and quad objects should not have a canvas attribute; canvas is provided in the vertex objectsE
if ((obj == 'triangle' || obj == 'quad') && cfg.canvas !== undefined) delete cfg.canvas
switch (obj) {
case 'box': {glowObjs[idx] = box(cfg); break}
case 'sphere': {glowObjs[idx] = sphere(cfg); break}
Expand Down Expand Up @@ -833,7 +835,7 @@
} // end of cmds (constructors and special data)
}

function handle_methods(dmeth) {
async function handle_methods(dmeth) {
"use strict";
//console.log('METHODS')
for (var idmeth=0; idmeth<dmeth.length; idmeth++) { // methods; cmd is ['idx':idx, 'attr':method, 'val':val]
Expand Down Expand Up @@ -875,7 +877,7 @@
} else if (method === "follow") {
obj.camera.follow(glowObjs[val])
} else if (method === "capture") {
obj.capture(val)
await obj.capture(val)
} else if (method === 'waitfor') {
waitfor_canvas = idx
waitfor_options = val
Expand All @@ -884,10 +886,11 @@
waitfor_canvas = idx
waitfor_options = 'click'
if (val.length > 0) {
obj.pause(val, process_pause)
await obj.pause(val)
} else {
obj.pause(process_pause)
await obj.pause()
}
process_pause()
} else if (method === 'pick') {
var p = glowObjs[val].mouse.pick() // wait for pick render; val is canvas
var seg = null
Expand Down
13 changes: 8 additions & 5 deletions vpython/vpython_libraries/glowcomm.js
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,7 @@ function handle_cmds(dcmds) {
}
cfg[attr] = ptlist
} else if (attr === "axis" && obj == 'arrow') {
cfg['axis_and_length'] = o2vec3(val)
cfg['axis_and_length'] = o2vec3(val)
} else if (vlst.indexOf(attr) !== -1) {
cfg[attr] = o2vec3(val)
} else if (triangle_quad.indexOf(attr) !== -1) {
Expand Down Expand Up @@ -679,6 +679,8 @@ function handle_cmds(dcmds) {
}
// creating the objects
cfg.idx = idx // reinsert idx, having looped thru all other attributes
// triangle and quad objects should not have a canvas attribute; canvas is provided in the vertex objectsE
if ((obj == 'triangle' || obj == 'quad') && cfg.canvas !== undefined) delete cfg.canvas
switch (obj) {
case 'box': {glowObjs[idx] = box(cfg); break}
case 'sphere': {glowObjs[idx] = sphere(cfg); break}
Expand Down Expand Up @@ -896,7 +898,7 @@ function handle_cmds(dcmds) {
} // end of cmds (constructors and special data)
}

function handle_methods(dmeth) {
async function handle_methods(dmeth) {
"use strict";
//console.log('METHODS')
for (var idmeth=0; idmeth<dmeth.length; idmeth++) { // methods; cmd is ['idx':idx, 'attr':method, 'val':val]
Expand Down Expand Up @@ -938,7 +940,7 @@ function handle_methods(dmeth) {
} else if (method === "follow") {
obj.camera.follow(glowObjs[val])
} else if (method === "capture") {
obj.capture(val)
await obj.capture(val)
} else if (method === 'waitfor') {
waitfor_canvas = idx
waitfor_options = val
Expand All @@ -947,10 +949,11 @@ function handle_methods(dmeth) {
waitfor_canvas = idx
waitfor_options = 'click'
if (val.length > 0) {
obj.pause(val, process_pause)
await obj.pause(val)
} else {
obj.pause(process_pause)
await obj.pause()
}
process_pause()
} else if (method === 'pick') {
var p = glowObjs[val].mouse.pick() // wait for pick render; val is canvas
var seg = null
Expand Down