Изменить текстовый стиль в каждой ячейке таблицы автокад

Автор Тема: Изменить текстовый стиль в каждой ячейке таблицы автокад  (Прочитано 2572 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zr74Автор темы

  • ADN OPEN
  • Сообщений: 46
  • Карма: 1
Все доброго дня!
Написал код, который должен находит все таблицы в чертеже и в каждой ячейке таблицы изменить текстовый стиль на "Isocpeur", а также убрать сжатие, наклон, растяжение и т.д текста в каждой ячейки. Но в итоге ничего не происходит. Подскажите, где ошибка?
Код - C# [Выбрать]
  1. using (Transaction tr = db.TransactionManager.StartTransaction())
  2. {
  3.       ObjectId[] ids = selRes.Value.GetObjectIds(); // получаем массив ID объектов
  4.       ObjectId textStyleId = ObjectId.Null;
  5.       TextStyleTable tst = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForWrite);
  6.       TextStyleTableRecord textStyle = new TextStyleTableRecord();
  7.       textStyle.Name = "ISOCPEUR";
  8.       textStyle.FileName = "isocpeur.ttf";
  9.       textStyle.XScale = 1;
  10.       if (!tst.Has(textStyle.Name))
  11.       {
  12.             tst.Add(textStyle);
  13.             tr.AddNewlyCreatedDBObject(textStyle, true);
  14.             db.Textstyle = textStyle.ObjectId;
  15.       }
  16.       foreach (ObjectId id in ids)
  17.       {
  18.            if (id.ObjectClass.Name == "ACAD_TABLE") // если объект это Таблица автокад
  19.            {
  20.                var acadTable = (Table)tr.GetObject(id, OpenMode.ForWrite);
  21.                 for (int row = 0; row < acadTable.Rows.Count; row++)
  22.                {
  23.                       for (int col = 0; col < acadTable.Columns.Count; col++)
  24.                      {                                                        
  25.                             acadTable.Cells[row, col].GetTextString(FormatOption.IgnoreMtextFormat);
  26.                            acadTable.Cells[row, col].TextStyleId = tst[textStyle.Name];
  27.                      }
  28.                }
  29.                            
  30.          }    
  31.      }                    
  32.       ed.SetImpliedSelection(new ObjectId[0]);
  33.       tr.Commit();
  34.  }
  35.  

Отмечено как Решение zr74 06-07-2023, 11:34:40

Оффлайн zr74Автор темы

  • ADN OPEN
  • Сообщений: 46
  • Карма: 1
Решение нашел сам
Код - C# [Выбрать]
  1.  if (id.ObjectClass.Name == "AcDbTable") // если объект это Таблица автокад
  2. {                            
  3.     var acadTable = (Table)tr.GetObject(id, OpenMode.ForWrite);
  4.     for (int row = 0; row < acadTable.Rows.Count; row++)
  5.     {
  6.           for (int col = 0; col < acadTable.Columns.Count; col++)
  7.           {                                                        
  8.                 mText.Contents = acadTable.Cells[row, col].TextString;
  9.                 acadTable.Cells[row, col].TextStyleId = tst[textStyle.Name];
  10.                 acadTable.Cells[row, col].Value = mText.Text;
  11.           }
  12.      }                          
  13. }    
  14.