//>>built define("dojox/gfx3d/object",["dojo/_base/array","dojo/_base/declare","dojo/_base/lang","dojox/gfx","dojox/gfx/matrix","./_base","./scheduler","./gradient","./vector","./matrix","./lighting"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b){ var _c=_7.scheduler; var _d=function(o,x){ if(arguments.length>1){ o=x; } var e={}; for(var i in o){ if(i in e){ continue; } } }; _2("dojox.gfx3d.Object",null,{constructor:function(){ this.object=null; this.matrix=null; this.cache=null; this.renderer=null; this.parent=null; this.strokeStyle=null; this.fillStyle=null; this.shape=null; },setObject:function(_e){ this.object=_4.makeParameters(this.object,_e); return this; },setTransform:function(_f){ this.matrix=_a.clone(_f?_a.normalize(_f):_6.identity,true); return this; },applyRightTransform:function(_10){ return _10?this.setTransform([this.matrix,_10]):this; },applyLeftTransform:function(_11){ return _11?this.setTransform([_11,this.matrix]):this; },applyTransform:function(_12){ return _12?this.setTransform([this.matrix,_12]):this; },setFill:function(_13){ this.fillStyle=_13; return this; },setStroke:function(_14){ this.strokeStyle=_14; return this; },toStdFill:function(_15,_16){ return (this.fillStyle&&typeof this.fillStyle["type"]!="undefined")?_15[this.fillStyle.type](_16,this.fillStyle.finish,this.fillStyle.color):this.fillStyle; },invalidate:function(){ this.renderer.addTodo(this); },destroy:function(){ if(this.shape){ var p=this.shape.getParent(); if(p){ p.remove(this.shape); } this.shape=null; } },render:function(_17){ throw "Pure virtual function, not implemented"; },draw:function(_18){ throw "Pure virtual function, not implemented"; },getZOrder:function(){ return 0; },getOutline:function(){ return null; }}); _2("dojox.gfx3d.Scene",_6.Object,{constructor:function(){ this.objects=[]; this.todos=[]; this.schedule=_c.zOrder; this._draw=_6.drawer.conservative; },setFill:function(_19){ this.fillStyle=_19; _1.forEach(this.objects,function(_1a){ _1a.setFill(_19); }); return this; },setStroke:function(_1b){ this.strokeStyle=_1b; _1.forEach(this.objects,function(_1c){ _1c.setStroke(_1b); }); return this; },render:function(_1d,_1e){ var m=_a.multiply(_1d,this.matrix); if(_1e){ this.todos=this.objects; } _1.forEach(this.todos,function(_1f){ _1f.render(m,_1e); }); },draw:function(_20){ this.objects=this.schedule(this.objects); this._draw(this.todos,this.objects,this.renderer); },addTodo:function(_21){ if(_1.every(this.todos,function(_22){ return _22!=_21; })){ this.todos.push(_21); this.invalidate(); } },invalidate:function(){ this.parent.addTodo(this); },getZOrder:function(){ var _23=0; _1.forEach(this.objects,function(_24){ _23+=_24.getZOrder(); }); return (this.objects.length>1)?_23/this.objects.length:0; }}); _2("dojox.gfx3d.Edges",_6.Object,{constructor:function(){ this.object=_3.clone(_6.defaultEdges); },setObject:function(_25,_26){ this.object=_4.makeParameters(this.object,(_25 instanceof Array)?{points:_25,style:_26}:_25); return this; },getZOrder:function(){ var _27=0; _1.forEach(this.cache,function(_28){ _27+=_28.z; }); return (this.cache.length>1)?_27/this.cache.length:0; },render:function(_29){ var m=_a.multiply(_29,this.matrix); this.cache=_1.map(this.object.points,function(_2a){ return _a.multiplyPoint(m,_2a); }); },draw:function(){ var c=this.cache; if(this.shape){ this.shape.setShape(""); }else{ this.shape=this.renderer.createPath(); } var p=this.shape.setAbsoluteMode("absolute"); if(this.object.style=="strip"||this.object.style=="loop"){ p.moveTo(c[0].x,c[0].y); _1.forEach(c.slice(1),function(_2b){ p.lineTo(_2b.x,_2b.y); }); if(this.object.style=="loop"){ p.closePath(); } }else{ for(var i=0;i=_3d){ _3e={action:_3b,args:_3c.slice(0,_3c.length-_3c.length%_3d)}; this.segments.push(_3e); } }else{ _3e={action:_3b,args:[]}; this.segments.push(_3e); } } },moveTo:function(){ var _3f=[]; this._collectArgs(_3f,arguments); this._pushSegment(this.absolute?"M":"m",_3f); return this; },lineTo:function(){ var _40=[]; this._collectArgs(_40,arguments); this._pushSegment(this.absolute?"L":"l",_40); return this; },closePath:function(){ this._pushSegment("Z",[]); return this; },render:function(_41){ var m=_a.multiply(_41,this.matrix); var _42=""; var _43=this._validSegments; _1.forEach(this.segments,function(_44){ _42+=_44.action; for(var i=0;i<_44.args.length;i+=_43[_44.action.toLowerCase()]){ var pt=_a.multiplyPoint(m,_44.args[i],_44.args[i+1],_44.args[i+2]); _42+=" "+pt.x+" "+pt.y; } }); this.cache=_42; },_draw:function(){ return this.parent.createPath(this.cache); }}); _2("dojox.gfx3d.Triangles",_6.Object,{constructor:function(){ this.object=_3.clone(_6.defaultTriangles); },setObject:function(_45,_46){ if(_45 instanceof Array){ this.object=_4.makeParameters(this.object,{points:_45,style:_46}); }else{ this.object=_4.makeParameters(this.object,_45); } return this; },render:function(_47){ var m=_a.multiply(_47,this.matrix); var c=_1.map(this.object.points,function(_48){ return _a.multiplyPoint(m,_48); }); this.cache=[]; var _49=c.slice(0,2); var _4a=c[0]; if(this.object.style=="strip"){ _1.forEach(c.slice(2),function(_4b){ _49.push(_4b); _49.push(_49[0]); this.cache.push(_49); _49=_49.slice(1,3); },this); }else{ if(this.object.style=="fan"){ _1.forEach(c.slice(2),function(_4c){ _49.push(_4c); _49.push(_4a); this.cache.push(_49); _49=[_4a,_4c]; },this); }else{ for(var i=0;i1)?_4f/this.cache.length:0; }}); _2("dojox.gfx3d.Quads",_6.Object,{constructor:function(){ this.object=_3.clone(_6.defaultQuads); },setObject:function(_51,_52){ this.object=_4.makeParameters(this.object,(_51 instanceof Array)?{points:_51,style:_52}:_51); return this; },render:function(_53){ var m=_a.multiply(_53,this.matrix),i; var c=_1.map(this.object.points,function(_54){ return _a.multiplyPoint(m,_54); }); this.cache=[]; if(this.object.style=="strip"){ var _55=c.slice(0,2); for(i=2;i1)?_57/this.cache.length:0; }}); _2("dojox.gfx3d.Polygon",_6.Object,{constructor:function(){ this.object=_3.clone(_6.defaultPolygon); },setObject:function(_58){ this.object=_4.makeParameters(this.object,(_58 instanceof Array)?{path:_58}:_58); return this; },render:function(_59){ var m=_a.multiply(_59,this.matrix); this.cache=_1.map(this.object.path,function(_5a){ return _a.multiplyPoint(m,_5a); }); this.cache.push(this.cache[0]); },draw:function(_5b){ if(this.shape){ this.shape.setShape({points:this.cache}); }else{ this.shape=this.renderer.createPolyline({points:this.cache}); } this.shape.setStroke(this.strokeStyle).setFill(this.toStdFill(_5b,_a.normalize(this.cache))); },getZOrder:function(){ var _5c=0; for(var x=0;x1)?_5c/this.cache.length:0; },getOutline:function(){ return this.cache.slice(0,3); }}); _2("dojox.gfx3d.Cube",_6.Object,{constructor:function(){ this.object=_3.clone(_6.defaultCube); this.polygons=[]; },setObject:function(_5d){ this.object=_4.makeParameters(this.object,_5d); },render:function(_5e){ var a=this.object.top; var g=this.object.bottom; var b={x:g.x,y:a.y,z:a.z}; var c={x:g.x,y:g.y,z:a.z}; var d={x:a.x,y:g.y,z:a.z}; var e={x:a.x,y:a.y,z:g.z}; var f={x:g.x,y:a.y,z:g.z}; var h={x:a.x,y:g.y,z:g.z}; var _5f=[a,b,c,d,e,f,g,h]; var m=_a.multiply(_5e,this.matrix); var p=_1.map(_5f,function(_60){ return _a.multiplyPoint(m,_60); }); a=p[0]; b=p[1]; c=p[2]; d=p[3]; e=p[4]; f=p[5]; g=p[6]; h=p[7]; this.cache=[[a,b,c,d,a],[e,f,g,h,e],[a,d,h,e,a],[d,c,g,h,d],[c,b,f,g,c],[b,a,e,f,b]]; },draw:function(_61){ this.cache=_6.scheduler.bsp(this.cache,function(it){ return it; }); var _62=this.cache.slice(3); if(this.shape){ this.shape.clear(); }else{ this.shape=this.renderer.createGroup(); } for(var x=0;x<_62.length;x++){ this.shape.createPolyline(_62[x]).setStroke(this.strokeStyle).setFill(this.toStdFill(_61,_9.normalize(_62[x]))); } },getZOrder:function(){ var top=this.cache[0][0]; var _63=this.cache[1][2]; return (top.z+_63.z)/2; }}); _2("dojox.gfx3d.Cylinder",_6.Object,{constructor:function(){ this.object=_3.clone(_6.defaultCylinder); },render:function(_64){ var m=_a.multiply(_64,this.matrix); var _65=[0,Math.PI/4,Math.PI/3]; var _66=_a.multiplyPoint(m,this.object.center); var _67=_1.map(_65,function(_68){ return {x:this.center.x+this.radius*Math.cos(_68),y:this.center.y+this.radius*Math.sin(_68),z:this.center.z}; },this.object); _67=_1.map(_67,function(_69){ return _9.substract(_a.multiplyPoint(m,_69),_66); }); var A={xx:_67[0].x*_67[0].y,xy:_67[0].y*_67[0].y,xz:1,yx:_67[1].x*_67[1].y,yy:_67[1].y*_67[1].y,yz:1,zx:_67[2].x*_67[2].y,zy:_67[2].y*_67[2].y,zz:1,dx:0,dy:0,dz:0}; var B=_1.map(_67,function(_6a){ return -Math.pow(_6a.x,2); }); var X=_a.multiplyPoint(_a.invert(A),B[0],B[1],B[2]); var _6b=Math.atan2(X.x,1-X.y)/2; var _6c=_1.map(_67,function(_6d){ return _5.multiplyPoint(_5.rotate(-_6b),_6d.x,_6d.y); }); var a=Math.pow(_6c[0].x,2); var b=Math.pow(_6c[0].y,2); var c=Math.pow(_6c[1].x,2); var d=Math.pow(_6c[1].y,2); var rx=Math.sqrt((a*d-b*c)/(d-b)); var ry=Math.sqrt((a*d-b*c)/(a-c)); if(rx0){ _6f=[c.top,c.center]; _70=v.substract(c.center,c.top); } var _71=this.renderer.lighting[this.fillStyle.type](_70,this.fillStyle.finish,this.fillStyle.color),d=Math.sqrt(Math.pow(c.center.x-c.top.x,2)+Math.pow(c.center.y-c.top.y,2)); if(this.shape){ this.shape.clear(); }else{ this.shape=this.renderer.createGroup(); } this.shape.createPath("").moveTo(0,-c.rx).lineTo(d,-c.rx).lineTo(d,c.rx).lineTo(0,c.rx).arcTo(c.ry,c.rx,0,true,true,0,-c.rx).setFill(c.gradient).setStroke(this.strokeStyle).setTransform([m.translate(_6f[0]),m.rotate(Math.atan2(_6f[1].y-_6f[0].y,_6f[1].x-_6f[0].x))]); if(c.rx>0&&c.ry>0){ this.shape.createEllipse({cx:_6f[1].x,cy:_6f[1].y,rx:c.rx,ry:c.ry}).setFill(_71).setStroke(this.strokeStyle).applyTransform(m.rotateAt(c.theta,_6f[1])); } }}); _2("dojox.gfx3d.Viewport",_4.Group,{constructor:function(){ this.dimension=null; this.objects=[]; this.todos=[]; this.renderer=this; this.schedule=_6.scheduler.zOrder; this.draw=_6.drawer.conservative; this.deep=false; this.lights=[]; this.lighting=null; },setCameraTransform:function(_72){ this.camera=_a.clone(_72?_a.normalize(_72):_6.identity,true); this.invalidate(); return this; },applyCameraRightTransform:function(_73){ return _73?this.setCameraTransform([this.camera,_73]):this; },applyCameraLeftTransform:function(_74){ return _74?this.setCameraTransform([_74,this.camera]):this; },applyCameraTransform:function(_75){ return this.applyCameraRightTransform(_75); },setLights:function(_76,_77,_78){ this.lights=(_76 instanceof Array)?{sources:_76,ambient:_77,specular:_78}:_76; var _79={x:0,y:0,z:1}; this.lighting=new _b.Model(_79,this.lights.sources,this.lights.ambient,this.lights.specular); this.invalidate(); return this; },addLights:function(_7a){ return this.setLights(this.lights.sources.concat(_7a)); },addTodo:function(_7b){ if(_1.every(this.todos,function(_7c){ return _7c!=_7b; })){ this.todos.push(_7b); } },invalidate:function(){ this.deep=true; this.todos=this.objects; },setDimensions:function(dim){ if(dim){ var w=_3.isString(dim.width)?parseInt(dim.width):dim.width; var h=_3.isString(dim.height)?parseInt(dim.height):dim.height; if(this.rawNode){ var trs=this.rawNode.style; trs.height=h; trs.width=w; } this.dimension={width:w,height:h}; }else{ this.dimension=null; } },render:function(){ if(!this.todos.length){ return; } var m=_a; for(var x=0;x