예제 #1
0
        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
            });
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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();
        }