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); }
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; }