/// <summary> /// Clona hasta una variación /// </summary> public MovementVariationModel CloneTo(MovementBaseModel parent, MovementVariationModel target, MovementFigureModel movement) { MovementVariationModel variation = new MovementVariationModel(parent); // Clona los movimientos variation.Movements.AddRange(Movements.CloneTo(variation, target, movement)); // Devuelve la variación clonada return(variation); }
/// <summary> /// Clona una variación /// </summary> public MovementVariationModel Clone(MovementBaseModel parent) { MovementVariationModel target = new MovementVariationModel(parent); // Clona las propiedades target.Id = Id; // Clona los movimientos target.Movements.AddRange(Movements.Clone()); // Devuelve la variació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); }