UNPKG

x_ite

Version:

X_ITE X3D Browser, view and manipulate X3D, VRML, glTF and other 3D sources in HTML.

1,378 lines (1,127 loc) 3.44 MB
/* X_ITE v12.0.4 */ var __webpack_modules__ = ({ /***/ 121: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _Fields_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2152); /* harmony import */ var _Base_X3DBaseNode_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1552); /* harmony import */ var _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8021); /* harmony import */ var _Base_X3DField_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(988); /* harmony import */ var _Fields_SFNodeCache_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4060); /* harmony import */ var _Namespace_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(8282); const _metaDataCallbacks = Symbol (); function X3DNode (executionContext) { _Base_X3DBaseNode_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A .call (this, executionContext); this .addType (_Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .X3DNode); } Object .assign (Object .setPrototypeOf (X3DNode .prototype, _Base_X3DBaseNode_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A .prototype), { getComponentInfo () { return this .constructor .componentInfo; }, getContainerField () { return this .constructor .containerField; }, getSpecificationRange () { return this .constructor .specificationRange; }, create (executionContext = this .getExecutionContext ()) { return new (this .constructor) (executionContext); }, copy (instance) { if (instance ?.getType () .includes (_Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .X3DExecutionContext) ?? true) { const copy = this .create (instance); for (const field of this .getPredefinedFields ()) copy .getPredefinedFields () .get (field .getName ()) .assign (field); if (this .canUserDefinedFields ()) { for (const field of this .getUserDefinedFields ()) copy .addUserDefinedField (field .getAccessType (), field .getName (), field .copy ()); } return copy; } else { const executionContext = instance .getBody (); // First try to get a named node with the node's name. if (this .getName () .length) { const namedNode = executionContext .getNamedNodes () .get (this .getName ()); if (namedNode) return namedNode .getValue (); } // Create copy. const copy = this .create (executionContext); // Support editing of protos. if (this .getNeedsName ()) this .getExecutionContext () .updateNamedNode (this .getExecutionContext () .getUniqueName (), this); if (this .getName () .length) executionContext .updateNamedNode (this .getName (), copy); // Default fields for (const sourceField of this .getPredefinedFields ()) { try { const destinationField = copy .getPredefinedField (sourceField .getName ()); let initializableReferences = false; for (const originalReference of sourceField .getReferences ()) initializableReferences ||= originalReference .isInitializable (); if (sourceField .isInitializable () && !initializableReferences) { switch (sourceField .getType ()) { case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFNode: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFNode: destinationField .assign (sourceField .copy (instance)); break; default: destinationField .assign (sourceField); break; } } if (sourceField .getReferences () .size) { // IS relationship for (const originalReference of sourceField .getReferences ()) { try { destinationField .addReference (instance .getField (originalReference .getName ())); } catch (error) { console .error (error); } } } destinationField .setModificationTime (sourceField .getModificationTime ()); } catch (error) { console .error (error); } } // User-defined fields for (const sourceField of this .getUserDefinedFields ()) { let initializableReferences = false; for (const originalReference of sourceField .getReferences ()) initializableReferences ||= originalReference .isInitializable (); const destinationField = initializableReferences ? sourceField .create () : sourceField .copy (instance); copy .addUserDefinedField (sourceField .getAccessType (), sourceField .getName (), destinationField); if (sourceField .getReferences () .size) { // IS relationship for (const originalReference of sourceField .getReferences ()) { try { destinationField .addReference (instance .getField (originalReference .getName ())); } catch (error) { console .error (`No reference '${originalReference .getName ()}' inside execution context ${instance .getTypeName ()} '${instance .getName ()}'.`); } } } destinationField .setModificationTime (sourceField .getModificationTime ()); } return copy; } }, getDisplayName () { return this .getName () .replace (/_\d+$/, ""); }, getNeedsName () { if (this .getName () .length) return false; if (this .getCloneCount () > 1) return true; if (this .hasRoutes ()) return true; const executionContext = this .getExecutionContext () for (const importedNode of executionContext .getImportedNodes ()) { if (importedNode .getInlineNode () === this) return true; } if (executionContext .isScene) { for (const exportedNode of executionContext .getExportedNodes ()) { if (exportedNode .getLocalNode () === this) return true; } } return false; }, hasRoutes () { /// Returns true if there are any routes from or to fields of this node, otherwise false. for (const field of this .getPredefinedFields ()) { if (field .getInputRoutes () .size || field .getOutputRoutes () .size) return true; } for (const field of this .getUserDefinedFields ()) { if (field .getInputRoutes () .size || field .getOutputRoutes () .size) return true; } for (const route of this .getExecutionContext () .getRoutes ()) { if (route .getSourceNode () === this || route .getDestinationNode () === this) return true; } return false; }, getCloneCount () { return _Base_X3DBaseNode_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A .prototype .collectCloneCount .call (this); }, collectCloneCount () { return 1; }, getSourceText () { return null; }, traverse () { }, hasMetaData (path) { const names = path .split ("/"); if (names .length < 2) return false; const last = names .pop (), metadataSet = this .getMetadataSet (names), metadataObject = metadataSet ?.getValue () .getMetaValue (last); return !!metadataObject; }, getMetaData (path, field) { const names = path .split ("/"); if (names .length < 2) return; const last = names .pop (), metadataSet = this .getMetadataSet (names), metadataObject = metadataSet ?.getValue () .getMetaValue (last); if (field instanceof _Base_X3DField_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A) { if (!metadataObject) return field; switch (field .getType ()) { case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFBool: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFDouble: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFFloat: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFInt32: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFString: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFTime: { field .setValue (metadataObject .value [0]); break; } case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFColor: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFColorRGBA: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFMatrix3d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFMatrix3f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFMatrix4d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFMatrix4f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFRotation: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec2d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec2f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec3d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec3f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec4d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec4f: { const value = metadataObject .value; let i = 0; for (const key in field) field [key] = value [i ++]; break; } case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFImage: { const value = metadataObject .value, array = field .array; field .width = value [0]; field .height = value [1]; field .comp = value [2]; const l = array .length; for (let i = 0; i < l; ++ i) array [i] = value [3 + i]; break; } case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFNode: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFNode: { throw new Error ("SFNode and MFNode are not supported as metadata value."); } case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFBool: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFDouble: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFFloat: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFInt32: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFString: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFTime: { field .length = 0; for (const v of metadataObject .value) field .push (v); break; } case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFColor: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFColorRGBA: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFMatrix3d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFMatrix3f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFMatrix4d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFMatrix4f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFRotation: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec2d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec2f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec3d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec3f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec4d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec4f: { const value = metadataObject .value, length = value .length; field .length = 0; for (let i = 0; i < length;) { const l = field .length ++, f = field [l]; for (const key in f) f [key] = value [i ++]; } break; } case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFImage: { const value = metadataObject .value, length = value .length; field .length = 0; for (let i = 0; i < length;) { const l = field .length ++, f = field [l], a = f .array; f .width = value [i ++]; f .height = value [i ++]; f .comp = value [i ++]; const p = a .length; for (let k = 0; k < p; ++ k) a [k] = value [i ++]; } break; } } return field; } else if (field) { // Support for Numbers (Vector234, Color34, ...). if (!metadataObject) return field; const value = metadataObject .value; let i = 0; for (const key in field) field [key] = value [i ++]; return field; } return metadataObject ? Array .from (metadataObject .value) : [ ]; }, setMetaData (path, value) { const names = path .split ("/"); if (names .length < 2) return; const last = names .pop (), metadataSet = this .getMetadataSet (names, true); if (value instanceof _Base_X3DField_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A) { const field = value; switch (value .getType ()) { case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFBool: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFDouble: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFFloat: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFInt32: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFString: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFTime: { value = [field .valueOf ()]; break; } case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFNode: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFNode: throw new Error ("SFNode and MFNode are not supported as metadata value."); default: { value = Array .from (field, f => f instanceof _Base_X3DField_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A ? Array .from (f) : f) .flat (); break; } } switch (field .getType ()) { case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFBool: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFBool: value .type = "boolean"; break; case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFDouble: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFMatrix3d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFMatrix4d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFRotation: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFTime: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec2d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec3d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec4d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFDouble: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFMatrix3d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFMatrix4d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFRotation: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFTime: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec2d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec3d: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec4d: value .type = "double"; break; case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFColor: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFColorRGBA: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFFloat: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFMatrix3f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFMatrix4f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec2f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec3f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFVec4f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFColor: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFColorRGBA: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFFloat: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFMatrix3f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFMatrix4f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec2f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec3f: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFVec4f: value .type = "float"; break; case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFInt32: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFImage: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFInt32: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFImage: value .type = "integer"; break; case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFString: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFString: value .type = "string"; break; } } else if (!Array .isArray (value) && value .valueOf () instanceof Object) { // Support for Numbers (Vector234, Color34, ...). value = Array .from (value); value .type = "double"; } metadataSet .getValue () .setMetaValue (last, value); this .processMetaDataCallback (path); }, removeMetaData (path) { const names = path .split ("/"); if (names .length < 2) return; function removeMetaData (metadataSet, names) { if (!metadataSet) return false; const name = names .shift (); if (!names .length || removeMetaData (metadataSet .getValue () .getMetadataObject ("MetadataSet", name), names)) { metadataSet .getValue () .removeMetaValue (name); } return !metadataSet .value .length; } if (removeMetaData (this .getMetadataSet ([names .shift ()]), names)) this ._metadata = null; }, getMetadataSet (names, create = false) { const name = names .shift (); let metadataSet = this ._metadata .valueOf (); if (metadataSet ?.getNodeTypeName () !== "MetadataSet" || metadataSet ?.name !== name) { if (!create) return null; this ._metadata = this .getExecutionContext () .createNode ("MetadataSet"); metadataSet = this ._metadata .valueOf (); metadataSet .reference = this .getBrowser () .getBrowserOption ("MetadataReference"); metadataSet .name = name; } for (const name of names) metadataSet = metadataSet .getValue () .getMetadataObject ("MetadataSet", name, create); return metadataSet; }, [_metaDataCallbacks]: new Map (), addMetaDataCallback (key, path, callback) { if (!this .hasOwnProperty (_metaDataCallbacks)) this [_metaDataCallbacks] = new Map (); let map = this [_metaDataCallbacks] .get (path); if (!map) this [_metaDataCallbacks] .set (path, map = new Map ()); map .set (key, callback); }, removeMetaDataCallback (key, path) { const map = this [_metaDataCallbacks] .get (path); if (!map) return; map .delete (key); if (map .size === 0) this [_metaDataCallbacks] .delete (path); }, processMetaDataCallback (path) { const map = this [_metaDataCallbacks] .get (path); if (!map) return; for (const callback of map .values ()) callback (); }, toStream (generator) { generator .string += this .getTypeName () + " { }"; }, toVRMLStream (generator) { generator .EnterScope (); if (!generator .string .match (/^$|[ \t\r\n,\[\]\{\}]$/)) generator .string += generator .Space (); if (generator .outputNames) { const name = generator .Name (this); if (name .length) { if (generator .ExistsNode (this)) { generator .string += "USE"; generator .string += generator .Space (); generator .string += name; generator .LeaveScope (); return; } } if (name .length) { generator .AddNode (this); generator .string += "DEF"; generator .string += generator .Space (); generator .string += name; generator .string += generator .Space (); } } generator .string += this .getTypeName (); generator .string += generator .TidySpace (); generator .string += "{"; const fields = this .getChangedFields (), userDefinedFields = this .getUserDefinedFields (); if (this .canUserDefinedFields ()) { if (userDefinedFields .length) { let fieldTypeLength = 0, accessTypeLength = 0; for (const field of userDefinedFields) { fieldTypeLength = Math .max (fieldTypeLength, field .getTypeName () .length); accessTypeLength = Math .max (accessTypeLength, generator .AccessType (field .getAccessType ()) .length); } generator .string += generator .TidyBreak (); generator .IncIndent (); const last = userDefinedFields .at (-1); for (const field of userDefinedFields) { this .toVRMLStreamUserDefinedField (generator, field, fieldTypeLength, accessTypeLength); if (field === last) generator .string += generator .TidyBreak (); else generator .string += generator .Break (); } generator .DecIndent (); if (fields .length !== 0) generator .string += generator .TidyBreak (); } } if (fields .length === 0) { if (userDefinedFields .length) generator .string += generator .Indent (); else generator .string += generator .TidySpace (); } else { const last = fields .at (-1); if (userDefinedFields .length === 0) generator .string += generator .TidyBreak (); generator .IncIndent (); for (const field of fields) { this .toVRMLStreamField (generator, field); if (field === last) generator .string += generator .TidyBreak (); else generator .string += generator .Break (); } generator .DecIndent (); generator .string += generator .Indent (); } generator .string += "}"; generator .LeaveScope (); }, toVRMLStreamUserDefinedField (generator, field, fieldTypeLength, accessTypeLength) { const sharedNode = generator .IsSharedNode (this); if (field .getReferences () .size === 0 || !generator .ExecutionContext () || sharedNode) { generator .string += generator .Indent (); generator .string += generator .AccessType (field .getAccessType ()) .padEnd (accessTypeLength, generator .TidySpace ()); generator .string += generator .Space (); generator .string += field .getTypeName () .padEnd (fieldTypeLength, generator .TidySpace ()); generator .string += generator .Space (); generator .string += field .getName (); if (field .isInitializable ()) { generator .string += generator .Space (); field .toVRMLStream (generator); } } else { let index = 0, initializableReferences = false; for (const reference of field .getReferences ()) { initializableReferences ||= reference .isInitializable (); // Output user defined reference field generator .string += generator .Indent (); generator .string += generator .AccessType (field .getAccessType ()) .padEnd (accessTypeLength, generator .TidySpace ()); generator .string += generator .Space (); generator .string += field .getTypeName () .padEnd (fieldTypeLength, generator .TidySpace ()); generator .string += generator .Space (); generator .string += field .getName (); generator .string += generator .Space (); generator .string += "IS"; generator .string += generator .Space (); generator .string += reference .getName (); ++ index; if (index !== field .getReferences () .size) generator .string += generator .Break (); } if (field .getAccessType () === _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .inputOutput && !initializableReferences && !field .isDefaultValue ()) { generator .string += generator .Break (); generator .string += generator .Indent (); generator .string += generator .AccessType (field .getAccessType ()) .padEnd (accessTypeLength, generator .TidySpace ()); generator .string += generator .Space (); generator .string += field .getTypeName () .padEnd (fieldTypeLength, generator .TidySpace ()); generator .string += generator .Space (); generator .string += field .getName (); if (field .isInitializable ()) { generator .string += generator .Space (); field .toVRMLStream (generator); } } } }, toVRMLStreamField (generator, field) { const sharedNode = generator .IsSharedNode (this); if (field .getReferences () .size === 0 || !generator .ExecutionContext () || sharedNode) { if (field .isInitializable ()) { generator .string += generator .Indent (); generator .string += field .getName (); generator .string += generator .Space (); field .toVRMLStream (generator); } } else { let index = 0, initializableReferences = false; for (const reference of field .getReferences ()) { initializableReferences ||= reference .isInitializable (); // Output build in reference field generator .string += generator .Indent (); generator .string += field .getName (); generator .string += generator .Space (); generator .string += "IS"; generator .string += generator .Space (); generator .string += reference .getName (); ++ index; if (index !== field .getReferences () .size) generator .string += generator .Break (); } if (field .getAccessType () === _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .inputOutput && !initializableReferences && !this .isDefaultValue (field)) { // Output build in field generator .string += generator .Break (); generator .string += generator .Indent (); generator .string += field .getName (); generator .string += generator .Space (); field .toVRMLStream (generator); } } }, toXMLStream (generator) { const sharedNode = generator .IsSharedNode (this); generator .EnterScope (); const name = generator .Name (this); if (name .length) { if (generator .ExistsNode (this)) { generator .string += generator .Indent (); generator .string += "<"; generator .string += this .getTypeName (); if (generator .html && this .getTypeName () === "Script") { generator .string += generator .Space (); generator .string += "type='model/x3d+xml'"; } generator .string += generator .Space (); generator .string += "USE='"; generator .string += generator .XMLEncode (name); generator .string += "'"; const containerField = generator .ContainerField (); if (containerField) { if (containerField .getName () !== this .getContainerField ()) { generator .string += generator .Space (); generator .string += "containerField='"; generator .string += generator .XMLEncode (containerField .getName ()); generator .string += "'"; } } if (generator .closingTags) { generator .string += "></"; generator .string += this .getTypeName (); generator .string += ">"; } else { generator .string += "/>"; } generator .LeaveScope (); return; } } generator .string += generator .Indent (); generator .string += "<"; generator .string += this .getTypeName (); if (generator .html && this .getTypeName () === "Script") { generator .string += generator .Space (); generator .string += "type='model/x3d+xml'"; } if (name .length) { generator .AddNode (this); generator .string += generator .Space (); generator .string += "DEF='"; generator .string += generator .XMLEncode (name); generator .string += "'"; } const containerField = generator .ContainerField (); if (containerField) { if (containerField .getName () !== this .getContainerField ()) { generator .string += generator .Space (); generator .string += "containerField='"; generator .string += generator .XMLEncode (containerField .getName ()); generator .string += "'"; } } const fields = this .getChangedFields (), userDefinedFields = this .getUserDefinedFields (); const references = [ ], childNodes = [ ]; let cdata = this .getSourceText (); if (cdata ?.length === 0 || (generator .html && this .getTypeName () !== "Script")) cdata = null; generator .IncIndent (); generator .IncIndent (); for (const field of fields) { // If the field is a inputOutput and we have as reference only inputOnly or outputOnly we must output the value // for this field. let mustOutputValue = false; if (generator .ExecutionContext ()) { if (field .getAccessType () === _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .inputOutput && field .getReferences () .size !== 0) { if (!Array .from (field .getReferences ()) .some (reference => reference .isInitializable ())) mustOutputValue = !this .isDefaultValue (field); } } // If we have no execution context we are not in a proto and must not generate IS references the same is true // if the node is a shared node as the node does not belong to the execution context. if (field .getReferences () .size === 0 || !generator .ExecutionContext () || sharedNode || mustOutputValue) { if (mustOutputValue) references .push (field); if (field .isInitializable ()) { switch (field .getType ()) { case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFNode: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFNode: { childNodes .push (field); break; } default: { if (field === cdata) break; generator .string += generator .AttribBreak (); generator .string += generator .ListIndent (); generator .string += field .getName (); generator .string += "='"; field .toXMLStream (generator, field === this .getSourceText ()); generator .string += "'"; break; } } } } else { references .push (field); } } generator .DecIndent (); generator .DecIndent (); if ((!this .canUserDefinedFields () || !userDefinedFields .length) && (!references .length || sharedNode) && !childNodes .length && !cdata) { if (generator .closingTags) { generator .string += "></"; generator .string += this .getTypeName (); generator .string += ">"; } else { generator .string += "/>"; } } else { generator .string += ">"; generator .string += generator .TidyBreak (); generator .IncIndent (); if (this .canUserDefinedFields ()) { for (const field of userDefinedFields) { generator .string += generator .Indent (); generator .string += "<field"; generator .string += generator .Space (); generator .string += "accessType='"; generator .string += generator .AccessType (field .getAccessType ()); generator .string += "'"; generator .string += generator .Space (); generator .string += "type='"; generator .string += field .getTypeName (); generator .string += "'"; generator .string += generator .Space (); generator .string += "name='"; generator .string += generator .XMLEncode (field .getName ()); generator .string += "'"; // If the field is a inputOutput and we have as reference only inputOnly or outputOnly we must output the value // for this field. let mustOutputValue = false; if (generator .ExecutionContext ()) { if (field .getAccessType () === _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .inputOutput && field .getReferences () .size !== 0) { if (!Array .from (field .getReferences ()) .some (reference => reference .isInitializable ())) mustOutputValue = true; } } if ((field .getReferences () .size === 0 || !generator .ExecutionContext ()) || sharedNode || mustOutputValue) { if (mustOutputValue && generator .ExecutionContext ()) references .push (field); if (!field .isInitializable () || field .isDefaultValue ()) { generator .XMLAppInfo (field); generator .XMLDocumentation (field); generator .string += generator .closingTags ? "></field>" : "/>"; generator .string += generator .TidyBreak (); } else { // Output value switch (field .getType ()) { case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFNode: case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .MFNode: { generator .XMLAppInfo (field); generator .XMLDocumentation (field); generator .PushContainerField (null); generator .string += ">"; generator .string += generator .TidyBreak (); generator .IncIndent (); field .toXMLStream (generator); generator .string += generator .TidyBreak (); generator .DecIndent (); generator .string += generator .Indent (); generator .string += "</field>"; generator .string += generator .TidyBreak (); generator .PopContainerField (); break; } default: { generator .string += generator .Space (); generator .string += "value='"; field .toXMLStream (generator); generator .string += "'"; generator .XMLAppInfo (field); generator .XMLDocumentation (field); generator .string += generator .closingTags ? "></field>" : "/>"; generator .string += generator .TidyBreak (); break; } } } } else { if (generator .ExecutionContext ()) references .push (field); generator .XMLAppInfo (field); generator .XMLDocumentation (field); generator .string += generator .closingTags ? "></field>" : "/>"; generator .string += generator .TidyBreak (); } } } if (references .length && !sharedNode) { generator .string += generator .Indent (); generator .string += "<IS>"; generator .string += generator .TidyBreak (); generator .IncIndent (); for (const field of references) { const protoFields = field .getReferences (); for (const protoField of protoFields) { generator .string += generator .Indent (); generator .string += "<connect"; generator .string += generator .Space (); generator .string += "nodeField='"; generator .string += generator .XMLEncode (field .getName ()); generator .string += "'"; generator .string += generator .Space (); generator .string += "protoField='"; generator .string += generator .XMLEncode (protoField .getName ()); generator .string += "'"; generator .string += generator .closingTags ? "></connect>" : "/>"; generator .string += generator .TidyBreak (); } } generator .DecIndent (); generator .string += generator .Indent (); generator .string += "</IS>"; generator .string += generator .TidyBreak (); } for (const field of childNodes) { generator .PushContainerField (field); field .toXMLStream (generator); generator .string += generator .TidyBreak (); generator .PopContainerField (); } if (cdata) { for (const value of cdata) { generator .string += "<![CDATA["; generator .string += value; generator .string += "]]>"; generator .string += generator .TidyBreak (); } } generator .DecIndent (); generator .string += generator .Indent (); generator .string += "</"; generator .string += this .getTypeName (); generator .string += ">"; } generator .LeaveScope (); }, toJSONStream (generator) { const sharedNode = generator .IsSharedNode (this); generator .EnterScope (); const name = generator .Name (this); // USE name if (name .length) { if (generator .ExistsNode (this)) { generator .string += '{'; generator .string += generator .TidySpace (); generator .string += '"'; generator .string += this .getTypeName (); generator .string += '"'; generator .string += ':'; generator .string += generator .TidyBreak (); generator .string += generator .IncIndent (); generator .string += generator .Indent (); generator .string += '{'; generator .string += generator .TidyBreak (); generator .string += generator .IncIndent (); generator .string += generator .Indent (); generator .string += '"'; generator .string += "@USE"; generator .string += '"'; generator .string += ':'; generator .string += generator .TidySpace (); generator .string += '"'; generator .string += generator .JSONEncode (name); generator .string += '"'; generator .string += generator .TidyBreak (); generator .string += generator .DecIndent (); generator .string += generator .Indent (); generator .string += '}'; generator .string += generator .TidyBreak (); generator .string += generator .DecIndent (); generator .string += generator .Indent (); generator .string += '}'; generator .LeaveScope (); return; } } // Type name generator .string += '{'; generator .string += generator .TidySpace (); generator .string += '"'; generator .string += this .getTypeName (); generator .string += '"'; generator .string += ':'; generator .string += generator .TidyBreak (); generator .string += generator .IncIndent (); generator .string += generator .Indent (); generator .string += '{'; generator .string += generator .TidyBreak (); generator .string += generator .IncIndent (); // DEF name if (name .length) { generator .AddNode (this); generator .string += generator .Indent (); generator .string += '"'; generator .string += "@DEF"; generator .string += '"'; generator .string += ':'; generator .string += generator .TidySpace (); generator .string += '"'; generator .string += generator .JSONEncode (name); generator .string += '"'; generator .string += ','; generator .string += generator .TidyBreak (); } // Fields const fields = this .getChangedFields (), userDefinedFields = this .getUserDefinedFields (); const references = [ ]; let sourceText = this .getSourceText (); // Source text if (sourceText) { if (sourceText .length !== 1) sourceText = null; } // Predefined fields if (fields .length) { const outputFields = [ ]; for (const field of fields) { // If the field is a inputOutput and we have as reference only inputOnly or outputOnly we must output the value // for this field. let mustOutputValue = false; if (generator .ExecutionContext ()) { if (field .getAccessType () === _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .inputOutput && field .getReferences () .size !== 0) { if (!Array .from (field .getReferences ()) .some (reference => reference .isInitializable ())) mustOutputValue = !this .isDefaultValue (field); } } // If we have no execution context we are not in a proto and must not generate IS references the same is true // if the node is a shared node as the node does not belong to the execution context. if (field .getReferences () .size === 0 || !generator .ExecutionContext () || sharedNode || mustOutputValue) { if (mustOutputValue) references .push (field); if (field !== sourceText) outputFields .push (field); } else { references .push (field); } } for (const field of outputFields) { if (field .isInitializable ()) { switch (field .getType ()) { case _Base_X3DConstants_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A .SFNode: