Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: shss от 17-03-2016, 16:30:43
-
Добрый день!
Есть задача немного видоизменить стандартные функции, типа line, circle и т.д. например после выполнения команды line получить суммарную длину линий, или для команды circle получить длину дуги и вывести их в редактор командной строки.
Я рассматриваю два варианта:
1. Создать свою команду и в ее теле прописать поиск всех объектов чертежа, выполнить синхронную команду Autodesk.AutoCAD.Interop.AcadDocument.SendCommand и дождаться ее завершения, произвести анализ объектов чертежа и выявить последние созданные объекты, ну а на их основе выполнить необходимые мне калькуляции
2. Использовать Jig, но с Jig не будет всего функционала команды, что мне не совсем подходит.
И я так понимаю SendStringToExecute не подойдет вообще из-за того что она асинхронная :(
Есть ли другие варианты решения задачи?
Спасибо
-
Если нужно получить данные сразу после выполнения команды, то проще обрабатывать события:
1. Событие завершения команды - вы сможете проверить та это команда или нет
2. Событие добавления объекта в базу - нужные вам действия
-
Согласен, это решение неплохо, но только как я смогу определить, с какого момента данные начали добавляться в базу? то есть фактически мне надо запустить событие добавления в базу вместе с началом выполнения команды
-
Если я правильно понимаю задачу, то:
1. Создаете какой-либо список, в котором будут хранится примитивы. Точнее - ObjectId примитивов
2. Событие добавления объекта срабатывает до завершения команды. В этом событии вы все созданные примитивы добавляете в список
3. В событии завершения команды обрабатываете список с учетом того, что функция сработала нужная. Если ненужная - просто очищаете список
В предыдущем ответе я немного перепутал ))
ДОБАВЛЕНО: Можете тут почитать - тот-же самый принцип http://adn-cis.org/forum/index.php?topic=3361.msg14454#msg14454
-
Теперь есть вариации, и идеи реализации - буду тестить.
Спасибо за рассуждения.
-
Отлично все работает!
Только у меня вопрос, почему когда я начинаю чертить линию, пикнул первую точку, он мне уже добавил в базу значение Id? А если я отменю, дальнейшее создание линий, у меня это значение удалится и базы?
-
Могли бы и сами проверить через отладку.
почему когда я начинаю чертить линию, пикнул первую точку, он мне уже добавил в базу значение Id?
Значит, объект уже создан. Только не факт, что именно он будет результатом работы команды. Это вполне может оказаться какой-нибудь временный вспомогательный объект.
А если я отменю, дальнейшее создание линий, у меня это значение удалится и базы?
По идее - да, но нужно смотреть, что за объект был добавлен и как Вы поняли, что "он мне уже добавил в базу значение Id". В идеале - показать код.
-
Могли бы и сами проверить через отладку.
что именно проверить?
Думаю что вопрос больше относился, именно к механике работы ACAD.
Значит, объект уже создан. Только не факт, что именно он будет результатом работы команды. Это вполне может оказаться какой-нибудь временный вспомогательный объект.
Объект не создан, но Вы правы, это временный объект, проверив базу.
он мне уже добавил в базу значение Id
Добавляет только, конечное значение Id, когда существует полноценный объект на чертеже