Skip to content

Commit 3134592

Browse files
authored
Merge pull request #134 from vidartf/fixes
Various fixes and adjustments
2 parents af06664 + c1b002e commit 3134592

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

js/scripts/prop-types.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,19 +126,29 @@ _.extend(InitializedThreeType.prototype, ThreeType.prototype, {
126126
},
127127
});
128128

129-
function ThreeTypeArray(typeName) {
129+
function ThreeTypeArray(typeName, options={}) {
130130
this.typeName = typeName;
131131
this.defaultValue = [];
132132
this.serializer = WIDGET_SERIALIZER;
133+
this.nullable = options.nullable !== false;
134+
this.allow_single = options.allow_single === true;
133135
}
134136
_.extend(ThreeTypeArray.prototype, BaseType.prototype, {
135137
getTraitlet: function() {
138+
var baseType = 'Tuple()';
139+
if (this.allow_single) {
140+
if (this.typeName === 'this') {
141+
baseType = 'Union([This, ' + baseType + '])';
142+
} else {
143+
baseType = 'Union([Instance(' + this.typeName + '), ' + baseType + '])';
144+
}
145+
}
136146
if (this.typeName === 'this') {
137147
// return 'List(trait=This(), default_value=[]).tag(sync=True, **widget_serialization)';
138-
return 'Tuple().tag(sync=True, **widget_serialization)';
148+
return baseType + '.tag(sync=True, **widget_serialization)';
139149
}
140150
// return 'List(trait=Instance(' + this.typeName + ')).tag(sync=True, **widget_serialization)';
141-
return 'Tuple().tag(sync=True, **widget_serialization)';
151+
return baseType + '.tag(sync=True, **widget_serialization)';
142152
},
143153
getPropArrayName: function() {
144154
return 'three_nested_properties';

js/scripts/three-class-config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1106,7 +1106,7 @@ module.exports = {
11061106
superClass: 'Object3D',
11071107
constructorArgs: [ 'geometry', 'material' ],
11081108
properties: {
1109-
material: new Types.ThreeType('Material', {nullable: false}),
1109+
material: new Types.ThreeTypeArray('Material', {nullable: false, allow_single: true}),
11101110
geometry: new Types.ThreeType(['Geometry', 'BufferGeometry'], {nullable: false}),
11111111
drawMode: new Types.Enum('DrawModes', 'TrianglesDrawMode'),
11121112
morphTargetInfluences: new Types.Array(),

js/src/_base/Three.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ function listenNested(model, propNames, callback) {
2525
propNames.forEach(function(propName) {
2626
// listen to current values in array
2727
var curr = model.get(propName) || [];
28+
// ignore ThreeModels in order to support properties
29+
// that are either an instance, or a sequence of instances:
30+
if (curr instanceof ThreeModel) {
31+
return;
32+
}
2833
utils.childModelsNested(curr).forEach(function(childModel) {
2934
model.listenTo(childModel, 'change', callback);
3035
model.listenTo(childModel, 'childchange', callback);
@@ -650,6 +655,13 @@ var ThreeModel = widgets.WidgetModel.extend({
650655
// If instance equality, do nothing.
651656
return;
652657
}
658+
if (obj[key] === undefined || obj[key] === null) {
659+
if (value === null || value === undefined) {
660+
// Leave it as it is
661+
return;
662+
}
663+
obj[key] = {};
664+
}
653665
// Clear the dict
654666
Object.keys(obj[key]).forEach(k => { delete obj[key][k]; });
655667
// Put in the new values
@@ -658,12 +670,18 @@ var ThreeModel = widgets.WidgetModel.extend({
658670

659671
// ThreeTypeArray
660672
convertThreeTypeArrayModelToThree: function(modelArr, propName) {
673+
if (!Array.isArray(modelArr)) {
674+
return this.convertThreeTypeModelToThree(modelArr, propName);
675+
}
661676
return modelArr.map(function(model) {
662677
return this.convertThreeTypeModelToThree(model, propName);
663678
}, this);
664679
},
665680

666681
convertThreeTypeArrayThreeToModel: function(threeTypeArr, propName) {
682+
if (!Array.isArray(threeTypeArr)) {
683+
return this.convertThreeTypeThreeToModel(threeTypeArr, propName);
684+
}
667685
return threeTypeArr.map(function(threeType) {
668686
return this.convertThreeTypeThreeToModel(threeType, propName);
669687
}, this);

js/src/animation/AnimationAction.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ var AnimationActionModel = AnimationActionAutogen.extend({
7474
// The onAfterRender will then trigger a new frame
7575
var scene = utils.getModelScene(this.get('localRoot'));
7676
if (scene) {
77-
scene.trigger('rerender');
77+
scene.trigger('rerender', this, {});
7878
}
7979
},
8080

0 commit comments

Comments
 (0)