~holger-seelig/cobweb.js/trunk

« back to all changes in this revision

Viewing changes to cobweb.js/cobweb/Fields/SFRotation.js

  • Committer: Holger Seelig
  • Date: 2017-08-22 04:53:24 UTC
  • Revision ID: holger.seelig@yahoo.de-20170822045324-4of4xxgt79669gbt
Switched to npm.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- Mode: JavaScript; coding: utf-8; tab-width: 3; indent-tabs-mode: tab; c-basic-offset: 3 -*-
2
 
 *******************************************************************************
3
 
 *
4
 
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
 
 *
6
 
 * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011.
7
 
 *
8
 
 * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
9
 
 *
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
13
 
 * create3000.
14
 
 *
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.
18
 
 *
19
 
 * NON-MILITARY USE ONLY
20
 
 *
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.
25
 
 *
26
 
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
27
 
 *
28
 
 * Copyright 2015, 2016 Holger Seelig <holger.seelig@yahoo.de>.
29
 
 *
30
 
 * This file is part of the Cobweb Project.
31
 
 *
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.
35
 
 *
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).
40
 
 *
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.
44
 
 *
45
 
 * For Silvio, Joy and Adi.
46
 
 *
47
 
 ******************************************************************************/
48
 
 
49
 
 
50
 
define ("cobweb/Fields/SFRotation", [
51
 
        "jquery",
52
 
        "cobweb/Fields/SFVec3",
53
 
        "cobweb/Basic/X3DField",
54
 
        "cobweb/Bits/X3DConstants",
55
 
        "standard/Math/Numbers/Rotation4",
56
 
],
57
 
function ($, SFVec3, X3DField, X3DConstants, Rotation4)
58
 
{
59
 
"use strict";
60
 
 
61
 
        var SFVec3f = SFVec3 .SFVec3f;
62
 
 
63
 
        function SFRotation (x, y, z, angle)
64
 
        {
65
 
           if (this instanceof SFRotation)
66
 
           {
67
 
                        switch (arguments .length)
68
 
                        {
69
 
                                case 1:
70
 
                                        return X3DField .call (this, arguments [0]);
71
 
                                case 2:
72
 
                                        if (arguments [1] instanceof SFVec3f)
73
 
                                                return X3DField .call (this, new Rotation4 (arguments [0] .getValue (), arguments [1] .getValue ()));
74
 
 
75
 
                                        return X3DField .call (this, new Rotation4 (arguments [0] .getValue (), +arguments [1]));
76
 
                                case 4:
77
 
                                        return X3DField .call (this, new Rotation4 (+x, +y, +z, +angle));
78
 
                                default:
79
 
                                        return X3DField .call (this, new Rotation4 ());
80
 
                        }
81
 
                }
82
 
 
83
 
                return SFRotation .apply (Object .create (SFRotation .prototype), arguments);
84
 
        }
85
 
 
86
 
        SFRotation .prototype = $.extend (Object .create (X3DField .prototype),
87
 
        {
88
 
                constructor: SFRotation,
89
 
                copy: function ()
90
 
                {
91
 
                        return new SFRotation (this .getValue () .copy ());
92
 
                },
93
 
                equals: function (rotation)
94
 
                {
95
 
                        return this .getValue () .equals (rotation .getValue ());
96
 
                },
97
 
                isDefaultValue: function ()
98
 
                {
99
 
                        return this .getValue () .equals (Rotation4 .Identity);
100
 
                },
101
 
                getTypeName: function ()
102
 
                {
103
 
                        return "SFRotation";
104
 
                },
105
 
                getType: function ()
106
 
                {
107
 
                        return X3DConstants .SFRotation;
108
 
                },
109
 
                set: function (value)
110
 
                {
111
 
                        this .getValue () .assign (value);
112
 
                },
113
 
                setAxis: function (vector)
114
 
                {
115
 
                        this .getValue () .setAxis (vector .getValue ());
116
 
                        this .addEvent ();
117
 
                },
118
 
                getAxis: function ()
119
 
                {
120
 
                        return new SFVec3f (this .getValue () .getAxis () .copy ());
121
 
                },
122
 
                inverse: function ()
123
 
                {
124
 
                        return new SFRotation (Rotation4 .inverse (this .getValue ()));
125
 
                },
126
 
                multiply: function (rotation)
127
 
                {
128
 
                        return new SFRotation (Rotation4 .multRight (this .getValue (), rotation .getValue ()));
129
 
                },
130
 
                multVec: function (vector)
131
 
                {
132
 
                        return new SFVec3f (this .getValue () .multVecRot (vector .getValue () .copy ()));
133
 
                },
134
 
                slerp: function (rotation, t)
135
 
                {
136
 
                        return new SFRotation (Rotation4 .slerp (this .getValue (), rotation .getValue (), t));
137
 
                },
138
 
                toString: function ()
139
 
                {
140
 
                        return this .getValue () .toString ();
141
 
                },
142
 
                toXMLStream: function (stream)
143
 
                {
144
 
                        stream .string += this .getValue () .toString ();
145
 
                },
146
 
        });
147
 
 
148
 
        var x = {
149
 
                get: function ()
150
 
                {
151
 
                        return this .getValue () .x;
152
 
                },
153
 
                set: function (value)
154
 
                {
155
 
                        this .getValue () .x = value;
156
 
                        this .addEvent ();
157
 
                },
158
 
                enumerable: true,
159
 
                configurable: false
160
 
        };
161
 
 
162
 
        var y = {
163
 
                get: function ()
164
 
                {
165
 
                        return this .getValue () .y;
166
 
                },
167
 
                set: function (value)
168
 
                {
169
 
                        this .getValue () .y = value;
170
 
                        this .addEvent ();
171
 
                },
172
 
                enumerable: true,
173
 
                configurable: false
174
 
        };
175
 
 
176
 
        var z = {
177
 
                get: function ()
178
 
                {
179
 
                        return this .getValue () .z;
180
 
                },
181
 
                set: function (value)
182
 
                {
183
 
                        this .getValue () .z = value;
184
 
                        this .addEvent ();
185
 
                },
186
 
                enumerable: true,
187
 
                configurable: false
188
 
        };
189
 
 
190
 
        var angle = {
191
 
                get: function ()
192
 
                {
193
 
                        return this .getValue () .angle;
194
 
                },
195
 
                set: function (value)
196
 
                {
197
 
                        this .getValue () .angle = value;
198
 
                        this .addEvent ();
199
 
                },
200
 
                enumerable: true,
201
 
                configurable: false
202
 
        };
203
 
 
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);
208
 
 
209
 
        x     .enumerable = false;
210
 
        y     .enumerable = false;
211
 
        z     .enumerable = false;
212
 
        angle .enumerable = false;
213
 
 
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);
218
 
 
219
 
        return SFRotation;
220
 
});