123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- 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.
- * <p>
- * Use {@link Model#getNode} to create an instance.
- * </p>
- *
- * @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 the <code>name</code> 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.
- * <p>
- * For changes to take effect, this property must be assigned to;
- * setting individual elements of the matrix will not work.
- * </p>
- *
- * @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;
|