aboutsummaryrefslogtreecommitdiff
path: root/js/lib/drawing/world.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib/drawing/world.js')
-rwxr-xr-xjs/lib/drawing/world.js162
1 files changed, 155 insertions, 7 deletions
diff --git a/js/lib/drawing/world.js b/js/lib/drawing/world.js
index c1ee0cd0..781695b6 100755
--- a/js/lib/drawing/world.js
+++ b/js/lib/drawing/world.js
@@ -117,6 +117,8 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) {
117 117
118 this.getRenderer = function() { return this.renderer; }; 118 this.getRenderer = function() { return this.renderer; };
119 119
120 // Flag to play/pause animation at authortime
121 this._previewAnimation = true;
120 //////////////////////////////////////////////////////////////////////////////////// 122 ////////////////////////////////////////////////////////////////////////////////////
121 // RDGE 123 // RDGE
122 // local variables 124 // local variables
@@ -236,7 +238,7 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) {
236 if (this._canvas.task) { 238 if (this._canvas.task) {
237 this._firstRender = false; 239 this._firstRender = false;
238 240
239 if (!this.hasAnimatedMaterials()) { 241 if (!this.hasAnimatedMaterials() || !this._previewAnimation) {
240 this._canvas.task.stop(); 242 this._canvas.task.stop();
241 //this._renderCount = 10; 243 //this._renderCount = 10;
242 } 244 }
@@ -363,6 +365,7 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) {
363 if (this._useWebGL) { 365 if (this._useWebGL) {
364 rdgeStarted = true; 366 rdgeStarted = true;
365 this._canvas.rdgeid = this._canvas.getAttribute( "data-RDGE-id" ); 367 this._canvas.rdgeid = this._canvas.getAttribute( "data-RDGE-id" );
368 g_Engine.unregisterCanvas( this._canvas )
366 g_Engine.registerCanvas(this._canvas, this); 369 g_Engine.registerCanvas(this._canvas, this);
367 RDGEStart( this._canvas ); 370 RDGEStart( this._canvas );
368 this._canvas.task.stop() 371 this._canvas.task.stop()
@@ -729,6 +732,74 @@ World.prototype.getShapeFromPoint = function( offsetX, offsetY ) {
729 } 732 }
730}; 733};
731 734
735
736
737World.prototype.exportJSON = function()
738{
739 // world properties
740 var worldObj =
741 {
742 'version' : 1.1,
743 'id' : this.getCanvas().getAttribute( "data-RDGE-id" ),
744 'fov' : this._fov,
745 'zNear' : this._zNear,
746 'zFar' : this._zFar,
747 'viewDist' : this._viewDist,
748 'webGL' : this._useWebGL
749 };
750
751 // RDGE scenegraph
752 if (this._useWebGL)
753 worldObj.scenedata = this.myScene.exportJSON();
754
755 // object data
756 var strArray = [];
757 this.exportObjectsJSON( this._geomRoot, worldObj );
758
759 // You would think that the RDGE export function
760 // would not be destructive of the data. You would be wrong...
761 // We need to rebuild everything
762 if (this._useWebGL)
763 {
764 var root = this._rootNode;
765 root.children = new Array();
766 if (worldObj.children && (worldObj.children.length === 1))
767 {
768 this.init();
769 this._geomRoot = undefined;
770 this.importObjectsJSON( worldObj.children[0] );
771 }
772 }
773
774 // convert the object to a string
775 var jStr = JSON.stringify( worldObj );
776
777 // prepend some version information to the string.
778 // this string is also used to differentiate between JSON
779 // and pre-JSON versions of fileIO.
780 // the ending ';' in the version string is necessary
781 jStr = "v1.0;" + jStr;
782
783 return jStr;
784}
785
786World.prototype.exportObjectsJSON = function( obj, parentObj )
787{
788 if (!obj) return;
789
790 var jObj = obj.exportJSON();
791 if (!parentObj.children) parentObj.children = [];
792 parentObj.children.push( jObj );
793
794 if (obj.getChild()) {
795 this.exportObjectsJSON( obj.getChild (), jObj );
796 }
797
798 if (obj.getNext())
799 this.exportObjectsJSON( obj.getNext(), parentObj );
800}
801
802/*
732World.prototype.export = function() 803World.prototype.export = function()
733{ 804{
734 var exportStr = "GLWorld 1.0\n"; 805 var exportStr = "GLWorld 1.0\n";
@@ -791,6 +862,7 @@ World.prototype.exportObjects = function( obj ) {
791 862
792 return rtnStr; 863 return rtnStr;
793}; 864};
865*/
794 866
795World.prototype.findTransformNodeByMaterial = function( materialNode, trNode ) { 867World.prototype.findTransformNodeByMaterial = function( materialNode, trNode ) {
796 //if (trNode == null) trNode = this._ctrNode; 868 //if (trNode == null) trNode = this._ctrNode;
@@ -810,17 +882,93 @@ World.prototype.findTransformNodeByMaterial = function( materialNode, trNode )
810 return rtnNode; 882 return rtnNode;
811}; 883};
812 884
813World.prototype.import = function( importStr, fromToggle ) { 885World.prototype.importJSON = function( jObj )
886{
887 if (jObj.webGL)
888 {
889 // start RDGE
890 rdgeStarted = true;
891 var id = this._canvas.getAttribute( "data-RDGE-id" );
892 this._canvas.rdgeid = id;
893 g_Engine.registerCanvas(this._canvas, this);
894 RDGEStart( this._canvas );
895 this._canvas.task.stop()
896 }
897
898 // import the objects
899 // there should be exactly one child of the parent object
900 if (jObj.children && (jObj.children.length === 1))
901 this.importObjectsJSON( jObj.children[0] );
902 else
903 throw new Error ("unrecoverable canvas import error - inconsistent root object: " + jObj.children );
904
905 if (!this._useWebGL)
906 {
907 // render using canvas 2D
908 this.render();
909 }
910 else
911 this.restartRenderLoop();
912}
913
914World.prototype.importObjectsJSON = function( jObj, parentGeomObj )
915{
916 // read the next object
917 var gObj = this.importObjectJSON( jObj, parentGeomObj );
918
919 // determine if we have children
920 if (jObj.children)
921 {
922 var nKids = ojObjbj.chilodren.length;
923 for (var i=0; i<nKids; i++)
924 {
925 var child = jObj.children[i];
926 this.importObjectsJSON( child, gObj );
927 }
928 }
929}
930
931World.prototype.importObjectJSON = function( jObj, parentGeomObj )
932{
933 var type = jObj.type;
934
935 var obj;
936 switch (type)
937 {
938 case 1:
939 obj = new Rectangle();
940 obj.importJSON( jObj );
941 break;
942
943 case 2: // circle
944 obj = new Circle();
945 obj.importJSON( jObj );
946 break;
947
948 case 3: // line
949 obj = new Line();
950 obj.importJSON( jObj );
951 break;
952
953 default:
954 throw new Error( "Unrecognized object type: " + type );
955 break;
956 }
957
958 if (obj)
959 this.addObject( obj, parentGeomObj );
960
961 return obj;
962};
963
964World.prototype.import = function( importStr ) {
814 // import the worldattributes - not currently used 965 // import the worldattributes - not currently used
815 966
816 // determine if the data was written for export (no Ninja objects) 967 // determine if the data was written for export (no Ninja objects)
817 // or for save/restore 968 // or for save/restore
818 //var index = importStr.indexOf( "scenedata: " ); 969 //var index = importStr.indexOf( "scenedata: " );
819 // Skip if we are toggling between canvas2d and WebGL since importStr doesn't have the correct webGL value yet 970 var index = importStr.indexOf( "webGL: " );
820 if(!fromToggle) { 971 this._useWebGL = (index >= 0)
821 var index = importStr.indexOf( "webGL: " );
822 this._useWebGL = (index >= 0)
823 }
824 if (this._useWebGL) 972 if (this._useWebGL)
825 { 973 {
826 // start RDGE 974 // start RDGE