Esempio n. 1
0
 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);
        }