1
/* -*- Mode: JavaScript; coding: utf-8; tab-width: 3; indent-tabs-mode: tab; c-basic-offset: 3 -*-
2
*******************************************************************************
4
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6
* Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011.
8
* All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
10
* The copyright notice above does not evidence any actual of intended
11
* publication of such source code, and is an unpublished work by create3000.
12
* This material contains CONFIDENTIAL INFORMATION that is the property of
15
* No permission is granted to copy, distribute, or create derivative works from
16
* the contents of this software, in whole or in part, without the prior written
17
* permission of create3000.
19
* NON-MILITARY USE ONLY
21
* All create3000 software are effectively free software with a non-military use
22
* restriction. It is free. Well commented source is provided. You may reuse the
23
* source in any way you please with the exception anything that uses it must be
24
* marked to indicate is contains 'non-military use only' components.
26
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
28
* Copyright 2015, 2016 Holger Seelig <holger.seelig@yahoo.de>.
30
* This file is part of the Cobweb Project.
32
* Cobweb is free software: you can redistribute it and/or modify it under the
33
* terms of the GNU General Public License version 3 only, as published by the
34
* Free Software Foundation.
36
* Cobweb is distributed in the hope that it will be useful, but WITHOUT ANY
37
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
38
* A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
39
* details (a copy is included in the LICENSE file that accompanied this code).
41
* You should have received a copy of the GNU General Public License version 3
42
* along with Cobweb. If not, see <http://www.gnu.org/licenses/gpl.html> for a
43
* copy of the GPLv3 License.
45
* For Silvio, Joy and Adi.
47
******************************************************************************/
50
define ("cobweb/Fields/SFRotation", [
52
"cobweb/Fields/SFVec3",
53
"cobweb/Basic/X3DField",
54
"cobweb/Bits/X3DConstants",
55
"standard/Math/Numbers/Rotation4",
57
function ($, SFVec3, X3DField, X3DConstants, Rotation4)
61
var SFVec3f = SFVec3 .SFVec3f;
63
function SFRotation (x, y, z, angle)
65
if (this instanceof SFRotation)
67
switch (arguments .length)
70
return X3DField .call (this, arguments [0]);
72
if (arguments [1] instanceof SFVec3f)
73
return X3DField .call (this, new Rotation4 (arguments [0] .getValue (), arguments [1] .getValue ()));
75
return X3DField .call (this, new Rotation4 (arguments [0] .getValue (), +arguments [1]));
77
return X3DField .call (this, new Rotation4 (+x, +y, +z, +angle));
79
return X3DField .call (this, new Rotation4 ());
83
return SFRotation .apply (Object .create (SFRotation .prototype), arguments);
86
SFRotation .prototype = $.extend (Object .create (X3DField .prototype),
88
constructor: SFRotation,
91
return new SFRotation (this .getValue () .copy ());
93
equals: function (rotation)
95
return this .getValue () .equals (rotation .getValue ());
97
isDefaultValue: function ()
99
return this .getValue () .equals (Rotation4 .Identity);
101
getTypeName: function ()
107
return X3DConstants .SFRotation;
109
set: function (value)
111
this .getValue () .assign (value);
113
setAxis: function (vector)
115
this .getValue () .setAxis (vector .getValue ());
120
return new SFVec3f (this .getValue () .getAxis () .copy ());
124
return new SFRotation (Rotation4 .inverse (this .getValue ()));
126
multiply: function (rotation)
128
return new SFRotation (Rotation4 .multRight (this .getValue (), rotation .getValue ()));
130
multVec: function (vector)
132
return new SFVec3f (this .getValue () .multVecRot (vector .getValue () .copy ()));
134
slerp: function (rotation, t)
136
return new SFRotation (Rotation4 .slerp (this .getValue (), rotation .getValue (), t));
138
toString: function ()
140
return this .getValue () .toString ();
142
toXMLStream: function (stream)
144
stream .string += this .getValue () .toString ();
151
return this .getValue () .x;
153
set: function (value)
155
this .getValue () .x = value;
165
return this .getValue () .y;
167
set: function (value)
169
this .getValue () .y = value;
179
return this .getValue () .z;
181
set: function (value)
183
this .getValue () .z = value;
193
return this .getValue () .angle;
195
set: function (value)
197
this .getValue () .angle = value;
204
Object .defineProperty (SFRotation .prototype, "x", x);
205
Object .defineProperty (SFRotation .prototype, "y", y);
206
Object .defineProperty (SFRotation .prototype, "z", z);
207
Object .defineProperty (SFRotation .prototype, "angle", angle);
209
x .enumerable = false;
210
y .enumerable = false;
211
z .enumerable = false;
212
angle .enumerable = false;
214
Object .defineProperty (SFRotation .prototype, "0", x);
215
Object .defineProperty (SFRotation .prototype, "1", y);
216
Object .defineProperty (SFRotation .prototype, "2", z);
217
Object .defineProperty (SFRotation .prototype, "3", angle);