Ну, во-первых, есть такая штука, как локализация: http://autolisp.ru/2010/03/04/localization/ Поэтому я бы переделал вызов команды - это раз.Алексей, вы по указанной ссылке не переходили? В этой теме почти тот же самый код, и ... другого всеми уважаемого гуру. :) Я специально его не менял в плане локализации.
Во-вторых, команды "_.maptrim" в AutoCAD нет. В вертикалках типа Civil / Map3D, возможно, она и есть - но тогда тема не в том разделе.
В-третьих, передавать в команду ObjectId бесполезно: необходимо передавать примитив.
И, наконец, проверь последовательность команды. Я далеко не уверен, что после указания примитива не потребуется подтверждать правильность и окончательность выбора.
немного исправленного кода отсюда http://adn-cis.org/forum/index.php?topic=1816.msg9816#msg9816В контексте приложения (Application) нельзя использовать Editor.Command, но можно использовать Document.SendStringToExecute("_TMT1\n", false, false, false);
И я практически уверен, что у Александра просто нет Civil - точно так же, как и у меня ))Есть Лёша. Иначе как бы я это проверил, да еще и картинки получил:
Приложение не может переключится в "контекст документа" (обратное возможно, т.е. можно из "контекста документа" выполнить некий код в "контексте приложения" используя acDocManager->executeInApplicationContext()), но оно может запустить команду, которая будет выполнятся в контексте документа.Значит все-таки команда нужна.
В контексте приложения (Application) нельзя использовать Editor.Command, но можно использовать Document.SendStringToExecute("_TMT1\n", false, false, false);Опять этот SendStringToExecute() :-\
[CommandMethod("TMT1", CommandFlags.Modal | CommandFlags.NoHistory)]Выбрав какой-то контур и набрав случайно, специально, теоретически команду "TMT1" пользователь удивится?
Выбрав какой-то контур и набрав случайно, специально, теоретически команду "TMT1" пользователь удивится?Ну я же написал как в теории. Но:
А это вереница таких команд может получиться и каждой нужно передавать параметры, как быть?Как быть? Не пользоваться запуском команд, а переписать их самому. Не запускать команды из Palette, т.к. там код выполняется в контексте приложения. Думаешь есть еще какое-то решение? ;)
Ну я же написал как в теории. Но:
1) Ты можешь проверять в команде TMT1 значение selectedId и если ObjectId.isNull(selectedId) == true - сразу завершать команду.
2) Перед выходом из TMT1 устанавливать selectedId в null.
В этом случае никакого удивления у пользователя не будет.
Не пользоваться запуском команд, а переписать их самому.Это мне жизни не хватит. :-\
Не запускать команды из Palette, т.к. там код выполняется в контексте приложения.Думал, думал. Пока так придумал. :D