x_ite
Version:
X_ITE X3D Browser, view and manipulate X3D, VRML, glTF and other 3D sources in HTML.
1,308 lines (1,039 loc) • 71.7 kB
JavaScript
/* X_ITE v11.6.6 */
const __X_ITE_X3D__ = window [Symbol .for ("X_ITE.X3D-11.6.6")];
/******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ // The require scope
/******/ var __webpack_require__ = {};
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/************************************************************************/
// UNUSED EXPORTS: default
;// external "__X_ITE_X3D__ .Components"
const external_X_ITE_X3D_Components_namespaceObject = __X_ITE_X3D__ .Components;
var external_X_ITE_X3D_Components_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Components_namespaceObject);
;// external "__X_ITE_X3D__ .Fields"
const external_X_ITE_X3D_Fields_namespaceObject = __X_ITE_X3D__ .Fields;
var external_X_ITE_X3D_Fields_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Fields_namespaceObject);
;// external "__X_ITE_X3D__ .X3DFieldDefinition"
const external_X_ITE_X3D_X3DFieldDefinition_namespaceObject = __X_ITE_X3D__ .X3DFieldDefinition;
var external_X_ITE_X3D_X3DFieldDefinition_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DFieldDefinition_namespaceObject);
;// external "__X_ITE_X3D__ .FieldDefinitionArray"
const external_X_ITE_X3D_FieldDefinitionArray_namespaceObject = __X_ITE_X3D__ .FieldDefinitionArray;
var external_X_ITE_X3D_FieldDefinitionArray_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_FieldDefinitionArray_namespaceObject);
;// external "__X_ITE_X3D__ .X3DNode"
const external_X_ITE_X3D_X3DNode_namespaceObject = __X_ITE_X3D__ .X3DNode;
var external_X_ITE_X3D_X3DNode_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DNode_namespaceObject);
;// external "__X_ITE_X3D__ .X3DSensorNode"
const external_X_ITE_X3D_X3DSensorNode_namespaceObject = __X_ITE_X3D__ .X3DSensorNode;
var external_X_ITE_X3D_X3DSensorNode_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DSensorNode_namespaceObject);
;// external "__X_ITE_X3D__ .X3DConstants"
const external_X_ITE_X3D_X3DConstants_namespaceObject = __X_ITE_X3D__ .X3DConstants;
var external_X_ITE_X3D_X3DConstants_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DConstants_namespaceObject);
;// external "__X_ITE_X3D__ .Namespace"
const external_X_ITE_X3D_Namespace_namespaceObject = __X_ITE_X3D__ .Namespace;
var external_X_ITE_X3D_Namespace_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Namespace_namespaceObject);
;// ./src/x_ite/Browser/Picking/MatchCriterion.js
let i = 0;
const MatchCriterion =
{
MATCH_ANY: i ++,
MATCH_EVERY: i ++,
MATCH_ONLY_ONE: i ++,
};
const __default__ = MatchCriterion;
;
/* harmony default export */ const Picking_MatchCriterion = (external_X_ITE_X3D_Namespace_default().add ("MatchCriterion", __default__));
;// ./src/x_ite/Browser/Picking/IntersectionType.js
let IntersectionType_i = 0;
const IntersectionType =
{
BOUNDS: IntersectionType_i ++,
GEOMETRY: IntersectionType_i ++,
};
const IntersectionType_default_ = IntersectionType;
;
/* harmony default export */ const Picking_IntersectionType = (external_X_ITE_X3D_Namespace_default().add ("IntersectionType", IntersectionType_default_));
;// ./src/x_ite/Browser/Picking/SortOrder.js
let SortOrder_i = 0;
const SortOrder =
{
ANY: SortOrder_i ++,
CLOSEST: SortOrder_i ++,
ALL: SortOrder_i ++,
ALL_SORTED: SortOrder_i ++,
};
const SortOrder_default_ = SortOrder;
;
/* harmony default export */ const Picking_SortOrder = (external_X_ITE_X3D_Namespace_default().add ("SortOrder", SortOrder_default_));
;// external "__X_ITE_X3D__ .Matrix4"
const external_X_ITE_X3D_Matrix4_namespaceObject = __X_ITE_X3D__ .Matrix4;
var external_X_ITE_X3D_Matrix4_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Matrix4_namespaceObject);
;// external "__X_ITE_X3D__ .QuickSort"
const external_X_ITE_X3D_QuickSort_namespaceObject = __X_ITE_X3D__ .QuickSort;
var external_X_ITE_X3D_QuickSort_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_QuickSort_namespaceObject);
;// external "__X_ITE_X3D__ .ObjectCache"
const external_X_ITE_X3D_ObjectCache_namespaceObject = __X_ITE_X3D__ .ObjectCache;
var external_X_ITE_X3D_ObjectCache_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_ObjectCache_namespaceObject);
;// ./src/x_ite/Components/Picking/X3DPickSensorNode.js
const ModelMatrixCache = external_X_ITE_X3D_ObjectCache_default() ((external_X_ITE_X3D_Matrix4_default()));
function compareDistance (lhs, rhs) { return lhs .distance < rhs .distance; }
function X3DPickSensorNode (executionContext)
{
external_X_ITE_X3D_X3DSensorNode_default().call (this, executionContext);
this .addType ((external_X_ITE_X3D_X3DConstants_default()).X3DPickSensorNode);
// Private properties
this .objectType = new Set ();
this .intersectionType = Picking_IntersectionType .BOUNDS;
this .sortOrder = Picking_SortOrder .CLOSEST;
this .pickTargetNodes = new Set ();
this .modelMatrices = [ ];
this .targets = [ ];
this .targets .size = 0;
this .pickedTargets = [ ];
this .pickedTargetsSorter = new (external_X_ITE_X3D_QuickSort_default()) (this .pickedTargets, compareDistance);
this .pickedGeometries = new (external_X_ITE_X3D_Fields_default()).MFNode (); // Must be unique for each X3DPickSensorNode.
}
Object .assign (Object .setPrototypeOf (X3DPickSensorNode .prototype, (external_X_ITE_X3D_X3DSensorNode_default()).prototype),
{
initialize ()
{
this .getLive () .addInterest ("set_live__", this);
this ._enabled .addInterest ("set_live__", this);
this ._objectType .addInterest ("set_objectType__", this);
this ._matchCriterion .addInterest ("set_matchCriterion__", this);
this ._intersectionType .addInterest ("set_intersectionType__", this);
this ._sortOrder .addInterest ("set_sortOrder__", this);
this ._pickTarget .addInterest ("set_pickTarget__", this);
this .set_objectType__ ();
this .set_matchCriterion__ ();
this .set_intersectionType__ ();
this .set_sortOrder__ ();
this .set_pickTarget__ ();
},
getObjectType ()
{
return this .objectType;
},
getMatchCriterion ()
{
return this .matchCriterion;
},
getIntersectionType ()
{
return this .intersectionType;
},
getSortOrder ()
{
return this .sortOrder;
},
getModelMatrices ()
{
return this .modelMatrices;
},
getTargets ()
{
return this .targets;
},
getPickShape: (() =>
{
const pickShapes = new WeakMap ();
return function (geometryNode)
{
const pickShape = pickShapes .get (geometryNode);
if (pickShape !== undefined)
return pickShape;
const
browser = this .getBrowser (),
privateScene = browser .getPrivateScene (),
shapeNode = privateScene .createNode ("Shape", false),
collidableShapeNode = privateScene .createNode ("CollidableShape", false);
shapeNode .setPrivate (true);
collidableShapeNode .setPrivate (true);
collidableShapeNode .setConvex (true);
shapeNode ._geometry = geometryNode;
collidableShapeNode ._shape = shapeNode;
shapeNode .setup ();
collidableShapeNode .setup ();
pickShapes .set (geometryNode, collidableShapeNode);
return collidableShapeNode;
};
})(),
getPickedGeometries ()
{
const
targets = this .targets,
numTargets = targets .size,
pickedTargets = this .pickedTargets,
pickedGeometries = this .pickedGeometries;
// Filter intersecting targets.
pickedTargets .length = 0;
for (let i = 0; i < numTargets; ++ i)
{
const target = targets [i];
if (target .intersected)
pickedTargets .push (target);
}
// No pickedTargets, return.
if (pickedTargets .length === 0)
{
pickedGeometries .length = 0;
return pickedGeometries;
}
// Return sorted pickedTargets.
switch (this .sortOrder)
{
case Picking_SortOrder .ANY:
{
pickedTargets .length = 1;
pickedGeometries [0] = this .getPickedGeometry (pickedTargets [0]);
pickedGeometries .length = 1;
break;
}
case Picking_SortOrder .CLOSEST:
{
this .pickedTargetsSorter .sort (0, pickedTargets .length);
pickedTargets .length = 1;
pickedGeometries [0] = this .getPickedGeometry (pickedTargets [0]);
pickedGeometries .length = 1;
break;
}
case Picking_SortOrder .ALL:
{
const length = pickedTargets .length;
for (let i = 0; i < length; ++ i)
pickedGeometries [i] = this .getPickedGeometry (pickedTargets [i]);
pickedGeometries .length = length;
break;
}
case Picking_SortOrder .ALL_SORTED:
{
const length = pickedTargets .length;
this .pickedTargetsSorter .sort (0, length);
for (let i = 0; i < length; ++ i)
pickedGeometries [i] = this .getPickedGeometry (pickedTargets [i]);
pickedGeometries .length = length;
break;
}
}
return pickedGeometries;
},
getPickedGeometry (target)
{
const
executionContext = this .getExecutionContext (),
geometryNode = target .geometryNode;
if (geometryNode .getExecutionContext () === executionContext)
return geometryNode;
const instance = geometryNode .getExecutionContext ();
if (instance .getType () .includes ((external_X_ITE_X3D_X3DConstants_default()).X3DPrototypeInstance) && instance .getExecutionContext () === executionContext)
return instance;
const pickingHierarchy = target .pickingHierarchy;
for (let i = pickingHierarchy .length - 1; i >= 0; -- i)
{
const node = pickingHierarchy [i];
if (node .getExecutionContext () === executionContext)
return node;
const instance = node .getExecutionContext ();
if (instance .getType () .includes ((external_X_ITE_X3D_X3DConstants_default()).X3DPrototypeInstance) && instance .getExecutionContext () === executionContext)
return instance;
}
return null;
},
getPickedTargets ()
{
return this .pickedTargets;
},
set_live__ ()
{
if (this .getLive () .getValue () && this ._enabled .getValue () && ! this .objectType .has ("NONE"))
{
this .getBrowser () .addPickSensor (this);
this .setPickableObject (true);
}
else
{
this .getBrowser () .removePickSensor (this);
this .setPickableObject (false);
}
},
set_objectType__ ()
{
this .objectType .clear ();
for (const objectType of this ._objectType)
this .objectType .add (objectType);
this .set_live__ ();
},
set_matchCriterion__: (() =>
{
const matchCriterions = new Map ([
["MATCH_ANY", Picking_MatchCriterion .MATCH_ANY],
["MATCH_EVERY", Picking_MatchCriterion .MATCH_EVERY],
["MATCH_ONLY_ONE", Picking_MatchCriterion .MATCH_ONLY_ONE],
]);
return function ()
{
this .matchCriterion = matchCriterions .get (this ._matchCriterion .getValue ())
?? Picking_MatchCriterion .MATCH_ANY;
};
})(),
set_intersectionType__: (() =>
{
const intersectionTypes = new Map ([
["BOUNDS", Picking_IntersectionType .BOUNDS],
["GEOMETRY", Picking_IntersectionType .GEOMETRY],
]);
return function ()
{
this .intersectionType = intersectionTypes .get (this ._intersectionType .getValue ())
?? Picking_IntersectionType .BOUNDS;
};
})(),
set_sortOrder__: (() =>
{
const sortOrders = new Map ([
["ANY", Picking_SortOrder .ANY],
["CLOSEST", Picking_SortOrder .CLOSEST],
["ALL", Picking_SortOrder .ALL],
["ALL_SORTED", Picking_SortOrder .ALL_SORTED],
]);
return function ()
{
this .sortOrder = sortOrders .get (this ._sortOrder .getValue ())
?? Picking_SortOrder .CLOSEST;
};
})(),
set_pickTarget__ ()
{
this .pickTargetNodes .clear ();
for (const node of this ._pickTarget)
{
try
{
const
innerNode = node .getValue () .getInnerNode (),
type = innerNode .getType ();
for (let t = type .length - 1; t >= 0; -- t)
{
switch (type [t])
{
case (external_X_ITE_X3D_X3DConstants_default()).Inline:
case (external_X_ITE_X3D_X3DConstants_default()).Shape:
case (external_X_ITE_X3D_X3DConstants_default()).X3DGroupingNode:
{
this .pickTargetNodes .add (innerNode);
break;
}
default:
continue;
}
}
}
catch
{ }
}
},
traverse (type, renderObject)
{
this .modelMatrices .push (ModelMatrixCache .pop () .assign (renderObject .getModelViewMatrix () .get ()));
},
collect (geometryNode, modelMatrix, pickingHierarchy)
{
const
pickTargetNodes = this .pickTargetNodes,
haveTarget = pickingHierarchy .some (node => pickTargetNodes .has (node));
if (haveTarget)
{
const targets = this .targets;
if (targets .size < targets .length)
{
var target = targets [targets .size];
}
else
{
var target = { modelMatrix: new (external_X_ITE_X3D_Matrix4_default()) (), pickingHierarchy: [ ], pickedPoint: [ ], intersections: [ ] };
targets .push (target);
}
++ targets .size;
target .intersected = false;
target .geometryNode = geometryNode;
target .pickedPoint .length = 0;
target .intersections .length = 0;
target .modelMatrix .assign (modelMatrix);
const destPickingHierarchy = target .pickingHierarchy;
for (let i = 0, length = pickingHierarchy .length; i < length; ++ i)
destPickingHierarchy [i] = pickingHierarchy [i];
destPickingHierarchy .length = length;
}
},
process ()
{
for (const modelMatrix of this .modelMatrices)
ModelMatrixCache .push (modelMatrix);
this .modelMatrices .length = 0;
this .targets .size = 0;
},
});
Object .defineProperties (X3DPickSensorNode, external_X_ITE_X3D_X3DNode_default().getStaticProperties ("X3DPickSensorNode", "Picking", 1));
const X3DPickSensorNode_default_ = X3DPickSensorNode;
;
/* harmony default export */ const Picking_X3DPickSensorNode = (external_X_ITE_X3D_Namespace_default().add ("X3DPickSensorNode", X3DPickSensorNode_default_));
;// external "__X_ITE_X3D__ .Vector3"
const external_X_ITE_X3D_Vector3_namespaceObject = __X_ITE_X3D__ .Vector3;
var external_X_ITE_X3D_Vector3_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Vector3_namespaceObject);
;// external "__X_ITE_X3D__ .Box3"
const external_X_ITE_X3D_Box3_namespaceObject = __X_ITE_X3D__ .Box3;
var external_X_ITE_X3D_Box3_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Box3_namespaceObject);
;// external "__X_ITE_X3D__ .Line3"
const external_X_ITE_X3D_Line3_namespaceObject = __X_ITE_X3D__ .Line3;
var external_X_ITE_X3D_Line3_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Line3_namespaceObject);
;// ./src/x_ite/Components/Picking/LinePickSensor.js
function LinePickSensor (executionContext)
{
Picking_X3DPickSensorNode .call (this, executionContext);
this .addType ((external_X_ITE_X3D_X3DConstants_default()).LinePickSensor);
}
Object .assign (Object .setPrototypeOf (LinePickSensor .prototype, Picking_X3DPickSensorNode .prototype),
{
initialize ()
{
Picking_X3DPickSensorNode .prototype .initialize .call (this);
this ._pickingGeometry .addInterest ("set_pickingGeometry__", this);
this .set_pickingGeometry__ ();
},
set_pickingGeometry__ ()
{
this .pickingGeometryNode = null;
try
{
const
node = this ._pickingGeometry .getValue () .getInnerNode (),
type = node .getType ();
for (let t = type .length - 1; t >= 0; -- t)
{
switch (type [t])
{
case (external_X_ITE_X3D_X3DConstants_default()).IndexedLineSet:
case (external_X_ITE_X3D_X3DConstants_default()).LineSet:
{
this .pickingGeometryNode = node;
break;
}
default:
continue;
}
}
}
catch
{ }
},
process: (() =>
{
const
pickingBBox = new (external_X_ITE_X3D_Box3_default()) (),
targetBBox = new (external_X_ITE_X3D_Box3_default()) (),
pickingCenter = new (external_X_ITE_X3D_Vector3_default()) (),
targetCenter = new (external_X_ITE_X3D_Vector3_default()) (),
matrix = new (external_X_ITE_X3D_Matrix4_default()) (),
point1 = new (external_X_ITE_X3D_Vector3_default()) (),
point2 = new (external_X_ITE_X3D_Vector3_default()) (),
line = new (external_X_ITE_X3D_Line3_default()) (),
a = new (external_X_ITE_X3D_Vector3_default()) (),
b = new (external_X_ITE_X3D_Vector3_default()) (),
clipPlanes = [ ],
intersections = [ ],
texCoord = new (external_X_ITE_X3D_Vector3_default()) (),
pickedTextureCoordinate = new (external_X_ITE_X3D_Fields_default()).MFVec3f (),
pickedNormal = new (external_X_ITE_X3D_Fields_default()).MFVec3f (),
pickedPoint = new (external_X_ITE_X3D_Fields_default()).MFVec3f ();
return function ()
{
if (this .pickingGeometryNode)
{
const
modelMatrices = this .getModelMatrices (),
targets = this .getTargets ();
switch (this .getIntersectionType ())
{
case Picking_IntersectionType .BOUNDS:
{
// Intersect bboxes.
for (const modelMatrix of modelMatrices)
{
pickingBBox .assign (this .pickingGeometryNode .getBBox ()) .multRight (modelMatrix);
for (const target of targets)
{
targetBBox .assign (target .geometryNode .getBBox ()) .multRight (target .modelMatrix);
if (pickingBBox .intersectsBox (targetBBox))
{
pickingCenter .assign (pickingBBox .center);
targetCenter .assign (targetBBox .center);
target .intersected = true;
target .distance = pickingCenter .distance (targetCenter);
}
}
}
// Send events.
const
pickedGeometries = this .getPickedGeometries (),
active = !! pickedGeometries .length;
pickedGeometries .assign (pickedGeometries .filter (node => node));
if (active !== this ._isActive .getValue ())
this ._isActive = active;
if (!this ._pickedGeometry .equals (pickedGeometries))
this ._pickedGeometry = pickedGeometries;
break;
}
case Picking_IntersectionType .GEOMETRY:
{
// Intersect geometry.
for (const modelMatrix of modelMatrices)
{
pickingBBox .assign (this .pickingGeometryNode .getBBox ()) .multRight (modelMatrix);
for (const target of targets)
{
const
geometryNode = target .geometryNode,
vertices = this .pickingGeometryNode .getVertices ();
targetBBox .assign (geometryNode .getBBox ()) .multRight (target .modelMatrix);
matrix .assign (target .modelMatrix) .inverse () .multLeft (modelMatrix);
for (let v = 0, vLength = vertices .length; v < vLength; v += 8)
{
matrix .multVecMatrix (point1 .set (vertices [v + 0], vertices [v + 1], vertices [v + 2]));
matrix .multVecMatrix (point2 .set (vertices [v + 4], vertices [v + 5], vertices [v + 6]));
line .setPoints (point1, point2);
intersections .length = 0;
if (geometryNode .intersectsLine (line, target .modelMatrix, clipPlanes, intersections))
{
for (let i = 0, iLength = intersections .length; i < iLength; ++ i)
{
// Test if intersection.point is between point1 and point2.
const intersection = intersections [i];
a .assign (intersection .point) .subtract (point1);
b .assign (intersection .point) .subtract (point2);
const
c = a .add (b) .norm (),
s = point1 .distance (point2);
if (c <= s)
target .intersections .push (intersection);
}
}
}
if (target .intersections .length)
{
pickingCenter .assign (pickingBBox .center);
targetCenter .assign (targetBBox .center);
target .intersected = true;
target .distance = pickingCenter .distance (targetCenter);
}
}
}
// Send events.
const
pickedGeometries = this .getPickedGeometries (),
active = !! pickedGeometries .length;
pickedGeometries .assign (pickedGeometries .filter (node => node));
if (active !== this ._isActive .getValue ())
this ._isActive = active;
if (!this ._pickedGeometry .equals (pickedGeometries))
this ._pickedGeometry = pickedGeometries;
const pickedTargets = this .getPickedTargets ();
pickedTextureCoordinate .length = 0;
pickedNormal .length = 0;
pickedPoint .length = 0;
for (const pickedTarget of pickedTargets)
{
const pickedIntersections = pickedTarget .intersections;
for (const intersection of pickedIntersections)
{
const t = intersection .texCoord;
texCoord .set (t .x, t .y, t .z);
pickedTextureCoordinate .push (texCoord);
pickedNormal .push (intersection .normal);
pickedPoint .push (intersection .point);
}
}
if (!this ._pickedTextureCoordinate .equals (pickedTextureCoordinate))
this ._pickedTextureCoordinate = pickedTextureCoordinate;
if (!this ._pickedNormal .equals (pickedNormal))
this ._pickedNormal = pickedNormal;
if (!this ._pickedPoint .equals (pickedPoint))
this ._pickedPoint = pickedPoint;
break;
}
}
}
Picking_X3DPickSensorNode .prototype .process .call (this);
};
})(),
});
Object .defineProperties (LinePickSensor,
{
... external_X_ITE_X3D_X3DNode_default().getStaticProperties ("LinePickSensor", "Picking", 1, "children", "3.2"),
fieldDefinitions:
{
value: new (external_X_ITE_X3D_FieldDefinitionArray_default()) ([
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "metadata", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "description", new (external_X_ITE_X3D_Fields_default()).SFString ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "enabled", new (external_X_ITE_X3D_Fields_default()).SFBool (true)),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "objectType", new (external_X_ITE_X3D_Fields_default()).MFString ("ALL")),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "matchCriterion", new (external_X_ITE_X3D_Fields_default()).SFString ("MATCH_ANY")),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "intersectionType", new (external_X_ITE_X3D_Fields_default()).SFString ("BOUNDS")),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "sortOrder", new (external_X_ITE_X3D_Fields_default()).SFString ("CLOSEST")),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "pickingGeometry", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "pickTarget", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "isActive", new (external_X_ITE_X3D_Fields_default()).SFBool ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "pickedTextureCoordinate", new (external_X_ITE_X3D_Fields_default()).MFVec3f ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "pickedNormal", new (external_X_ITE_X3D_Fields_default()).MFVec3f ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "pickedPoint", new (external_X_ITE_X3D_Fields_default()).MFVec3f ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).outputOnly, "pickedGeometry", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
]),
enumerable: true,
},
});
const LinePickSensor_default_ = LinePickSensor;
;
/* harmony default export */ const Picking_LinePickSensor = (external_X_ITE_X3D_Namespace_default().add ("LinePickSensor", LinePickSensor_default_));
;// external "__X_ITE_X3D__ .X3DGroupingNode"
const external_X_ITE_X3D_X3DGroupingNode_namespaceObject = __X_ITE_X3D__ .X3DGroupingNode;
var external_X_ITE_X3D_X3DGroupingNode_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DGroupingNode_namespaceObject);
;// ./src/x_ite/Components/Picking/X3DPickableObject.js
function X3DPickableObject (executionContext)
{
this .addType ((external_X_ITE_X3D_X3DConstants_default()).X3DPickableObject);
// Private properties
this .objectType = new Set ();
}
Object .assign (X3DPickableObject .prototype,
{
initialize ()
{
this ._objectType .addInterest ("set_objectType__", this);
this .set_objectType__ ();
},
getObjectType ()
{
return this .objectType;
},
set_objectType__ ()
{
this .objectType .clear ();
for (const objectType of this ._objectType)
this .objectType .add (objectType);
},
dispose ()
{ },
});
Object .defineProperties (X3DPickableObject, external_X_ITE_X3D_X3DNode_default().getStaticProperties ("X3DPickableObject", "Picking", 1));
const X3DPickableObject_default_ = X3DPickableObject;
;
/* harmony default export */ const Picking_X3DPickableObject = (external_X_ITE_X3D_Namespace_default().add ("X3DPickableObject", X3DPickableObject_default_));
;// external "__X_ITE_X3D__ .TraverseType"
const external_X_ITE_X3D_TraverseType_namespaceObject = __X_ITE_X3D__ .TraverseType;
var external_X_ITE_X3D_TraverseType_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_TraverseType_namespaceObject);
;// ./src/x_ite/Components/Picking/PickableGroup.js
function PickableGroup (executionContext)
{
external_X_ITE_X3D_X3DGroupingNode_default().call (this, executionContext);
Picking_X3DPickableObject .call (this, executionContext);
this .addType ((external_X_ITE_X3D_X3DConstants_default()).PickableGroup);
// Private properties
this .pickSensorNodes = new Set ();
}
Object .assign (Object .setPrototypeOf (PickableGroup .prototype, (external_X_ITE_X3D_X3DGroupingNode_default()).prototype),
Picking_X3DPickableObject .prototype,
{
initialize ()
{
external_X_ITE_X3D_X3DGroupingNode_default().prototype .initialize .call (this);
Picking_X3DPickableObject .prototype .initialize .call (this);
this ._pickable .addInterest ("set_pickableObjects__", this);
},
set_pickableObjects__ ()
{
this .setPickableObject (this ._pickable .getValue () || this .getTransformSensors () .size);
},
traverse (type, renderObject)
{
if (type !== (external_X_ITE_X3D_TraverseType_default()).PICKING)
{
external_X_ITE_X3D_X3DGroupingNode_default().prototype .traverse .call (this, type, renderObject);
return;
}
if (!this ._pickable .getValue ())
{
if (this .getTransformSensors () .size)
{
const modelMatrix = renderObject .getModelViewMatrix () .get ();
for (const transformSensorNode of this .getTransformSensors ())
transformSensorNode .collect (modelMatrix);
}
return;
}
if (this .getObjectType () .has ("NONE"))
return;
const
browser = this .getBrowser (),
pickableStack = browser .getPickable ();
if (this .getObjectType () .has ("ALL"))
{
pickableStack .push (true);
external_X_ITE_X3D_X3DGroupingNode_default().prototype .traverse .call (this, type, renderObject);
pickableStack .pop ();
return;
}
// Filter pick sensors.
const
pickSensorNodes = this .pickSensorNodes,
pickSensorStack = browser .getPickSensors ();
for (const pickSensorNode of pickSensorStack .at (-1))
{
if (!pickSensorNode .getObjectType () .has ("ALL"))
{
let intersection = 0;
for (const objectType of this .getObjectType ())
{
if (pickSensorNode .getObjectType () .has (objectType))
{
++ intersection;
break;
}
}
switch (pickSensorNode .getMatchCriterion ())
{
case Picking_MatchCriterion .MATCH_ANY:
{
if (intersection === 0)
continue;
break;
}
case Picking_MatchCriterion .MATCH_EVERY:
{
if (intersection !== pickSensor .getObjectType () .size)
continue;
break;
}
case Picking_MatchCriterion .MATCH_ONLY_ONE:
{
if (intersection !== 1)
continue;
break;
}
}
}
pickSensorNodes .add (pickSensorNode);
}
pickableStack .push (true);
pickSensorStack .push (pickSensorNodes);
external_X_ITE_X3D_X3DGroupingNode_default().prototype .traverse .call (this, type, renderObject);
pickSensorStack .pop ();
pickableStack .pop ();
pickSensorNodes .clear ();
},
dispose ()
{
Picking_X3DPickableObject .prototype .dispose .call (this);
external_X_ITE_X3D_X3DGroupingNode_default().prototype .dispose .call (this);
},
});
Object .defineProperties (PickableGroup,
{
... external_X_ITE_X3D_X3DNode_default().getStaticProperties ("PickableGroup", "Picking", 1, "children", "3.2"),
fieldDefinitions:
{
value: new (external_X_ITE_X3D_FieldDefinitionArray_default()) ([
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "metadata", new (external_X_ITE_X3D_Fields_default()).SFNode ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "description", new (external_X_ITE_X3D_Fields_default()).SFString ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "pickable", new (external_X_ITE_X3D_Fields_default()).SFBool (true)),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "objectType", new (external_X_ITE_X3D_Fields_default()).MFString ("ALL")),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "visible", new (external_X_ITE_X3D_Fields_default()).SFBool (true)),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "bboxDisplay", new (external_X_ITE_X3D_Fields_default()).SFBool ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxSize", new (external_X_ITE_X3D_Fields_default()).SFVec3f (-1, -1, -1)),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).initializeOnly, "bboxCenter", new (external_X_ITE_X3D_Fields_default()).SFVec3f ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "addChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOnly, "removeChildren", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
new (external_X_ITE_X3D_X3DFieldDefinition_default()) ((external_X_ITE_X3D_X3DConstants_default()).inputOutput, "children", new (external_X_ITE_X3D_Fields_default()).MFNode ()),
]),
enumerable: true,
},
});
const PickableGroup_default_ = PickableGroup;
;
/* harmony default export */ const Picking_PickableGroup = (external_X_ITE_X3D_Namespace_default().add ("PickableGroup", PickableGroup_default_));
;// external "__X_ITE_X3D__ .X3DCast"
const external_X_ITE_X3D_X3DCast_namespaceObject = __X_ITE_X3D__ .X3DCast;
var external_X_ITE_X3D_X3DCast_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_X3DCast_namespaceObject);
;// external "__X_ITE_X3D__ .Rotation4"
const external_X_ITE_X3D_Rotation4_namespaceObject = __X_ITE_X3D__ .Rotation4;
var external_X_ITE_X3D_Rotation4_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_Rotation4_namespaceObject);
;// external "__X_ITE_X3D__ .AmmoClass"
const external_X_ITE_X3D_AmmoClass_namespaceObject = __X_ITE_X3D__ .AmmoClass;
var external_X_ITE_X3D_AmmoClass_default = /*#__PURE__*/__webpack_require__.n(external_X_ITE_X3D_AmmoClass_namespaceObject);
;// ./src/x_ite/Browser/Picking/VolumePicker.js
function VolumePicker ()
{
this .broadphase = new (external_X_ITE_X3D_AmmoClass_default()).btDbvtBroadphase ();
this .collisionConfiguration = new (external_X_ITE_X3D_AmmoClass_default()).btDefaultCollisionConfiguration ();
this .dispatcher = new (external_X_ITE_X3D_AmmoClass_default()).btCollisionDispatcher (this .collisionConfiguration);
this .collisionWorld = new (external_X_ITE_X3D_AmmoClass_default()).btCollisionWorld (this .dispatcher, this .broadphase, this .collisionConfiguration);
this .compoundShape1 = new (external_X_ITE_X3D_AmmoClass_default()).btCompoundShape ();
this .motionState1 = new (external_X_ITE_X3D_AmmoClass_default()).btDefaultMotionState ();
this .constructionInfo1 = new (external_X_ITE_X3D_AmmoClass_default()).btRigidBodyConstructionInfo (0, this .motionState1, this .compoundShape1);
this .rigidBody1 = new (external_X_ITE_X3D_AmmoClass_default()).btRigidBody (this .constructionInfo1);
this .compoundShape2 = new (external_X_ITE_X3D_AmmoClass_default()).btCompoundShape ();
this .motionState2 = new (external_X_ITE_X3D_AmmoClass_default()).btDefaultMotionState ();
this .constructionInfo2 = new (external_X_ITE_X3D_AmmoClass_default()).btRigidBodyConstructionInfo (0, this .motionState2, this .compoundShape2);
this .rigidBody2 = new (external_X_ITE_X3D_AmmoClass_default()).btRigidBody (this .constructionInfo2);
this .collisionWorld .addCollisionObject (this .rigidBody1);
this .collisionWorld .addCollisionObject (this .rigidBody2);
}
Object .assign (VolumePicker .prototype,
{
constuctor: VolumePicker,
setChildShape1 (matrix, childShape)
{
this .setChildShape (this .compoundShape1, matrix, childShape);
},
setChildShape2 (matrix, childShape)
{
this .setChildShape (this .compoundShape2, matrix, childShape);
},
setChildShape1Components (transform, localScaling, childShape)
{
this .setChildShapeComponents (this .compoundShape1, transform, localScaling, childShape);
},
setChildShape2Components (transform, localScaling, childShape)
{
this .setChildShapeComponents (this .compoundShape2, transform, localScaling, childShape);
},
setChildShape: (() =>
{
const
translation = new (external_X_ITE_X3D_Vector3_default()) (),
rotation = new (external_X_ITE_X3D_Rotation4_default()) (),
scale = new (external_X_ITE_X3D_Vector3_default()) (1),
s = new (external_X_ITE_X3D_AmmoClass_default()).btVector3 (0, 0, 0);
return function (compoundShape, matrix, childShape)
{
if (compoundShape .getNumChildShapes ())
compoundShape .removeChildShapeByIndex (0);
if (childShape .getNumChildShapes ())
{
matrix .get (translation, rotation, scale);
s .setValue (scale .x, scale .y, scale .z);
childShape .setLocalScaling (s);
compoundShape .addChildShape (this .getTransform (translation, rotation), childShape);
}
};
})(),
setChildShapeComponents (compoundShape, transform, localScaling, childShape)
{
if (compoundShape .getNumChildShapes ())
compoundShape .removeChildShapeByIndex (0);
if (childShape .getNumChildShapes ())
{
childShape .setLocalScaling (localScaling);
compoundShape .addChildShape (transform, childShape);
}
},
contactTest ()
{
this .collisionWorld .performDiscreteCollisionDetection ();
const numManifolds = this .dispatcher .getNumManifolds ();
for (let i = 0; i < numManifolds; ++ i)
{
const
contactManifold = this .dispatcher .getManifoldByIndexInternal (i),
numContacts = contactManifold .getNumContacts ();
for (let j = 0; j < numContacts; ++ j)
{
const pt = contactManifold .getContactPoint (j);
if (pt .getDistance () <= 0)
return true;
}
}
return false;
},
getTransform: (() =>
{
const
T = new (external_X_ITE_X3D_AmmoClass_default()).btTransform (),
o = new (external_X_ITE_X3D_AmmoClass_default()).btVector3 (0, 0, 0),
m = new (external_X_ITE_X3D_Matrix4_default()) ();
return function (translation, rotation, transform)
{
const t = transform || T;
m .set (translation, rotation);
o .setValue (m [12], m [13], m [14]);
t .getBasis () .setValue (m [0], m [4], m [8],
m [1], m [5], m [9],
m [2], m [6], m [10]);
t .setOrigin (o);
return t;
};
})(),
});
const VolumePicker_default_ = VolumePicker;
;
/* harmony default export */ const Picking_VolumePicker = (external_X_ITE_X3D_Namespace_default().add ("VolumePicker", VolumePicker_default_));
;// ./src/x_ite/Components/Picking/PointPickSensor.js
function PointPickSensor (executionContext)
{
Picking_X3DPickSensorNode .call (this, executionContext);
this .addType ((external_X_ITE_X3D_X3DConstants_default()).PointPickSensor);
// Private properties
this .picker = new Picking_VolumePicker ();
this .compoundShapes = [ ];
}
Object .assign (Object .setPrototypeOf (PointPickSensor .prototype, Picking_X3DPickSensorNode .prototype),
{
initialize ()
{
Picking_X3DPickSensorNode .prototype .initialize .call (this);
this ._pickingGeometry .addInterest ("set_pickingGeometry__", this);
this .set_pickingGeometry__ ();
},
set_pickingGeometry__ ()
{
this .pickingGeometryNode ?._rebuild .removeInterest ("set_geometry__", this);
this .pickingGeometryNode = external_X_ITE_X3D_X3DCast_default() ((external_X_ITE_X3D_X3DConstants_default()).PointSet, this ._pickingGeometry);
this .pickingGeometryNode ?._rebuild .addInterest ("set_geometry__", this);
this .set_geometry__ ();
},
set_geometry__: (() =>
{
const
defaultScale = new (external_X_ITE_X3D_AmmoClass_default()).btVector3 (1, 1, 1),
o = new (external_X_ITE_X3D_AmmoClass_default()).btVector3 (),
t = new (external_X_ITE_X3D_AmmoClass_default()).btTransform ();
return function ()
{
const
compoundShapes = this .compoundShapes,
coord = this .pickingGeometryNode ?.getCoord (),
length = coord ?.getSize () ?? 0;
for (let i = 0; i < length; ++ i)
{
if (i < compoundShapes .length)
{
const
compoundShape = compoundShapes [i],
point = coord .get1Point (i, compoundShape .point);
o .setValue (point .x, point .y, point .z);
t .setOrigin (o);
compoundShape .setLocalScaling (defaultScale);
compoundShape .updateChildTransform (0, t);
}
else
{
const
compoundShape = new (external_X_ITE_X3D_AmmoClass_default()).btCompoundShape (),
sphereShape = new (external_X_ITE_X3D_AmmoClass_default()).btSphereShape (0),
point = coord .get1Point (i, new (external_X_ITE_X3D_Vector3_default()) ());
compoundShape .point = point;
o .setValue (point .x, point .y, point .z);
t .setOrigin (o);
compoundShape .addChildShape (t, sphereShape);
compoundShapes .push (compoundShape);
}
}
compoundShapes .length = length;
};
})(),
process: (() =>
{
const
pickingBBox = new (external_X_ITE_X3D_Box3_default()) (),
targetBBox = new (external_X_ITE_X3D_Box3_default()) (),
pickingCenter = new (external_X_ITE_X3D_Vector3_default()) (),
targetCenter = new (external_X_ITE_X3D_Vector3_default()) (),
transform = new (external_X_ITE_X3D_AmmoClass_default()).btTransform (),
localScaling = new (external_X_ITE_X3D_AmmoClass_default()).btVector3 (),
translation = new (external_X_ITE_X3D_Vector3_default()) (),
rotation = new (external_X_ITE_X3D_Rotation4_default()) (),
scale = new (external_X_ITE_X3D_Vector3_default()) (1),
pickedPoint = new (external_X_ITE_X3D_Fields_default()).MFVec3f ();
return function ()
{
if (this .pickingGeometryNode)
{
const
modelMatrices = this .getModelMatrices (),
targets = this .getTargets ();
switch (this .getIntersectionType ())
{
case Picking_IntersectionType .BOUNDS:
{
// Intersect bboxes.
for (const modelMatrix of modelMatrices)
{
pickingBBox .assign (this .pickingGeometryNode .getBBox ()) .multRight (modelMatrix);
for (const target of targets)
{
targetBBox .assign (target .geometryNode .getBBox ()) .multRight (target .modelMatrix);
if (pickingBBox .intersectsBox (targetBBox))
{
pickingCenter .assign (pickingBBox .center);
targetCenter .assign (targetBBox .center);
target .intersected = true;
target .distance = pickingCenter .distance (targetCenter);
}
}
}
// Send events.
const
pickedGeometries = this .getPickedGeometries (),
active = !! pickedGeometries .length;
pickedGeometries .assign (pickedGeometries .filter (node => node));
if (active !== this ._isActive .getValue ())
this ._isActive = active;
if (!this ._pickedGeometry .equals (pickedGeometries))
this ._pickedGeometry = pickedGeometries;
break;
}
case Picking_IntersectionType .GEOMETRY:
{
// Intersect geometry.
const
picker = this .picker,
compoundShapes = this .compoundShapes;
for (const modelMatrix of modelMatrices)
{
pickingBBox .assign (this .pickingGeometryNode .getBBox ()) .multRight (modelMatrix);
modelMatrix .get (translation, rotation, scale);
picker .getTransform (translation, rotation, transform);
localScaling .setValue (scale .x, scale .y, scale .z);
for (const compoundShape of compoundShapes)
{
picker .setChildShape1Components (transform, localScaling, compoundShape);
for (const target of targets)
{
const targetShape = this .getPickShape (target .geometryNode);