Skip to content

Commit 7c92ae7

Browse files
Merge pull request #66 from vpython/Fix_mouse_and_triangle_bugs
Fix mouse and triangle/quad bugs
2 parents 7fc896b + 17c0cf3 commit 7c92ae7

File tree

4 files changed

+47
-61
lines changed

4 files changed

+47
-61
lines changed

labextension/vpython/src/glowcommlab.js

Lines changed: 29 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,31 @@
1+
//define(["nbextensions/vpython_libraries/plotly.min",
2+
// "nbextensions/vpython_libraries/glow.min",
3+
// "nbextensions/vpython_libraries/jquery-ui.custom.min"], function(Plotly) {
4+
15
import 'script-loader!./vpython_libraries/jquery.min.js';
26
import 'script-loader!./vpython_libraries/jquery-ui.custom.min.js';
37
import 'script-loader!./vpython_libraries/glow.min.js';
48
import 'script-loader!./vpython_libraries/plotly.min.js';
59
import '../style/jquery-ui.custom.css'
610
import '../style/ide.css'
711

8-
// Ensure downstream JupyterLab webpack places the fonts and images in predictable locations
9-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/earth_texture.jpg'
10-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/favicon.ico'
11-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/flower_texture.jpg'
12-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/granite_texture.jpg'
13-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/gravel_bumpmap.jpg'
14-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/gravel_texture.jpg'
15-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/metal_texture.jpg'
16-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/NimbusRomNo9L-Med.otf'
17-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/Roboto-Medium.ttf'
18-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/rock_bumpmap.jpg'
19-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/rock_texture.jpg'
20-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/rough_texture.jpg'
21-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/rug_texture.jpg'
22-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/stones_bumpmap.jpg'
23-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/stones_texture.jpg'
24-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/stucco_bumpmap.jpg'
25-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/stucco_texture.jpg'
26-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/wood_old_bumpmap.jpg'
27-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/wood_old_texture.jpg'
28-
import '!!file-loader?name=/vpython_data/[name].[ext]!../vpython_data/wood_texture.jpg'
29-
3012
export var comm
3113
var ws = null
3214
var isopen = false
3315

3416
console.log('START OF GLOWCOMM')
3517

