コード例 #1
0
        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);
        }
コード例 #2
0
        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;
        }