diff options
Diffstat (limited to 'js/helper-classes/RDGE/runtime/RuntimeGeomObj.js')
-rw-r--r-- | js/helper-classes/RDGE/runtime/RuntimeGeomObj.js | 611 |
1 files changed, 611 insertions, 0 deletions
diff --git a/js/helper-classes/RDGE/runtime/RuntimeGeomObj.js b/js/helper-classes/RDGE/runtime/RuntimeGeomObj.js new file mode 100644 index 00000000..fd5bf3aa --- /dev/null +++ b/js/helper-classes/RDGE/runtime/RuntimeGeomObj.js | |||
@@ -0,0 +1,611 @@ | |||
1 | |||
2 | /* <copyright> | ||
3 | This file contains proprietary software owned by Motorola Mobility, Inc.<br/> | ||
4 | No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> | ||
5 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. | ||
6 | </copyright> */ | ||
7 | |||
8 | /////////////////////////////////////////////////////////////////////// | ||
9 | // Class RuntimeGeomObj | ||
10 | // Super class for all geometry classes | ||
11 | /////////////////////////////////////////////////////////////////////// | ||
12 | function RuntimeGeomObj() | ||
13 | { | ||
14 | /////////////////////////////////////////////////////////////////////// | ||
15 | // Constants | ||
16 | /////////////////////////////////////////////////////////////////////// | ||
17 | this.GEOM_TYPE_RECTANGLE = 1; | ||
18 | this.GEOM_TYPE_CIRCLE = 2; | ||
19 | this.GEOM_TYPE_LINE = 3; | ||
20 | this.GEOM_TYPE_PATH = 4; | ||
21 | this.GEOM_TYPE_CUBIC_BEZIER = 5; | ||
22 | this.GEOM_TYPE_UNDEFINED = -1; | ||
23 | |||
24 | /////////////////////////////////////////////////////////////////////// | ||
25 | // Instance variables | ||
26 | /////////////////////////////////////////////////////////////////////// | ||
27 | this._children; | ||
28 | |||
29 | // stroke and fill colors | ||
30 | this._strokeColor = [0,0,0,0]; | ||
31 | this._fillColor = [0,0,0,0]; | ||
32 | |||
33 | // array of materials | ||
34 | this._materials = []; | ||
35 | |||
36 | /////////////////////////////////////////////////////////////////////// | ||
37 | // Property accessors | ||
38 | /////////////////////////////////////////////////////////////////////// | ||
39 | |||
40 | this.geomType = function() { return this.GEOM_TYPE_UNDEFINED; } | ||
41 | |||
42 | this.setWorld = function(w) { this._world = w; } | ||
43 | this.getWorld = function() { return this._world; } | ||
44 | |||
45 | /////////////////////////////////////////////////////////////////////// | ||
46 | // Methods | ||
47 | /////////////////////////////////////////////////////////////////////// | ||
48 | this.makeStrokeMaterial = function() | ||
49 | { | ||
50 | } | ||
51 | |||
52 | this.makeFillMaterial = function() | ||
53 | { | ||
54 | } | ||
55 | |||
56 | |||
57 | this.render = function() | ||
58 | { | ||
59 | } | ||
60 | |||
61 | this.addChild = function( child ) | ||
62 | { | ||
63 | if (!this._children) this._children = []; | ||
64 | this._children.push( child ); | ||
65 | } | ||
66 | |||
67 | this.import = function() | ||
68 | { | ||
69 | } | ||
70 | |||
71 | this.importMaterials = function(importStr) | ||
72 | { | ||
73 | var nMaterials = Number( getPropertyFromString( "nMaterials: ", importStr ) ); | ||
74 | for (var i=0; i<nMaterials; i++) | ||
75 | { | ||
76 | var matNodeName = getPropertyFromString( "materialNodeName: ", importStr ); | ||
77 | |||
78 | var mat; | ||
79 | var materialType = getPropertyFromString( "material: ", importStr ); | ||
80 | switch (materialType) | ||
81 | { | ||
82 | case "flat": mat = new RuntimeFlatMaterial(); break; | ||
83 | case "radialGradient": mat = new RuntimeRadialGradientMaterial(); break; | ||
84 | case "linearGradient": mat = new RuntimeLinearGradientMaterial(); break; | ||
85 | case "bumpMetal": mat = new RuntimeBumpMetalMaterial(); break; | ||
86 | case "uber": mat = new RuntimeUberMaterial(); break; | ||
87 | |||
88 | case "deform": | ||
89 | case "water": | ||
90 | case "tunnel": | ||
91 | case "reliefTunnel": | ||
92 | case "squareTunnel": | ||
93 | case "twist": | ||
94 | case "fly": | ||
95 | case "julia": | ||
96 | case "mandel": | ||
97 | case "star": | ||
98 | case "zinvert": | ||
99 | case "keleidoscope": | ||
100 | case "pulse": mat = new RuntimePulseMaterial(); break; | ||
101 | |||
102 | default: | ||
103 | console.log( "material type: " + materialType + " is not supported" ); | ||
104 | break; | ||
105 | } | ||
106 | |||
107 | if (mat) | ||
108 | { | ||
109 | mat.import( importStr ); | ||
110 | mat._materialNodeName = matNodeName; | ||
111 | this._materials.push( mat ); | ||
112 | } | ||
113 | |||
114 | var endIndex = importStr.indexOf( "endMaterial\n" ); | ||
115 | if (endIndex < 0) break; | ||
116 | importStr = importStr.substr( endIndex ); | ||
117 | } | ||
118 | } | ||
119 | |||
120 | //////////////////////////////////////////////////////////////////// | ||
121 | // vector function | ||
122 | |||
123 | this.vecAdd = function( dimen, a, b ) | ||
124 | { | ||
125 | var rtnVec; | ||
126 | if ((a.length < dimen) || (b.length < dimen)) | ||
127 | { | ||
128 | throw new Error( "dimension error in vecAdd" ); | ||
129 | } | ||
130 | |||
131 | rtnVec = []; | ||
132 | for (var i=0; i<dimen; i++) | ||
133 | rtnVec[i] = a[i] + b[i]; | ||
134 | |||
135 | return rtnVec; | ||
136 | } | ||
137 | |||
138 | |||
139 | this.vecSubtract = function( dimen, a, b ) | ||
140 | { | ||
141 | var rtnVec; | ||
142 | if ((a.length < dimen) || (b.length < dimen)) | ||
143 | { | ||
144 | throw new Error( "dimension error in vecSubtract" ); | ||
145 | } | ||
146 | |||
147 | rtnVec = []; | ||
148 | for (var i=0; i<dimen; i++) | ||
149 | rtnVec[i] = a[i] - b[i]; | ||
150 | |||
151 | return rtnVec; | ||
152 | } | ||
153 | |||
154 | this.vecDot = function( dimen, v0, v1 ) | ||
155 | { | ||
156 | if ((v0.length < dimen) || (v1.length < dimen)) | ||
157 | { | ||
158 | throw new Error( "dimension error in vecDot" ); | ||
159 | } | ||
160 | |||
161 | var sum = 0.0; | ||
162 | for (var i=0; i<dimen; i++) | ||
163 | sum += v0[i] * v1[i]; | ||
164 | |||
165 | return sum; | ||
166 | } | ||
167 | |||
168 | this.vecMag = function( dimen, vec ) | ||
169 | { | ||
170 | var sum = 0.0; | ||
171 | for (var i=0; i<dimen; i++) | ||
172 | sum += vec[i]*vec[i]; | ||
173 | return Math.sqrt( sum ); | ||
174 | } | ||
175 | |||
176 | this.vecScale = function(dimen, vec, scale) | ||
177 | { | ||
178 | for (var i=0; i<dimen; i++) | ||
179 | vec[i] *= scale; | ||
180 | |||
181 | return vec; | ||
182 | } | ||
183 | |||
184 | this.vecNormalize = function(dimen, vec, len) | ||
185 | { | ||
186 | var rtnVec; | ||
187 | if (!len) len = 1.0; | ||
188 | |||
189 | var sum = 0.0; | ||
190 | for (var i=0; i<dimen; i++) | ||
191 | sum += vec[i]*vec[i]; | ||
192 | sum = Math.sqrt( sum ); | ||
193 | |||
194 | if (Math.abs(sum) >= 0.001) | ||
195 | { | ||
196 | var scale = len/sum; | ||
197 | rtnVec = []; | ||
198 | for (var i=0; i<dimen; i++) | ||
199 | rtnVec[i] = vec[i]*scale; | ||
200 | } | ||
201 | |||
202 | return rtnVec; | ||
203 | }, | ||
204 | |||
205 | this.transformPoint = function( srcPt, mat ) | ||
206 | { | ||
207 | var pt = srcPt.slice(0); | ||
208 | var x = this.vecDot(3, pt, [mat[0], mat[4], mat[ 8]] ) + mat[12], | ||
209 | y = this.vecDot(3, pt, [mat[1], mat[5], mat[ 9]] ) + mat[13], | ||
210 | z = this.vecDot(3, pt, [mat[2], mat[6], mat[10]] ) + mat[14]; | ||
211 | |||
212 | return [x, y, z]; | ||
213 | } | ||
214 | } | ||
215 | |||
216 | function getPropertyFromString( prop, str ) | ||
217 | { | ||
218 | var index = str.indexOf( prop ); | ||
219 | if (index < 0) throw new Error( "property " + prop + " not found in string: " + str); | ||
220 | |||
221 |