-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaframe-vrml-component.min.js
More file actions
1 lines (1 loc) · 9.33 KB
/
Copy pathaframe-vrml-component.min.js
File metadata and controls
1 lines (1 loc) · 9.33 KB
1
!function(e){function r(s){if(o[s])return o[s].exports;var i=o[s]={exports:{},id:s,loaded:!1};return e[s].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}var o={};return r.m=e,r.c=o,r.p="",r(0)}([function(e,r,o){if(o(1),"undefined"==typeof AFRAME)throw"Component attempted to register before AFRAME was available.";AFRAME.registerComponent("vrml",{schema:{type:"src"},init:function(){var e=this.el,r=new THREE.VRMLLoader;r.load(this.data,function(r){e.setObject3D("vrml",r)})}})},function(e,r){THREE.VRMLLoader=function(e){this.manager=void 0!==e?e:THREE.DefaultLoadingManager},THREE.VRMLLoader.prototype={constructor:THREE.VRMLLoader,isRecordingPoints:!1,isRecordingFaces:!1,points:[],indexes:[],isRecordingAngles:!1,isRecordingColors:!1,angles:[],colors:[],recordingFieldname:null,load:function(e,r,o,s){var i=this,n=new THREE.XHRLoader(this.manager);n.load(e,function(e){r(i.parse(e))},o,s)},setCrossOrigin:function(e){this.crossOrigin=e},parse:function(e){var r=this.texturePath||"",o=new THREE.TextureLoader(this.manager);o.setCrossOrigin(this.crossOrigin);for(var s=function(e,r){console.warn("VRML V1.0 not supported yet")},i=function(e,s){var i={},n=/(\b|\-|\+)([\d\.e]+)/,t=/([\d\.\+\-e]+)\s+([\d\.\+\-e]+)/g,a=/([\d\.\+\-e]+)\s+([\d\.\+\-e]+)\s+([\d\.\+\-e]+)/g,l=function(e,r,o){var s=e.r-r.r,i=e.g-r.g,n=e.b-r.b,t=new THREE.Color;return t.r=e.r-o*s,t.g=e.g-o*i,t.b=e.b-o*n,t},c=function(e,r,o,s,i){for(var n,t,a,c,d,h,f,g,p=i?1:-1,u=["a","b","c","d"],x=[],v=1,E={},y={},m=!1,R=0;R<o.length;R++){var T={};T.y=p*(Math.cos(o[R])*r),T.x=p*(Math.sin(o[R])*r),x.push(T)}for(var F=0;F<e.faces.length;F++){n=e.faces[F],t=n instanceof THREE.Face3?3:4;for(var w=0;t>w;w++){c=n[u[w]],a=e.vertices[c];for(var C=0;C<s.length;C++)0===C?(E.x=0,E.y=i?r:-1*r):(E.x=x[C-1].x,E.y=x[C-1].y),y=x[C],void 0!==y?(m=i?a.y<=E.y&&a.y>y.y:a.y>=E.y&&a.y<y.y,m&&(f=s[C+1],h=s[C],v=Math.abs(a.y-E.y)/(E.y-y.y),d=l(h,f,v),n.vertexColors[w]=d)):void 0===n.vertexColors[w]&&(g=i?s.length-1:0,n.vertexColors[w]=s[g])}}},d=[],h=function(e,r){for(var o,s,i,l=[],c={},h=/[^\s,\[\]]+/g;null!=(o=h.exec(r));)l.push(o[0]);switch(s=l[0]){case"skyAngle":case"groundAngle":this.recordingFieldname=s,this.isRecordingAngles=!0,this.angles=[];break;case"skyColor":case"groundColor":this.recordingFieldname=s,this.isRecordingColors=!0,this.colors=[];break;case"point":this.recordingFieldname=s,this.isRecordingPoints=!0,this.points=[];break;case"coordIndex":case"texCoordIndex":this.recordingFieldname=s,this.isRecordingFaces=!0,this.indexes=[]}if(this.isRecordingFaces){if(l.length>0)for(var f=0;f<l.length;f++)/(-?\d+)/.test(l[f])&&("-1"===l[f]?(d.length>0&&this.indexes.push(d),d=[]):d.push(parseInt(l[f])));/]/.exec(r)&&(d.length>0&&this.indexes.push(d),d=[],this.isRecordingFaces=!1,e[this.recordingFieldname]=this.indexes)}else if(this.isRecordingPoints){if("Coordinate"==e.nodeType)for(;null!==(l=a.exec(r));)i={x:parseFloat(l[1]),y:parseFloat(l[2]),z:parseFloat(l[3])},this.points.push(i);if("TextureCoordinate"==e.nodeType)for(;null!==(l=t.exec(r));)i={x:parseFloat(l[1]),y:parseFloat(l[2])},this.points.push(i);/]/.exec(r)&&(this.isRecordingPoints=!1,e.points=this.points)}else if(this.isRecordingAngles){if(l.length>0)for(var f=0;f<l.length;f++)n.test(l[f])&&this.angles.push(parseFloat(l[f]));/]/.exec(r)&&(this.isRecordingAngles=!1,e[this.recordingFieldname]=this.angles)}else if(this.isRecordingColors){for(;null!==(l=a.exec(r));)color={r:parseFloat(l[1]),g:parseFloat(l[2]),b:parseFloat(l[3])},this.colors.push(color);/]/.exec(r)&&(this.isRecordingColors=!1,e[this.recordingFieldname]=this.colors)}else if("NULL"!==l[l.length-1]&&"children"!==s){switch(s){case"diffuseColor":case"emissiveColor":case"specularColor":case"color":if(4!=l.length){console.warn("Invalid color format detected for "+s);break}c={r:parseFloat(l[1]),g:parseFloat(l[2]),b:parseFloat(l[3])};break;case"translation":case"scale":case"size":if(4!=l.length){console.warn("Invalid vector format detected for "+s);break}c={x:parseFloat(l[1]),y:parseFloat(l[2]),z:parseFloat(l[3])};break;case"radius":case"topRadius":case"bottomRadius":case"height":case"transparency":case"shininess":case"ambientIntensity":if(2!=l.length){console.warn("Invalid single float value specification detected for "+s);break}c=parseFloat(l[1]);break;case"rotation":if(5!=l.length){console.warn("Invalid quaternion format detected for "+s);break}c={x:parseFloat(l[1]),y:parseFloat(l[2]),z:parseFloat(l[3]),w:parseFloat(l[4])};break;case"ccw":case"solid":case"colorPerVertex":case"convex":if(2!=l.length){console.warn("Invalid format detected for "+s);break}c="TRUE"===l[1]}e[s]=c}return c},f=function(e){for(var r,o,s={string:"Scene",children:[]},i=s,n=0;n<e.length;n++){var t="",a=e[n];if(null===(result=/^\s+?$/g.exec(a))&&(a=a.trim(),""!==a)){if(/#/.exec(a)){var l=a.split("#");a=l[0],t=l[1]}if(r=/([^\s]*){1}(?:\s+)?{/.exec(a)){var c={nodeType:r[1],string:a,parent:i,children:[],comment:t};i.children.push(c),i=c,/}/.exec(a)&&(o=/{(.*)}/.exec(a)[1],c.children.push(o),h(i,o),i=i.parent)}else/}/.exec(a)?i=i.parent:""!==a&&(h(i,a),i.children.push(a))}}return s},g=function(e,n){if("string"!=typeof e){var t=n;if("Transform"===e.nodeType||"Group"===e.nodeType){if(t=new THREE.Object3D,/DEF/.exec(e.string)&&(t.name=/DEF\s+([^\s]+)/.exec(e.string)[1],i[t.name]=t),void 0!==e.translation){var a=e.translation;t.position.set(a.x,a.y,a.z)}if(void 0!==e.rotation){var l=e.rotation;t.quaternion.setFromAxisAngle(new THREE.Vector3(l.x,l.y,l.z),l.w)}if(void 0!==e.scale){var d=e.scale;t.scale.set(d.x,d.y,d.z)}n.add(t)}else if("Shape"===e.nodeType)t=new THREE.Mesh,/DEF/.exec(e.string)&&(t.name=/DEF\s+([^\s]+)/.exec(e.string)[1],i[t.name]=t),n.add(t);else if("Background"===e.nodeType){var h=20,f=2e4,p=new THREE.SphereGeometry(f,h,h),u=new THREE.MeshBasicMaterial({fog:!1,side:THREE.BackSide});if(e.skyColor.length>1)c(p,f,e.skyAngle,e.skyColor,!0),u.vertexColors=THREE.VertexColors;else{var x=e.skyColor[0];u.color.setRGB(x.r,x.b,x.g)}if(s.add(new THREE.Mesh(p,u)),void 0!==e.groundColor){f=12e3;var v=new THREE.SphereGeometry(f,h,h,0,2*Math.PI,.5*Math.PI,1.5*Math.PI),E=new THREE.MeshBasicMaterial({fog:!1,side:THREE.BackSide,vertexColors:THREE.VertexColors});c(v,f,e.groundAngle,e.groundColor,!1),s.add(new THREE.Mesh(v,E))}}else{if(/geometry/.exec(e.string)){if("Box"===e.nodeType){var d=e.size;n.geometry=new THREE.BoxGeometry(d.x,d.y,d.z)}else if("Cylinder"===e.nodeType)n.geometry=new THREE.CylinderGeometry(e.radius,e.radius,e.height);else if("Cone"===e.nodeType)n.geometry=new THREE.CylinderGeometry(e.topRadius,e.bottomRadius,e.height);else if("Sphere"===e.nodeType)n.geometry=new THREE.SphereGeometry(e.radius);else if("IndexedFaceSet"===e.nodeType){for(var y,m,R,T=new THREE.Geometry,F=0,w=e.children.length;w>F;F++){var C,H=e.children[F];if("TextureCoordinate"===H.nodeType&&(R=H.points),"Coordinate"===H.nodeType){if(H.points)for(var b=0,M=H.points.length;M>b;b++){var k=H.points[b];C=new THREE.Vector3(k.x,k.y,k.z),T.vertices.push(C)}if(H.string.indexOf("DEF")>-1){var I=/DEF\s+([^\s]+)/.exec(H.string)[1];i[I]=T.vertices}if(H.string.indexOf("USE")>-1){var S=/USE\s+([^\s]+)/.exec(H.string)[1];T.vertices=i[S]}}}var V=0;if(e.coordIndex)for(var F=0,w=e.coordIndex.length;w>F;F++)for(y=e.coordIndex[F],e.texCoordIndex&&(m=e.texCoordIndex[F]),V=0;y.length>=3&&V<y.length-2;){var A=new THREE.Face3(y[0],y[V+(e.ccw?1:2)],y[V+(e.ccw?2:1)],null);R&&m&&T.faceVertexUvs[0].push([new THREE.Vector2(R[m[0]].x,R[m[0]].y),new THREE.Vector2(R[m[V+(e.ccw?1:2)]].x,R[m[V+(e.ccw?1:2)]].y),new THREE.Vector2(R[m[V+(e.ccw?2:1)]].x,R[m[V+(e.ccw?2:1)]].y)]),V++,T.faces.push(A)}else n.parent.remove(n);!1===e.solid&&(n.material.side=THREE.DoubleSide),T.solid=e.solid,T.computeFaceNormals(),T.computeBoundingSphere(),/DEF/.exec(e.string)&&(T.name=/DEF ([^\s]+)/.exec(e.string)[1],i[T.name]=T),n.geometry=T}return}if(/appearance/.exec(e.string)){for(var F=0;F<e.children.length;F++){var H=e.children[F];if("Material"===H.nodeType){var D=new THREE.MeshPhongMaterial;if(void 0!==H.diffuseColor){var L=H.diffuseColor;D.color.setRGB(L.r,L.g,L.b)}if(void 0!==H.emissiveColor){var B=H.emissiveColor;D.emissive.setRGB(B.r,B.g,B.b)}if(void 0!==H.specularColor){var d=H.specularColor;D.specular.setRGB(d.r,d.g,d.b)}if(void 0!==H.transparency){var a=H.transparency;D.opacity=Math.abs(1-a),D.transparent=!0}/DEF/.exec(e.string)&&(D.name=/DEF ([^\s]+)/.exec(e.string)[1],i[D.name]=D),n.material=D}if("ImageTexture"===H.nodeType){var G=/"([^"]+)"/.exec(H.children[0]);G&&(n.material.name=G[1],n.material.map=o.load(r+G[1]))}}return}}for(var F=0,M=e.children.length;M>F;F++){var H=e.children[F];g(e.children[F],t)}}else if(/USE/.exec(e)){var S=/USE\s+?([^\s]+)/.exec(e)[1];if(void 0==i[S])console.warn(S+" is not defined.");else if(/appearance/.exec(e)&&S)n.material=i[S].clone();else if(/geometry/.exec(e)&&S)n.geometry=i[S].clone(),void 0!==i[S].solid&&i[S].solid===!1&&(n.geometry.solid=!1,n.material.side=THREE.DoubleSide);else if(S){var t=i[S].clone();n.add(t)}}};g(f(e),s)},n=new THREE.Scene,t=e.split("\n"),a=t.length-1;a>-1;a--){if(/{.*[{\[]/.test(t[a])){var l=t[a].split("{").join("{\n").split("\n");l.unshift(1),l.unshift(a),t.splice.apply(t,l)}else if(/\].*}/.test(t[a])){var l=t[a].split("]").join("]\n").split("\n");l.unshift(1),l.unshift(a),t.splice.apply(t,l)}if(/}.*}/.test(t[a])){var l=t[a].split("}").join("}\n").split("\n");l.unshift(1),l.unshift(a),t.splice.apply(t,l)}t[a].indexOf("coord")>-1&&t[a].indexOf("[")<0&&t[a].indexOf("{")<0&&(t[a]+=" Coordinate {}")}var c=t.shift();return/V1.0/.exec(c)?s(t,n):/V2.0/.exec(c)&&i(t,n),n}}}]);