From 65ac78ccb83c8c7517c178779b830b714fd70f44 Mon Sep 17 00:00:00 2001
From: Amira Abdel-Rahman <amira-rahman@aucegypt.edu>
Date: Sun, 24 Nov 2019 19:08:33 -0500
Subject: [PATCH] enclosed globals

---
 .../assembly/main.js                          | 50 +++++++-------
 .../graph/main.js                             | 14 ++--
 01_Code/physical_computing_interface/main.js  | 65 +++++++++++--------
 .../threejs/assembly.js                       | 18 ++---
 .../threejs/grid.js                           | 60 ++++++++---------
 .../threejs/main.js                           | 14 ++--
 6 files changed, 115 insertions(+), 106 deletions(-)

diff --git a/01_Code/physical_computing_interface/assembly/main.js b/01_Code/physical_computing_interface/assembly/main.js
index d9be7bb..0ad0346 100644
--- a/01_Code/physical_computing_interface/assembly/main.js
+++ b/01_Code/physical_computing_interface/assembly/main.js
@@ -27,7 +27,7 @@ var globalZ=0;
 var globalRank=0;
 
 var voxelNum=0;
-var gridSize=6+4;//change 10 to changecube size
+var GLOBALS.gridSize=6+4;//change 10 to changecube size
 
 var stepsCap=100; //change with very big simulations
 
@@ -156,21 +156,21 @@ function declareGlobals(){
 	}
 	//starting positions and pickup stations
 	if(numberOfRobots>1){
-		robotState[1].leg1Pos=new THREE.Vector3((gridSize-1),(gridSize-2),0);
-		robotState[1].leg2Pos=new THREE.Vector3((gridSize-1),(gridSize-1),0);
-		startLocations[1]=new THREE.Vector3((gridSize-1)*voxelSpacing,(gridSize-1)*voxelSpacing,0*voxelSpacing);
+		robotState[1].leg1Pos=new THREE.Vector3((GLOBALS.gridSize-1),(GLOBALS.gridSize-2),0);
+		robotState[1].leg2Pos=new THREE.Vector3((GLOBALS.gridSize-1),(GLOBALS.gridSize-1),0);
+		startLocations[1]=new THREE.Vector3((GLOBALS.gridSize-1)*voxelSpacing,(GLOBALS.gridSize-1)*voxelSpacing,0*voxelSpacing);
 
 	}
 	if(numberOfRobots>2){
-		robotState[2].leg1Pos=new THREE.Vector3((gridSize-1),1,0);
-		robotState[2].leg2Pos=new THREE.Vector3((gridSize-1),0,0);
-		startLocations[2]=new THREE.Vector3((gridSize-1)*voxelSpacing,0*voxelSpacing,0*voxelSpacing);
+		robotState[2].leg1Pos=new THREE.Vector3((GLOBALS.gridSize-1),1,0);
+		robotState[2].leg2Pos=new THREE.Vector3((GLOBALS.gridSize-1),0,0);
+		startLocations[2]=new THREE.Vector3((GLOBALS.gridSize-1)*voxelSpacing,0*voxelSpacing,0*voxelSpacing);
 
 	}
 	if(numberOfRobots>3){
-		robotState[3].leg1Pos=new THREE.Vector3(1,gridSize-1,0);
-		robotState[3].leg2Pos=new THREE.Vector3(0,gridSize-1,0);
-		startLocations[3]=new THREE.Vector3(0*voxelSpacing,(gridSize-1)*voxelSpacing,0*voxelSpacing);
+		robotState[3].leg1Pos=new THREE.Vector3(1,GLOBALS.gridSize-1,0);
+		robotState[3].leg2Pos=new THREE.Vector3(0,GLOBALS.gridSize-1,0);
+		startLocations[3]=new THREE.Vector3(0*voxelSpacing,(GLOBALS.gridSize-1)*voxelSpacing,0*voxelSpacing);
 	}
 	
 }
