private List <TokenInfo> ExtSinus(List <TokenInfo> Arguments) { var result = new List <TokenInfo>(); if (Arguments.Count != 1) { SetError("Invalid argument count"); return(result); } if (!m_Parser.EvaluateTokens(0, Arguments, out SymbolInfo functionResult)) { SetError("Invalid argument"); return(result); } var resultValue = new TokenInfo() { Type = TokenInfo.TokenType.LITERAL_NUMBER, Content = Math.Sin(functionResult.ToNumber() * Math.PI / 180.0f).ToString("0.00000000000000000000", System.Globalization.CultureInfo.InvariantCulture) }; result.Add(resultValue); return(result); }
private void GenerateValues() { m_Parser = new Parser.ASMFileParser(); m_Parser.AddExtFunction("sin", 1, 1, ExtSinus); m_Parser.AddExtFunction("cos", 1, 1, ExtCosinus); m_Parser.AddExtFunction("tan", 1, 1, ExtTan); m_Parser.AddExtFunction("toradians", 1, 1, ExtToRadians); m_Parser.AddExtFunction("todegrees", 1, 1, ExtToDegrees); double startValue = Util.StringToDouble(m_Project.ValueTable.StartValue); double endValue = Util.StringToDouble(m_Project.ValueTable.EndValue); double stepValue = Util.StringToDouble(m_Project.ValueTable.StepValue); if ((startValue != endValue) && (stepValue == 0)) { SetError("Step value must not be equal zero"); return; } if ((startValue <= endValue) && (stepValue < 0)) { SetError("Step value must be positive"); return; } if ((startValue >= endValue) && (stepValue > 0)) { SetError("Step value must be negative"); return; } if (checkClearPreviousValues.Checked) { m_Project.ValueTable.Values.Clear(); listValues.Items.Clear(); } double curValue = startValue; bool completed = false; bool firstValue = true; double lastValue = curValue; do { m_Parser.AddConstantF("x", curValue, 0, "", "", 0, 1); var tokens = m_Parser.ParseTokenInfo(m_Project.ValueTable.Formula, 0, m_Project.ValueTable.Formula.Length); if (tokens == null) { SetError(m_Parser.GetError().Code.ToString()); return; } if (!m_Parser.EvaluateTokens(0, tokens, out SymbolInfo result)) { SetError(m_Parser.GetError().Code.ToString()); return; } double resultValue = result.ToNumber(); if (m_Project.ValueTable.GenerateDeltas) { if (!firstValue) { m_Project.ValueTable.Values.Add((resultValue - lastValue).ToString()); listValues.Items.Add((resultValue - lastValue).ToString()); } firstValue = false; } else { m_Project.ValueTable.Values.Add(resultValue.ToString()); listValues.Items.Add(resultValue.ToString()); } lastValue = resultValue; curValue += stepValue; if (startValue == endValue) { completed = true; } if ((stepValue > 0) && (curValue > endValue)) { completed = true; } if ((stepValue < 0) && (curValue < endValue)) { completed = true; } }while (!completed); SetError("OK"); m_Project.ValueTable.Data = new ByteBuffer((uint)m_Project.ValueTable.Values.Count); int index = 0; foreach (var entry in m_Project.ValueTable.Values) { m_Project.ValueTable.Data.SetU8At(index, GR.Convert.ToU8(entry)); ++index; } }