예제 #1
0
 public Shift CalcShift(Reading reading)
 {
     return(new Shift(
                FrontSide.CalcPercDiff(reading.FrontSide)
                , RearSide.CalcPercDiff(reading.RearSide)
                , RightSide.CalcPercDiff(reading.RightSide)
                , LeftSide.CalcPercDiff(reading.LeftSide)
                ));
 }
예제 #2
0
        /// <summary>
        /// Tap on back of card to turn.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void BackSide_OnTapped(object sender, EventArgs e)
        {
            await Task.WhenAll(
                BackSide.RotateYTo(40, 300)
                );

            BackSide.IsVisible  = false;
            FrontSide.IsVisible = true;
            FrontSide.RotationY = -90;

            await Task.WhenAll(
                FrontSide.RotateYTo(0, 500)
                );
        }
예제 #3
0
        public static void WriteToFile(SpineStorage storage, string filename)
        {
            var keys    = storage.Keys;
            var sp_keys = storage.SpinousProcessKeys;

            logger.Info("Create XML for storage file - {0}", filename);

            XDocument doc = new XDocument();

            doc.Add(new XElement("storage"));

            var root = doc.Element("storage");


            #region Window Parameters

            var window = new XElement("window");

            window.Add(new XAttribute("center", storage.windowCenter));
            window.Add(new XAttribute("width", storage.windowWidth));

            root.Add(window);

            logger.Info("Add window parameters for file - {0}", filename);

            #endregion

            #region Direction Parameters

            var direction = new XElement("direction");

            direction.Add(new XAttribute("value", storage.direction));

            root.Add(direction);
            logger.Info("Add direction parameter for file - {0}", filename);

            var imageDirection = new XElement("imageDirection");

            imageDirection.Add(new XAttribute("value", storage.imageDirection));

            root.Add(imageDirection);
            logger.Info("Add image direction parameter for file - {0}", filename);

            #endregion

            #region Angle Parameters

            var angle = new XElement("angle");

            angle.Add(new XAttribute("value", storage.GetRotatingAngle()));

            root.Add(angle);
            logger.Info("Add angle parameter for file - {0}", filename);
            #endregion

            #region Marker Points
            var markers = new XElement("markers");

            if (storage.GetMarkersCount() != 0)
            {
                for (int i = 0; i < 4; i++)
                {
                    var point = storage.GetMarkerPoint(i);
                    var p     = new XElement("point");
                    p.Add(new XAttribute("x", point.X));
                    p.Add(new XAttribute("y", point.Y));
                    markers.Add(p);
                }
            }

            root.Add(markers);
            logger.Info("Add markers parameter for file - {0}", filename);
            #endregion

            #region Marker Line

            var markerLine = storage.MarkerLine;

            if (markerLine != null)
            {
                XElement marker = new XElement("markerline");
                marker.Add(new XAttribute("size", storage.MarkerSize));
                marker.Add(new XAttribute("length", storage.MarkerLength));

                XElement point_first  = new XElement("point_first");
                XElement point_second = new XElement("point_second");
                point_first.Add(new XAttribute("first", markerLine.Item1.Item1));
                point_first.Add(new XAttribute("second", markerLine.Item1.Item2));
                point_first.Add(new XAttribute("third", markerLine.Item1.Item3));

                marker.Add(point_first);

                point_second.Add(new XAttribute("first", markerLine.Item2.Item1));
                point_second.Add(new XAttribute("second", markerLine.Item2.Item2));
                point_second.Add(new XAttribute("third", markerLine.Item2.Item3));

                marker.Add(point_second);

                root.Add(marker);
            }


            #endregion

            logger.Info("Add pixel parameters for file - {0}", filename);

            foreach (var key in keys)
            {
                var state = storage.GetDescription(key);

                var element = new XElement("spine");
                var attr    = new XAttribute("key", key);
                element.Add(attr);

                var points_element = new XElement("points");

                var upleft_el = new XElement("point");
                upleft_el.SetAttributeValue("x", state.UpLeft.X);
                upleft_el.SetAttributeValue("y", state.UpLeft.Y);
                var downleft_el = new XElement("point");
                downleft_el.SetAttributeValue("x", state.DownLeft.X);
                downleft_el.SetAttributeValue("y", state.DownLeft.Y);
                var downright_el = new XElement("point");
                downright_el.SetAttributeValue("x", state.DownRight.X);
                downright_el.SetAttributeValue("y", state.DownRight.Y);
                var upright_el = new XElement("point");
                upright_el.SetAttributeValue("x", state.UpRight.X);
                upright_el.SetAttributeValue("y", state.UpRight.Y);

                points_element.Add(upleft_el);
                points_element.Add(downleft_el);
                points_element.Add(downright_el);
                points_element.Add(upright_el);

                element.Add(points_element);


                var geom_element = new XElement("geometry");

                IDescriptionCalculator <SpineDescription> calc = null;

                if (storage.direction == 0)
                {
                    calc = new RightSide(state);
                }
                else if (storage.direction == 1)
                {
                    calc = new LeftSide(state);
                }
                else if (storage.direction == 2)
                {
                    calc = new FrontSide(state);
                }
                else if (storage.direction == 3)
                {
                    calc = new BackSide(state);
                }

                var ks = calc.Keys;

                foreach (var key_param in ks)
                {
                    var geom_node = new XElement("param");
                    attr = new XAttribute("key", key_param);
                    geom_node.Add(attr);
                    attr = new XAttribute("value", calc.GetParameter(key_param));
                    geom_node.Add(attr);
                    geom_element.Add(geom_node);
                }


                element.Add(geom_element);
                root.Add(element);
                logger.Info("Add spine {0} parameters for file - {1}", key, filename);
            }


            foreach (var key in sp_keys)
            {
                var state = storage.GetSpinousProcessDescription(key);

                var element = new XElement("process");
                var attr    = new XAttribute("key", key);
                element.Add(attr);

                var points_element = new XElement("points");

                var uptp_el = new XElement("point");
                uptp_el.SetAttributeValue("x", state.UpPoint.X);
                uptp_el.SetAttributeValue("y", state.UpPoint.Y);
                var vertp_el = new XElement("point");
                vertp_el.SetAttributeValue("x", state.VertexPoint.X);
                vertp_el.SetAttributeValue("y", state.VertexPoint.Y);
                var downtp_el = new XElement("point");
                downtp_el.SetAttributeValue("x", state.DownPoint.X);
                downtp_el.SetAttributeValue("y", state.DownPoint.Y);


                points_element.Add(uptp_el);
                points_element.Add(vertp_el);
                points_element.Add(downtp_el);

                element.Add(points_element);

                var geom_element = new XElement("geometry");

                IDescriptionCalculator <SpinousProcessDescription> calc1 = null;

                if (storage.direction == 0)
                {
                    calc1 = new DescriptionCalculators.SpinousProcess.RightSide(state);
                }
                else if (storage.direction == 1)
                {
                    calc1 = new DescriptionCalculators.SpinousProcess.LeftSide(state);
                }

                var ks = calc1.Keys;

                foreach (var key_param in ks)
                {
                    var geom_node = new XElement("param");
                    attr = new XAttribute("key", key_param);
                    geom_node.Add(attr);
                    attr = new XAttribute("value", calc1.GetParameter(key_param));
                    geom_node.Add(attr);
                    geom_element.Add(geom_node);
                }


                element.Add(geom_element);
                root.Add(element);
                logger.Info("Add process {0} parameters for file - {1}", key, filename);
            }

            doc.Save(filename);

            logger.Info("Storage file has been saved - {0}", filename);
        }