|  | @@ -332,6 +332,57 @@ this.planeProto = function () {
 | 
	
		
			
				|  |  |      return node
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +this.createModelObj = function (mtlSrc, objSrc, name, avatar) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    var self = this;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    var position = "0 0 0";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    var nodeName = this.GUID();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (avatar) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        let myAvatar = this.children[avatar];
 | 
	
		
			
				|  |  | +        let cursorNode = myAvatar.avatarNode.myHead.myCursor.vis;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (cursorNode) {
 | 
	
		
			
				|  |  | +            position = cursorNode.worldPosition;
 | 
	
		
			
				|  |  | +            //console.log(position);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    let modelNode = {
 | 
	
		
			
				|  |  | +        "extends": "http://vwf.example.com/aframe/aobjmodel.vwf",
 | 
	
		
			
				|  |  | +        "properties": {
 | 
	
		
			
				|  |  | +            "src": '#' + objSrc,
 | 
	
		
			
				|  |  | +            "mtl": '#' + mtlSrc,
 | 
	
		
			
				|  |  | +            "position": position
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        children:{
 | 
	
		
			
				|  |  | +            "interpolation":
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                "extends": "http://vwf.example.com/aframe/interpolation-component.vwf",
 | 
	
		
			
				|  |  | +                "type": "component",
 | 
	
		
			
				|  |  | +                "properties": {
 | 
	
		
			
				|  |  | +                    "enabled": true
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (name) {
 | 
	
		
			
				|  |  | +        modelNode.properties.displayName = name;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    self.children.create(nodeName, modelNode, function( child ) {
 | 
	
		
			
				|  |  | +        if (avatar) child.lookAt(self.children[avatar].worldPosition)
 | 
	
		
			
				|  |  | +       });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  this.createModel = function (modelType, modelSrc, avatar) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      var self = this;
 | 
	
	
		
			
				|  | @@ -702,6 +753,12 @@ this.createAudio = function (itemSrc, name, node, avatar) {
 | 
	
		
			
				|  |  |          let newNode = self.cubeProto();
 | 
	
		
			
				|  |  |          newNode.properties.displayName = "audio";
 | 
	
		
			
				|  |  |          newNode.properties.position = position;
 | 
	
		
			
				|  |  | +        newNode.properties.width = 0.3;
 | 
	
		
			
				|  |  | +        newNode.properties.height = 0.3;
 | 
	
		
			
				|  |  | +        newNode.properties.depth= 0.3;
 | 
	
		
			
				|  |  | +        newNode.children.material.properties.opacity = 0.5;
 | 
	
		
			
				|  |  | +        newNode.children.material.properties.color = "yellow";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          newNode.children.sound = {
 | 
	
		
			
				|  |  |              
 | 
	
		
			
				|  |  |                  "extends": "http://vwf.example.com/aframe/a-sound-component.vwf",
 | 
	
	
		
			
				|  | @@ -725,6 +782,78 @@ this.createAudio = function (itemSrc, name, node, avatar) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +this.createGooglePoly = function(polyID, name, node, avatar){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // all done in aframe view driver
 | 
	
		
			
				|  |  | +    let params = [polyID, name, node, avatar];
 | 
	
		
			
				|  |  | +    this.loadGooglePolyAsset(params)
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +this.loadGooglePolyAsset = function( params ) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    var self = this;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const API_KEY = "AIzaSyCGx2_idlUJ88yW5GBkOllIkyxJyKbEgDk";
 | 
	
		
			
				|  |  | +    const id = params[0];
 | 
	
		
			
				|  |  | +    const avatarID = params[3];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    var url = `https://poly.googleapis.com/v1/assets/${id}/?key=${API_KEY}`;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    var request = new XMLHttpRequest();
 | 
	
		
			
				|  |  | +    request.open( 'GET', url, true );
 | 
	
		
			
				|  |  | +    request.addEventListener( 'load', function ( event ) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        var asset = JSON.parse( event.target.response );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // asset_name.textContent = asset.displayName;
 | 
	
		
			
				|  |  | +        // asset_author.textContent = asset.authorName;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        var format = asset.formats.find( format => { return format.formatType === 'OBJ'; } );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if ( format !== undefined ) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            var obj = format.root;
 | 
	
		
			
				|  |  | +            var mtl = format.resources.find( resource => { return resource.url.endsWith( 'mtl' ) } );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            var path = obj.url.slice( 0, obj.url.indexOf( obj.relativePath ) );
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            //const createOnNodeID = vwf.application();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            let mtlName = 'MTL-ASSET-'+ self.GUID();
 | 
	
		
			
				|  |  | +            let mtlNode = {
 | 
	
		
			
				|  |  | +                "extends": "http://vwf.example.com/aframe/a-asset-item.vwf",
 | 
	
		
			
				|  |  | +                "properties": {
 | 
	
		
			
				|  |  | +                    "itemID": mtlName,
 | 
	
		
			
				|  |  | +                    "itemSrc": mtl.url
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +            self.children.create(mtlName, mtlNode, function( mtlChild ) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                let objName = 'OBJ-ASSET-'+ self.GUID();
 | 
	
		
			
				|  |  | +                let objNode = {
 | 
	
		
			
				|  |  | +                    "extends": "http://vwf.example.com/aframe/a-asset-item.vwf",
 | 
	
		
			
				|  |  | +                    "properties": {
 | 
	
		
			
				|  |  | +                        "itemID": objName,
 | 
	
		
			
				|  |  | +                        "itemSrc": obj.url
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                self.children.create(objName, objNode, function( objChild ) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        self.createModelObj(mtlChild.itemID, objChild.itemID, asset.displayName, avatarID);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    } );
 | 
	
		
			
				|  |  | +    request.send( null );
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  this.GUID = function () {
 | 
	
		
			
				|  |  |      var self = this;
 |