/// <summary> /// Clona los movimientos /// </summary> public MovementModelCollection Clone() { MovementModelCollection target = new MovementModelCollection(); // Clona los datos foreach (MovementBaseModel movement in this) { target.Add(movement.Clone()); } // Devuelve la colección clonada return(target); }
/// <summary> /// Clona los movimientos hasta una variación /// </summary> internal MovementModelCollection CloneTo(MovementVariationModel variation, MovementVariationModel targetVariation, MovementFigureModel targetMovement) { MovementModelCollection movements = new MovementModelCollection(); bool variationFound = false; // Clona los datos foreach (MovementBaseModel movement in this) { if (!variationFound) { // Busca la variación entre las variaciones del movimiento foreach (MovementVariationModel variationChild in movement.Variations) { if (variationChild.Id == targetVariation.Id) { // Añade los movimientos de la variación foreach (MovementBaseModel movementBase in variationChild.Movements) { movements.Add(movementBase.Clone()); } // Indica que se ha encontrado la variación y no se debe seguir clonando variationFound = true; } } // Si no se ha encontrado la variación, se sigue clonando, si se ha encontrado, se sustituye el // movimiento por el destino y se deja de clonar if (!variationFound) { movements.Add(movement.Clone()); } } } // Devuelve la colección clonada return(movements); }