Use this function to check if the host is busy processing other commands. If busy, the function returns false message, else returns true.
Может проще проверить, что команда MTEDIT запущена и не выполнять свой код???Думаю, правильнее делать как я предложил - это проверит, если вдруг выполняются другие команды.
А вот как теперь это учесть во всех функциях с немодальными окнами?.... ((Как-как. Ручками! :)
если у меня не модальное окно и есть кнопка примерно с таким набором действий:Я, относительно недавно, пришёл к выводу, что так делать не совсем корректно. Отсюда и возникают потом различные проблемы, типа этой. В чём именно некорректность - в AutoCAD практически любое изменение объекта чертежа происходит в рамках запущенной команды. В базовом AutoCAD я не встречал нарушений этого принципа, в Civil - ловил. Из-за этого, кстати, в Civil были некоторые проблемы.
[Doc Event] : Command will Start : -LAYER
...
[Doc Event] : Command Ended : -LAYER
Что даёт такой подход:В своём "палитроплагине" мне удалось реализовать такой механизм, чтобы любое изменение объектов происходило через запуск команды. Принцип такой - при изменении пользователем каких-то данных в палитре происходит запоминание действий, которые нужно выполнить и отправка запроса на асинхронное выполнение команды, которая эти изменения будет выполнять. Как только AutoCAD будет готов выполнить эту команду, она запускается. Команда всегда одна и та же, но набор действий, который она выполняет, зависит от действий пользователя в палитре.Предстоит делать палитроплагин. Это интересная идея.
Как вам такая идея?
Но, штатная палитра свойств, не запускает команды!Ну тут скорее аналог не с Property Palette, а с Tools Palette.
Но, штатная палитра свойств, не запускает команды!Да, со свойствами это происходит как-то по-другому. Если развернуть список отмены, то там есть пункт "Изменение свойства", то есть, как будто какая-то команда запускалась. Но никакое событие начала - завершения команды не отрабатывает. Но в командной строке после каждого изменения свойств появляется новая строка:
Команда:
Команда:
Команда:
Если разобраться что это за механизм и как он работает, то можно было бы использовать его вместо того, который я описал.Команда:
[EVENT REACTOR] : [Modeless Operation Will Start, OPM_CHGPROP]
[EVENT REACTOR] : [Modeless Operation Ended, OPM_CHGPROP]
Вот что это за Modeless Operation?
Вот что это за Modeless Operation?Это не команда. Это просто возможность уведомить какое-то приложение (или сам AutoCAD), что какая-то операция началась и закончилась.
Если разобраться что это за механизм и как он работает, то можно было бы использовать его вместо того, который я описал.Нет. Во-первых, не будет работать отмена. Во-вторых, нужно будет блокировать документы. В-третьих, это есть в ObjectARX, но нет в AutoCAD .NET API - да и не надо. Этим я пользовался для того, чтобы отреагировать на изменение свойств в палитре свойств: