<div dir="ltr">Here's my first attempt at shimming in SAI into X3DOM.  There's a lot more than this, found in Script.js in X3DJSONLD/src/main/node (ask me for a direct link if your really interested).<div><br></div><div>  console.log("var MFBool = x3dom.fields.MFBoolean;");<br>               console.log("var MFColor = x3dom.fields.MFColor;");<br>         console.log("var MFColorRGBA = x3dom.fields.MFColorRGBA;");<br>         console.log("var MFDouble = function() { return Array.prototype.slice.call(arguments, 0); };");<br>             console.log("var MFFloat = x3dom.fields.MFFloat;");<br>         console.log("var MFImage = function() { return Array.prototype.slice.call(arguments, 0); };");<br>              console.log("var MFInt32 = x3dom.fields.MFInt32;");<br>         console.log("var MFMatrix3d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>           console.log("var MFMatrix3f = function() { return Array.prototype.slice.call(arguments, 0); };");<br>           console.log("var MFMatrix4d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>           console.log("var MFMatrix4f = function() { return Array.prototype.slice.call(arguments, 0); };");<br>           console.log("var MFNode = x3dom.fields.MFNode;");<br>           console.log("var MFRotation = x3dom.fields.MFRotation;");<br>           console.log("var MFString = x3dom.fields.MFString;");<br>               console.log("var MFTime = function() { return Array.prototype.slice.call(arguments, 0); };");<br>               console.log("var MFVec2d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>              console.log("var MFVec2f = x3dom.fields.MFVec2f;");<br>         console.log("var MFVec3d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>              console.log("var MFVec3f = x3dom.fields.MFVec3f;");<br>         console.log("var MFVec4d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>              console.log("var MFVec4f = function() { return Array.prototype.slice.call(arguments, 0); };");<br><br>            console.log("var SFBool = Boolean;");<br><br>             console.log("var SFColor = x3dom.fields.SFColor;");<br>         console.log("var SFColorRGBA = x3dom.fields.SFColorRGBA;");<br><br>               console.log("var SFDouble = Number;");<br>              console.log("var SFFloat = Number;");<br>               console.log("var SFInt32 = Number;");<br><br>             console.log("var SFImage = x3dom.fields.SFImage;");<br>         console.log("var SFMatrix3d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>           console.log("var SFMatrix3f = function() { return Array.prototype.slice.call(arguments, 0); };");<br>           console.log("var SFMatrix4d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>           console.log("var SFMatrix4f = x3dom.fields.SFMatrix4f;");<br>           console.log("var SFNode = x3dom.fields.SFNode;");<br>           console.log("var Quaternion = x3dom.fields.Quaternion;");<br><br>         console.log("var SFString = String;");<br>              console.log("var SFTime = Number;");<br><br>              console.log("var SFVec2d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>              console.log("var SFVec2f = x3dom.fields.SFVec2f;");<br>         console.log("var SFVec3d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>              console.log("var SFVec3f = x3dom.fields.SFVec3f;");<br>         console.log("var SFVec4d = function() { return Array.prototype.slice.call(arguments, 0); };");<br>              console.log("var SFVec4f = x3dom.fields.SFVec4f;");</div><div><br></div><div>Note that MFNode and SFNode are ready to use in X3DOM already!</div><div><br></div><div>John<br><div><br></div><div><br><div><br></div><div><br></div></div></div></div>