import Matrix4 from "../Core/Matrix4.js"; /** * A model node with a transform for user-defined animations. A glTF asset can * contain animations that target a node's transform. This class allows * changing a node's transform externally so animation can be driven by another * source, not just an animation in the glTF asset. *
* Use {@link Model#getNode} to create an instance. *
* * @alias ModelNode * @internalConstructor * @class * * @example * const node = model.getNode('LOD3sp'); * node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix); * * @see Model#getNode */ function ModelNode(model, node, runtimeNode, id, matrix) { this._model = model; this._runtimeNode = runtimeNode; this._name = node.name; this._id = id; /** * @private */ this.useMatrix = false; this._show = true; this._matrix = Matrix4.clone(matrix); this._originalMatrix = Matrix4.clone(matrix); } Object.defineProperties(ModelNode.prototype, { /** * The value of thename
property of this node.
*
* @memberof ModelNode.prototype
*
* @type {String}
* @readonly
*/
name: {
get: function () {
return this._name;
},
},
/**
* The index of the node.
*
* @memberof ModelNode.prototype
*
* @type {String}
* @readonly
*/
id: {
get: function () {
return this._id;
},
},
/**
* Determines if this node and its children will be shown.
*
* @memberof ModelNode.prototype
* @type {Boolean}
*
* @default true
*/
show: {
get: function () {
return this._show;
},
set: function (value) {
if (this._show !== value) {
this._show = value;
this._model._perNodeShowDirty = true;
}
},
},
/**
* The node's 4x4 matrix transform from its local coordinates to
* its parent's.
* * For changes to take effect, this property must be assigned to; * setting individual elements of the matrix will not work. *
* * @memberof ModelNode.prototype * @type {Matrix4} */ matrix: { get: function () { return this._matrix; }, set: function (value) { this._matrix = Matrix4.clone(value, this._matrix); this.useMatrix = true; const model = this._model; model._cesiumAnimationsDirty = true; this._runtimeNode.dirtyNumber = model._maxDirtyNumber; }, }, /** * Gets the node's original 4x4 matrix transform from its local coordinates to * its parent's, without any node transformations or articulations applied. * * @memberof ModelNode.prototype * @type {Matrix4} */ originalMatrix: { get: function () { return this._originalMatrix; }, }, }); /** * @private */ ModelNode.prototype.setMatrix = function (matrix) { // Update matrix but do not set the dirty flag since this is used internally // to keep the matrix in-sync during a glTF animation. Matrix4.clone(matrix, this._matrix); }; export default ModelNode;