private static FilletCircle DeserializeCircle(XmlReader reader) { var radius = 0.0; var center = new FilletPoint(); while (reader.Read() && reader.NodeType != XmlNodeType.EndElement) { switch (reader.Name) { case "Radius": radius = Property.ObjectToNullableDouble(reader.ReadString(), CultureInfo.InvariantCulture) ?? 0.0; break; case "Center": center = DeserializePoint(reader); break; } } return(new FilletCircle { Radius = radius, Center = center }); }
/// <summary>Constructor.</summary> /// <param name="radius">The radius.</param> /// <param name="center">The center point of circle.</param> public FilletCircle(double radius, FilletPoint center) { if (double.IsNaN(radius) || radius <= double.Epsilon) { throw new ArgumentException($"Radius is not a valid value: {radius}"); } Radius = double.IsNaN(radius) ? -1 : radius; if (center?.Segment == null || center.Position == null || center.Direction == null || double.IsNaN(center.Deviation)) { throw new ArgumentException($"center is invalid"); } Center = new FilletPoint(center.Position, center.Direction, center.Deviation); }
private static FilletPoint DeserializePoint(XmlReader reader) { var deviation = Property.ObjectToNullableDouble(reader.GetAttribute("Deviation"), CultureInfo.InvariantCulture) ?? 0.0; var tolerance = default(Tolerance); var position = new Vector(); var normal = new Vector(); while (reader.Read() && reader.NodeType != XmlNodeType.EndElement) { switch (reader.Name) { case "Tolerance": tolerance = Tolerance.Deserialize(reader); break; case "Position": position = Vector.Deserialize(reader); break; case "Normal": normal = Vector.Deserialize(reader); break; } } var point = new FilletPoint { Position = position, Deviation = deviation, Direction = normal }; if (tolerance != null) { point.Tolerance = tolerance; } return(point); }
private static void SerializePoint(XmlWriter writer, FilletPoint point, string name) { writer.WriteStartElement(name); writer.WriteAttributeString("Deviation", XmlConvert.ToString(point.Deviation)); writer.WriteStartElement("Position"); point.Position.Serialize(writer); writer.WriteEndElement(); writer.WriteStartElement("Normal"); point.Direction.Serialize(writer); writer.WriteEndElement(); if (!point.Tolerance.IsEmpty) { writer.WriteStartElement("Tolerance"); point.Tolerance.Serialize(writer); writer.WriteEndElement(); } writer.WriteEndElement(); }