예제 #1
0
파일: Axis.cs 프로젝트: dehzonglee/pCAD
        public SerializableAxis ToSerializableType()
        {
            var serializableAxis = new SerializableAxis();

            for (var i = 0; i < Coordinates.Count; i++)
            {
                var c = Coordinates[i];

                if (c.IsCurrentlyDrawn)
                {
                    continue;
                }

                if (c is Mue mue)
                {
                    serializableAxis.Mues.Add(mue.ToSerializableType(i));
                }
                else if (c is Lambda lambda)
                {
                    serializableAxis.Lambdas.Add(lambda.ToSerializableType(i));
                }
                else if (c is Origin origin)
                {
                    serializableAxis.Origin = origin.ToSerializableType(i);
                }
                else
                {
                    Debug.LogError($"Could not serialize {c}");
                }
            }

            return(serializableAxis);
        }
예제 #2
0
파일: Axis.cs 프로젝트: dehzonglee/pCAD
        public void SetSerializableType(SerializableAxis serializableAxis, List <Parameter> parameters)
        {
            // Generate all coordinates
            // The origin is always the coordinate with index = 0;
            var coordinates = new List <Coordinate>();

            var o      = serializableAxis.Origin;
            var origin = new Origin(
                o.ID,
//                parameters.First(p => p.ID == serializableAxis.Origin.ParameterID),
                o.OriginPosition
                );

            Anchor.ResetPrimaryCoordinate();
            Anchor.ResetSecondaryCoordinate();

            coordinates.Add(origin);

            var mues    = serializableAxis.Mues;
            var lambdas = serializableAxis.Lambdas;

            var coordinateCount = mues.Count + lambdas.Count + 1;

            for (var i = 1; i < coordinateCount; i++)
            {
                if (mues.Any(c => c.Index == i))
                {
                    var mue           = mues.First(m => m.Index == i);
                    var newCoordinate = new Mue(
                        mue.ID,
                        parameters.First(p => p.ID == mue.ParameterID),
                        mue.PointsInNegativeDirection,
                        OnCoordinateDeleted,
                        OnCoordinateChanged,
                        false);
                    coordinates.Add(newCoordinate);
                    continue;
                }

                if (lambdas.Any(l => l.Index == i))
                {
                    var lambda        = lambdas.First(l => l.Index == i);
                    var newCoordinate = new Lambda(
                        lambda.ID,
                        0.5f, // todo: make lambdas have parameter references; parameters.First(p=>p.ID == lambda.ParameterID),
                        OnCoordinateDeleted,
                        OnCoordinateChanged,
                        false
                        );
                    coordinates.Add(newCoordinate);
                    continue;
                }
                Debug.LogError($"Could not find any serialized Coordinate with index {i}.");
            }

            //set parents
            foreach (var mSerial in mues)
            {
                var mue = coordinates[mSerial.Index];


                if (!coordinates.Any(c => c.ID == mSerial.ParentID))
                {
                    Debug.Log($"Search for {mSerial.ParentID} in {coordinates.Count} coordinates");
                }

//                var parent =
                mue.SetParents(new List <Coordinate>()
                {
                    coordinates.First(c => c.ID == mSerial.ParentID)
                });
            }

            foreach (var lSerial in lambdas)
            {
                var lambda = coordinates[lSerial.Index];
                var p0     = coordinates.First(c => c.ID == lSerial.ParentIDs[0]);
                var p1     = coordinates.First(c => c.ID == lSerial.ParentIDs[1]);
                lambda.SetParents(new List <Coordinate>()
                {
                    p0, p1
                });
            }

            Coordinates = coordinates;
        }