import defineProperties from '../Core/defineProperties.js'; 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 * var 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); } 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; var 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;