Skip to content

Commit 4903388

Browse files
committed
made three an external module so that other widgets use the same threejs instance
1 parent 3797724 commit 4903388

27 files changed

+138
-83
lines changed

js/scripts/templates/js_index.mustache

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,6 @@ __webpack_public_path__ = document.querySelector('body').getAttribute('data-base
1515
// Export widget models and views, and the npm package version number.
1616
module.exports['version'] = require('../package.json').version;
1717

18-
// Load three.js into window namespace
19-
var THREE = require('three');
20-
window.THREE = THREE;
21-
22-
// Load three.js extensions
23-
require('./examples/controls/OrbitControls');
24-
2518
{{/if}}
2619
// Load all three.js python wrappers
2720
var loadedModules = [

js/scripts/templates/js_param_obj.mustache

Whitespace-only changes.

js/scripts/templates/js_wrapper.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//
55

66
var _ = require('underscore');
7+
var THREE = require('three');
78
var widgets = require('@jupyter-widgets/base');
89
var datawidgets = require('jupyter-datawidgets');
910

js/src/_base/Preview.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ var widgets = require("@jupyter-widgets/base");
33
var Promise = require('bluebird');
44
var $ = require('jquery');
55

6+
var THREE = require('three');
67

78
var Renderable = require('./Renderable');
89
var RenderableView = Renderable.RenderableView;
910
var RenderableModel = Renderable.RenderableModel;
11+
var OrbitControls = require("../examples/controls/OrbitControls.js").OrbitControls;
1012

1113

1214
var BLACK = new THREE.Color('black');
@@ -31,7 +33,7 @@ var PreviewView = RenderableView.extend({
3133
RenderableView.prototype.setupEventListeners.call(this);
3234
var child = this.model.get('child');
3335
this.listenTo(child, 'change', this.onChildChange.bind(this));
34-
if (child.obj instanceof THREE.Object3D) {
36+
if (child.obj.isObject3D) {
3537
// Since we use clone for objects, we need to rebuild for
3638
// any nested change instead of just rerendering.
3739
this.listenTo(child, 'childchange', this.onChildChange.bind(this));
@@ -50,21 +52,21 @@ var PreviewView = RenderableView.extend({
5052
// cameras need to be added to scene
5153
this.scene.add(this.camera);
5254

53-
if (obj instanceof THREE.Object3D) {
55+
if (obj.isObject3D) {
5456

5557
this.log('render Object3D');
5658
// Use a clone to not change `parent` attribute
5759
this.scene.add(obj.clone());
5860

59-
} else if (obj instanceof THREE.Geometry || obj instanceof THREE.BufferGeometry) {
61+
} else if (obj.isGeometry || obj.isBufferGeometry) {
6062

6163
var material;
6264
if (this.model.get('_flat')) {
6365
material = new THREE.MeshPhongMaterial({
6466
color: '#ffffff',
6567
shading: THREE.FlatShading,
6668
});
67-
} else if (this.model.get('_wire') || obj instanceof THREE.WireframeGeometry) {
69+
} else if (this.model.get('_wire') || obj.type === 'WireframeGeometry') {
6870
material = new THREE.MeshBasicMaterial({
6971
color: '#888888',
7072
wireframe: true,
@@ -75,16 +77,16 @@ var PreviewView = RenderableView.extend({
7577
color: '#ffffff',
7678
});
7779
}
78-
if (obj instanceof THREE.BufferGeometry && 'color' in obj.attributes) {
80+
if (obj.isBufferGeometry && 'color' in obj.attributes) {
7981
material.vertexColors = THREE.VertexColors;
8082
}
8183

8284
var mesh = new THREE.Mesh(obj, material);
8385
this.scene.add(mesh);
8486

85-
} else if (obj instanceof THREE.Material) {
87+
} else if (obj.isMaterial) {
8688

87-
if (obj instanceof THREE.SpriteMaterial) {
89+
if (obj.type === 'SpriteMaterial') {
8890
var sprite = new THREE.Sprite(obj);
8991
var maxScale = sprite.position.distanceTo(this.camera.position);
9092
var aspect = obj.map.image.width / obj.map.image.height;
@@ -100,7 +102,7 @@ var PreviewView = RenderableView.extend({
100102
this.scene.add(mesh);
101103
}
102104

103-
} else if (obj instanceof THREE.Texture) {
105+
} else if (obj.isTexture) {
104106

105107
var geometry = new THREE.SphereGeometry(15, 16, 12);
106108
var mat = new THREE.MeshStandardMaterial({ map: obj });
@@ -122,7 +124,7 @@ var PreviewView = RenderableView.extend({
122124
setupControls: function() {
123125
// Allow user to inspect object with mouse/scrollwheel
124126
this.log('setting up controls');
125-
var control = new THREE.OrbitControls(this.camera, this.renderer.domElement);
127+
var control = new OrbitControls(this.camera, this.renderer.domElement);
126128
control.target.set(0, 0, 0);
127129
control.update();
128130
this.controls = [control];

js/src/_base/Renderable.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ var widgets = require("@jupyter-widgets/base");
33
var Promise = require('bluebird');
44
var $ = require('jquery');
55

6+
var THREE = require('three');
7+
68
var pkgName = require('../../package.json').name;
79
var RendererPool = require('./RendererPool');
810

js/src/_base/RendererPool.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
var _ = require('underscore');
22

3+
var THREE = require('three');
4+
35
// This should be available for most devices:
46
var MAX_RENDERERS = 8;
57

js/src/_base/Three.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ var Promise = require('bluebird');
44
var $ = require('jquery');
55
var ndarray = require('ndarray');
66

7+
var THREE = require('three');
8+
79
var Enums = require('./enums');
810

911
var version = require('../../package.json').version;

js/src/controls/FlyControls.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var _ = require('underscore');
2-
require("../examples/controls/MomentumCameraControls.js");
2+
var THREE = require('three');
3+
var FlyControls = require("../examples/controls/MomentumCameraControls.js").FlyControls;
34
var FlyControlsAutogen = require('./FlyControls.autogen');
45

56

@@ -14,7 +15,7 @@ var FlyControlsModel = FlyControlsAutogen.FlyControlsModel.extend({
1415
that.controlled_view = _.find(views, function(o) {
1516
return o.options.renderer_id === that.options.renderer_id
1617
}, that);
17-
obj = new THREE.FlyControls(that.controlled_view.obj, that.options.dom);
18+
obj = new FlyControls(that.controlled_view.obj, that.options.dom);
1819
that.register_object_parameters();
1920
that.options.register_update(that._update, that);
2021
obj.addEventListener('change', that.options.render_frame);

js/src/controls/OrbitControls.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
var _ = require('underscore');
2-
require("../examples/controls/OrbitControls.js");
2+
var OrbitControls = require("../examples/controls/OrbitControls.js").OrbitControls;
33
var OrbitControlsAutogen = require('./OrbitControls.autogen');
44

55

66
var OrbitControlsModel = OrbitControlsAutogen.OrbitControlsModel.extend({
77

88
constructThreeObject: function() {
99
var controlling = this.get('controlling');
10-
obj = new THREE.OrbitControls(controlling.obj);
10+
obj = new OrbitControls(controlling.obj);
1111
obj.dispose(); // Disconnect events, we need to (dis-)connect on freeze/thaw
1212
obj.enableKeys = false; // turn off keyboard navigation
1313

js/src/controls/Picker.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
var _ = require('underscore');
2+
var THREE = require('three');
23
var PickerAutogen = require('./Picker.autogen');
34

45

0 commit comments

Comments
 (0)