예제 #1
0
        private static IModelProblem BuildProblem(ProblemMemento problemMemento)
        {
            var modelProblem = new ModelProblem(problemMemento.Name);

            Dictionary <int, IModelNode>     nodesDictionary     = new Dictionary <int, IModelNode>();
            Dictionary <int, IModelMaterial> materialsDictionary = new Dictionary <int, IModelMaterial>();

            foreach (var nodeMemento in problemMemento.Nodes.OrderBy(x => x.Id))
            {
                var modelNode = modelProblem.AddNode();

                modelNode.IsXFixed      = nodeMemento.IsXFixed;
                modelNode.IsYFixed      = nodeMemento.IsYFixed;
                modelNode.IsZFixed      = nodeMemento.IsZFixed;
                modelNode.Coordinates.X = nodeMemento.X;
                modelNode.Coordinates.Y = nodeMemento.Y;
                modelNode.Coordinates.Z = nodeMemento.Z;

                nodesDictionary.Add(nodeMemento.Id, modelNode);
            }

            foreach (var forceMemento in problemMemento.Forces.OrderBy(x => x.Id))
            {
                var applicationNode = nodesDictionary[forceMemento.NodeId];

                var modelForce = modelProblem.AddForce(applicationNode);
                modelForce.ApplicationVector.X = forceMemento.ApplicationVectorX;
                modelForce.ApplicationVector.Y = forceMemento.ApplicationVectorY;
                modelForce.ApplicationVector.Z = forceMemento.ApplicationVectorZ;
            }

            foreach (var mementoMaterial in problemMemento.Materials.OrderBy(x => x.Id))
            {
                var modelMaterial = modelProblem.AddMaterial();

                modelMaterial.Name          = mementoMaterial.Name;
                modelMaterial.YoungsModulus = mementoMaterial.YoungsModulus;

                materialsDictionary.Add(mementoMaterial.Id, modelMaterial);
            }

            foreach (var elementMemento in problemMemento.Elements.OrderBy(x => x.Id))
            {
                var modelMaterial        = materialsDictionary[elementMemento.MaterialId];
                var originModelNode      = nodesDictionary[elementMemento.OriginNodeId];
                var destinationModelNode = nodesDictionary[elementMemento.DestinationNodeId];

                var modelElement = modelProblem.AddElement(originModelNode, destinationModelNode);
                modelElement.Material         = modelMaterial;
                modelElement.CrossSectionArea = elementMemento.CrossSectionArea;
            }

            return(modelProblem);
        }
예제 #2
0
        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);
        }