Получение объектов, созданных стандартной командой

Автор Тема: Получение объектов, созданных стандартной командой  (Прочитано 6335 раз)

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

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

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Добрый день!
Есть задача немного видоизменить стандартные функции, типа line, circle и т.д. например после выполнения команды line получить суммарную длину линий, или для команды circle получить длину дуги и вывести их в редактор командной строки.

Я рассматриваю два варианта:
1. Создать свою команду и в ее теле прописать поиск всех объектов чертежа, выполнить синхронную команду Autodesk.AutoCAD.Interop.AcadDocument.SendCommand и дождаться ее завершения, произвести анализ объектов чертежа и выявить последние созданные объекты, ну а на их основе выполнить необходимые мне калькуляции

2. Использовать Jig, но с Jig не будет всего функционала команды, что мне не совсем подходит.

И я так понимаю SendStringToExecute не подойдет вообще из-за того что она асинхронная :(

Есть ли другие варианты решения задачи?

Спасибо

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Если нужно получить данные сразу после выполнения команды, то проще обрабатывать события:
1. Событие завершения команды - вы сможете проверить та это команда или нет
2. Событие добавления объекта в базу - нужные вам действия

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Согласен, это решение неплохо, но только как я смогу определить, с какого момента данные начали добавляться в базу? то есть фактически мне надо запустить событие добавления в базу вместе с началом выполнения команды

Отмечено как Решение shss 17-03-2016, 17:12:32

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Если я правильно понимаю задачу, то:
1. Создаете какой-либо список, в котором будут хранится примитивы. Точнее - ObjectId примитивов
2. Событие добавления объекта срабатывает до завершения команды. В этом событии вы все созданные примитивы добавляете в список
3. В событии завершения команды обрабатываете список с учетом того, что функция сработала нужная. Если ненужная - просто очищаете список

В предыдущем ответе я немного перепутал ))

ДОБАВЛЕНО: Можете тут почитать - тот-же самый принцип http://adn-cis.org/forum/index.php?topic=3361.msg14454#msg14454

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Теперь есть вариации, и идеи реализации - буду тестить.
Спасибо за рассуждения.

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Отлично все работает!
Только у меня вопрос, почему когда я начинаю чертить линию, пикнул первую точку, он мне уже добавил в базу значение Id? А если я отменю, дальнейшее создание линий, у меня это значение удалится и базы?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Могли бы и сами проверить через отладку.
Цитировать
почему когда я начинаю чертить линию, пикнул первую точку, он мне уже добавил в базу значение Id?
Значит, объект уже создан. Только не факт, что именно он будет результатом работы команды. Это вполне может оказаться какой-нибудь временный вспомогательный объект.
Цитировать
А если я отменю, дальнейшее создание линий, у меня это значение удалится и базы?
По идее - да, но нужно смотреть, что за объект был добавлен и как Вы поняли, что "он мне уже добавил в базу значение Id". В идеале - показать код.

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Цитировать
Могли бы и сами проверить через отладку.
что именно проверить?
Думаю что вопрос больше относился, именно к механике работы ACAD.
Цитировать
Значит, объект уже создан. Только не факт, что именно он будет результатом работы команды. Это вполне может оказаться какой-нибудь временный вспомогательный объект.
Объект не создан, но Вы правы, это временный объект, проверив базу.
Цитировать
он мне уже добавил в базу значение Id
Добавляет только, конечное значение Id, когда существует полноценный объект на чертеже