Skip to content

Commit 2eea59f

Browse files
committed
Make Euler intrinsic type
It is basically similar to vectors/matrices (list with 3 numbers and a string), and this makes it easier to work with it.
1 parent f3c38a5 commit 2eea59f

File tree

4 files changed

+38
-12
lines changed

4 files changed

+38
-12
lines changed

js/scripts/prop-types.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,23 @@ _.extend(Matrix4.prototype, BaseType.prototype, {
426426
});
427427

428428

429+
function Euler() {
430+
this.defaultValue = [0, 0, 0, 'XYZ'];
431+
}
432+
433+
_.extend(Euler.prototype, BaseType.prototype, {
434+
getTraitlet: function() {
435+
return 'Euler(default=' + JSON.stringify(this.defaultValue) + ').tag(sync=True)';
436+
},
437+
getPropertyConverterFn: function() {
438+
return 'convertEuler';
439+
},
440+
getPropertyAssignmentFn: function() {
441+
return 'assignEuler';
442+
},
443+
});
444+
445+
429446
module.exports = {
430447
ThreeType: ThreeType,
431448
ForwardDeclaredThreeType: ForwardDeclaredThreeType,
@@ -452,4 +469,5 @@ module.exports = {
452469
FaceArray: FaceArray,
453470
Matrix3: Matrix3,
454471
Matrix4: Matrix4,
472+
Euler: Euler,
455473
};

js/scripts/three-class-config.js

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ module.exports = {
298298
children: new Types.ThreeTypeArray('this'),
299299
up: new Types.Vector3(0, 1, 0),
300300
position: new Types.Vector3(),
301-
rotation: new Types.ThreeType('Euler'),
301+
rotation: new Types.Euler(),
302302
quaternion: new Types.Vector4(0, 0, 0, 1),
303303
scale: new Types.Vector3(1, 1, 1),
304304
modelViewMatrix: new Types.Matrix4(),
@@ -809,16 +809,6 @@ module.exports = {
809809
},
810810
constructorArgs: ['radius', 'theta', 'y'],
811811
},
812-
Euler: {
813-
relativePath: './math/Euler',
814-
properties: {
815-
x: new Types.Float(0),
816-
y: new Types.Float(0),
817-
z: new Types.Float(0),
818-
order: new Types.String('XYZ'),
819-
},
820-
constructorArgs: [ 'x', 'y', 'z', 'order' ],
821-
},
822812
Frustum: {
823813
relativePath: './math/Frustum',
824814
properties: {

js/src/_base/Three.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,19 @@ var ThreeModel = widgets.WidgetModel.extend({
463463
obj[key].copy(value);
464464
},
465465

466+
// Euler
467+
convertEulerModelToThree: function(v, propName) {
468+
return new THREE.Euler().fromArray(v);
469+
},
470+
471+
convertEulerThreeToModel: function(v, propName) {
472+
return v.toArray();
473+
},
474+
475+
assignEuler: function(obj, key, value) {
476+
obj[key].copy(value);
477+
},
478+
466479
// Vector Array
467480
convertVectorArrayModelToThree: function(varr, propName) {
468481
return varr.map(function(v) {

pythreejs/traits.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,9 @@ def BufferAttribute(trait_type=CFloat, **kwargs):
4646
Unicode(), # 3. uuid
4747
CInt(), # 6. version
4848
default_value=(None, -1, False, "", -1)
49-
)
49+
)
50+
51+
def Euler(default=None, **kwargs):
52+
if default is None:
53+
default = [0, 0, 0, 'XYZ']
54+
return Tuple(CFloat(), CFloat(), CFloat(), Unicode(), default_value=default, **kwargs)

0 commit comments

Comments
 (0)