/// <summary>
        /// Rebuild a quadrilateral to help drawing the coordinate system.
        /// </summary>
        private void UpdateQuadImage(PointF a, PointF b)
        {
            PointF c = new PointF(a.X + (b.Y - a.Y), a.Y - (b.X - a.X));
            PointF d = new PointF(c.X + (b.X - a.X), c.Y + (b.Y - a.Y));

            quadImage = new QuadrilateralF(c, d, b, a);
        }
示例#2
0
        private void WriteCalibrationHelp(XmlTextWriter w)
        {
            bool       line       = random.NextBoolean();
            Array      values     = Enum.GetValues(typeof(LengthUnit));
            LengthUnit lengthUnit = (LengthUnit)values.GetValue(random.Next(values.Length));

            w.WriteStartElement("Calibration");

            if (line)
            {
                PointF origin = random.NextPointF(0, imageSize.Width, 0, imageSize.Height);
                float  scale  = (float)(random.NextDouble() * 50);

                w.WriteStartElement("CalibrationLine");
                w.WriteElementString("Origin", XmlHelper.WritePointF(origin));
                w.WriteElementString("Scale", string.Format(CultureInfo.InvariantCulture, "{0}", scale));
                w.WriteEndElement();
            }
            else
            {
                SizeF          calibrationSize = random.NextSizeF(1, 100, 1, 100);
                QuadrilateralF quad            = GetRandomQuadrilateral();
                PointF         origin          = new PointF(0, calibrationSize.Height);

                w.WriteStartElement("CalibrationPlane");

                w.WriteElementString("Size", XmlHelper.WriteSizeF(calibrationSize));

                w.WriteStartElement("Quadrilateral");
                w.WriteElementString("A", XmlHelper.WritePointF(quad.A));
                w.WriteElementString("B", XmlHelper.WritePointF(quad.B));
                w.WriteElementString("C", XmlHelper.WritePointF(quad.C));
                w.WriteElementString("D", XmlHelper.WritePointF(quad.D));
                w.WriteEndElement();

                w.WriteElementString("Origin", XmlHelper.WritePointF(origin));

                w.WriteEndElement();
            }

            w.WriteStartElement("Unit");
            w.WriteAttributeString("Abbreviation", UnitHelper.LengthAbbreviation(lengthUnit));
            w.WriteString(lengthUnit.ToString());
            w.WriteEndElement();

            w.WriteEndElement();
        }
示例#3
0
        private void WriteDrawingPlane(XmlTextWriter w, Guid id, long time)
        {
            QuadrilateralF quadImage     = GetRandomQuadrilateral();
            bool           inPerspective = random.NextBoolean();

            if (!inPerspective)
            {
                quadImage.C = new PointF(quadImage.B.X, quadImage.D.Y);
                quadImage.MakeRectangle(0);
            }

            w.WriteElementString("PointUpperLeft", XmlHelper.WritePointF(quadImage.A));
            w.WriteElementString("PointUpperRight", XmlHelper.WritePointF(quadImage.B));
            w.WriteElementString("PointLowerRight", XmlHelper.WritePointF(quadImage.C));
            w.WriteElementString("PointLowerLeft", XmlHelper.WritePointF(quadImage.D));

            w.WriteElementString("Perspective", inPerspective.ToString().ToLower());

            w.WriteStartElement("DrawingStyle");
            WriteDrawingStyleColor(w, "color");
            WriteDrawingStyleGridDivisions(w, "divisions");
            w.WriteEndElement();

            WriteInfosFading(w);

            bool tracked = random.NextBoolean();

            if (!tracked)
            {
                return;
            }

            List <string> pointKeys = new List <string>()
            {
                "0", "1", "2", "3"
            };

            trackableDrawings.Add(new TrackableDrawing(id, time, pointKeys));
        }