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

19/05/2014

Зумирование до границ окна с использованием CommandASync

В этой статье я проиллюстрирую пример использования AutoCAD 2015 API «Editor.CommandAsync».

Вопрос: Можно ли зумировать в пределах окна до тех пор пока не будет нажата кнопка ESC или отмена?

Ответ: Да. Это возможно с помощью CommandAsync.

Ниже код на C#:

Код - C#: [Выделить]
  1. #region "Запуск команды _Zoom из функции обратного вызова"
  2. private static bool ZoomExit = false;
  3. // Объявляем делегат
  4. delegate void Del();
  5. private static Del _actionCompletedDelegate;
  6. // При нажатии esc/cancel функция отмечает конец _Zoom
  7. static void MdiActiveDocument_CommandCancelled(object sender, CommandEventArgs e)
  8. {
  9.     ZoomExit = true;
  10. }
  11. [CommandMethod("TestZoom")]
  12. public static void TestZoom()
  13. {
  14.     var ed = Application.DocumentManager.MdiActiveDocument.Editor;
  15.     var doc = Application.DocumentManager.MdiActiveDocument;
  16.     //esc event
  17.     doc.CommandCancelled += MdiActiveDocument_CommandCancelled;
  18.     // start Line command, the first line
  19.     Editor.CommandResult cmdResult1 =
  20.        ed.CommandAsync(new object[] { "_.ZOOM", Editor.PauseToken, Editor.PauseToken });
  21.  
  22.     // Указание функции обратного вызова, которая будет вызвана после
  23.     // взаимодействия с пользователем
  24.     _actionCompletedDelegate = new Del(CreateZoomAsyncCallback);
  25.     cmdResult1.OnCompleted(new Action(_actionCompletedDelegate));
  26.     ZoomExit = false;
  27. }
  28. // Функция обратного вызова
  29. public static void CreateZoomAsyncCallback()
  30. {
  31.     var ed = Application.DocumentManager.MdiActiveDocument.Editor;
  32.     // Если Zoom != 0 - команда выполняется
  33.     if (!ZoomExit)
  34.     {
  35.         // AutoCAD hands over to the callback function
  36.         Editor.CommandResult cmdResult1 =
  37.           ed.CommandAsync(new object[] { "_.ZOOM", Editor.PauseToken, Editor.PauseToken });
  38.                 // Указание функции обратного вызова, которая будет вызвана после
  39.         // взаимодействия с пользователем
  40.         _actionCompletedDelegate = new Del(CreateZoomAsyncCallback);
  41.         cmdResult1.OnCompleted(new Action(_actionCompletedDelegate));
  42.     }
  43.     else
  44.     {
  45.         ed.WriteMessage("_Zoom завершена");
  46.         return;
  47.     }
  48. }
  49.  
  50. #endregion

Источник: http://adndevblog.typepad.com/autocad/2014/05/zoom-to-a-window-in-editor-using-commandasync.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=742

Опубликовано 19.05.2014