示例#1
0
        private void Calculate()
        {
            if (storage != null)
            {
                #region Spines
                foreach (var key in storage.Keys)
                {
                    var spine = storage.GetDescription(key);

                    IDescriptionCalculator <SpineDescription> calc = null;

                    if (storage.direction == 0)
                    {
                        calc = new SpineLib.Geometry.DescriptionCalculators.Spine.LeftSide(spine);
                    }
                    else if (storage.direction == 1)
                    {
                        calc = new SpineLib.Geometry.DescriptionCalculators.Spine.RightSide(spine);
                    }
                    else if (storage.direction == 2)
                    {
                        calc = new SpineLib.Geometry.DescriptionCalculators.Spine.FrontSide(spine);
                    }
                    else if (storage.direction == 3)
                    {
                        calc = new SpineLib.Geometry.DescriptionCalculators.Spine.BackSide(spine);
                    }

                    if (SpinesDataGrid.Columns.Count == 0)
                    {
                        var ks = calc.Keys;
                        SpinesDataGrid.Columns.Add(new DataGridTextColumn()
                        {
                            Header  = "Позвонок",
                            Binding = new Binding("[0]"),
                        });
                        int index = 1;
                        foreach (var key_col in ks)
                        {
                            SpinesDataGrid.Columns.Add(
                                new DataGridTextColumn()
                            {
                                Header  = calc.GetParameterDescription(key_col),
                                Binding = new Binding(string.Format("[{0}]", index++)),
                            });
                        }
                    }

                    List <string> obj = new List <string>();

                    obj.Add(key);
                    var keys = calc.Keys;
                    foreach (var key_col in keys)
                    {
                        var value = calc.GetParameter(key_col);
                        if (calc.IsParameterLinear(key_col))
                        {
                            value /= storage.MarkerLength;
                            value *= storage.MarkerSize;
                        }

                        obj.Add(string.Format("{0:0.000}", value));
                    }

                    SpinesDataGrid.Items.Add(obj);
                }
                #endregion

                #region Interspines
                foreach (var key in storage.Keys)
                {
                    int keyind = SpineConstants.SpineNames.IndexOf(key);
                    if (keyind != SpineConstants.SpineNames.Count - 1)
                    {
                        var next = SpineConstants.SpineNames[(keyind + 1) % SpineConstants.SpineNames.Count];
                        if (storage.Keys.Contains(next))
                        {
                            var inter = new InterspineDescription();
                            inter.UpSpine   = key;
                            inter.DownSpine = next;
                            inter.storage   = storage;

                            IDescriptionCalculator <InterspineDescription> calc = null;

                            if (storage.direction == 0)
                            {
                                calc = new SpineLib.Geometry.DescriptionCalculators.Interspine.LeftSide(inter);
                            }
                            else if (storage.direction == 1)
                            {
                                calc = new SpineLib.Geometry.DescriptionCalculators.Interspine.RightSide(inter);
                            }
                            else if (storage.direction == 2)
                            {
                                calc = new SpineLib.Geometry.DescriptionCalculators.Interspine.FrontSide(inter);
                            }
                            else if (storage.direction == 3)
                            {
                                calc = new SpineLib.Geometry.DescriptionCalculators.Interspine.BackSide(inter);
                            }

                            if (InterspineDataGrid.Columns.Count == 0)
                            {
                                var ks = calc.Keys;
                                InterspineDataGrid.Columns.Add(new DataGridTextColumn()
                                {
                                    Header  = "Диск",
                                    Binding = new Binding("[0]"),
                                });
                                int index = 1;
                                foreach (var key_col in ks)
                                {
                                    InterspineDataGrid.Columns.Add(
                                        new DataGridTextColumn()
                                    {
                                        Header  = calc.GetParameterDescription(key_col),
                                        Binding = new Binding(string.Format("[{0}]", index++)),
                                    });
                                }
                            }

                            List <string> obj = new List <string>();

                            obj.Add(key + "-" + next);
                            var keys = calc.Keys;
                            foreach (var key_col in keys)
                            {
                                var value = calc.GetParameter(key_col);
                                if (calc.IsParameterLinear(key_col))
                                {
                                    value /= storage.MarkerLength;
                                    value *= storage.MarkerSize;
                                }

                                obj.Add(string.Format("{0:0.000}", value));
                            }

                            InterspineDataGrid.Items.Add(obj);
                        }
                    }
                }
                #endregion

                #region Processes
                foreach (var sp_key in storage.SpinousProcessKeys)
                {
                    IDescriptionCalculator <SpinousProcessDescription> calc = null;

                    var inter = storage.GetSpinousProcessDescription(sp_key);

                    if (storage.direction == 0)
                    {
                        calc = new SpineLib.Geometry.DescriptionCalculators.SpinousProcess.LeftSide(inter);
                    }
                    else if (storage.direction == 1)
                    {
                        calc = new SpineLib.Geometry.DescriptionCalculators.SpinousProcess.RightSide(inter);
                    }

                    if (ProcessDataGrid.Columns.Count == 0)
                    {
                        var ks = calc.Keys;
                        ProcessDataGrid.Columns.Add(new DataGridTextColumn()
                        {
                            Header  = "Участок",
                            Binding = new Binding("[0]"),
                        });
                        int index = 1;
                        foreach (var key_col in ks)
                        {
                            ProcessDataGrid.Columns.Add(
                                new DataGridTextColumn()
                            {
                                Header  = calc.GetParameterDescription(key_col),
                                Binding = new Binding(string.Format("[{0}]", index++)),
                            });
                        }
                    }

                    List <string> obj = new List <string>();

                    obj.Add(sp_key);
                    var keys = calc.Keys;
                    foreach (var key_col in keys)
                    {
                        var value = calc.GetParameter(key_col);
                        if (calc.IsParameterLinear(key_col))
                        {
                            value /= storage.MarkerLength;
                            value *= storage.MarkerSize;
                        }

                        obj.Add(string.Format("{0:0.000}", value));
                    }

                    ProcessDataGrid.Items.Add(obj);
                }
                #endregion
            }
        }
