public void SetBlockLocation(double locationX, double alignmentCenterY, double rowY) { double moleculeY = 0; if (null != Molecule) { var maxMoleculeCenter = Molecule.GetVerticalAlignmentCenter(); var locationY = alignmentCenterY - Molecule.GetSize().Height - FontManager.Instance.FontSize * 0.2; Location = new Point(locationX, locationY); Molecule.Location = new Point(locationX, locationY); Molecule.SetBlockLocation(locationX, locationY + maxMoleculeCenter, rowY); moleculeY = locationY; } else { var locationY = alignmentCenterY - FontManager.Instance.FontSize * 1.2; Location = new Point(locationX, locationY); moleculeY = locationY; } if (null != Denominator) { var maxDenominatorCenter = Denominator.GetVerticalAlignmentCenter(); Denominator.Location = new Point(locationX, alignmentCenterY + FontManager.Instance.FontSize * 0.2); Denominator.SetBlockLocation(locationX, Denominator.Location.Y + maxDenominatorCenter, rowY); } }