fatal error при попытке установить направление таблицы снизу вверх

Автор Тема: fatal error при попытке установить направление таблицы снизу вверх  (Прочитано 2316 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!

Хватаю fatal error при попытке установить направление таблицы снизу вверх. Как это исправить?
Код - C# [Выбрать]
  1.         [CommandMethod("0TextToTable")]
  2.         public static void CreateTableStyle()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.  
  6.             Database db = doc.Database;
  7.  
  8.             Editor ed = doc.Editor;
  9.             using (var tr = db.TransactionManager.StartTransaction())
  10.             {
  11.                 var tst = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForRead);
  12.                 ObjectId romansID;
  13.                 if (tst.Has("BasicText"))
  14.                 {
  15.                     romansID = tst["BasicText"];
  16.                 }
  17.                 else
  18.                 {
  19.                     romansID = db.Textstyle;
  20.                 }
  21.  
  22.                 var tsd = (DBDictionary)tr.GetObject(db.TableStyleDictionaryId, OpenMode.ForRead);
  23.                 if (!tsd.Contains("AuxiliaryDocuments"))
  24.                 {
  25.                     var ts = new TableStyle();
  26.                     ts.SetTextHeight(5, (int)RowType.TitleRow);
  27.                     ts.SetColor((Color.FromColorIndex(ColorMethod.ByAci, 1)), (int)RowType.TitleRow);
  28.                     ts.SetAlignment(CellAlignment.MiddleCenter, (int)RowType.TitleRow);
  29.                     ts.SetTextHeight(4.5, (int)RowType.HeaderRow);
  30.                     ts.SetAlignment(CellAlignment.MiddleCenter, (int)RowType.HeaderRow);
  31.                     ts.SetTextHeight(3, (int)RowType.DataRow);
  32.                     ts.SetAlignment(CellAlignment.MiddleLeft, (int)RowType.DataRow);
  33.                     ts.SetTextStyle(romansID, (int)(RowType.TitleRow | RowType.HeaderRow | RowType.DataRow));
  34.                     ts.HorizontalCellMargin = 0.5;
  35.                     ts.VerticalCellMargin = 0.5;
  36.                     ts.SetGridLineWeight(LineWeight.LineWeight060, (int)GridLineType.AllGridLines, (int)RowType.HeaderRow);
  37.                     ts.SetGridLineWeight(LineWeight.LineWeight060, (int)GridLineType.AllGridLines, (int)RowType.TitleRow);
  38.                     ts.SetGridLineWeight(LineWeight.LineWeight060, (int)GridLineType.OuterGridLines, (int)RowType.DataRow);
  39.                     ts.FlowDirection = FlowDirection.BottomToTop;
  40.                     //ts.SetGridColor(
  41.                     //    Color.FromColorIndex(ColorMethod.ByAci, 2),
  42.                     //    (int)GridLineType.AllGridLines, (int)RowType.DataRow);
  43.                     //ts.SetGridColor(
  44.                     //    Color.FromColorIndex(ColorMethod.ByAci, 3),
  45.                     //    (int)GridLineType.AllGridLines, (int)RowType.HeaderRow);
  46.                     //ts.SetGridColor(
  47.                     //    Color.FromColorIndex(ColorMethod.ByAci, 4),
  48.                     //    (int)GridLineType.AllGridLines, (int)RowType.TitleRow);
  49.                     tsd.UpgradeOpen();
  50.                     tsd.SetAt("AuxiliaryDocuments", ts);
  51.                     tr.AddNewlyCreatedDBObject(ts, true);
  52.                 }
  53.  
  54.                 tr.Commit();
  55.             }
  56.         }


Отмечено как Решение Александр Ривилис 01-11-2019, 11:47:29

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Fatal Error явно не в этом месте - там только Exception eInvalidInput
Всё это связано с багом в AutoCAD .NET API. В ObjectARX есть два FlowDirection:
Код - C++ [Выбрать]
  1. enum AcDb::FlowDirection {
  2.   kTtoB = 0,
  3.   kBtoT = 1
  4. };
  5.  
и
Код - C# [Выбрать]
  1. enum AcDbMText::FlowDirection {
  2.   kLtoR = 1,
  3.   kRtoL = 2,
  4.   kTtoB = 3,
  5.   kBtoT = 4,
  6.   kByStyle = 5
  7. };
Для обертки TableStyle.FlowDirection нужно было использовать первое перечисление, а воспользовались вторым:




Поэтому:
Код - C# [Выбрать]
  1. // Вместо FlowDirection.BottomToTop используемое значение FlowDirection.LeftToRight - это 1
  2. ts.FlowDirection = FlowDirection.LeftToRight;
  3. // Вместо FlowDirection.TopToBottom используемое значение FlowDirection.NotSet - это 0
  4. ts.FlowDirection = FlowDirection.NotSet;

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение