📄 object.js
字号:
/* Copyright (c) 2004-2008, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details*/if(!dojo._hasResource["dojox.gfx3d.object"]){dojo._hasResource["dojox.gfx3d.object"]=true;dojo.provide("dojox.gfx3d.object");dojo.require("dojox.gfx");dojo.require("dojox.gfx3d.lighting");dojo.require("dojox.gfx3d.scheduler");dojo.require("dojox.gfx3d.vector");dojo.require("dojox.gfx3d.gradient");var out=function(o,x){if(arguments.length>1){o=x;}var e={};for(var i in o){if(i in e){continue;}}};dojo.declare("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(_5){this.object=dojox.gfx.makeParameters(this.object,_5);return this;},setTransform:function(_6){this.matrix=dojox.gfx3d.matrix.clone(_6?dojox.gfx3d.matrix.normalize(_6):dojox.gfx3d.identity,true);return this;},applyRightTransform:function(_7){return _7?this.setTransform([this.matrix,_7]):this;},applyLeftTransform:function(_8){return _8?this.setTransform([_8,this.matrix]):this;},applyTransform:function(_9){return _9?this.setTransform([this.matrix,_9]):this;},setFill:function(_a){this.fillStyle=_a;return this;},setStroke:function(_b){this.strokeStyle=_b;return this;},toStdFill:function(_c,_d){return (this.fillStyle&&typeof this.fillStyle["type"]!="undefined")?_c[this.fillStyle.type](_d,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(_f){throw "Pure virtual function, not implemented";},draw:function(_10){throw "Pure virtual function, not implemented";},getZOrder:function(){return 0;},getOutline:function(){return null;}});dojo.declare("dojox.gfx3d.Scene",dojox.gfx3d.Object,{constructor:function(){this.objects=[];this.todos=[];this.schedule=dojox.gfx3d.scheduler.zOrder;this._draw=dojox.gfx3d.drawer.conservative;},setFill:function(_11){this.fillStyle=_11;dojo.forEach(this.objects,function(_12){_12.setFill(_11);});return this;},setStroke:function(_13){this.strokeStyle=_13;dojo.forEach(this.objects,function(_14){_14.setStroke(_13);});return this;},render:function(_15,_16){var m=dojox.gfx3d.matrix.multiply(_15,this.matrix);if(_16){this.todos=this.objects;}dojo.forEach(this.todos,function(_18){_18.render(m,_16);});},draw:function(_19){this.objects=this.schedule(this.objects);this._draw(this.todos,this.objects,this.renderer);},addTodo:function(_1a){if(dojo.every(this.todos,function(_1b){return _1b!=_1a;})){this.todos.push(_1a);this.invalidate();}},invalidate:function(){this.parent.addTodo(this);},getZOrder:function(){var _1c=0;dojo.forEach(this.objects,function(_1d){_1c+=_1d.getZOrder();});return (this.objects.length>1)?_1c/this.objects.length:0;}});dojo.declare("dojox.gfx3d.Edges",dojox.gfx3d.Object,{constructor:function(){this.object=dojo.clone(dojox.gfx3d.defaultEdges);},setObject:function(_1e,_1f){this.object=dojox.gfx.makeParameters(this.object,(_1e instanceof Array)?{points:_1e,style:_1f}:_1e);return this;},getZOrder:function(){var _20=0;dojo.forEach(this.cache,function(_21){_20+=_21.z;});return (this.cache.length>1)?_20/this.cache.length:0;},render:function(_22){var m=dojox.gfx3d.matrix.multiply(_22,this.matrix);this.cache=dojo.map(this.object.points,function(_24){return dojox.gfx3d.matrix.multiplyPoint(m,_24);});},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);dojo.forEach(c.slice(1),function(_27){p.lineTo(_27.x,_27.y);});if(this.object.style=="loop"){p.closePath();}}else{for(var i=0;i<this.cache.length;){p.moveTo(c[i].x,c[i].y);i++;p.lineTo(c[i].x,c[i].y);i++;}}p.setStroke(this.strokeStyle);}});dojo.declare("dojox.gfx3d.Orbit",dojox.gfx3d.Object,{constructor:function(){this.object=dojo.clone(dojox.gfx3d.defaultOrbit);},render:function(_29){var m=dojox.gfx3d.matrix.multiply(_29,this.matrix);var _2b=[0,Math.PI/4,Math.PI/3];var _2c=dojox.gfx3d.matrix.multiplyPoint(m,this.object.center);var _2d=dojo.map(_2b,function(_2e){return {x:this.center.x+this.radius*Math.cos(_2e),y:this.center.y+this.radius*Math.sin(_2e),z:this.center.z};},this.object);_2d=dojo.map(_2d,function(_2f){return dojox.gfx3d.matrix.multiplyPoint(m,_2f);});var _30=dojox.gfx3d.vector.normalize(_2d);_2d=dojo.map(_2d,function(_31){return dojox.gfx3d.vector.substract(_31,_2c);});var A={xx:_2d[0].x*_2d[0].y,xy:_2d[0].y*_2d[0].y,xz:1,yx:_2d[1].x*_2d[1].y,yy:_2d[1].y*_2d[1].y,yz:1,zx:_2d[2].x*_2d[2].y,zy:_2d[2].y*_2d[2].y,zz:1,dx:0,dy:0,dz:0};var B=dojo.map(_2d,function(_34){return -Math.pow(_34.x,2);});var X=dojox.gfx3d.matrix.multiplyPoint(dojox.gfx3d.matrix.invert(A),B[0],B[1],B[2]);var _36=Math.atan2(X.x,1-X.y)/2;var _37=dojo.map(_2d,function(_38){return dojox.gfx.matrix.multiplyPoint(dojox.gfx.matrix.rotate(-_36),_38.x,_38.y);});var a=Math.pow(_37[0].x,2);var b=Math.pow(_37[0].y,2);var c=Math.pow(_37[1].x,2);var d=Math.pow(_37[1].y,2);var rx=Math.sqrt((a*d-b*c)/(d-b));var ry=Math.sqrt((a*d-b*c)/(a-c));this.cache={cx:_2c.x,cy:_2c.y,rx:rx,ry:ry,theta:_36,normal:_30};},draw:function(_3f){if(this.shape){this.shape.setShape(this.cache);}else{this.shape=this.renderer.createEllipse(this.cache);}this.shape.applyTransform(dojox.gfx.matrix.rotateAt(this.cache.theta,this.cache.cx,this.cache.cy)).setStroke(this.strokeStyle).setFill(this.toStdFill(_3f,this.cache.normal));}});dojo.declare("dojox.gfx3d.Path3d",dojox.gfx3d.Object,{constructor:function(){this.object=dojo.clone(dojox.gfx3d.defaultPath3d);this.segments=[];this.absolute=true;this.last={};this.path="";},_collectArgs:function(_40,_41){for(var i=0;i<_41.length;++i){var t=_41[i];if(typeof (t)=="boolean"){_40.push(t?1:0);}else{if(typeof (t)=="number"){_40.push(t);}else{if(t instanceof Array){this._collectArgs(_40,t);}else{if("x" in t&&"y" in t){_40.push(t.x);_40.push(t.y);}}}}}},_validSegments:{m:3,l:3,z:0},_pushSegment:function(_44,_45){var _46=this._validSegments[_44.toLowerCase()],_47;if(typeof (_46)=="number"){if(_46){if(_45.length>=_46){_47={action:_44,args:_45.slice(0,_45.length-_45.length%_46)};this.segments.push(_47);}}else{_47={action:_44,args:[]};this.segments.push(_47);}}},moveTo:function(){var _48=[];this._collectArgs(_48,arguments);this._pushSegment(this.absolute?"M":"m",_48);return this;},lineTo:function(){var _49=[];this._collectArgs(_49,arguments);this._pushSegment(this.absolute?"L":"l",_49);return this;},closePath:function(){this._pushSegment("Z",[]);return this;},render:function(_4a){var m=dojox.gfx3d.matrix.multiply(_4a,this.matrix);var _4c="";var _4d=this._validSegments;dojo.forEach(this.segments,function(_4e){_4c+=_4e.action;for(var i=0;i<_4e.args.length;i+=_4d[_4e.action.toLowerCase()]){var pt=dojox.gfx3d.matrix.multiplyPoint(m,_4e.args[i],_4e.args[i+1],_4e.args[i+2]);_4c+=" "+pt.x+" "+pt.y;}});this.cache=_4c;},_draw:function(){return this.parent.createPath(this.cache);}});dojo.declare("dojox.gfx3d.Triangles",dojox.gfx3d.Object,{constructor:function(){this.object=dojo.clone(dojox.gfx3d.defaultTriangles);},setObject:function(_51,_52){if(_51 instanceof Array){this.object=dojox.gfx.makeParameters(this.object,{points:_51,style:_52});}else{this.object=dojox.gfx.makeParameters(this.object,_51);}return this;},render:function(_53){var m=dojox.gfx3d.matrix.multiply(_53,this.matrix);var c=dojo.map(this.object.points,function(_56){return dojox.gfx3d.matrix.multiplyPoint(m,_56);});this.cache=[];var _57=c.slice(0,2);var _58=c[0];if(this.object.style=="strip"){dojo.forEach(c.slice(2),function(_59){_57.push(_59);_57.push(_57[0]);this.cache.push(_57);_57=_57.slice(1,3);},this);}else{if(this.object.style=="fan"){dojo.forEach(c.slice(2),function(_5a){_57.push(_5a);_57.push(_58);this.cache.push(_57);_57=[_58,_5a];},this);}else{for(var i=0;i<c.length;){this.cache.push([c[i],c[i+1],c[i+2],c[i]]);i+=3;}}}},draw:function(_5c){this.cache=dojox.gfx3d.scheduler.bsp(this.cache,function(it){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -