4.9. Доступ к командной строке AutoCAD

Источник здесь. [перевод не проверен];[Переводчик: Вадим Семёнов] 

Вы можете посылать команды непосредственно в командную строку AutoCAD, используя метод SendStringToExecute. Метод SendStringToExecute посылает одиночную строку(string) в командную строку. Строка(string) должна содержать аргументы команды расположенные в том порядке, который указан в подсказке запускаемой программы.

Пробел или ASCII эквивалент возврата каретки в строке, эквивалентны нажатию на клавиатуре клавиши Enter. В отличии от среды AutoLISP,вызов метода SendStirngToExecute без аргументов является ошибочным.

Команды, выполняемые с помощью SendStringToExecute, асинхронны, и не могут вызываться до окончания .NET команды. Если вам необходимо выполнить команду немедленно (синхронно), вы должны:

  • Использовать метод SendCommand, являющимся частью библиотеки автоматизации COM (COM Automation library), которая доступна при использовании .Net COM Interop
  • C помощью неуправляемого кода (P/Invoke) неуправляемыми методами acedCommand или acedCmd для истинных команд AutoCAD (native AutoCAD command) и команд определенных с помощью ObjectARX или .NET API.
  • C помощью неуправляемого кода (P/Invoke) неуправляемым методом acedInvoke для команд определенных через AutoLISP
Отправка команды в командную строку AutoCAD

Следующий пример создает круг с центром (2,2,0) и радиусом 4. Чертеж затем масштабируется на отображение всей геометрии в чертеже. Обратите внимание, что существует пробел в конце строки, который представляет собой конечный Enter для начала выполнения команды.

Код VB.NET
  1:  Imports Autodesk.AutoCAD.ApplicationServices
   2:  Imports Autodesk.AutoCAD.Runtime
   3:   
   4:  <CommandMethod("SendACommandToAutoCAD")> _
   5:  Public Sub SendACommandToAutoCAD()
   6:    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
   7:   
   8:    '' Рисуем круг и масштабируем до границ или пределов чертежа (limits of the drawing) 
   9
  10:    acDoc.SendStringToExecute("._circle 2,2,0 4 ", True, False, False)
  11:    acDoc.SendStringToExecute("._zoom _all ", True, False, False)
  12:  End Sub

Код C#
 using Autodesk.AutoCAD.ApplicationServices;
   2:  using Autodesk.AutoCAD.Runtime;
   3:   
   4:  [CommandMethod("SendACommandToAutoCAD")]
   5:  public static void SendACommandToAutoCAD()
   6:  {
   7:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
   8:   
   9:    //  Рисуем круг и масштабируем до границ или пределов чертежа (limits of the drawing)
  10:    
  11:    acDoc.SendStringToExecute("._circle 2,2,0 4 ", true, false, false);
  12:    acDoc.SendStringToExecute("._zoom _all ", true, false, false);
  13:  }

Код VBA/ActiveX
Sub SendACommandToAutoCAD()
   2:     ' Рисуем круг и масштабируем до границ или пределов чертежа (limits of the drawing)
   3:  
   4:     ThisDrawing.SendCommand "_Circle 2,2,0 4 "
   5:     ThisDrawing.SendCommand "_zoom a "
   6:  End Sub
Comments