Exemplo n.º 1
0
        public static NodeItem ReadString(string input)
        {
            NodeItem node = new NodeItem();

            if (string.IsNullOrEmpty(input))
            {
                return(GetEmpty());
            }

            node.IsEmpty = false;

            node.IsEvalReady = int.TryParse(input, out int leftVal) | input == "x";

            node.ParamString = input;

            decimal val;

            if (node.IsEvalReady && decimal.TryParse(input, out val))
            {
                node.ParamValue = val.ToString();
            }
            else
            {
                node.ParamValue = "";
            }


            return(node);
        }
Exemplo n.º 2
0
        public static NodeItem GetEmpty()
        {
            NodeItem nodeItem = new NodeItem();

            nodeItem.IsEmpty = true;
            return(nodeItem);
        }
Exemplo n.º 3
0
        public static EquationItem GetItem(string input, string variableValue, int parent, int level, int lastLevelId)
        {
            try
            {
                //Find First + sign
                int plusIndex   = input.IndexOf('+');
                int minusIndex  = input.IndexOf('-');
                int timesIndex  = input.IndexOf('*');
                int cosineIndex = input.IndexOf("cos[");
                int sinIndex    = input.IndexOf("sin[");

                //Resolve addition first
                if (plusIndex != -1)
                {
                    string[] arr = input.Split(new char[] { '+' }, 2);
                    if (arr.Length == 2)
                    {
                        EquationItem equationItem = new EquationItem();
                        equationItem.IsEmpty       = false;
                        equationItem.Id            = level * 10 + lastLevelId;
                        equationItem.Parent        = parent;
                        equationItem.Level         = level;
                        equationItem.Operation     = "+";
                        equationItem.LeftNode      = NodeItem.ReadString(arr[0]);
                        equationItem.RightNode     = NodeItem.ReadString(arr[1]);
                        equationItem.VariableValue = variableValue;
                        return(equationItem);
                    }
                }

                //Resolve subtraction
                if (minusIndex != -1)
                {
                    string[] arr = input.Split(new char[] { '-' }, 2);
                    if (arr.Length == 2)
                    {
                        EquationItem equationItem = new EquationItem();
                        equationItem.IsEmpty       = false;
                        equationItem.Id            = level * 10 + lastLevelId;
                        equationItem.Parent        = parent;
                        equationItem.Level         = level;
                        equationItem.Operation     = "-";
                        equationItem.LeftNode      = NodeItem.ReadString(arr[0]);
                        equationItem.RightNode     = NodeItem.ReadString(arr[1]);
                        equationItem.VariableValue = variableValue;
                        return(equationItem);
                    }
                }

                //Resolve multiplication
                if (timesIndex != -1)
                {
                    string[] arr = input.Split(new char[] { '*' }, 2);
                    if (arr.Length == 2)
                    {
                        EquationItem equationItem = new EquationItem();
                        equationItem.IsEmpty       = false;
                        equationItem.Id            = level * 10 + lastLevelId;
                        equationItem.Parent        = parent;
                        equationItem.Level         = level;
                        equationItem.Operation     = "*";
                        equationItem.LeftNode      = NodeItem.ReadString(arr[0]);
                        equationItem.RightNode     = NodeItem.ReadString(arr[1]);
                        equationItem.VariableValue = variableValue;
                        return(equationItem);
                    }
                }

                //Resolve Cosine
                if (cosineIndex != -1)
                {
                    string cosParam = input?.Substring(cosineIndex).Split('[', ']')[1];

                    EquationItem equationItem = new EquationItem();
                    equationItem.IsEmpty       = false;
                    equationItem.Id            = level * 10 + lastLevelId;
                    equationItem.Parent        = parent;
                    equationItem.Level         = level;
                    equationItem.Operation     = "cos";
                    equationItem.LeftNode      = NodeItem.ReadString(cosParam);
                    equationItem.RightNode     = NodeItem.ReadString(cosParam);
                    equationItem.VariableValue = variableValue;
                    return(equationItem);
                }

                //Resolve Sin
                if (sinIndex != -1)
                {
                    string sinParam = input?.Substring(sinIndex).Split('[', ']')[1];

                    EquationItem equationItem = new EquationItem();
                    equationItem.IsEmpty       = false;
                    equationItem.Id            = level * 10 + lastLevelId;
                    equationItem.Parent        = parent;
                    equationItem.Level         = level;
                    equationItem.Operation     = "sin";
                    equationItem.LeftNode      = NodeItem.ReadString(sinParam);
                    equationItem.RightNode     = NodeItem.ReadString(sinParam);
                    equationItem.VariableValue = variableValue;
                    return(equationItem);
                }

                return(GetEmpty());
            }
            catch (System.Exception)
            {
                throw;
            }
        }