public void AllignmentPropertyTestForTable() { var rtfTable = new RtfTable(3, 3, 20, 20); rtfTable.Alignment = Align.Center; Assert.AreEqual(Align.Center, rtfTable.Alignment); }
public void ColCountPropertyTestForTable() { var rtfTable = new RtfTable(3, 3, 20, 20); rtfTable.StartNewPage = false; Assert.AreEqual(3, rtfTable.ColCount); }
public void StartNewPagePropertyTestForTable() { var rtfTable = new RtfTable(3, 3, 20, 20); rtfTable.StartNewPage = false; Assert.AreEqual(false, rtfTable.StartNewPage); }
private static void old_CreateTableTitle(RtfTable table) { for (var j = 0; j < table.ColCount; j++) { for (var i = 0; i < 2; i++) { table.Cell(i, j).DefaultCharFormat.FontStyle.AddStyle(FontStyleFlag.Bold); } } RTFWorkingProvider.AddTextToCell(0, 0, table, "№ п/п"); RTFWorkingProvider.AddTextToCell(0, 1, table, "Идентификатор"); RTFWorkingProvider.AddTextToCell(0, 2, table, "Тип велопарковки"); RTFWorkingProvider.AddTextToCell(0, 3, table, "Вид велопарковки"); RTFWorkingProvider.AddTextToCell(0, 4, table, "Статус"); RTFWorkingProvider.AddTextToCell(0, 5, table, "Длина, м"); RTFWorkingProvider.AddTextToCell(0, 6, table, "Ширина, м"); RTFWorkingProvider.AddTextToCell(0, 7, table, "Количество секций"); RTFWorkingProvider.AddTextToCell(0, 8, table, "Дата установки"); RTFWorkingProvider.AddTextToCell(0, 9, table, "Дата обслуживания"); for (var i = 0; i < table.ColCount; i++) { RTFWorkingProvider.AddTextToCell(1, i, table, (i + 1).ToString()); } }
public void GetCellForTableTest() { var rtfTable = new RtfTable(3, 3, 20, 20); var rtfTableCell = rtfTable.cell(1, 2); Assert.AreEqual(2, rtfTableCell.ColIndex); }
public void CheckRightDirectionForTable() { var rtfTable = new RtfTable(3, 3, 20, 20); rtfTable.ReadingDirection = ReadingDirection.RightToLeft; Assert.AreEqual(ReadingDirection.RightToLeft, rtfTable.ReadingDirection); }
public void MergeInTableTest() { var rtfTable = new RtfTable(3, 3, 20, 20); var rtfTableCell = rtfTable.merge(1, 1, 1, 2); Assert.AreEqual(1, rtfTableCell.RowIndex); Assert.AreEqual(1, rtfTableCell.ColIndex); }
public void MergeShouldReturnCellWhenRowSpanAndColSpanAreEqual() { var rtfTable = new RtfTable(3, 3, 20, 20); var rtfTableCell = rtfTable.merge(1, 1, 1, 1); Assert.AreEqual(1, rtfTableCell.RowIndex); Assert.AreEqual(1, rtfTableCell.ColIndex); }
public static void AligmentColumn(RtfTable table, int column, int row1, int row2, HorizontalAlignment alignment, int fontSize = 12) { try { for (var i = row1; i <= row2; i++) { table.Cell(i, column).HorizontalAlignment = alignment; table.Cell(i, column).DefaultCharFormat.FontSize = fontSize; } } catch (Exception ex) { throw ex; } }
/// <summary> /// Adds the specified ESCommon.Rtf.RtfTableCell to the collection. /// </summary> public void Add(RtfTableCell rtfTableCell) { OnAddingCell(rtfTableCell); int num = list.Count; list.Add(rtfTableCell); Row.Definitions.AddInternal(rtfTableCell.Definition); rtfTableCell.ColumnIndexInternal = num; rtfTableCell.RowIndexInternal = Row.Index; RtfTable table = Row.Table; if (table != null && table.ColumnCount > num) { rtfTableCell.ColumnInternal = table.Columns[num]; } if (!rtfTableCell.Definition.IsWidthSet) { if (table != null && table.ColumnCount > 0 && table.Columns[num].IsWidthSet) { rtfTableCell.Definition.Width = table.Columns[num].Width; } } if (!rtfTableCell.Definition.HasStyle) { if (table != null && table.ColumnCount > 0 && table.Columns[num].DefaultCellStyle != null) { table.Columns[num].DefaultCellStyle.CopyTo(rtfTableCell.Definition.StyleInternal); } else if (table != null && table.DefaultCellStyle != null) { table.DefaultCellStyle.CopyTo(rtfTableCell.Definition.StyleInternal); } else { rtfTableCell.Definition.StyleInternal = new RtfTableCellStyle(); } } Row.ResizeCellsInternal(); }
public void RTL_TableRendereTestWithReadingDirectionLeftToRight() { var rtfTable = new RtfTable(1, 2, 20, 20, ReadingDirection.LeftToRight); var sb = new StringBuilder(); sb.AppendLine(string.Format(@"{{\trowd\{0}row\trgaph\trpaddl0\trpaddt0\trpaddr0\trpaddb0", LtrContent)) .AppendLine(@"\trleft0") .AppendLine() .AppendLine( @"\clbrdrt\brdrw40\brdrs\brdrcf0\clbrdrr\brdrw20\brdrdot\brdrcf0\clbrdrb\brdrw40\brdrs\brdrcf0\clbrdrl\brdrw40\brdrs\brdrcf0\clvertalt\cellx200") .AppendLine( @"\clbrdrt\brdrw40\brdrs\brdrcf0\clbrdrr\brdrw40\brdrs\brdrcf0\clbrdrb\brdrw40\brdrs\brdrcf0\clbrdrl\brdrw20\brdrdot\brdrcf0\clvertalt\cellx400") .AppendLine(@"\pard\intbl\fi0\ltrpar\ql") .AppendLine("CELL 0,0") .AppendLine() .AppendLine() .AppendLine(@"\cell") .AppendLine(@"\pard\intbl\fi0\ltrpar\ql") .AppendLine("CELL 0,1") .AppendLine() .AppendLine() .AppendLine(@"\cell") .AppendLine(@"\row}") .Append(@"\sl-400\slmult"); rtfTable.Margins[Direction.Bottom] = 20; rtfTable.setInnerBorder(BorderStyle.Dotted, 1f); rtfTable.setOuterBorder(BorderStyle.Single, 2f); var expectString = sb.ToString(); for (var i = 0; i < rtfTable.RowCount; i++) { for (var j = 0; j < rtfTable.ColCount; j++) { rtfTable.cell(i, j).addParagraph().setText("CELL " + i.ToString() + "," + j.ToString()); } } var result = rtfTable.render(); Assert.AreEqual(expectString, result); }
private static void old_FillDataTable(RtfTable table, IList <VeloObject> someobjs) { var i = 2; foreach (var so in someobjs) { RTFWorkingProvider.AddTextToCell(i, 0, table, (i - 1).ToString()); RTFWorkingProvider.AddTextToCell(i, 1, table, so.ID.ToString()); RTFWorkingProvider.AddTextToCell(i, 2, table, so.TypeAsString); RTFWorkingProvider.AddTextToCell(i, 3, table, so.ViewAsString); RTFWorkingProvider.AddTextToCell(i, 4, table, so.StatusAsString); RTFWorkingProvider.AddTextToCell(i, 5, table, so.VeloLength.ToString()); RTFWorkingProvider.AddTextToCell(i, 6, table, so.VeloWidth.ToString()); RTFWorkingProvider.AddTextToCell(i, 7, table, so.VeloSection.ToString()); RTFWorkingProvider.AddTextToCell(i, 8, table, so.DataCheck?.ToShortDateString() ?? ""); RTFWorkingProvider.AddTextToCell(i, 9, table, so.DataSet?.ToShortDateString() ?? ""); i++; } }
private void _btTable_Click(object sender, System.EventArgs e) { // create document C1WordDocument c1Word = new C1WordDocument(); c1Word.Info.Title = "Sample with tables"; _statusBar.Text = "Creating document..."; int rows = 4; int cols = 2; RtfTable table = new RtfTable(rows, cols); table.BottomBorderStyle = table.LeftBorderStyle = table.RightBorderStyle = table.TopBorderStyle = RtfBorderStyle.Single; table.BottomBorderWidth = table.LeftBorderWidth = table.RightBorderWidth = table.TopBorderWidth = 1; c1Word.Add(table); for (int row = 0; row < rows; row++) { for (int col = 0; col < cols; col++) { var cell = table.Rows[row].Cells[col]; cell.BottomBorderStyle = cell.LeftBorderStyle = cell.RightBorderStyle = cell.TopBorderStyle = RtfBorderStyle.Single; cell.BottomBorderWidth = cell.LeftBorderWidth = cell.RightBorderWidth = cell.TopBorderWidth = 1; RtfParagraph paragraph = new RtfParagraph(); paragraph.Content.Add(new RtfString(string.Format("table cell {0}:{1}.", row, col))); cell.Content.Add(paragraph); } } Font font = new Font("Arial", 10, FontStyle.Regular); c1Word.AddParagraph("Simple table.", font, Color.Blue); _statusBar.Text = "Saving document..."; string fileName = GetFileName(c1Word, "table.rtf"); c1Word.Save(fileName); Process.Start(fileName); _statusBar.Text = "Ready."; }
public void RowHeightForTableTest() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.DoesNotThrow(() => rtfTable.setRowHeight(1, 20)); }
public void ShouldThrowExceptionWhenColumnValueIsNegative() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.Throws <Exception>(() => rtfTable.setColWidth(-1, 20)); }
public void SetColumnWidthForTableTest() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.DoesNotThrow(() => rtfTable.setColWidth(1, 20)); }
public void MergeShouldThrowExceptionWhenLeftColumnIsNegative() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.Throws <Exception>(() => rtfTable.merge(1, -2, 3, 3)); }
/** * Constructs a RtfRow for a Row. * * @param doc The RtfDocument this RtfRow belongs to * @param rtfTable The RtfTable this RtfRow belongs to * @param row The Row this RtfRow is based on * @param rowNumber The number of this row * @since 2.1.3 */ protected internal RtfRow(RtfDocument doc, RtfTable rtfTable, PdfPRow row, int rowNumber) : base(doc) { this.parentTable = rtfTable; this.rowNumber = rowNumber; ImportRow(row); }
private void btnReport_Click(object sender, EventArgs e) { try { RtfDocument doc = new RtfDocument(PaperSize.A4, PaperOrientation.Portrait, Lcid.Russian); RtfParagraph p = doc.addParagraph(); p.Alignment = Align.Center; p.DefaultCharFormat.FontSize = 14.0f; p.DefaultCharFormat.FontStyle.addStyle(FontStyleFlag.Bold); p.Text = "Статистика баллов ЕГЭ по регионам"; if (chbEntered.Checked) { p.Text += " среди зачисленных абитуриентов"; } doc.addParagraph().Text = ""; p = doc.addParagraph(); p.Alignment = Align.Left; if (FacultyId.HasValue) { p.Text = cbFaculty.Text; } else { p.Text = "По всему университету"; } if (LicenseProgramId.HasValue) { p = doc.addParagraph(); p.Alignment = Align.Left; p.Text = "Направление: " + cbLicenseProgram.Text; } if (ObrazProgramId.HasValue) { p = doc.addParagraph(); p.Alignment = Align.Left; p.Text = "Образовательная программа: " + cbObrazProgram.Text; } p = doc.addParagraph(); //p.LineSpacing = RtfConstants.MILLIMETERS_TO_POINTS if (StudyFormId.HasValue) { p.Text = "Форма обучения: " + cbStudyForm.Text; } else { p.Text = "Все формы обучения"; } p = doc.addParagraph(); //p.LineSpacing = RtfConstants.MILLIMETERS_TO_POINTS if (StudyFormId.HasValue) { p.Text = "Основа обучения: " + cbStudyBasis.Text; } else { p.Text = "Все основы обучения"; } p = doc.addParagraph(); //p.LineSpacing = RtfConstants.MILLIMETERS_TO_POINTS p.Text = "Предмет: " + cbEgeExamName.Text; doc.addParagraph().Text = ""; RtfTable table = doc.addTable(dgv.Rows.Count + 1, dgv.ColumnCount); table.setInnerBorder(RtfWriter.BorderStyle.Single, 0.25f); table.setOuterBorder(RtfWriter.BorderStyle.Single, 0.25f); //заголовки for (int i = 0; i < dgv.ColumnCount; i++) { table.cell(0, i).Alignment = Align.Center; table.cell(0, i).addParagraph().Text = dgv.Columns[i].Name; } table.setColWidth(0, (float)(60.0m * RtfConstants.MILLIMETERS_TO_POINTS)); table.setColWidth(1, (float)(25.0m * RtfConstants.MILLIMETERS_TO_POINTS)); table.setColWidth(2, (float)(20.0m * RtfConstants.MILLIMETERS_TO_POINTS)); table.setColWidth(3, (float)(20.0m * RtfConstants.MILLIMETERS_TO_POINTS)); table.setColWidth(4, (float)(20.0m * RtfConstants.MILLIMETERS_TO_POINTS)); DataView dv = new DataView((DataTable)dgv.DataSource); dv.Sort = "Кол-во абитуриентов DESC"; int rowId = 1; foreach (DataRow rw in dv.ToTable().Rows) { int colId = 0; foreach (DataColumn col in dv.ToTable().Columns) { var par = table.cell(rowId, colId).addParagraph(); par.Text = rw[col.ColumnName].ToString(); par.Alignment = Align.Center; colId++; } //запрет переноса строк table.setRowKeepInSamePage(rowId++, false); } doc.save(MainClass.saveTempFolder + "/Report.rtf"); System.Diagnostics.Process.Start(MainClass.saveTempFolder + "/Report.rtf"); } catch (Exception ex) { WinFormsServ.Error(ex.Message); } }
public void SetRowKeepInSamePageTest() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.DoesNotThrow(() => rtfTable.setRowKeepInSamePage(1, true)); }
public void ShouldThrowExceptionWhenRowKeepInSamePageIsNegative() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.Throws <Exception>(() => rtfTable.setRowKeepInSamePage(-1, false)); }
public void MergeShouldThrowExceptionWhenTopRowIsNegative() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.Throws <Exception>(() => rtfTable.merge(-1, 2, 3, 3)); }
public void MergeShouldThrowExceptionWhenColumnSpanIsLessThanOne() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.Throws <Exception>(() => rtfTable.merge(1, 2, 2, -2)); }
public void ShouldThrowExceptionWhenRowValueIsNegative() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.Throws <Exception>(() => rtfTable.setRowHeight(-1, 20)); }
private void CPK_Rtf() { RtfDocument doc = new RtfDocument(PaperSize.A4, PaperOrientation.Landscape, Lcid.Russian); string sFac = cbFaculty.Text.ToLower(); if (sFac.CompareTo("все") == 0) { sFac = "всех факультетов "; } else { if (ComboServ.GetComboId(cbFaculty) == "10") { sFac = "медицинского колледжа "; } else if (ComboServ.GetComboId(cbFaculty) == "3") { sFac = "высшей школы менеджмента "; } else { sFac = sFac.Replace("кий", "кого ").Replace("ый", "ого ").Replace("акультет", "акультета"); } } string sForm = cbStudyForm.Text.ToLower(); if (sForm.CompareTo("все") == 0) { sForm = " всех форм обучения "; } else { sForm = sForm.Replace("ая", "ой").Replace("яя", "ей") + " формы обучения "; } doc.addParagraph().Text = string.Format("Ежедневная информация (форма ЦПК)\r\n{0}\r\n{1}", sFac + " " + sForm, "на " + DateTime.Now.ToShortDateString()); RtfTable tbl = doc.addTable(2 + dgvData.Rows.Count, 1 + dgvData.ColumnCount); //делаем заголовки // tbl.merge(0, 0, 2, 1); tbl.FillCell(0, 0, "", FontStyleFlag.Normal); tbl.merge(0, 1, 2, 1); tbl.FillCell(0, 1, "Направление, специальность", FontStyleFlag.Normal); tbl.merge(0, 2, 2, 1); tbl.FillCell(0, 0, "Шифр", FontStyleFlag.Normal); tbl.merge(0, 3, 1, 2); tbl.FillCell(0, 0, "План приема", FontStyleFlag.Normal); tbl.merge(0, 5, 1, 2); tbl.FillCell(0, 0, "Количество поданных заявлений", FontStyleFlag.Normal); tbl.merge(0, 7, 1, 2); tbl.FillCell(0, 0, "Конкурс", FontStyleFlag.Normal); tbl.FillCell(1, 3, "бюджет", FontStyleFlag.Normal); tbl.FillCell(1, 4, "догов.", FontStyleFlag.Normal); tbl.FillCell(1, 5, "бюджет", FontStyleFlag.Normal); tbl.FillCell(1, 6, "догов.", FontStyleFlag.Normal); tbl.FillCell(1, 7, "бюджет", FontStyleFlag.Normal); tbl.FillCell(1, 8, "догов.", FontStyleFlag.Normal); int iRow = 3; RtfParagraph p; foreach (DataGridViewRow row in dgvData.Rows) { string sProgramName = row.Cells[1].Value.ToString(); if (!sProgramName.StartsWith(" ", StringComparison.OrdinalIgnoreCase)) { } p = tbl.cell(iRow, 0).addParagraph(); p.Text = (iRow - 2).ToString(); } doc.render(); }
public override void BeginTable(int columnsCount, int rowsCount) { fTable = fDocument.addTable(rowsCount, columnsCount, 0); fTableRow = 0; fTableCol = 0; }
public void RowCountPropertyTestForTable() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.AreEqual(3, rtfTable.RowCount); }
/// <summary> /// Initializes a new instance of ESCommon.Rtf.RtfTableColumnCollection class. /// </summary> /// <param name="table">Owning table.</param> internal RtfTableColumnCollection(RtfTable table) { list = new List <RtfTableColumn>(); Table = table; }
//--------------------------------------------------------------------------------- #region ** text static void CreateDocumentText(C1WordDocument word) { // use landscape for more impact word.Landscape = true; // measure and show some text var text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."; var font = new Font("Segoe UI Light", 14, RtfFontStyle.Italic); // add paragraph word.AddParagraph(text, font, Colors.BlueViolet, RtfHorizontalAlignment.Justify); var paragraph = (RtfParagraph)word.Current; paragraph.LeftBorderColor = Colors.Blue; paragraph.LeftBorderStyle = RtfBorderStyle.Emboss; paragraph.LeftBorderWidth = 1f; paragraph.TopBorderColor = Colors.Blue; paragraph.TopBorderStyle = RtfBorderStyle.Emboss; paragraph.TopBorderWidth = 2f; paragraph.RightBorderColor = Colors.Purple; paragraph.RightBorderStyle = RtfBorderStyle.DotDash; paragraph.RightBorderWidth = 5f; paragraph.BottomBorderColor = Colors.Red; paragraph.BottomBorderStyle = RtfBorderStyle.Dotted; paragraph.BottomBorderWidth = 3f; // add table word.LineBreak(); int rows = 4; int cols = 2; RtfTable table = new RtfTable(rows, cols); word.Add(table); table.Rows[0].Cells[0].SetMerged(1, 2); for (int row = 0; row < rows; row++) { if (row == 0) { table.Rows[row].Height = 50; } for (int col = 0; col < cols; col++) { if (row == 0 && col == 0) { text = "Word/RTF works in WPF!"; table.Rows[row].Cells[col].Alignment = ContentAlignment.MiddleCenter; table.Rows[row].Cells[col].BackFilling = Colors.LightPink; } else { text = string.Format("table cell {0}:{1}.", row, col); table.Rows[row].Cells[col].BackFilling = Colors.LightYellow; } table.Rows[row].Cells[col].Content.Add(new RtfString(text)); table.Rows[row].Cells[col].BottomBorderWidth = 2; table.Rows[row].Cells[col].TopBorderWidth = 2; table.Rows[row].Cells[col].LeftBorderWidth = 2; table.Rows[row].Cells[col].RightBorderWidth = 2; if (col == cols - 1) { table.Rows[row].Cells[col].Alignment = ContentAlignment.BottomRight; } } } }
static void CreateDocumentTOC(C1WordDocument doc) { // calculate page rect (discounting margins) Rect rcPage = WordUtils.PageRectangle(doc); var height = rcPage.Top; // initialize fonts Font titleFont = new Font("Tahoma", 20, RtfFontStyle.Bold); Font headerFont = new Font("Arial", 14, RtfFontStyle.Bold); Font bodyFont = new Font("Times New Roman", 11); // add title doc.AddParagraph(Strings.TableOfContentsDocumentTitle, titleFont, Colors.DeepPink, RtfHorizontalAlignment.Center); doc.AddParagraph(string.Empty); // create context of the document var pageIndex = 2; var data = new List <List <string> >(); for (int i = 0; i < 30; i++) { // iniialization data var list = new List <string>(); data.Add(list); // create it header (as a link target and outline entry) string header = string.Format("{0}. {1}", i + 1, BuildRandomTitle()); var h = 2 * doc.MeasureString(header, headerFont, rcPage.Width).Height; // create some text for (int j = 0; j < 3 + _rnd.Next(20); j++) { // some paragraph string text = BuildRandomParagraph(); var sf = new StringFormat(); sf.Alignment = HorizontalAlignment.Stretch; h += doc.MeasureString(text, bodyFont, rcPage.Width, sf).Height; h += 6; // test next page if (height + h > rcPage.Bottom) { pageIndex++; height = rcPage.Top; } height += h; h = 0; // page index for header if (j == 0) { list.Add(pageIndex.ToString()); list.Add(header.ToString()); } // page index for paragraph list.Add(pageIndex.ToString()); list.Add(text.ToString()); } // last line height += 20; } // render Table of Contents RtfTable table = new RtfTable(data.Count, 2); doc.Add(table); for (int row = 0; row < data.Count; row++) { // get bookmark info var list = data[row]; var page = list[0]; var header = list[1]; // add cells table.Rows[row].Cells[0].Content.Add(new RtfString(header)); //var hlink = new RtfHyperlink(string.Format("hdr{0}", 1 + row)); //hlink.Content.Add(new RtfString(page)); //table.Rows[row].Cells[1].Content.Add(hlink); table.Rows[row].Cells[1].Content.Add(new RtfString(page)); // set attributes table.Rows[row].Cells[0].Alignment = ContentAlignment.BottomLeft; table.Rows[row].Cells[1].Alignment = ContentAlignment.BottomRight; table.Rows[row].BottomBorderWidth = 1; table.Rows[row].BottomBorderStyle = RtfBorderStyle.Dotted; } // next page doc.PageBreak(); pageIndex = 1; // render contents foreach (var list in data) { for (int i = 0; i < list.Count; i += 2) { int page = int.Parse(list[i]); if (page != pageIndex) { doc.PageBreak(); pageIndex = page; } var text = list[i + 1]; if (i == 0) { // header //doc.AddBookmark(string.Format("hdr{0}", 1 + data.IndexOf(list))); doc.AddParagraph(text, headerFont, Colors.DarkGray, RtfHorizontalAlignment.Center); var paragraph = (RtfParagraph)doc.Current; paragraph.TopBorderColor = Colors.DarkGray; paragraph.TopBorderStyle = RtfBorderStyle.Single; paragraph.TopBorderWidth = 1f; doc.AddParagraph(string.Empty, bodyFont, Colors.Black); } else { // context doc.AddParagraph(text, bodyFont, Colors.Black, RtfHorizontalAlignment.Justify); } } doc.AddParagraph(string.Empty, bodyFont, Colors.Black); } }
public void CheckDefaultDirectionForTable() { var rtfTable = new RtfTable(3, 3, 20, 20); Assert.AreEqual(ReadingDirection.LeftToRight, rtfTable.ReadingDirection); }