private SegmentF ParseSegment(XmlReader r, PointF scale) { r.ReadStartElement(); PointF a = PointF.Empty; PointF b = PointF.Empty; while (r.NodeType == XmlNodeType.Element) { switch (r.Name) { case "A": a = XmlHelper.ParsePointF(r.ReadElementContentAsString()); break; case "B": b = XmlHelper.ParsePointF(r.ReadElementContentAsString()); break; default: string unparsed = r.ReadOuterXml(); log.DebugFormat("Unparsed content in KVA XML: {0}", unparsed); break; } } //.Scale(scale.X, scale.Y); SegmentF segment = new SegmentF(a, b); r.ReadEndElement(); return(segment); }
public void ReadLineXml(XmlReader r, PointF scaling) { r.ReadStartElement(); float length = 0; SegmentF line = SegmentF.Empty; while (r.NodeType == XmlNodeType.Element) { switch (r.Name) { case "Length": length = float.Parse(r.ReadElementContentAsString(), CultureInfo.InvariantCulture); break; case "Segment": line = ParseSegment(r, scaling); break; case "Origin": // Import from older format. origin = XmlHelper.ParsePointF(r.ReadElementContentAsString()); if (float.IsNaN(origin.X) || float.IsNaN(origin.Y)) { origin = PointF.Empty; } origin = origin.Scale(scaling.X, scaling.Y); break; case "Scale": // Import and convert from older format. // Create a fake line of 100 px horizontal at the origin. float bakedScale = float.Parse(r.ReadElementContentAsString(), CultureInfo.InvariantCulture); float lengthPixels = 100; PointF start = origin; PointF end = origin.Translate(lengthPixels, 0); line = new SegmentF(start, end); length = lengthPixels * bakedScale; // The actual origin should be expressed in the calibrated plane coordinate system, which has its true origin at the A point of the quad. origin = new PointF(0, length); break; default: string unparsed = r.ReadOuterXml(); log.DebugFormat("Unparsed content in KVA XML: {0}", unparsed); break; } } r.ReadEndElement(); // Update mapping. size = new SizeF(length, length); quadImage = MakeQuad(line.Start, line.End); mapping.Update(new QuadrilateralF(size.Width, size.Height), quadImage); valid = quadImage.IsConvex; initialized = true; }