/// <summary>
        /// Sets the size properties of a MathematicsLine element.
        /// </summary>
        /// <param name="mathematicsLine"></param>
        public void SetMathematicsLineSize(MathematicsLine mathematicsLine)
        {
            if (mathematicsLine.Elements.Any())
            {
                var elements = mathematicsLine.Elements.ToArray();

                Element elementM             = null;
                Element elementN             = null;
                Length  maximumContentHeight = 0;

                // Add the width of the first element's left margin.
                mathematicsLine.SizeOfContent.Width += elements.First().OuterMargin.Left;

                for (var n = 0; n < elements.Length; n++)
                {
                    elementN = elements[n];

                    SetElementSize(elementN);

                    // Add the width of the current element.
                    mathematicsLine.SizeOfContent.Width += elementN.SizeIncludingBorder.Width;

                    if (n > 0)
                    {
                        elementM = elements[n - 1];

                        // Add the spacing of the margins of the current element and the previous element.
                        mathematicsLine.SizeOfContent.Width += ChooseGreaterLength(elementM.OuterMargin.Right, elementN.OuterMargin.Left);
                    }

                    // If this element is taller, update the maximum content height.
                    if (elementN.OuterHeight > maximumContentHeight)
                    {
                        maximumContentHeight = elementN.OuterHeight;
                    }
                }

                // Add the width of the last element's right margin.
                mathematicsLine.SizeOfContent.Width += elements.Last().OuterMargin.Right;

                mathematicsLine.SizeOfContent.Height = maximumContentHeight;
            }
            else
            {
                mathematicsLine.SizeOfContent = 0;
            }

            SetSizesOfElement(mathematicsLine);

            var centreAlignmentPoint = new Position();

            centreAlignmentPoint.X = mathematicsLine.OuterWidth / 2;
            centreAlignmentPoint.Y = mathematicsLine.OuterHeight / 2;

            mathematicsLine.CentreAlignmentPoint = centreAlignmentPoint;
        }
        protected void ExportMathematicsLine(Graphics graphics, MathematicsLine mathematicsLine)
        {
            foreach (var element in mathematicsLine.Elements)
            {
                ExportElement(graphics, element);
            }

            if (mathematicsLine.DrawConstructionLines == true)
            {
                DrawConstructionLines(graphics, mathematicsLine.Position, mathematicsLine.SizeIncludingOuterMargin);
            }
        }
        public void SetMathematicsLinePosition(Position containerOrigin, MathematicsLine mathematicsLine)
        {
            mathematicsLine.Position = containerOrigin;

            containerOrigin.X += mathematicsLine.OuterMargin.Left + mathematicsLine.Border.Width + mathematicsLine.InnerMargin.Left;
            containerOrigin.Y += mathematicsLine.OuterMargin.Top + mathematicsLine.Border.Width + mathematicsLine.InnerMargin.Top;

            var elements = mathematicsLine.Elements.ToArray();

            for (var m = 0; m < elements.Length; m++)
            {
                var elementM = elements[m];

                containerOrigin.Y = mathematicsLine.Position.Y + mathematicsLine.OuterMargin.Top + mathematicsLine.Border.Width + mathematicsLine.InnerMargin.Top + mathematicsLine.SizeOfContent.Height / 2;

                var elementYOffset = elementM.CentreAlignmentPoint.Y;

                containerOrigin.Y -= elementYOffset;

                SetElementPosition(containerOrigin, elementM);

                containerOrigin.Y += elementYOffset;

                if (m < elements.Length - 1)
                {
                    var elementN = elements[m + 1];

                    var separation = ChooseGreaterLength(elementM.OuterMargin.Right, elementN.OuterMargin.Left);

                    containerOrigin.X += elementM.OuterWidth - elementM.OuterMargin.Right + separation - elementN.OuterMargin.Left;
                }
                else
                {
                    containerOrigin.X += elementM.OuterWidth;
                }
            }
        }
Exemple #4
0
 public BracketExpression() : base()
 {
     Type            = BracketType.Curve;
     InnerExpression = new MathematicsLine();
 }
 public SquareRoot() : base()
 {
     InnerExpression = new MathematicsLine();
 }