/// <summary>
        /// Changes the length of the arc selected in a ComboBox to a value in a TextBox
        /// </summary>
        private void OkWeight_Click(object sender, EventArgs e)
        {
            ArcLength.Text = ArcLength.Text.Trim(' ');

            if (string.IsNullOrEmpty(ArcName.Text))
            {
                MessageBox.Show(@"Please, select an edge", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            var selectedArc = ArcName.Items.IndexOf(ArcName.Text);

            if (selectedArc == -1)
            {
                MessageBox.Show(@"The edge doesn't exist", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try
            {
                var length  = new MathParserTK.MathParser().Parse(ArcLength.Text);
                var command = new ChangeArcLengthCommand(digraph, selectedArc, digraph.Arcs[selectedArc].Length, length);
                command.Executed += (s, ea) => GridAdjacencyMatrix[digraph.Arcs[selectedArc].EndVertex, digraph.Arcs[selectedArc].StartVertex].Value = s;
                commandsManager.Execute(command);
                ArcLength.Text = length.ToString(CultureInfo.CurrentCulture);
            }
            catch (Exception)
            {
                MessageBox.Show(@"Invalid value. Make sure the input value is greater than zero and is the correct mathematical expression.",
                                @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Esempio n. 2
0
        public static double ParseMath(string formula)
        {
            double result = 0;

            MathParserTK.MathParser parser = new MathParserTK.MathParser();
            try { result = parser.Parse(formula, false); }
            catch { throw; }

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// 显示TPN项目图表
        /// </summary>
        private void showChart()
        {
            chrtDrug.Series["Series1"].Points.Clear();
            chrtParam.Series["Series1"].Points.Clear();

            if ("tpnitem.1".Equals(this.itemCode)) //容积
            {
                showCapacityChart();
                return;
            }
            else if (5 >= lvDrugs.Columns.Count)
            {
                return;
            }


            string text = "";
            string unit = "";
            int    p    = 0;

            List <double> yValues = new List <double>();
            List <string> xValues = new List <string>();

            ListViewItem item = null;

            MathParserTK.MathParser parser = new MathParserTK.MathParser();
            string express = "";
            string tmpExp  = "";
            int    hadVal  = 0;

            p = lblExpress.Text.IndexOf("\r\n");
            if (0 < p && express.Contains("["))
            {
                express = lblExpress.Text.Substring(0, p);
            }
            else
            {
                express = "0";
            }

            //药品贡献率
            for (int i = 0; i < lvDrugs.Items.Count - 3; i++)
            {
                tmpExp = express;
                hadVal = 0;
                for (int j = 5; j < lvDrugs.Columns.Count; j++)
                {
                    text = lvDrugs.Items[i].SubItems[j].Text;
                    if (!string.IsNullOrWhiteSpace(text) && !"-".Equals(text))
                    {
                        p = text.LastIndexOf(' ');
                        if (0 < p)
                        {
                            unit = text.Substring(p + 1);
                            text = text.Substring(0, p);
                            hadVal++;
                        }
                        else
                        {
                            text = "0";
                        }
                    }
                    else
                    {
                        text = "0";
                    }

                    if ("0".Equals(express))
                    {
                        tmpExp += "+" + text;
                    }
                    else
                    {
                        tmpExp = tmpExp.Replace("[" + lvDrugs.Columns[j].Text + "]", text);
                    }
                }

                if (0 < hadVal)
                {
                    yValues.Add(Convert.ToDouble(parser.Parse(tmpExp)));
                    xValues.Add(getDrugShortName(lvDrugs.Items[i].Text));
                }
            }

            showSerie(chrtDrug, xValues, yValues, unit);

            yValues.Clear();
            xValues.Clear();

            //参数贡献率
            double val = 0;

            item = lvDrugs.Items[lvDrugs.Items.Count - 2]; //合计行
            for (int i = 5; i < lvDrugs.Columns.Count; i++)
            {
                text = item.SubItems[i].Text;
                p    = text.LastIndexOf(' ');
                if (0 < p)
                {
                    unit = text.Substring(p + 1);
                    val  = Convert.ToDouble(text.Substring(0, p));
                }
                else
                {
                    val = 0;
                }

                if (0 < val)
                {
                    yValues.Add(val);
                    text = getDrugShortName(lvDrugs.Columns[i].Text);
                    if (string.IsNullOrWhiteSpace(text))
                    {
                        xValues.Add(lvDrugs.Columns[i].Text);
                    }
                    else
                    {
                        xValues.Add(text);
                    }
                }
            }

            showSerie(chrtParam, xValues, yValues, unit);
        }
Esempio n. 4
0
        /// <summary>
        /// 计算单个TPN项目值
        /// </summary>
        /// <param name="_ordersVal"></param>
        /// <param name="_prepQuantity"></param>
        /// <param name="_itemCode">要计算的TPN项目编码, null时计算全部</param>
        /// <returns></returns>
        public bool Calculate(Dictionary <string, double> _ordersVal, Dictionary <int, RecipePrep> _prepQuantity,
                              string _itemCode)
        {
            if ((null == _ordersVal) || (null == _prepQuantity))
            {
                this.Error = "未指定计算参数";
                return(false);
            }

            if ((null == this.tblTPNItem) || (0 == this.tblTPNItem.Rows.Count))
            {
                this.Error = "没有可计算的TPN项目";
                return(false);
            }

            foreach (DataRow row in this.tblTPNItem.Rows)
            {
                row["Value"]  = 0.0;
                row["Result"] = "";
                row["Lock"]   = false;
                row["IsCal"]  = false;
            }

            this.ordersVal = _ordersVal;
            this.prepInfo  = _prepQuantity;
            string newPrepIDs = "";

            //检查制剂是否存在
            if (null != this.tblPrepThing)
            {
                foreach (int prepID in this.prepInfo.Keys)
                {
                    if (!this.hadInitPrepIDs.Contains("," + prepID.ToString() + ","))
                    {
                        newPrepIDs += prepID.ToString() + ",";
                    }
                }
            }
            else
            {
                foreach (int prepID in this.prepInfo.Keys)
                {
                    newPrepIDs += prepID.ToString() + ",";
                }
            }

            if (!string.IsNullOrWhiteSpace(newPrepIDs))
            {
                if (!loadPrepThing(newPrepIDs))
                {
                    return(false);
                }
            }

            //计算
            if (null == this.parser)
            {
                this.parser = new MathParserTK.MathParser();
            }


            this.Error = "";
            if (null == _itemCode)
            {
                foreach (DataRow row in this.tblTPNItem.Rows)
                {
                    CalculateItem(row);
                }
            }
            else
            {
                DataRow row = this.tblTPNItem.Rows.Find(_itemCode);
                if (null == row)
                {
                    this.Error = "未找到此编码(" + _itemCode + ")对应的项目";
                    return(false);
                }
                else
                {
                    CalculateItem(row);
                }
            }

            return(true);
        }