36-
export function createWebsocket(msg, serviceUrl) {
18+
export function createWebsocket(msg) {
3719
if (msg.content.data.wsport !== undefined) {
3820
// create websocket instance
39-
var port = msg.content.data.wsport
40-
var uri = msg.content.data.wsuri
41-
var url;
42-
43-
if (document.location.hostname.includes("localhost")){
44-
url = "ws://localhost:" + port + uri;
45-
}
46-
else {
47-
url = serviceUrl + port + uri;
48-
}
49-
ws = new WebSocket(url);
50-
ws.binaryType = "arraybuffer";
21+
var port = msg.content.data.wsport
22+
var uri = msg.content.data.wsuri
23+
ws = new WebSocket("ws://localhost:" + port + uri);
24+
ws.binaryType = "arraybuffer";
5125

5226
// Handle incoming websocket message callback
5327
ws.onmessage = function(evt) {
54-
console.log("WebSocket Message Received: " + evt.data)
28+
console.log("WebSocket Message Received: " + evt.data)
5529
};
5630

5731
// Close Websocket callback
@@ -69,22 +43,25 @@ export function createWebsocket(msg, serviceUrl) {
6943
}
7044
}
7145

72-
function wscheckfontsloaded(msg,serviceUrl) {
46+
var wsmsg
47+
48+
function wscheckfontsloaded() {
7349
"use strict";
7450
if (window.__font_sans === undefined || window.__font_serif === undefined) {
75-
setTimeout(wscheckfontsloaded,10,msg,serviceUrl)
51+
setTimeout(wscheckfontsloaded,10)
7652
} else {
77-
createWebsocket(msg,serviceUrl)
53+
createWebsocket(wsmsg)
7854
}
7955
}
8056

81-
export function setupWebsocket(msg,serviceUrl) {
57+
export function setupWebsocket(msg) {
8258
"use strict";
83-
wscheckfontsloaded(msg,serviceUrl)
59+
wsmsg = msg
60+
wscheckfontsloaded()
8461
}
8562

86-
var datadir = './static/lab/vpython_data/'
87-
window.Jupyter_VPython = "./static/lab/vpython_data/" // prefix used by glow.min.js for textures
63+
var datadir = window.location.href + '/static/vpython_data/'
64+
window.Jupyter_VPython = "/lab/static/vpython_data/" // prefix used by glow.min.js for textures
8865

8966
function fontloading() {
9067
"use strict";
@@ -649,7 +626,7 @@ function handle_cmds(dcmds) {
649626
}
650627
cfg[attr] = ptlist
651628
} else if (attr === "axis" && obj == 'arrow') {
652-
cfg['axis_and_length'] = o2vec3(val)
629+
cfg['axis_and_length'] = o2vec3(val)
653630
} else if (vlst.indexOf(attr) !== -1) {
654631
cfg[attr] = o2vec3(val)
655632
} else if (triangle_quad.indexOf(attr) !== -1) {
@@ -705,6 +682,8 @@ function handle_cmds(dcmds) {
705682
}
706683
// creating the objects
707684
cfg.idx = idx // reinsert idx, having looped thru all other attributes
685+
// triangle and quad objects should not have a canvas attribute; canvas is provided in the vertex objectsE
686+
if ((obj == 'triangle' || obj == 'quad') && cfg.canvas !== undefined) delete cfg.canvas
708687
switch (obj) {
709688
case 'box': {glowObjs[idx] = box(cfg); break}
710689
case 'sphere': {glowObjs[idx] = sphere(cfg); break}
@@ -923,7 +902,7 @@ function handle_cmds(dcmds) {
923902
} // end of cmds (constructors and special data)
924903
}
925904

926-
function handle_methods(dmeth) {
905+
async function handle_methods(dmeth) {
927906
"use strict";
928907
//console.log('METHODS')
929908
for (var idmeth=0; idmeth<dmeth.length; idmeth++) { // methods; cmd is ['idx':idx, 'attr':method, 'val':val]
@@ -965,7 +944,7 @@ function handle_methods(dmeth) {
965944
} else if (method === "follow") {
966945
obj.camera.follow(glowObjs[val])
967946
} else if (method === "capture") {
968-
obj.capture(val)
947+
await obj.capture(val)
969948
} else if (method === 'waitfor') {
970949
waitfor_canvas = idx
971950
waitfor_options = val
@@ -974,10 +953,11 @@ function handle_methods(dmeth) {
974953
waitfor_canvas = idx
975954
waitfor_options = 'click'
976955
if (val.length > 0) {
977-
obj.pause(val, process_pause)
956+
await obj.pause(val)
978957
} else {
979-
obj.pause(process_pause)
958+
await obj.pause()
980959
}
960+
process_pause()
981961
} else if (method === 'pick') {
982962
var p = glowObjs[val].mouse.pick() // wait for pick render; val is canvas
983963
var seg = null
@@ -1039,4 +1019,4 @@ function handle_attrs(dattrs) {
10391019
}
10401020
console.log("END OF GLOWCOMM")
10411021

1042-
//});
1022+
//});

vpython/vpython_libraries/glow.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vpython/vpython_libraries/glowcomm.html

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@
573573
}
574574
cfg[attr] = ptlist
575575
} else if (attr === "axis" && obj == 'arrow') {
576-
cfg['axis_and_length'] = o2vec3(val)
576+
cfg['axis_and_length'] = o2vec3(val)
577577
} else if (vlst.indexOf(attr) !== -1) {
578578
cfg[attr] = o2vec3(val)
579579
} else if (triangle_quad.indexOf(attr) !== -1) {
@@ -629,6 +629,8 @@
629629
}
630630
// creating the objects
631631
cfg.idx = idx // reinsert idx, having looped thru all other attributes
632+
// triangle and quad objects should not have a canvas attribute; canvas is provided in the vertex objectsE
633+
if ((obj == 'triangle' || obj == 'quad') && cfg.canvas !== undefined) delete cfg.canvas
632634
switch (obj) {
633635
case 'box': {glowObjs[idx] = box(cfg); break}
634636
case 'sphere': {glowObjs[idx] = sphere(cfg); break}
@@ -833,7 +835,7 @@
833835
} // end of cmds (constructors and special data)
834836
}
835837

836-
function handle_methods(dmeth) {
838+
async function handle_methods(dmeth) {
837839
"use strict";
838840
//console.log('METHODS')
839841
for (var idmeth=0; idmeth<dmeth.length; idmeth++) { // methods; cmd is ['idx':idx, 'attr':method, 'val':val]
@@ -875,7 +877,7 @@
875877
} else if (method === "follow") {
876878
obj.camera.follow(glowObjs[val])
877879
} else if (method === "capture") {
878-
obj.capture(val)
880+
await obj.capture(val)
879881
} else if (method === 'waitfor') {
880882
waitfor_canvas = idx
881883
waitfor_options = val
@@ -884,10 +886,11 @@
884886
waitfor_canvas = idx
885887
waitfor_options = 'click'
886888
if (val.length > 0) {
887-
obj.pause(val, process_pause)
889+
await obj.pause(val)
888890
} else {
889-
obj.pause(process_pause)
891+
await obj.pause()
890892
}
893+
process_pause()
891894
} else if (method === 'pick') {
892895
var p = glowObjs[val].mouse.pick() // wait for pick render; val is canvas
893896
var seg = null

vpython/vpython_libraries/glowcomm.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,7 @@ function handle_cmds(dcmds) {
623623
}
624624
cfg[attr] = ptlist
625625
} else if (attr === "axis" && obj == 'arrow') {
626-
cfg['axis_and_length'] = o2vec3(val)
626+
cfg['axis_and_length'] = o2vec3(val)
627627
} else if (vlst.indexOf(attr) !== -1) {
628628
cfg[attr] = o2vec3(val)
629629
} else if (triangle_quad.indexOf(attr) !== -1) {
@@ -679,6 +679,8 @@ function handle_cmds(dcmds) {
679679
}
680680
// creating the objects
681681
cfg.idx = idx // reinsert idx, having looped thru all other attributes
682+
// triangle and quad objects should not have a canvas attribute; canvas is provided in the vertex objectsE
683+
if ((obj == 'triangle' || obj == 'quad') && cfg.canvas !== undefined) delete cfg.canvas
682684
switch (obj) {
683685
case 'box': {glowObjs[idx] = box(cfg); break}
684686
case 'sphere': {glowObjs[idx] = sphere(cfg); break}
@@ -896,7 +898,7 @@ function handle_cmds(dcmds) {
896898
} // end of cmds (constructors and special data)
897899
}
898900

899-
function handle_methods(dmeth) {
901+
async function handle_methods(dmeth) {
900902
"use strict";
901903
//console.log('METHODS')
902904
for (var idmeth=0; idmeth<dmeth.length; idmeth++) { // methods; cmd is ['idx':idx, 'attr':method, 'val':val]
@@ -938,7 +940,7 @@ function handle_methods(dmeth) {
938940
} else if (method === "follow") {
939941
obj.camera.follow(glowObjs[val])
940942
} else if (method === "capture") {
941-
obj.capture(val)
943+
await obj.capture(val)
942944
} else if (method === 'waitfor') {
943945
waitfor_canvas = idx
944946
waitfor_options = val
@@ -947,10 +949,11 @@ function handle_methods(dmeth) {
947949
waitfor_canvas = idx
948950
waitfor_options = 'click'
949951
if (val.length > 0) {
950-
obj.pause(val, process_pause)
952+
await obj.pause(val)
951953
} else {
952-
obj.pause(process_pause)
954+
await obj.pause()
953955
}
956+
process_pause()
954957
} else if (method === 'pick') {
955958
var p = glowObjs[val].mouse.pick() // wait for pick render; val is canvas
956959
var seg = null

0 commit comments

Comments
 (0)