示例#2
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);
        }
示例#3
0
        private void Calculate()
        {
            if (storage_lay != null && storage_stay != null)
            {
                #region Spines
                foreach (var key in storage_lay.Keys)
                {
                    if (storage_stay.ContainDescription(key))
                    {
                        var spine_first  = storage_lay.GetDescription(key);
                        var spine_second = storage_stay.GetDescription(key);

                        IDescriptionCalculator <SpineDescription> calc_first  = null;
                        IDescriptionCalculator <SpineDescription> calc_second = null;

                        if (storage_lay.direction == 0)
                        {
                            calc_first = new SpineLib.Geometry.DescriptionCalculators.Spine.LeftSide(spine_first);
                        }
                        else if (storage_lay.direction == 1)
                        {
                            calc_first = new SpineLib.Geometry.DescriptionCalculators.Spine.RightSide(spine_first);
                        }
                        else if (storage_lay.direction == 2)
                        {
                            calc_first = new SpineLib.Geometry.DescriptionCalculators.Spine.FrontSide(spine_first);
                        }
                        else if (storage_lay.direction == 3)
                        {
                            calc_first = new SpineLib.Geometry.DescriptionCalculators.Spine.BackSide(spine_first);
                        }

                        if (storage_stay.direction == 0)
                        {
                            calc_second = new SpineLib.Geometry.DescriptionCalculators.Spine.LeftSide(spine_second);
                        }
                        else if (storage_stay.direction == 1)
                        {
                            calc_second = new SpineLib.Geometry.DescriptionCalculators.Spine.RightSide(spine_second);
                        }
                        else if (storage_stay.direction == 2)
                        {
                            calc_second = new SpineLib.Geometry.DescriptionCalculators.Spine.FrontSide(spine_second);
                        }
                        else if (storage_stay.direction == 3)
                        {
                            calc_second = new SpineLib.Geometry.DescriptionCalculators.Spine.BackSide(spine_second);
                        }

                        if (SpinesDataGrid.Columns.Count == 0)
                        {
                            SpinesDataGrid.Columns.Add(new DataGridTextColumn()
                            {
                                Header  = "Название",
                                Binding = new Binding("[0]"),
                            });

                            SpinesDataGrid.Columns.Add(new DataGridTextColumn()
                            {
                                Header  = "Лежа",
                                Binding = new Binding("[1]"),
                            });

                            SpinesDataGrid.Columns.Add(new DataGridTextColumn()
                            {
                                Header  = "Стоя",
                                Binding = new Binding("[2]"),
                            });

                            SpinesDataGrid.Columns.Add(new DataGridTextColumn()
                            {
                                Header  = "Сравнение",
                                Binding = new Binding("[3]"),
                            });
                        }

                        var ks = calc_first.Keys;


                        List <string> obj = new List <string>();
                        obj.Add("");
                        obj.Add(key);
                        obj.Add(key);
                        obj.Add("");

                        SpinesDataGrid.Items.Add(obj);

                        foreach (var key_col in ks)
                        {
                            obj = new List <string>();
                            var desc      = calc_first.GetParameterDescription(key_col);
                            var var_first = calc_first.GetParameter(key_col);
                            if (calc_first.IsParameterLinear(key_col))
                            {
                                var_first /= storage_lay.MarkerLength;
                                var_first *= storage_lay.MarkerSize;
                            }
                            var var_second = calc_second.GetParameter(key_col);
                            if (calc_second.IsParameterLinear(key_col))
                            {
                                var_second /= storage_stay.MarkerLength;
                                var_second *= storage_stay.MarkerSize;
                            }
                            obj.Add(desc);
                            obj.Add(string.Format("{0:0.000}", var_first));
                            obj.Add(string.Format("{0:0.000}", var_second));

                            if (calc_first.IsParameterLinear(key_col) && calc_second.IsParameterLinear(key_col))
                            {
                                var diff = Math.Abs((var_first - var_second) / var_first) * 100;

                                if (var_first < var_second)
                                {
                                    obj.Add(string.Format("Увеличение на {0} %", string.Format("{0:0.000}", diff)));
                                }
                                else
                                {
                                    obj.Add(string.Format("Уменьшение на {0} %", string.Format("{0:0.000}", diff)));
                                }
                            }
                            else
                            {
                                if (var_first < var_second)
                                {
                                    obj.Add(string.Format("Увеличение на {0}", string.Format("{0:0.000}", var_second - var_first)));
                                }
                                else
                                {
                                    obj.Add(string.Format("Уменьшение на {0}", string.Format("{0:0.000}", var_first - var_second)));
                                }
                            }

                            SpinesDataGrid.Items.Add(obj);
                        }
                    }
                }
                #endregion

                #region Interspines
                foreach (var key in storage_lay.Keys)
                {
                    InterspineDescription inter_first  = null;
                    InterspineDescription inter_second = null;

                    int keyind = SpineConstants.SpineNames.IndexOf(key);
                    if (keyind != SpineConstants.SpineNames.Count - 1)
                    {
                        var next = SpineConstants.SpineNames[(keyind + 1) % SpineConstants.SpineNames.Count];
                        if (storage_lay.Keys.Contains(next))
                        {
                            inter_first           = new InterspineDescription();
                            inter_first.UpSpine   = key;
                            inter_first.DownSpine = next;
                            inter_first.storage   = storage_lay;


                            if (storage_stay.Keys.Contains(next) && storage_stay.Keys.Contains(key))
                            {
                                inter_second           = new InterspineDescription();
                                inter_second.UpSpine   = key;
                                inter_second.DownSpine = next;
                                inter_second.storage   = storage_stay;

                                IDescriptionCalculator <InterspineDescription> calc_first_  = null;
                                IDescriptionCalculator <InterspineDescription> calc_second_ = null;

                                if (storage_lay.direction == 0)
                                {
                                    calc_first_ = new SpineLib.Geometry.DescriptionCalculators.Interspine.LeftSide(inter_first);
                                }
                                else if (storage_lay.direction == 1)
                                {
                                    calc_first_ = new SpineLib.Geometry.DescriptionCalculators.Interspine.RightSide(inter_first);
                                }
                                else if (storage_lay.direction == 2)
                                {
                                    calc_first_ = new SpineLib.Geometry.DescriptionCalculators.Interspine.FrontSide(inter_first);
                                }
                                else if (storage_lay.direction == 3)
                                {
                                    calc_first_ = new SpineLib.Geometry.DescriptionCalculators.Interspine.BackSide(inter_first);
                                }

                                if (storage_stay.direction == 0)
                                {
                                    calc_second_ = new SpineLib.Geometry.DescriptionCalculators.Interspine.LeftSide(inter_second);
                                }
                                else if (storage_stay.direction == 1)
                                {
                                    calc_second_ = new SpineLib.Geometry.DescriptionCalculators.Interspine.RightSide(inter_second);
                                }
                                else if (storage_stay.direction == 2)
                                {
                                    calc_second_ = new SpineLib.Geometry.DescriptionCalculators.Interspine.FrontSide(inter_second);
                                }
                                else if (storage_stay.direction == 3)
                                {
                                    calc_second_ = new SpineLib.Geometry.DescriptionCalculators.Interspine.BackSide(inter_second);
                                }

                                if (InterspineDataGrid.Columns.Count == 0)
                                {
                                    InterspineDataGrid.Columns.Add(new DataGridTextColumn()
                                    {
                                        Header  = "Название",
                                        Binding = new Binding("[0]"),
                                    });

                                    InterspineDataGrid.Columns.Add(new DataGridTextColumn()
                                    {
                                        Header  = "Лежа",
                                        Binding = new Binding("[1]"),
                                    });

                                    InterspineDataGrid.Columns.Add(new DataGridTextColumn()
                                    {
                                        Header  = "Стоя",
                                        Binding = new Binding("[2]"),
                                    });

                                    InterspineDataGrid.Columns.Add(new DataGridTextColumn()
                                    {
                                        Header  = "Сравнение",
                                        Binding = new Binding("[3]"),
                                    });
                                }

                                var ks = calc_first_.Keys;


                                List <string> obj = new List <string>();
                                obj.Add("");
                                obj.Add(SpineConstants.InterSpineNames[keyind]);
                                obj.Add(SpineConstants.InterSpineNames[keyind]);
                                obj.Add("");

                                InterspineDataGrid.Items.Add(obj);

                                foreach (var key_col in ks)
                                {
                                    obj = new List <string>();
                                    var desc      = calc_first_.GetParameterDescription(key_col);
                                    var var_first = calc_first_.GetParameter(key_col);
                                    if (calc_first_.IsParameterLinear(key_col))
                                    {
                                        var_first /= storage_lay.MarkerLength;
                                        var_first *= storage_lay.MarkerSize;
                                    }
                                    var var_second = calc_second_.GetParameter(key_col);
                                    if (calc_second_.IsParameterLinear(key_col))
                                    {
                                        var_second /= storage_stay.MarkerLength;
                                        var_second *= storage_stay.MarkerSize;
                                    }

                                    obj.Add(desc);
                                    obj.Add(string.Format("{0:0.000}", var_first));
                                    obj.Add(string.Format("{0:0.000}", var_second));

                                    if (calc_first_.IsParameterLinear(key_col) && calc_second_.IsParameterLinear(key_col))
                                    {
                                        var diff = Math.Abs((var_first - var_second) / var_first) * 100;

                                        if (var_first < var_second)
                                        {
                                            obj.Add(string.Format("Увеличение на {0} %", string.Format("{0:0.000}", diff)));
                                        }
                                        else
                                        {
                                            obj.Add(string.Format("Уменьшение на {0} %", string.Format("{0:0.000}", diff)));
                                        }
                                    }
                                    else
                                    {
                                        if (var_first < var_second)
                                        {
                                            obj.Add(string.Format("Увеличение на {0}", string.Format("{0:0.000}", var_second - var_first)));
                                        }
                                        else
                                        {
                                            obj.Add(string.Format("Уменьшение на {0}", string.Format("{0:0.000}", var_first - var_second)));
                                        }
                                    }

                                    InterspineDataGrid.Items.Add(obj);
                                }
                            }
                        }
                    }
                }
            }
            #endregion

            #region Processes
            foreach (var sp_key in storage_lay.SpinousProcessKeys)
            {
                if (storage_stay.ContainSpinousProcessDescription(sp_key))
                {
                    IDescriptionCalculator <SpinousProcessDescription> calc_first__  = null;
                    IDescriptionCalculator <SpinousProcessDescription> calc_second__ = null;

                    var desc_first  = storage_lay.GetSpinousProcessDescription(sp_key);
                    var desc_second = storage_stay.GetSpinousProcessDescription(sp_key);

                    if (storage_lay.direction == 0)
                    {
                        calc_first__ = new SpineLib.Geometry.DescriptionCalculators.SpinousProcess.LeftSide(desc_first);
                    }
                    else if (storage_lay.direction == 1)
                    {
                        calc_first__ = new SpineLib.Geometry.DescriptionCalculators.SpinousProcess.RightSide(desc_first);
                    }

                    if (storage_stay.direction == 0)
                    {
                        calc_second__ = new SpineLib.Geometry.DescriptionCalculators.SpinousProcess.LeftSide(desc_second);
                    }
                    else if (storage_stay.direction == 1)
                    {
                        calc_second__ = new SpineLib.Geometry.DescriptionCalculators.SpinousProcess.RightSide(desc_second);
                    }


                    if (ProcessDataGrid.Columns.Count == 0)
                    {
                        ProcessDataGrid.Columns.Add(new DataGridTextColumn()
                        {
                            Header  = "Название",
                            Binding = new Binding("[0]"),
                        });

                        ProcessDataGrid.Columns.Add(new DataGridTextColumn()
                        {
                            Header  = "Лежа",
                            Binding = new Binding("[1]"),
                        });

                        ProcessDataGrid.Columns.Add(new DataGridTextColumn()
                        {
                            Header  = "Стоя",
                            Binding = new Binding("[2]"),
                        });

                        ProcessDataGrid.Columns.Add(new DataGridTextColumn()
                        {
                            Header  = "Сравнение",
                            Binding = new Binding("[3]"),
                        });
                    }

                    var ks = calc_first__.Keys;


                    List <string> obj = new List <string>();
                    obj.Add("");
                    obj.Add(sp_key);
                    obj.Add(sp_key);
                    obj.Add("");

                    ProcessDataGrid.Items.Add(obj);

                    foreach (var key_col in ks)
                    {
                        obj = new List <string>();
                        var desc      = calc_first__.GetParameterDescription(key_col);
                        var var_first = calc_first__.GetParameter(key_col);
                        if (calc_first__.IsParameterLinear(key_col))
                        {
                            var_first /= storage_lay.MarkerLength;
                            var_first *= storage_lay.MarkerSize;
                        }
                        var var_second = calc_second__.GetParameter(key_col);
                        if (calc_second__.IsParameterLinear(key_col))
                        {
                            var_second /= storage_stay.MarkerLength;
                            var_second *= storage_stay.MarkerSize;
                        }

                        obj.Add(desc);
                        obj.Add(string.Format("{0:0.000}", var_first));
                        obj.Add(string.Format("{0:0.000}", var_second));

                        if (calc_first__.IsParameterLinear(key_col) && calc_second__.IsParameterLinear(key_col))
                        {
                            var diff = Math.Abs((var_first - var_second) / var_first) * 100;

                            if (var_first < var_second)
                            {
                                obj.Add(string.Format("Увеличение на {0} %", string.Format("{0:0.000}", diff)));
                            }
                            else
                            {
                                obj.Add(string.Format("Уменьшение на {0} %", string.Format("{0:0.000}", diff)));
                            }
                        }
                        else
                        {
                            if (var_first < var_second)
                            {
                                obj.Add(string.Format("Увеличение на {0}", string.Format("{0:0.000}", var_second - var_first)));
                            }
                            else
                            {
                                obj.Add(string.Format("Уменьшение на {0}", string.Format("{0:0.000}", var_first - var_second)));
                            }
                        }

                        ProcessDataGrid.Items.Add(obj);
                    }
                }
            }
            #endregion
        }