/// <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; } } }
public BracketExpression() : base() { Type = BracketType.Curve; InnerExpression = new MathematicsLine(); }
public SquareRoot() : base() { InnerExpression = new MathematicsLine(); }