Как правильно указать объект при работе с командной строкой?

Автор Тема: Как правильно указать объект при работе с командной строкой?  (Прочитано 19590 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Имеется объект, представляющий собой замкнутую polyline. Необходимо обрезать все входящие в этот контур объекты командой maptrim. Не знаю, как правильно послать команду в editor. Подскажите пожалуйста, как это реализовать. На lisp реализовывал так:

(command "_maptrim" "S" POLYGON "Y" "Слой" "N" "I" "N" "N" "I")
А сейчас пытаюсь сделать так:
doc.SendStringToExecute("_maptrim S " + POLYGON + " Y Слой N I N N I", false, false, true);
POLYGON - entity, POLYGON_id - object_id

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Ну, во-первых, надо бы учитывать локализацию - добавлять "_" не только перед именем команды, но и перед опцией :)
А, во-вторых, можно попробовать примерно так:
"_.maptrim _S (handent \"" (Handle для POLYGON) "\") <...>"
Иногда такое не срабатывает, и приходится формировать набор примитивов, его активировать и потом уже подсовывать в команду (естественно, не забывая про PICKFIRST)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
flaojke,
(command) и doc.SendStringToExecute() - это разные вещи. Хотябы по тому, что первое синхронно, а второе асинхронно.
Вместо doc.SendStringToExecute() используй в зависимости от версии AutoCAD или Editor.Command или Editor.RunCommand: http://www.theswamp.org/index.php?topic=44191.msg494532#msg494532
« Последнее редактирование: 02-02-2015, 16:24:24 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Александр Ривилис, к сожалению, я слабо представляю, как работает предоставленный вами код

Код - C# [Выбрать]
  1. namespace Autodesk.AutoCAD.EditorInput
  2. {
  3.    public static class EditorInputExtensionMethods
  4.    {
  5.       public static PromptStatus Command( this Editor editor, params object[] args )
  6.       {
  7.          if( editor == null )
  8.             throw new ArgumentNullException( "editor" );
  9.          return runCommand( editor, args );
  10.       }
  11.  
  12.       static Func<Editor, object[], PromptStatus> runCommand = GenerateRunCommand();
  13.  
  14.       static Func<Editor, object[], PromptStatus> GenerateRunCommand()
  15.       {
  16.          MethodInfo method = typeof( Editor ).GetMethod( "RunCommand",
  17.             BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public );
  18.          var instance = Expression.Parameter( typeof( Editor ) );
  19.          var args = Expression.Parameter( typeof( object[] ) );
  20.          return Expression.Lambda<Func<Editor, object[], PromptStatus>>(
  21.             Expression.Call( instance, method, args ), instance, args )
  22.                .Compile();
  23.       }
  24.    }
  25. }

Вы не могли бы объяснить, как этим пользоваться?
« Последнее редактирование: 02-02-2015, 16:29:49 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Должно выглядеть как-то так:
Код - C# [Выбрать]
  1. doc.Editor.Command("_maptrim", "_S", POLYGON_id, "_Y", "Слой", "_N", "_I", "_N", "_N", "_I");
По поводу "Слой" не уверен. Возможно "_L" - но с этим разбирайся сам.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Должно выглядеть как-то так:
Код - C#: [Выделить]
doc.Editor.Command("_maptrim", "_S", POLYGON_id, "_Y", "Слой", "_N", "_I", "_N", "_N", "_I");

Сама функция работает, но мешает диалоговое окно Maptrim, которое вылетает сразу же после первой команды. Filedia = 0, как-то ещё возможно отключить его отображение, чтобы работать только в консоли?

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

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

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Нет, поэтому я и пытался сделать так:

doc.SendStringToExecute("(command \"_.maptrim\" \"_S\" (entlast) \"_Y\" \"Слой\" \"_N\" \"_I\" \"_N\" \"_N\" \"_I\")\n", true, false, false);
Но возникла проблема: сначала выполнялась программа, и только когда она завершалась, данная строчка посылалась в командную строку и выполнялась. Поэтому я решил воспользоваться вашим методом с Editor.Command

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

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

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Из формы, которая открывается сразу же при запуске из класса.

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

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

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Код - C# [Выбрать]
  1. [CommandMethod("LineTrim")]
  2.         public static void MyProg()
  3.         {
  4.             Form1 Form1 = new Form1();
  5.             Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(null, Form1);
  6.         }
« Последнее редактирование: 02-02-2015, 17:33:47 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Форма модальная судя по коду. Но этого кода недостаточно, чтобы понять что происходит. doc.Editor.Command вызывается из обработчика кнопки?
Тогда в обработчике кнопки должно быть что-то такое:
Код - C# [Выбрать]
  1. using (EditorUserInteraction UI = doc.Editor.StartUserInteraction(this))
  2. {
  3.   doc.Editor.Command("_.maptrim", "_S", POLYGON_id, "_Y", "Слой", "_N", "_I", "_N", "_N", "_I");
  4. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Да, из кнопки. Сейчас попробую.

Я добавил в код формы Autodesk.AutoCAD.EditorInput
Код - C# [Выбрать]
  1. namespace LineTrim
  2. {
  3.      public partial class Form1 : Form
  4. }
  5. namespace Autodesk.AutoCAD.EditorInput
  6. {
  7.     public static class EditorInputExtensionMethods
  8.     {
  9. ...

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

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