Fatal error при запуске метода из руководства

Автор Тема: Fatal error при запуске метода из руководства  (Прочитано 8346 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!
Пытаюсь разобраться с созданием пользовательских СК. Собрал пример из руководства API. Получил Fatal error на строчке кода acUCSTblRec.Origin = new Point3d(4, 5, 3). Почему?
Код - C# [Выбрать]
  1. [CommandMethod("2NewUCS")]
  2.           public static void NewUCS ()
  3.           {
  4.                // Get the current document and database, and start a transaction
  5.                Document acDoc = Application.DocumentManager.MdiActiveDocument;
  6.                Database acCurDb = acDoc.Database;
  7.  
  8.                using ( Transaction acTrans = acCurDb.TransactionManager.StartTransaction() )
  9.                {
  10.                     // Open the UCS table for read
  11.                     UcsTable acUCSTbl;
  12.                     acUCSTbl = acTrans.GetObject(acCurDb.UcsTableId,
  13.                                                     OpenMode.ForRead) as UcsTable;
  14.  
  15.                     UcsTableRecord acUCSTblRec;
  16.  
  17.                     // Check to see if the "New_UCS" UCS table record exists
  18.                     if ( acUCSTbl.Has("New_UCS") == false )
  19.                     {
  20.                          acUCSTblRec = new UcsTableRecord();
  21.                          acUCSTblRec.Name = "New_UCS";
  22.  
  23.                          // Open the UCSTable for write
  24.                          acUCSTbl.UpgradeOpen();
  25.  
  26.                          // Add the new UCS table record
  27.                          acUCSTbl.Add(acUCSTblRec);
  28.                          acTrans.AddNewlyCreatedDBObject(acUCSTblRec, true);
  29.  
  30.                          acUCSTblRec.Dispose();
  31.                     }
  32.                     else
  33.                     {
  34.                          acUCSTblRec = acTrans.GetObject(acUCSTbl[ "New_UCS" ],
  35.                                                          OpenMode.ForWrite) as UcsTableRecord;
  36.                     }
  37.  
  38.                     acUCSTblRec.Origin = new Point3d(4, 5, 3);
  39.                     acUCSTblRec.XAxis = new Vector3d(1, 0, 0);
  40.                     acUCSTblRec.YAxis = new Vector3d(0, 1, 0);
  41.  
  42.                     // Open the active viewport
  43.                     ViewportTableRecord acVportTblRec;
  44.                     acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId,
  45.                                                         OpenMode.ForWrite) as ViewportTableRecord;
  46.  
  47.                     // Display the UCS Icon at the origin of the current viewport
  48.                     acVportTblRec.IconAtOrigin = true;
  49.                     acVportTblRec.IconEnabled = true;
  50.  
  51.                     // Set the UCS current
  52.                     acVportTblRec.SetUcs(acUCSTblRec.ObjectId);
  53.                     acDoc.Editor.UpdateTiledViewportsFromDatabase();
  54.  
  55.                     // Display the name of the current UCS
  56.                     UcsTableRecord acUCSTblRecActive;
  57.                     acUCSTblRecActive = acTrans.GetObject(acVportTblRec.UcsName,
  58.                                                             OpenMode.ForRead) as UcsTableRecord;
  59.  
  60.                     Application.ShowAlertDialog("The current UCS is: " +
  61.                                                 acUCSTblRecActive.Name);
  62.  
  63.                     PromptPointResult pPtRes;
  64.                     PromptPointOptions pPtOpts = new PromptPointOptions("");
  65.  
  66.                     // Prompt for a point
  67.                     pPtOpts.Message = "\nEnter a point: ";
  68.                     pPtRes = acDoc.Editor.GetPoint(pPtOpts);
  69.  
  70.                     Point3d pPt3dWCS;
  71.                     Point3d pPt3dUCS;
  72.  
  73.                     // If a point was entered, then translate it to the current UCS
  74.                     if ( pPtRes.Status == PromptStatus.OK )
  75.                     {
  76.                          pPt3dWCS = pPtRes.Value;
  77.                          pPt3dUCS = pPtRes.Value;
  78.  
  79.                          // Translate the point from the current UCS to the WCS
  80.                          Matrix3d newMatrix = new Matrix3d();
  81.                          newMatrix = Matrix3d.AlignCoordinateSystem(Point3d.Origin,
  82.                                                                      Vector3d.XAxis,
  83.                                                                      Vector3d.YAxis,
  84.                                                                      Vector3d.ZAxis,
  85.                                                                      acVportTblRec.Ucs.Origin,
  86.                                                                      acVportTblRec.Ucs.Xaxis,
  87.                                                                      acVportTblRec.Ucs.Yaxis,
  88.                                                                      acVportTblRec.Ucs.Zaxis);
  89.  
  90.                          pPt3dWCS = pPt3dWCS.TransformBy(newMatrix);
  91.  
  92.                          Application.ShowAlertDialog("The WCS coordinates are: \n" +
  93.                                                      pPt3dWCS.ToString() + "\n" +
  94.                                                      "The UCS coordinates are: \n" +
  95.                                                      pPt3dUCS.ToString());
  96.                     }
  97.  
  98.                     // Save the new objects to the database
  99.                     acTrans.Commit();
  100.                }
  101.  
  102.           }

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Получил Fatal error на строчке кода acUCSTblRec.Origin = new Point3d(4, 5, 3)
Прям Fatal error или просто exception???

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

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Для начала оберните код в try{} catch() и скорее всего поймаете ошибку, по которой уже легче судить

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Atomohod,
А что вот это за ерунда в строке 30??? Это как пилить сук на котором сидишь....
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1

Отмечено как Решение Atomohod 17-10-2018, 22:02:17

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Atomohod,
Закомментарь или удали строку 30 ( acUCSTblRec.Dispose(); )
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
А что вот это за ерунда в строке 30??? Это как пилить сук на котором сидишь....
Вроде да, освобождать tblRec когда в нее пишешь не нужно, но оф. help велит так.


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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Закомментарь или удали строку 30 ( acUCSTblRec.Dispose(); )
Сейчас попробую.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А что вот это за ерунда в строке 30??? Это как пилить сук на котором сидишь....
Вроде да, освобождать tblRec когда в нее пишешь не нужно, но оф. help велит так.


"Если на клетке слона прочтешь надпись: буйвол, — не верь глазам своим" (с) Козьма Прутков.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Закомментарь или удали строку 30 ( acUCSTblRec.Dispose(); )
Так действительно работает! Получается, что в help диверсия?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Закомментарь или удали строку 30 ( acUCSTblRec.Dispose(); )
Так действительно работает! Получается, что в help диверсия?
Это не единственная диверсия. Эту (!) здесь исправили: https://help.autodesk.com/view/OARX/2019/ENU/?guid=GUID-096085E3-5AD5-4454-BF10-C9177FDB5979
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Это не единственная диверсия.
А где еще? Где-нибудь можно посмотреть список выявленных ошибок?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Это не единственная диверсия.
А где еще? Где-нибудь можно посмотреть список выявленных ошибок?
Нет. Просто я неоднократно на такие натыкался.И кое-какие уже исправлены. Кстати, вместо UpgradeOpen нужно повторно вызывать Transaction.GetObject с ForWrite - пару дней назад на форуме обсуждали.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Спасибо!