예제 #1
0
		public override BoundaryInfo GetBoundary(IGraphics g)
		{
			SizeF valueSize = g.MeasureString(Value);
			if (!HasArguments) {
				return new BoundaryInfo
				{
					Size = valueSize,
					BaseLine = valueSize.Height
				};
			}

			// TODO: poprawic, po zrobione 

			UnitElement unit = (UnitElement)Arguments[0];

			BoundaryInfo unitBounds = unit.GetBoundary(g);

			float totalWidth = valueSize.Width + unitBounds.Width;
			float totalHeight = Math.Max(valueSize.Height, unitBounds.Height);

			return new BoundaryInfo
			{
				Size = new SizeF(totalWidth, totalHeight),
				BaseLine = valueSize.Height
			};
			




		}
예제 #2
0
		public override void Paint(IGraphics g, PointF point)
		{

					g.DrawString(Value, point);

			if (!HasArguments) {
		
				return;
			}

			SizeF valueSize = g.MeasureString(Value);

			UnitElement unit = (UnitElement)Arguments.First();
			BoundaryInfo unitBounds = unit.GetBoundary(g);

			PointF unitPoint = new PointF(point.X + valueSize.Width, point.Y);
			unit.Paint(g, unitPoint);


		}
예제 #3
0
        public Element Convert(FormulaItem item)
        {
            Element element = null;

            if (item is ValueItem)
            {
                ValueItem    i = (ValueItem)item;
                ValueElement e = new ValueElement();
                e.Value = i.Value.ToString();
                element = e;
            }

            if (item is SymbolItem)
            {
                SymbolItem    i = (SymbolItem)item;
                SymbolElement e = new SymbolElement();

                if (!string.IsNullOrEmpty(i.Symbol))
                {
                    string[] splited = i.Symbol.Split('.');
                    e.Symbol = splited[0];
                    if (splited.Length == 2)
                    {
                        e.Suffix = splited[1];
                    }
                }

                element = e;
            }

            if (item is UnitItem)
            {
                UnitItem    u = (UnitItem)item;
                UnitElement e = new UnitElement();
                e.Unit  = u.Unit;
                element = e;
            }



            if (item is FunctionSum)
            {
                FunctionSum sum     = (FunctionSum)item;
                SumElement  sumElem = new SumElement();

                for (int i = 0; i < sum.Coeffs.Count; ++i)
                {
                    if (i == 0)
                    {
                        sumElem.Signs.Add(string.Empty);
                        continue;
                    }
                    double coeff = sum.Coeffs[i];
                    string sign  = (coeff > 0) ? "+" : "-";
                    sumElem.Signs.Add(sign);
                }

                element = sumElem;
            }

            if (item is FunctionMultiply)
            {
                FunctionMultiply multi = (FunctionMultiply)item;

                if (multi.Arguments.Count == 2 && multi.Flags[1] == false)
                {
                    FractionElement fraction = new FractionElement();
                    element = fraction;
                }
                else
                {
                    SumElement sumElem = new SumElement();

                    for (int i = 0; i < multi.Flags.Count; ++i)
                    {
                        if (i == 0)
                        {
                            sumElem.Signs.Add(string.Empty);
                            continue;
                        }
                        bool   flag = multi.Flags[i];
                        string sign = flag ? "x" : "/";
                        sumElem.Signs.Add(sign);
                    }

                    element = sumElem;
                }
            }

            if (item is FunctionSqrt)
            {
                element = new SqrtElement();
            }

            if (item is FunctionPow)
            {
                element = new PowElement();
            }

            if (item is FunctionMax)
            {
                element = createElement("max");
            }

            if (item is FunctionMin)
            {
                element = createElement("min");
            }

            if (item is FunctionSin)
            {
                element = createElement("sin");
            }

            if (item is FunctionCos)
            {
                element = createElement("cos");
            }

            if (item is FunctionTan)
            {
                element = createElement("tan");
            }


            if (item is BracketItem)
            {
                element = createElement("");
            }



            if (item is FunctionItem)
            {
                FunctionItem function = (FunctionItem)item;
                foreach (FormulaItem arg in function.Arguments)
                {
                    Element argElement = Convert(arg);
                    element.Arguments.Add(argElement);
                }
            }

            return(element);
        }