/// <summary> /// Вставка элемента спецификации в строку таблицы AutoCAD с выбором таблицы и указанием строки /// </summary> /// <param name="specificationItemForTable">Экземпляр вспомогательного элемента для заполнения строительной спецификации</param> public static void AddSpecificationItemToTableRow(SpecificationItemForTable specificationItemForTable) { var doc = AcApp.DocumentManager.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; using (doc.LockDocument()) { var options = new PromptEntityOptions($"\n{Language.GetItem(LangItem, "msg11")}"); options.SetRejectMessage($"\n{Language.GetItem(LangItem, "msg13")}"); options.AddAllowedClass(typeof(Table), false); var entity = ed.GetEntity(options); if (entity.Status == PromptStatus.OK) { using (var tr = db.TransactionManager.StartTransaction()) { var table = (Table)tr.GetObject(entity.ObjectId, OpenMode.ForWrite); var selectedRow = 2; var ppo = new PromptPointOptions($"\n{Language.GetItem(LangItem, "msg12")}"); var end = false; var vector = new Vector3d(0.0, 0.0, 1.0); while (end == false) { var ppr = ed.GetPoint(ppo); if (ppr.Status != PromptStatus.OK) { return; } try { var tableHitTestInfo = table.HitTest(ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem), vector); if (tableHitTestInfo.Type == TableHitTestType.Cell) { selectedRow = tableHitTestInfo.Row; end = true; } } catch { MessageBox.Show(Language.GetItem(LangItem, "msg14")); } } TableHelpers.AddSpecificationItemToTableRow(table, selectedRow, specificationItemForTable); tr.Commit(); } } } }
/// <summary>Вставка нескольких элементов спецификации в выбранную таблицу AutoCAD</summary> /// <param name="table">Таблица AutoCAD</param> /// <param name="rowNumber">Номер строки с которой начинается заполнение таблицы</param> /// <param name="specificationItemsForTable">Список экземпляров вспомогательного элемента для заполнения строительной спецификации</param> /// <remarks>Метод проверяет в таблице наличие нужного количества пустых строк и в случае их нехватки добавляет новые</remarks> /// <remarks>Метод нужно вызывать внутри открытой транзакции и открытой на запись таблицы</remarks> public static void AddSpecificationItemsToTable(Table table, int rowNumber, List <SpecificationItemForTable> specificationItemsForTable) { TableHelpers.FillTableRows(table, rowNumber, specificationItemsForTable); }
/// <summary> /// Вставка нескольких элементов спецификации в таблицу AutoCAD с выбором таблицы /// </summary> /// <param name="specificationItemsForTable">Список экземпляров вспомогательного элемента для заполнения /// строительной спецификации</param> /// <param name="askForSelectRow">Указание пользователем строки, с которой начинается заполнение</param> /// <remarks>Метод проверяет в таблице наличие нужного количества пустых строк и в случае их нехватки /// добавляет новые</remarks> public static void AddSpecificationItemsToTable( List <SpecificationItemForTable> specificationItemsForTable, bool askForSelectRow) { var doc = AcApp.DocumentManager.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; using (doc.LockDocument()) { var options = new PromptEntityOptions($"\n{Language.GetItem(LangItem, "msg11")}"); options.SetRejectMessage($"\n{Language.GetItem(LangItem, "msg13")}"); options.AddAllowedClass(typeof(Table), false); var entity = ed.GetEntity(options); if (entity.Status == PromptStatus.OK) { using (var tr = db.TransactionManager.StartTransaction()) { var table = (Table)tr.GetObject(entity.ObjectId, OpenMode.ForWrite); var startRow = 2; if (!askForSelectRow) { if (table.TableStyleName.Equals("Mp_GOST_P_21.1101_F8")) { startRow = 3; } TableHelpers.CheckAndAddRowCount(table, startRow, specificationItemsForTable.Count, out var firstEmptyRow); TableHelpers.FillTableRows(table, firstEmptyRow, specificationItemsForTable); } else { var ppo = new PromptPointOptions($"\n{Language.GetItem(LangItem, "msg15")}"); var end = false; var vector = new Vector3d(0.0, 0.0, 1.0); while (end == false) { var ppr = ed.GetPoint(ppo); if (ppr.Status != PromptStatus.OK) { return; } try { var tableHitTestInfo = table.HitTest(ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem), vector); if (tableHitTestInfo.Type == TableHitTestType.Cell) { startRow = tableHitTestInfo.Row; end = true; } } catch { MessageBox.Show(Language.GetItem(LangItem, "msg14")); } } TableHelpers.CheckAndAddRowCount(table, startRow, specificationItemsForTable.Count, out _); TableHelpers.FillTableRows(table, startRow, specificationItemsForTable); } tr.Commit(); } } } }
/// <summary> /// Вставка элемента спецификации в указанную строку выбранной таблицы AutoCAD /// </summary> /// <param name="specificationItemForTable">Экземпляр вспомогательного элемента для заполнения строительной спецификации</param> /// <param name="table">Таблица AutoCAD</param> /// <param name="rowNumber">Номер строки для вставки элемента спецификации</param> /// <remarks>Метод нужно вызывать внутри открытой транзакции и открытой на запись таблицы</remarks> public static void AddSpecificationItemToTableRow( SpecificationItemForTable specificationItemForTable, Table table, int rowNumber) { TableHelpers.AddSpecificationItemToTableRow(table, rowNumber, specificationItemForTable); }