aboutsummaryrefslogtreecommitdiff
path: root/js/lib/geom/geom-obj.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib/geom/geom-obj.js')
-rwxr-xr-xjs/lib/geom/geom-obj.js280
1 files changed, 280 insertions, 0 deletions
diff --git a/js/lib/geom/geom-obj.js b/js/lib/geom/geom-obj.js
new file mode 100755
index 00000000..c5880843
--- /dev/null
+++ b/js/lib/geom/geom-obj.js
@@ -0,0 +1,280 @@
1/* <copyright>
2This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
3No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */
6
7var MaterialsModel = require("js/models/materials-model").MaterialsModel;
8///////////////////////////////////////////////////////////////////////
9// Class GLGeomObj
10// Super class for all geometry classes
11///////////////////////////////////////////////////////////////////////
12var GeomObj = function GLGeomObj() {
13 ///////////////////////////////////////////////////////////////////////
14 // Constants
15 ///////////////////////////////////////////////////////////////////////
16 this.GEOM_TYPE_RECTANGLE = 1;
17 this.GEOM_TYPE_CIRCLE = 2;
18 this.GEOM_TYPE_LINE = 3;
19 this.GEOM_TYPE_PATH = 4;
20 this.GEOM_TYPE_CUBIC_BEZIER = 5;
21 this.GEOM_TYPE_UNDEFINED = -1;
22
23 // Needed for calculating dashed/dotted strokes
24 this.DASH_LENGTH = 0.15;
25 this.DOT_LENGTH = 0.05;
26 this.GAP_LENGTH = 0.05;
27
28 ///////////////////////////////////////////////////////////////////////
29 // Instance variables
30 ///////////////////////////////////////////////////////////////////////
31 this._matrix = Matrix.I(4);
32
33 this._next = undefined;
34 this._prev = undefined;
35 this._child = undefined;
36 this._parent = undefined;
37
38 this.m_world = null;
39
40 // stroke and fill colors
41 this._strokeColor = [0,0,0,0];
42 this._fillColor = [0,0,0,0];
43
44 // stroke and fill materials
45 this._fillMaterial = null;
46 this._strokeMaterial = null;
47
48 // array of primitives - used in RDGE
49 this._primArray = [];
50 this._materialNodeArray = [];
51 this._materialArray = [];
52 this._materialTypeArray = [];
53
54 // the transform node used by RDGE
55 this._trNode = null;
56
57 ///////////////////////////////////////////////////////////////////////
58 // Property accessors
59 ///////////////////////////////////////////////////////////////////////
60 this.setWorld = function( world ) {
61 this.m_world = world;
62 };
63
64 this.getWorld = function() {
65 return this.m_world;
66 };
67
68 this.getMatrix = function() {
69 return this._matrix.slice(0);
70 };
71
72 this.setMatrix = function(m) {
73 this._matrix = m.slice(0);
74 };
75
76 this.setNext = function( next ) {
77 this._next = next;
78 };
79
80 this.getNext = function() {
81 return this._next;
82 };
83
84 this.setPrev = function( prev ) {
85 this._prev = prev;
86 };
87
88 this.getPrev = function() {
89 return this._prev;
90 };
91
92 this.setChild = function( child ) {
93 this._child = child;
94 };
95
96 this.getChild = function() {
97 return this._child;
98 };
99
100 this.setParent = function( parent ) {
101 this._parent = parent;
102 };
103
104 this.getParent = function() {
105 return this._parent;
106 };
107
108 this.geomType = function() {
109 return this.GEOM_TYPE_UNDEFINED;
110 };
111
112 this.getPrimitiveArray = function() { return this._primArray;
113 };
114
115 this.getMaterialNodeArray = function() {
116 return this._materialNodeArray;
117 };
118
119 this.getMaterialArray = function() { return this._materialArray;
120 };
121
122 this.getTransformNode = function() {
123 return this._trNode;
124 };
125
126 this.setTransformNode = function(t) {
127 this._trNode = t;
128 };
129
130 this.setFillColor = function(c) {
131 this.setMaterialColor(c, "fill");
132 };
133
134 this.setStrokeColor = function(c) {
135 this.setMaterialColor(c, "stroke");
136 };
137 ///////////////////////////////////////////////////////////////////////
138 // Methods
139 ///////////////////////////////////////////////////////////////////////
140 this.setMaterialColor = function(c, type) {
141 if (type == "fill") {
142 this._fillColor = c.slice(0);
143 } else {
144 this._strokeColor = c.slice(0);
145 }
146
147 if (this._materialArray && this._materialTypeArray) {
148 var nMats = this._materialArray.length;
149 if (nMats === this._materialTypeArray.length) {
150 for (var i=0; i<nMats; i++) {
151 if (this._materialTypeArray[i] == type) {
152 this._materialArray[i].setProperty( "color", c.slice(0) );
153 }
154 }
155 }
156 }
157
158 var world = this.getWorld();
159 if (world) {
160 world.restartRenderLoop();
161 }
162 };
163
164 this.makeStrokeMaterial = function() {
165 var strokeMaterial;
166 if (this.getStrokeMaterial()){
167 strokeMaterial = this.getStrokeMaterial().dup();
168 } else {
169 strokeMaterial = MaterialsModel.exportFlatMaterial();
170 }
171
172 if (strokeMaterial) {
173 strokeMaterial.init( this.getWorld() );
174 if(this._strokeColor) {
175 strokeMaterial.setProperty("color", this._strokeColor);
176 }
177 }
178
179 this._materialArray.push( strokeMaterial );
180 this._materialTypeArray.push( "stroke" );
181
182 return strokeMaterial;
183 };
184
185 this.makeFillMaterial = function() {
186 var fillMaterial;
187 if (this.getFillMaterial()) {
188 fillMaterial = this.getFillMaterial().dup();
189 } else {
190 fillMaterial = MaterialsModel.exportFlatMaterial();
191 }
192
193 if (fillMaterial) {
194 fillMaterial.init( this.getWorld() );
195 //if(!this.getFillMaterial() && this._fillColor)
196 if (this._fillColor) {
197 fillMaterial.setProperty("color", this._fillColor);
198 }
199 }
200
201 this._materialArray.push( fillMaterial );
202 this._materialTypeArray.push( "fill" );
203
204 return fillMaterial;
205 };
206
207 this.translate = function(v) {
208 var mat = Matrix.Translation( v );
209 //var mat2 = mat.multiply( this._matrix );
210 //this._matrix = mat2;
211 glmat4.multiply(mat, this._matrix, this._matrix);
212 };
213
214 this.transform = function( mat ) {
215 if (mat) {
216 //this._matrix = mat.multiply( this._matrix );
217 glmat4.multiply(mat, this._matrix, this._matrix);
218 }
219 };
220
221 this.setMatrix = function(mat) {
222 var gl = this.getWorld().getGLContext();
223 if (gl) {
224 gl.uniformMatrix4fv(this.getWorld().getShaderProgram().mvMatrixUniform, false, new Float32Array(mat));
225 }
226 };
227
228 this.buildBuffers = function() {
229 // this function must be overridden by the base class
230 alert( "GLGeomObj.buildBuffers must be overridden by base class" );
231 };
232
233 this.render = function() {
234 alert( "GLGeomObj.render method must be overridden by sub class" );
235 };
236
237 this.collidesWithPoint = function( x, y ) {
238 alert( "GLGeomObj.collidesWithPoint method must be overridden by sub class" );
239 };
240
241 this.getNearPoint = function( pt, dir ) {
242 // the alert is not displayed. Objects may choose not to implement this method.
243 //alert( "GLGeomObj.getNearPoint method must be overridden by sub class" );
244 };
245
246 this.getNearVertex = function( pt, dir ) {
247 // this should be overridden by objects (such as rectangles) that have corners
248 };
249