public void RestoreMemento(NodeMemento memento) { if (memento is NodePositionMemento positionMemento) { var node = myNodes.FirstOrDefault(x => x.id == positionMemento.nodeId); if (node != null) { node.RestoreMemento(positionMemento, this); } } else if (memento is NodeConnectionMemento connectionMemento) { foreach (var nodeMemento in connectionMemento.nodeConnections) { var node = myNodes.FirstOrDefault(x => x.id == nodeMemento.Key); if (node != null) { node.myConnectionIds = nodeMemento.Value; node.FormConnections(this); } } } else if (memento is NodeCreatedMemento createdMemento) { var node = myNodes.FirstOrDefault(x => x.id == createdMemento.nodeId); if (node != null) { RemoveNode(node); } } else if (memento is NodeDeletedMemento deletedMemento) { AddNode(deletedMemento.node); foreach (var node in myNodes) { if (deletedMemento.nodesWithConnectionToThis.Contains(node.id)) { node.CreateConnection(deletedMemento.node); } } } }
private static ProblemMemento BuildMemento(IModelProblem modelProblem) { var result = new ProblemMemento() { Name = modelProblem.Name }; foreach (var modelNode in modelProblem.Nodes) { var nodeMemento = new NodeMemento() { Id = modelNode.Id, IsXFixed = modelNode.IsXFixed, IsYFixed = modelNode.IsYFixed, IsZFixed = modelNode.IsZFixed, X = modelNode.Coordinates.X, Y = modelNode.Coordinates.Y, Z = modelNode.Coordinates.Z }; result.Nodes.Add(nodeMemento); } foreach (var modelForce in modelProblem.Forces) { var forceMemento = new ForceMemento() { Id = modelForce.Id, ApplicationVectorX = modelForce.ApplicationVector.X, ApplicationVectorY = modelForce.ApplicationVector.Y, ApplicationVectorZ = modelForce.ApplicationVector.Z, NodeId = modelForce.Node.Id }; result.Forces.Add(forceMemento); } foreach (var modelMaterial in modelProblem.Materials) { var materialMemento = new MaterialMemento { Id = modelMaterial.Id, Name = modelMaterial.Name, YoungsModulus = modelMaterial.YoungsModulus }; result.Materials.Add(materialMemento); } foreach (var modelBarElement in modelProblem.Elements) { var barElementMemento = new BarElementMemento { Id = modelBarElement.Id, OriginNodeId = modelBarElement.OriginNode.Id, DestinationNodeId = modelBarElement.DestinationNode.Id, MaterialId = modelBarElement.Material.Id, CrossSectionArea = modelBarElement.CrossSectionArea }; result.Elements.Add(barElementMemento); } return(result); }