Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Борис_С от 20-05-2021, 18:59:19

Название: Как определить, в каком режиме находится программа
Отправлено: Борис_С от 20-05-2021, 18:59:19
Всем доброго времени суток.
Подскажите, пожалуйста, как узнать, в каком режиме находится программа: в режиме пространства модели или в режиме пространства листа?
Спасибо.
Название: Re: Как определить, в каком режиме находится программа
Отправлено: Александр Ривилис от 20-05-2021, 19:42:03
В исходном коде MGDDBG есть соответствующая функция:
Код - C# [Выбрать]
  1. /// <summary>
  2. /// Is Paper Space active in the given database?
  3. /// </summary>
  4. /// <param name="db">Specific database to use</param>
  5. /// <returns></returns>
  6.  
  7. public static bool IsPaperSpace(Database db)
  8. {
  9.     Debug.Assert(db != null);
  10.     if (Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument == null)
  11.         return false;
  12.     if (db.TileMode)
  13.         return false;
  14.     Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  15.     if (db.PaperSpaceVportId == ed.CurrentViewportObjectId)
  16.         return true;
  17.     return false;
  18. }
Название: Re: Как определить, в каком режиме находится программа
Отправлено: Борис_С от 20-05-2021, 20:10:52
Спасибо, Саша.
Название: Re: Как определить, в каком режиме находится программа
Отправлено: Дмитрий Загорулькин от 20-05-2021, 20:20:54
Вроде бы, как-то давно мы тут на форуме обсуждали, что достаточно посмотреть свойство CurrentSpaceId (http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_Database_CurrentSpaceId) и проверить, что оно соответствует (или нет) ObjectId модели (можно получить через SymbolUtilityServices (http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_SymbolUtilityServices_GetBlockModelSpaceId_Database)). Но это надо проверять.
Название: Re: Как определить, в каком режиме находится программа
Отправлено: Александр Ривилис от 20-05-2021, 21:33:37
Вроде бы, как-то давно мы тут на форуме обсуждали, что достаточно посмотреть свойство CurrentSpaceId (http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_Database_CurrentSpaceId) и проверить, что оно соответствует (или нет) ObjectId модели (можно получить через SymbolUtilityServices (http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_SymbolUtilityServices_GetBlockModelSpaceId_Database)). Но это надо проверять.
Да. Это тоже работает почти во всех контекстах, кроме некоторых событий.