@@ -1083,21 +1083,21 @@ function move(robotIndex){
 }
 
 function builtShape(){
-	for(var i=0;i<gridSize;i++)
+	for(var i=0;i<GLOBALS.gridSize;i++)
 	{
 		var t=[];
 		grid.push(t)
-		for(var j=0;j<gridSize;j++)
+		for(var j=0;j<GLOBALS.gridSize;j++)
 		{
 			var tt=[];
 			grid[i].push(tt);
-			for(var k=0;k<gridSize;k++)
+			for(var k=0;k<GLOBALS.gridSize;k++)
 			{
 				grid[i][j].push(false);
 			}	
 		}
 	}
-	for(var i=gridSize/2.0;i<gridSize;i++)
+	for(var i=GLOBALS.gridSize/2.0;i<GLOBALS.gridSize;i++)
 	{
 		grid[i][0][0]=true;
 		locations.push(new THREE.Vector3(i*voxelSpacing,0,0)); //TODO CHANGE LATER BASED ON NUMBER OF ROBOTS
@@ -1733,24 +1733,24 @@ function loadVoxel(){
 
 function frepVoxel(rangeX,rangeY,rangeZ,stringFunction){
 	//build grid
-	for(var i=0;i<gridSize;i++)
+	for(var i=0;i<GLOBALS.gridSize;i++)
 	{
 		var t=[];
 		grid.push(t)
-		for(var j=0;j<gridSize;j++)
+		for(var j=0;j<GLOBALS.gridSize;j++)
 		{
 			var tt=[];
 			grid[i].push(tt);
-			for(var k=0;k<gridSize;k++)
+			for(var k=0;k<GLOBALS.gridSize;k++)
 			{
 				grid[i][j].push(false);
 			}	
 		}
 	}
 	//build first layer
-	for(var i=0;i<gridSize;i++)
+	for(var i=0;i<GLOBALS.gridSize;i++)
 	{
-		for(var j=0;j<gridSize;j++)
+		for(var j=0;j<GLOBALS.gridSize;j++)
 		{
 			buildVoxelAt(new THREE.Vector3(i*voxelSpacing,j*voxelSpacing,0));
 			grid[i][j][0]=true;	
@@ -1760,16 +1760,16 @@ function frepVoxel(rangeX,rangeY,rangeZ,stringFunction){
 	// string function= "Math.min(Math.min(Math.min(Math.min(X-(-1),(1)-X),Math.min(Y-(-1),(1)-Y)),Math.min(Z-(-1),(1)-Z)),-(Math.min(Math.min(Math.min(X-(-0.8),(0.8)-X),Math.min(Y-(-0.8),(0.8)-Y)),Math.min(Z-(-0.8),(0.8)-Z))))";
 	var maxZslices=[];
 	var tempVoxelSlices=[];
-	for (var Z=0;Z<gridSize;Z++)
+	for (var Z=0;Z<GLOBALS.gridSize;Z++)
 	{
 		voxelSlices.push([]);
 		tempVoxelSlices.push([]);
 		voxelSlicesCount.push([]);
 		var max=- Infinity;
 		var maxIndex=new THREE.Vector3(0,0,0);
-		for (var Y=0;Y<gridSize;Y++)
+		for (var Y=0;Y<GLOBALS.gridSize;Y++)
 		{
-			for (var X=0;X<gridSize;X++)
+			for (var X=0;X<GLOBALS.gridSize;X++)
 			{
 				var func= frep(X,Y,Z);
 
@@ -1790,7 +1790,7 @@ function frepVoxel(rangeX,rangeY,rangeZ,stringFunction){
 		maxZslices.push(maxIndex);//check if right later
 	}
 
-	for (var Z=0;Z<gridSize;Z++)
+	for (var Z=0;Z<GLOBALS.gridSize;Z++)
 	{
 		
 		for(var i=0;i<tempVoxelSlices[Z].length;i++)
@@ -1825,7 +1825,7 @@ function frep(X,Y,Z){
 	// return Math.min(Math.min(Math.min(Math.min(X-(2),(5)-X),Math.min(Y-(2),(5)-Y)),Math.min(Z-(1),(5)-Z)),-(Math.min(Math.min(Math.min(X-(3),(6)-X),Math.min(Y-(3),(6)-Y)),Math.min(Z-(0),(4)-Z))));
 	// return Math.min(Math.min(Math.min(Math.min(X-(2),(7)-X),Math.min(Y-(2),(7)-Y)),Math.min(Z-(1),(6)-Z)),-(Math.min(Math.min(Math.min(X-(3),(6)-X),Math.min(Y-(3),(6)-Y)),Math.min(Z-(0),(7)-Z))));//empty cube
 	// return Math.min(((6)-Z),(Math.min((Z-(1)),(((3*(5-(Z-(1)))/5)*(3*(5-(Z-(1)))/5)-((X-(5))*(X-(5))+(Y-(5))*(Y-(5))))))));//CONE
-	return Math.min(Math.min(Math.min(X-(2),((gridSize-3))-X),Math.min(Y-(2),((gridSize-3))-Y)),Math.min(Z-(1),((gridSize-4))-Z)); //CUBE
+	return Math.min(Math.min(Math.min(X-(2),((GLOBALS.gridSize-3))-X),Math.min(Y-(2),((GLOBALS.gridSize-3))-Y)),Math.min(Z-(1),((GLOBALS.gridSize-4))-Z)); //CUBE
 }
 
 function buildVoxelAt(loc){
@@ -2090,7 +2090,7 @@ function findPath(robotIndex,leg1Pos, leg2Pos, up, forward, targetPos, order){
 }
 
 function voxelAt(location){
-	if(location.x<0||location.y<0||location.z<0||location.x>=gridSize||location.y>=gridSize||location.z>=gridSize)
+	if(location.x<0||location.y<0||location.z<0||location.x>=GLOBALS.gridSize||location.y>=GLOBALS.gridSize||location.z>=GLOBALS.gridSize)
 	{
 		return false;
 	}
diff --git a/01_Code/physical_computing_interface/graph/main.js b/01_Code/physical_computing_interface/graph/main.js
index 1e7c916..2a4fc6f 100644
--- a/01_Code/physical_computing_interface/graph/main.js
+++ b/01_Code/physical_computing_interface/graph/main.js
@@ -163,7 +163,7 @@ document.addEventListener('DOMContentLoaded', function(){
                 
     });
 
-    addLayerNodes(gridSize/2);
+    addLayerNodes(GLOBALS.gridSize/2);
     function addLayerNodes(n){
         for(var i=0;i<n;i++){
             cy.add({
@@ -178,8 +178,8 @@ document.addEventListener('DOMContentLoaded', function(){
                     }
                 },
                 position: {
-                    x: i*voxelSpacing,
-                    y: i*voxelSpacing
+                    x: i*GLOBALS.voxelSpacing,
+                    y: i*GLOBALS.voxelSpacing
                 }
             });
             if(i>0){
@@ -200,7 +200,7 @@ document.addEventListener('DOMContentLoaded', function(){
         // var nodes = this;
         selectedjson=this._private.data.data;
         // console.log(this._private.data);
-        var pos=getXYZfromName(this._private.data.id);
+        var pos=utils.getXYZfromName(this._private.data.id);
         selectNode(pos.x,pos.y,pos.z);
     });
     document.addEventListener('selectNode', function (e) { 
@@ -275,7 +275,7 @@ document.addEventListener('DOMContentLoaded', function(){
         x=parseInt(x);
         y=parseInt(y);
         z=parseInt(z);
-        var list=getNeighboursList(grid,x,y,z);
+        var list=utils.getNeighboursList(grid,x,y,z);
         
         for(var i=0;i<list.length;i++){
             var i1,j1,k1;
@@ -303,12 +303,12 @@ document.addEventListener('DOMContentLoaded', function(){
     cy.on('cxttap', 'node', function( evt ){
         var tgt = evt.target || evt.cyTarget; // 3.x || 2.x
         // console.log(tgt._private.data.id);
-        var pos=getXYZfromName(tgt._private.data.id);
+        var pos=utils.getXYZfromName(tgt._private.data.id);
         if(tgt._private.data.name=="N/A"){
             tgt.remove();
 
         }else{
-            removeNode(pos.x,pos.y,pos.z);
+            GLOBALS.removeNode(pos.x,pos.y,pos.z);
         }
         
     });
diff --git a/01_Code/physical_computing_interface/main.js b/01_Code/physical_computing_interface/main.js
index e03123e..2098271 100644
--- a/01_Code/physical_computing_interface/main.js
+++ b/01_Code/physical_computing_interface/main.js
@@ -1,15 +1,18 @@
-var gridSize=20;
-var voxelSpacing=50;
-var color1= 0xffffff; /*white*/
-var color2= 0x020227;  /*kohly*/
-var color3= 0x1c5c61; /*teal*/
-var color4= 0xfa6e70; //red/orange
-var color5=0x380152; //purple
-var color6=0x696767; //grey
+function globals(){
+    this.gridSize=20;
+    this.voxelSpacing=50;
+    this.color1= 0xffffff; /*white*/
+    this.color2= 0x020227;  /*kohly*/
+    this.color3= 0x1c5c61; /*teal*/
+    this.color4= 0xfa6e70; //red/orange
+    this.color5=0x380152; //purple
+    this.color6=0x696767; //grey
+
+}
 
-//////////////////////events//////////////////
 
-function addNode (x,y,z,replay=false){
+//////////////////////events//////////////////
+globals.prototype.addNode=function (x,y,z,replay=false){
     x=parseInt(x);
     y=parseInt(y);
     z=parseInt(z);
@@ -20,16 +23,16 @@ function addNode (x,y,z,replay=false){
             y:y,
             z:z,
             id:'[' +x +"," +y+","+z+']',
-            posX:(x-gridSize/2)*voxelSpacing+voxelSpacing/2,
-            posY:(y-gridSize/2)*voxelSpacing+voxelSpacing/2,
-            posZ:(z)*voxelSpacing+voxelSpacing/2,
+            posX:(x-this.gridSize/2)*this.voxelSpacing+this.voxelSpacing/2,
+            posY:(y-this.gridSize/2)*this.voxelSpacing+this.voxelSpacing/2,
+            posZ:(z)*this.voxelSpacing+this.voxelSpacing/2,
             replay:replay
         }
     });
     document.dispatchEvent(addNodeEvent);
 }
 
-function removeNode (x,y,z,replay=false){
+globals.prototype.removeNode=function (x,y,z,replay=false){
     x=parseInt(x);
     y=parseInt(y);
     z=parseInt(z);
@@ -40,16 +43,16 @@ function removeNode (x,y,z,replay=false){
             y:y,
             z:z,
             id:'[' +x +"," +y+","+z+']',
-            posX:(x-gridSize/2)*voxelSpacing+voxelSpacing/2,
-            posY:(y-gridSize/2)*voxelSpacing+voxelSpacing/2,
-            posZ:(z)*voxelSpacing+voxelSpacing/2,
+            posX:(x-this.gridSize/2)*this.voxelSpacing+this.voxelSpacing/2,
+            posY:(y-this.gridSize/2)*this.voxelSpacing+this.voxelSpacing/2,
+            posZ:(z)*this.voxelSpacing+this.voxelSpacing/2,
             replay:replay
         }
     });
     document.dispatchEvent(removeNodeEvent);
 }
 
-function adjustTimeStep (addRemove,x,y,z){
+globals.prototype.adjustTimeStep=function (addRemove,x,y,z){
     var adjustTimeStepEvent = new CustomEvent('adjustTimeStep', { 
         detail: 
         {
@@ -58,15 +61,15 @@ function adjustTimeStep (addRemove,x,y,z){
             z:z,
             id:'[' +x +"," +y+","+z+']',
             addRemove:addRemove,
-            posX:(x-gridSize/2)*voxelSpacing+voxelSpacing/2,
-            posY:(y-gridSize/2)*voxelSpacing+voxelSpacing/2,
-            posZ:(z)*voxelSpacing+voxelSpacing/2
+            posX:(x-this.gridSize/2)*this.voxelSpacing+this.voxelSpacing/2,
+            posY:(y-this.gridSize/2)*this.voxelSpacing+this.voxelSpacing/2,
+            posZ:(z)*this.voxelSpacing+this.voxelSpacing/2
         }
     });
     document.dispatchEvent(adjustTimeStepEvent);
 }
 
-function selectNode (x,y,z){
+globals.prototype.selectNode=function (x,y,z){
     var selectNodeEvent = new CustomEvent('selectNode', { 
         detail: 
         {
@@ -74,9 +77,9 @@ function selectNode (x,y,z){
             y:y,
             z:z,
             id:'[' +x +"," +y+","+z+']',
-            posX:(x-gridSize/2)*voxelSpacing+voxelSpacing/2,
-            posY:(y-gridSize/2)*voxelSpacing+voxelSpacing/2,
-            posZ:(z)*voxelSpacing+voxelSpacing/2
+            posX:(x-this.gridSize/2)*this.voxelSpacing+this.voxelSpacing/2,
+            posY:(y-this.gridSize/2)*this.voxelSpacing+this.voxelSpacing/2,
+            posZ:(z)*this.voxelSpacing+this.voxelSpacing/2
         }
     });
     document.dispatchEvent(selectNodeEvent);
@@ -84,15 +87,16 @@ function selectNode (x,y,z){
 //////////////////////////////////////////////
 
 //////////////////////utils//////////////////
-//TODO: ADD CLOSURE utils
-function getXYZfromName(name){
+function utilities(){
+};
+utilities.prototype.getXYZfromName=function(name){
     var nums=name.match(/\d+/g);
     var x=nums[0];
     var y=nums[1];
     var z=nums[2];
     return new THREE.Vector3(x,y,z);
 }
-function getNeighboursList(grid,x,y,z){
+utilities.prototype.getNeighboursList=function(grid,x,y,z){
     var list=[];
     for(var i=0;i<grid.neighbors.length;i++){
         //if 0,4,8
@@ -134,6 +138,11 @@ function getNeighboursList(grid,x,y,z){
 }
 //////////////////////////////////////////////
 
+/////////////////FUNCTION CALLS//////////////
+var GLOBALS=new globals();
+var utils= new utilities();
+
+
 //////////performance calculations/////////////////
 
 
diff --git a/01_Code/physical_computing_interface/threejs/assembly.js b/01_Code/physical_computing_interface/threejs/assembly.js
index 58823e3..8e769f5 100644
--- a/01_Code/physical_computing_interface/threejs/assembly.js
+++ b/01_Code/physical_computing_interface/threejs/assembly.js
@@ -11,11 +11,11 @@ slider.oninput = function() {
 //TODO: ADD CLOSURE GLOBAL
 
 var occupancy=[];
-for (var i=0;i<gridSize;++i){
+for (var i=0;i<GLOBALS.gridSize;++i){
     occupancy.push([]);
-    for (var j=0;j<gridSize;++j){
+    for (var j=0;j<GLOBALS.gridSize;++j){
         occupancy[i].push([]);
-        for (var k=0;k<gridSize;++k){
+        for (var k=0;k<GLOBALS.gridSize;++k){
             occupancy[i][j].push(false);
         }
     }
@@ -28,7 +28,7 @@ document.addEventListener('addNode', function (e) {
     
     if(!e.detail.replay){
         console.log("Add:"+e.detail.x+" "+e.detail.y+" "+e.detail.z);
-        adjustTimeStep(true,e.detail.x,e.detail.y,e.detail.z);
+        GLOBALS.adjustTimeStep(true,e.detail.x,e.detail.y,e.detail.z);
     }else{
         console.log("Replay Add:"+e.detail.x+" "+e.detail.y+" "+e.detail.z);
     }
@@ -39,7 +39,7 @@ document.addEventListener('addNode', function (e) {
 document.addEventListener('removeNode', function (e) { 
     if(!e.detail.replay){
         console.log("Remove:"+e.detail.x+" "+e.detail.y+" "+e.detail.z);
-        adjustTimeStep(false,e.detail.x,e.detail.y,e.detail.z);
+        GLOBALS.adjustTimeStep(false,e.detail.x,e.detail.y,e.detail.z);
         
     }else{
         console.log("Replay Remove:"+e.detail.x+" "+e.detail.y+" "+e.detail.z);
@@ -77,9 +77,9 @@ function replay(currValue){
                 console.log("update occupancy to timestep "+ii);
                 // console.log(occupancy);
                 if(!timeline[ii][j].addRemove){
-                    addNode(timeline[ii][j].x,timeline[ii][j].y,timeline[ii][j].z,true);
+                    GLOBALS.addNode(timeline[ii][j].x,timeline[ii][j].y,timeline[ii][j].z,true);
                 }else{
-                    removeNode(timeline[ii][j].x,timeline[ii][j].y,timeline[ii][j].z,true);
+                    GLOBALS.removeNode(timeline[ii][j].x,timeline[ii][j].y,timeline[ii][j].z,true);
                 }
             }
         }
@@ -97,9 +97,9 @@ function replay(currValue){
                 console.log("update occupancy to timestep "+ii);
                 // console.log(occupancy);
                 if(timeline[ii][j].addRemove){
-                    addNode(timeline[ii][j].x,timeline[ii][j].y,timeline[ii][j].z,true);
+                    GLOBALS.addNode(timeline[ii][j].x,timeline[ii][j].y,timeline[ii][j].z,true);
                 }else{
-                    removeNode(timeline[ii][j].x,timeline[ii][j].y,timeline[ii][j].z,true);
+                    GLOBALS.removeNode(timeline[ii][j].x,timeline[ii][j].y,timeline[ii][j].z,true);
                 }
             }
 
diff --git a/01_Code/physical_computing_interface/threejs/grid.js b/01_Code/physical_computing_interface/threejs/grid.js
index e9f47db..11f04ed 100644
--- a/01_Code/physical_computing_interface/threejs/grid.js
+++ b/01_Code/physical_computing_interface/threejs/grid.js
@@ -10,7 +10,7 @@ var gridPresets={
         yLayerOffset:0.0,
         zLayerRotation:0.0,
         doubleOffset:false,
-        voxelSpacing:voxelSpacing,
+        voxelSpacing:GLOBALS.voxelSpacing,
         voxelScaleX:0.95,
         voxelScaleY:0.95,
         voxelScaleZ:0.95,
@@ -41,7 +41,7 @@ var gridPresets={
         yLayerOffset:0.0,
         zLayerRotation:0.0,
         doubleOffset:false,
-        voxelSpacing:voxelSpacing,
+        voxelSpacing:GLOBALS.voxelSpacing,
         voxelScaleX:1.0,
         voxelScaleY:1.0,
         voxelScaleZ:1.0,
@@ -72,7 +72,7 @@ var gridPresets={
         yLayerOffset:0.5,
         zLayerRotation:0.0,
         doubleOffset:false,
-        voxelSpacing:voxelSpacing,
+        voxelSpacing:GLOBALS.voxelSpacing,
         voxelScaleX:1.0,
         voxelScaleY:1.0,
         voxelScaleZ:1.0,
@@ -105,7 +105,7 @@ var gridPresets={
         yLayerOffset:1.0/Math.sqrt(12),
         zLayerRotation:0.0,
         doubleOffset:false,
-        voxelSpacing:voxelSpacing,
+        voxelSpacing:GLOBALS.voxelSpacing,
         voxelScaleX:1.0,
         voxelScaleY:1.0,
         voxelScaleZ:1.0,
@@ -136,7 +136,7 @@ var gridPresets={
         xLayerOffset:0.0,
         yLayerOffset:0.5,
         zLayerRotation:Math.PI/2.0,
-        voxelSpacing:voxelSpacing,
+        voxelSpacing:GLOBALS.voxelSpacing,
         doubleOffset:false,
         voxelScaleX:0.5,
         voxelScaleY:0.9,
@@ -167,7 +167,7 @@ var gridPresets={
         xLayerOffset2:0.5,
         yLayerOffset2:0.5,
         zLayerRotation:Math.PI/2.0,
-        voxelSpacing:voxelSpacing,
+        voxelSpacing:GLOBALS.voxelSpacing,
         voxelScaleX:0.5,
         voxelScaleY:0.9,
         voxelScaleZ:0.2,
@@ -222,7 +222,7 @@ function threejs(){
     this.container = document.getElementById( 'webgl' );
     // var container1 = document.getElementById( 'threejs' );
     this.controls;
-    this.voxelSpacing=50.0;
+    this.voxelSpacing=GLOBALS.voxelSpacing;
     this.occupancyHelper;
     this.voxels=[];
 }
@@ -230,19 +230,19 @@ function threejs(){
 threejs.prototype.init=function() {
     this.camera = new THREE.PerspectiveCamera( 45, this.getWidth()/ this.getHeight()  , 1, 10000 );
     this.camera.position.set( 500, 800, 1300 );
-    this.camera.lookAt( gridSize/2, 0, gridSize/2 );
+    this.camera.lookAt( GLOBALS.gridSize/2, 0, GLOBALS.gridSize/2 );
     this.scene = new THREE.Scene();
     this.scene.background = new THREE.Color( 0xffffff );
 
-    this.cubeGeo = new THREE.BoxBufferGeometry( voxelSpacing, voxelSpacing, voxelSpacing );
-    this.sphereGeo = new THREE.SphereGeometry( voxelSpacing/2, 32, 32 );
+    this.cubeGeo = new THREE.BoxBufferGeometry( this.voxelSpacing, this.voxelSpacing, this.voxelSpacing );
+    this.sphereGeo = new THREE.SphereGeometry( this.voxelSpacing/2, 32, 32 );
     this.cubeMaterial = new THREE.MeshPhongMaterial( { color: 0x1c5c61 } );
 
     // grid
-    var gridHelper = new THREE.GridHelper( (gridSize)*voxelSpacing, gridSize );
-    gridHelper.position.x=gridSize/2.0*voxelSpacing-voxelSpacing/2.0;
-    gridHelper.position.z=gridSize/2.0*voxelSpacing-voxelSpacing/2.0;
-    gridHelper.position.y=-voxelSpacing/2.0*grid.voxelScaleZ;
+    var gridHelper = new THREE.GridHelper( (GLOBALS.gridSize)*this.voxelSpacing, GLOBALS.gridSize );
+    gridHelper.position.x=GLOBALS.gridSize/2.0*this.voxelSpacing-this.voxelSpacing/2.0;
+    gridHelper.position.z=GLOBALS.gridSize/2.0*this.voxelSpacing-this.voxelSpacing/2.0;
+    gridHelper.position.y=-this.voxelSpacing/2.0*grid.voxelScaleZ;
 
     gridHelper.scale.x=grid.xScale;
     gridHelper.scale.z=grid.yScale;
@@ -252,8 +252,8 @@ threejs.prototype.init=function() {
 
 
     // roll-over helpers
-    var rollOverGeo = new THREE.BoxBufferGeometry( voxelSpacing, voxelSpacing, voxelSpacing  );
-    this.rollOverMaterial = new THREE.MeshBasicMaterial( { color: color4, opacity: 0.8, transparent: true } );
+    var rollOverGeo = new THREE.BoxBufferGeometry( this.voxelSpacing, this.voxelSpacing, this.voxelSpacing  );
+    this.rollOverMaterial = new THREE.MeshBasicMaterial( { color: GLOBALS.color4, opacity: 0.8, transparent: true } );
     this.rollOverMesh = new THREE.Mesh( rollOverGeo, this.rollOverMaterial );
     this.rollOverMesh.scale.x=grid.voxelScaleX;
     this.rollOverMesh.scale.z=grid.voxelScaleY;
@@ -269,15 +269,15 @@ threejs.prototype.init=function() {
     // objects.push( plane );
     
     this.helperPosition = new Float32Array( 1 * 3 );
-    var c = new THREE.Color( color1 );
+    var c = new THREE.Color( GLOBALS.color1 );
     this.helperColor = new Float32Array( 1 * 3 );
     this.helperColor[0]=c.r;
     this.helperColor[1]=c.g;
     this.helperColor[2]=c.b;
-    this.helperMaterial = new THREE.PointsMaterial( { size: 5, vertexColors: THREE.VertexColors,color:color3 } );
+    this.helperMaterial = new THREE.PointsMaterial( { size: 5, vertexColors: THREE.VertexColors,color:GLOBALS.color3 } );
 
-    this.buildGrid(gridSize);
-    this.createHelperMeshes(gridSize);
+    this.buildGrid(GLOBALS.gridSize);
+    this.createHelperMeshes(GLOBALS.gridSize);
     
 
     // var axesHelper = new THREE.AxesHelper( 20 *grid.voxelSpacing);
@@ -297,7 +297,7 @@ threejs.prototype.init=function() {
     
     this.container.appendChild( this.renderer.domElement );
     this.controls = new THREE.OrbitControls( this.camera, this.renderer.domElement );
-    this.controls.target=new THREE.Vector3( gridSize/2*voxelSpacing,0 ,gridSize/2*voxelSpacing );
+    this.controls.target=new THREE.Vector3( GLOBALS.gridSize/2*this.voxelSpacing,0 ,GLOBALS.gridSize/2*this.voxelSpacing );
     this.controls.update();
     
     // document.body.appendChild( renderer.domElement );
@@ -494,7 +494,7 @@ threejs.prototype.buildHelperSnap=function(grid,x,y,z){
 
 threejs.prototype.buildNeighbourHelpers=function(grid, x, y,z){
 
-    var list=getNeighboursList(grid,x,y,z); //TODO ENCLOSE
+    var list=utils.getNeighboursList(grid,x,y,z); 
     
     for(var i=0;i<list.length;i++){
         var x1,y1,z1;
@@ -516,7 +516,7 @@ threejs.prototype.helperAt=function(x,y,z){
     if(x<0||y<0||z<0){
         return false;
     }
-    if(x>=gridSize||y>=gridSize||z>=gridSize){
+    if(x>=GLOBALS.gridSize||y>=GLOBALS.gridSize||z>=GLOBALS.gridSize){
         return false;
     }
     if(occupancy[x][y][z]||this.occupancyHelper[x][y][z]){
@@ -529,7 +529,7 @@ threejs.prototype.helperAt=function(x,y,z){
 
 threejs.prototype.updateHelperMeshesAfterRemove=function(grid,x,y,z){
     this.buildHelperSnap(grid,x,y,z);
-    var list=getNeighboursList(grid,x,y,z); //TODO ENCLOSE
+    var list=utils.getNeighboursList(grid,x,y,z); //TODO ENCLOSE
     
     for(var i=0;i<list.length;i++){
         var x1,y1,z1;
@@ -583,7 +583,7 @@ function onDocumentMouseMoveThree( event ) {
     var intersects = three.raycaster.intersectObjects( three.objects );
     if ( intersects.length > 0 ) {
         var intersect = intersects[ 0 ];
-        var obj=getXYZfromName(intersect.object.name);
+        var obj=utils.getXYZfromName(intersect.object.name);
 
         [p_x ,p_y ,p_z ,s_x ,s_y,s_z,r_y]=three.getTransforms(grid,obj.x, obj.y,obj.z);
         // console.log(getTransforms(grid,x, y,z))
@@ -620,14 +620,14 @@ function onDocumentMouseDownThree( event ) {
     if ( intersects.length > 0  ||intersects1.length>0){
         if(event.which==1 && intersects.length > 0) { //left click
             var intersect = intersects[ 0 ];
-            var obj=getXYZfromName(intersect.object.name);
-            obj=getXYZfromName(three.rollOverMesh.name);
-            addNode (obj.x, obj.y,obj.z);
+            var obj=utils.getXYZfromName(intersect.object.name);
+            obj=utils.getXYZfromName(three.rollOverMesh.name);
+            GLOBALS.addNode (obj.x, obj.y,obj.z);
         }else if ( intersects1.length > 0 && event.which==3){//right click
                 var intersect = intersects1[ 0 ];
                 // console.log(intersect.object);
-                var obj=getXYZfromName(intersect.object.name);
-                removeNode(obj.x,obj.y,obj.z);
+                var obj=utils.getXYZfromName(intersect.object.name);
+                GLOBALS.removeNode(obj.x,obj.y,obj.z);
         }
         three.render();
     }
diff --git a/01_Code/physical_computing_interface/threejs/main.js b/01_Code/physical_computing_interface/threejs/main.js
index b9714c9..fb0ceeb 100644
--- a/01_Code/physical_computing_interface/threejs/main.js
+++ b/01_Code/physical_computing_interface/threejs/main.js
@@ -136,8 +136,8 @@ function onDocumentMouseDownThree( event ) {
             if ( intersect.object !== three.plane ) {
                 // scene.remove( intersect.object );
                 // console.log(intersect.object.name);
-                var pos=getXYZfromName(intersect.object.name);
-                removeNode(pos.x,pos.y,pos.z);
+                var pos=utils.getXYZfromName(intersect.object.name);
+                GLOBALS.removeNode(pos.x,pos.y,pos.z);
                 // objects.splice( objects.indexOf( intersect.object ), 1 );
             }
             // create cube
@@ -147,14 +147,14 @@ function onDocumentMouseDownThree( event ) {
 
             voxel.position.copy( intersect.point ).add( intersect.face.normal );
 
-            var x=Math.floor(voxel.position.x/voxelSpacing)+gridSize/2;
+            var x=Math.floor(voxel.position.x/voxelSpacing)+GLOBALS.gridSize/2;
             var y=Math.floor(voxel.position.y/voxelSpacing);
-            var z=Math.floor(voxel.position.z/voxelSpacing)+gridSize/2;
+            var z=Math.floor(voxel.position.z/voxelSpacing)+GLOBALS.gridSize/2;
             if(y<0){
                 y=0;
             }
 
-            addNode (x,z ,y); //y is up
+            GLOBALS.addNode (x,z ,y); //y is up
             // voxel.name='[' +x +"," +z+","+y+']';
 
             // voxel.position.divideScalar( voxelSpacing ).floor().multiplyScalar( voxelSpacing ).addScalar( voxelSpacing/2 );
@@ -171,9 +171,9 @@ document.addEventListener('addNode', function (e) {
     var voxel = new THREE.Mesh( three.cubeGeo, three.cubeMaterial );
             
     // voxel.position.copy( intersect.point ).add( intersect.face.normal );
-    // var x=Math.floor(voxel.position.x/voxelSpacing)+gridSize/2;
+    // var x=Math.floor(voxel.position.x/voxelSpacing)+GLOBALS.gridSize/2;
     // var y=Math.floor(voxel.position.y/voxelSpacing);
-    // var z=Math.floor(voxel.position.z/voxelSpacing)+gridSize/2;
+    // var z=Math.floor(voxel.position.z/voxelSpacing)+GLOBALS.gridSize/2;
     voxel.position.x=e.detail.posX;
     voxel.position.y=e.detail.posZ;
     voxel.position.z=e.detail.posY;
-- 
GitLab