~holger-seelig/cobweb.js/trunk

« back to all changes in this revision

Viewing changes to cobweb.js/cobweb/Components/Geospatial/GeoTouchSensor.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 ([
51
 
        "jquery",
52
 
        "cobweb/Fields",
53
 
        "cobweb/Basic/X3DFieldDefinition",
54
 
        "cobweb/Basic/FieldDefinitionArray",
55
 
        "cobweb/Components/PointingDeviceSensor/X3DTouchSensorNode",
56
 
        "cobweb/Components/Geospatial/X3DGeospatialObject",
57
 
        "cobweb/Bits/X3DConstants",
58
 
        "standard/Math/Numbers/Vector3",
59
 
        "standard/Math/Numbers/Matrix4",
60
 
],
61
 
function ($,
62
 
          Fields,
63
 
          X3DFieldDefinition,
64
 
          FieldDefinitionArray,
65
 
          X3DTouchSensorNode, 
66
 
          X3DGeospatialObject, 
67
 
          X3DConstants,
68
 
          Vector3,
69
 
          Matrix4)
70
 
{
71
 
"use strict";
72
 
 
73
 
        var
74
 
                invModelViewMatrix = new Matrix4 (),
75
 
                geoCoords          = new Vector3 (0, 0, 0);
76
 
 
77
 
        function GeoTouchSensor (executionContext)
78
 
        {
79
 
                X3DTouchSensorNode  .call (this, executionContext);
80
 
                X3DGeospatialObject .call (this, executionContext);
81
 
 
82
 
                this .addType (X3DConstants .GeoTouchSensor);
83
 
        }
84
 
 
85
 
        GeoTouchSensor .prototype = $.extend (Object .create (X3DTouchSensorNode .prototype),
86
 
                X3DGeospatialObject .prototype,
87
 
        {
88
 
                constructor: GeoTouchSensor,
89
 
                fieldDefinitions: new FieldDefinitionArray ([
90
 
                        new X3DFieldDefinition (X3DConstants .inputOutput,    "metadata",            new Fields .SFNode ()),
91
 
                        new X3DFieldDefinition (X3DConstants .initializeOnly, "geoOrigin",           new Fields .SFNode ()),
92
 
                        new X3DFieldDefinition (X3DConstants .initializeOnly, "geoSystem",           new Fields .MFString ("GD", "WE")),
93
 
                        new X3DFieldDefinition (X3DConstants .inputOutput,    "enabled",             new Fields .SFBool (true)),
94
 
                        new X3DFieldDefinition (X3DConstants .inputOutput,    "description",         new Fields .SFString ()),
95
 
                        new X3DFieldDefinition (X3DConstants .outputOnly,     "hitTexCoord_changed", new Fields .SFVec2f ()),
96
 
                        new X3DFieldDefinition (X3DConstants .outputOnly,     "hitNormal_changed",   new Fields .SFVec3f ()),
97
 
                        new X3DFieldDefinition (X3DConstants .outputOnly,     "hitPoint_changed",    new Fields .SFVec3f ()),
98
 
                        new X3DFieldDefinition (X3DConstants .outputOnly,     "hitGeoCoord_changed", new Fields .SFVec3d ()),
99
 
                        new X3DFieldDefinition (X3DConstants .outputOnly,     "isOver",              new Fields .SFBool ()),
100
 
                        new X3DFieldDefinition (X3DConstants .outputOnly,     "isActive",            new Fields .SFBool ()),
101
 
                        new X3DFieldDefinition (X3DConstants .outputOnly,     "touchTime",           new Fields .SFTime ()),
102
 
                ]),
103
 
                getTypeName: function ()
104
 
                {
105
 
                        return "GeoTouchSensor";
106
 
                },
107
 
                getComponentName: function ()
108
 
                {
109
 
                        return "Geospatial";
110
 
                },
111
 
                getContainerField: function ()
112
 
                {
113
 
                        return "children";
114
 
                },
115
 
                initialize: function ()
116
 
                {
117
 
                        X3DTouchSensorNode  .prototype .initialize .call (this);
118
 
                        X3DGeospatialObject .prototype .initialize .call (this);
119
 
                },
120
 
                set_over__: function (over, hit, modelViewMatrix, projectionMatrix, viewport)
121
 
                {
122
 
                        try
123
 
                        {
124
 
                                X3DTouchSensorNode .prototype .set_over__ .call (this, over, hit, modelViewMatrix, projectionMatrix, viewport);
125
 
 
126
 
                                if (this .isOver_ .getValue ())
127
 
                                {
128
 
                                        var intersection = hit .intersection;
129
 
 
130
 
                                        invModelViewMatrix .assign (modelViewMatrix) .inverse ();
131
 
 
132
 
                                        this .hitTexCoord_changed_ = intersection .texCoord;
133
 
                                        this .hitNormal_changed_   = modelViewMatrix .multMatrixDir (intersection .normal .copy ()) .normalize ();
134
 
                                        this .hitPoint_changed_    = invModelViewMatrix .multVecMatrix (intersection .point .copy ());
135
 
                                        this .hitGeoCoord_changed_ = this .getGeoCoord (this .hitPoint_changed_ .getValue (), geoCoords);
136
 
                                }
137
 
                        }
138
 
                        catch (error)
139
 
                        {
140
 
                                console .log (error);
141
 
                        }
142
 
                },
143
 
        });
144
 
 
145
 
        return GeoTouchSensor;
146
 
});
147
 
 
148