Различный результат вызова команд в ком строке, как реализовать?

Автор Тема: Различный результат вызова команд в ком строке, как реализовать?  (Прочитано 4565 раз)

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

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

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
Добрый день!
AutoCAD некоторые команды обрабатывает по разному в зависимости, как они были введены
поясню:
(command "saveas") AutoCAD дальнейшие запросы делает в ком строке
saveas если  filedia=1, откроет файл броузер.
Собственно вопрос, как реализовать аналогичное поведение своих команд на .NET?
Как можно различать, каким образом команда была вызвана?

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

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
Ничего умнее чем через события и флаг не придумал
уверен есть метод лучше
Код - C# [Выбрать]
  1.         class CadCommand : Rtm.IExtensionApplication
  2.         {
  3.                 /// <summary>
  4.                 /// Gets or sets a value indicating whether this instance is lisp.
  5.                 /// </summary>
  6.                 /// <value>
  7.                 ///   <c>true</c> if this instance is lisp; otherwise, <c>false</c>.
  8.                 /// </value>
  9.                 internal static bool IsLisp { get; set; }
  10.  
  11.                 /// <summary>
  12.                 /// LWSs the specified sender.
  13.                 /// </summary>
  14.                 /// <param name="sender">The sender.</param>
  15.                 /// <param name="args">The <see cref="LispWillStartEventArgs"/> instance containing the event data.</param>
  16.                 private void lws(object sender, LispWillStartEventArgs args)
  17.                 {
  18.                         IsLisp = true;
  19.                 }
  20.  
  21.                 /// <summary>
  22.                 /// Lwes the specified sender.
  23.                 /// </summary>
  24.                 /// <param name="sender">The sender.</param>
  25.                 /// <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param>
  26.                 private void lwe(object sender, EventArgs args)
  27.                 {
  28.                         IsLisp = false;
  29.                 }
  30.  
  31.                 /// <summary>
  32.                 /// LispCancelled хз когда вызывается
  33.                 /// </summary>
  34.                 /// <param name="sender">The sender.</param>
  35.                 /// <param name="args">The <see cref="EventArgs"/> instance containing the event data.</param>
  36.                 private void lwc(object sender, EventArgs args)
  37.                 {
  38.                         IsLisp = false;
  39.                 }
  40.                 #region INIT
  41.                 public void Initialize()
  42.                 {
  43.                         App.DocumentCollection dm = App.Application.DocumentManager;
  44.                         Ed.Editor ed = dm.MdiActiveDocument.Editor;
  45.  
  46.                         dm.MdiActiveDocument.LispWillStart += new LispWillStartEventHandler(lws);
  47.                         dm.MdiActiveDocument.LispEnded += new EventHandler(lwe);
  48.                         dm.MdiActiveDocument.LispCancelled += new EventHandler(lwc);
  49.                 }
  50.  
  51.            public void Terminate()
  52.            {
  53.                    // throw new System.NotImplementedException();
  54.            }
  55.            
  56.            /// <summary>
  57.                 /// Saves the mod.
  58.                 /// </summary>
  59.                 [Rtm.CommandMethod("drz_save")]
  60.                 public void drzSaveMod()
  61.                 {
  62.                         saveMod.SaveMod();
  63.                 }
  64.  
  65.         }
  66.  
  67.  
  68.  
  69.     public class saveMod
  70.     {
  71.         /// <summary>
  72.         /// Saves the mod.
  73.         /// </summary>
  74.         [CommandMethod("drz_save")]
  75.         public static void SaveMod()
  76.         {
  77.             Database db = HostApplicationServices.WorkingDatabase;
  78.             Document doc = Application.DocumentManager.MdiActiveDocument;
  79.             Editor ed = doc.Editor;
  80.    
  81.             if (CadCommand.IsLisp)
  82.             {
  83.                 ed.WriteMessage("Lisp started");
  84.             }
  85.             else
  86.             {
  87.                 ed.WriteMessage("Lisp stopped");
  88.             }
  89.                 }
  90.         }
  91.  

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
(command "saveas") AutoCAD дальнейшие запросы делает в ком строке
saveas если  filedia=1, откроет файл броузер.
Если перед (command "saveas") вызвать (initdia), то будет работать как из командной строки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: doctorraz
Спасибо
т. е. получается в . NET AutoCAD нет возможности определить запущена команда сама по себе или в составе lsp выражения.