Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2150 mathias 1
if(!dojo._hasResource["dojox.gfx3d.gradient"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
2
dojo._hasResource["dojox.gfx3d.gradient"] = true;
3
dojo.provide("dojox.gfx3d.gradient");
4
 
5
dojo.require("dojox.gfx3d.vector");
6
dojo.require("dojox.gfx3d.matrix");
7
 
8
(function(){
9
	var dist = function(a, b){ return Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2)); };
10
	var N = 32;
11
 
12
	dojox.gfx3d.gradient = function(model, material, center, radius, from, to, matrix){
13
		// summary: calculate a cylindrical gradient
14
		// model: dojox.gfx3d.lighting.Model: color model
15
		// material: Object: defines visual properties
16
		// center: Object: center of the cylinder's bottom
17
		// radius: Number: radius of the cylinder
18
		// from: Number: from position in radians
19
		// to: Number: from position in radians
20
		// matrix: dojox.gfx3d.Matrix3D: the cumulative transformation matrix
21
		// tolerance: Number: tolerable diffirence in colors between gradient steps
22
 
23
		var m = dojox.gfx3d.matrix, v = dojox.gfx3d.vector, mx = m.normalize(matrix),
24
			f = m.multiplyPoint(mx, radius * Math.cos(from) + center.x, radius * Math.sin(from) + center.y, center.z),
25
			t = m.multiplyPoint(mx, radius * Math.cos(to)   + center.x, radius * Math.sin(to)   + center.y, center.z),
26
			c = m.multiplyPoint(mx, center.x, center.y, center.z), step = (to - from) / N, r = dist(f, t) / 2,
27
			mod = model[material.type], fin = material.finish, pmt = material.color,
28
			colors = [{offset: 0, color: mod.call(model, v.substract(f, c), fin, pmt)}];
29
 
30
		for(var a = from + step; a < to; a += step){
31
			var p = m.multiplyPoint(mx, radius * Math.cos(a) + center.x, radius * Math.sin(a) + center.y, center.z),
32
				df = dist(f, p), dt = dist(t, p);
33
			colors.push({offset: df / (df + dt), color: mod.call(model, v.substract(p, c), fin, pmt)});
34
		}
35
		colors.push({offset: 1, color: mod.call(model, v.substract(t, c), fin, pmt)});
36
 
37
		return {type: "linear", x1: 0, y1: -r, x2: 0, y2: r, colors: colors};
38
	};
39
})();
40
 
41
}