Перебор всех объектов

Автор Тема: Перебор всех объектов  (Прочитано 19150 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Перебор всех объектов
« Ответ #15 : 10-10-2018, 20:23:05 »
а openclosetransaction чем хуже?
или вначале предложенный способ проверки типа объекта не открывая его?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перебор всех объектов
« Ответ #16 : 10-10-2018, 20:25:45 »
а openclosetransaction чем хуже?
Ничем не хуже. Он просто другой и требует большей внимательности от программиста.
или вначале предложенный способ проверки типа объекта не открывая его?
В данном случае это вообще идеальный вариант, если пишешь под AutoCAD не старее 2009-го. В AutoCAD 2008 такого метода не было.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Перебор всех объектов
« Ответ #17 : 10-10-2018, 20:27:34 »
Значит отмечаю его как правильный.
Всем спасибо! в этот раз не я один узнал что-то новое)

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Перебор всех объектов
« Ответ #18 : 10-10-2018, 21:25:50 »
Он ошибочен. И по той ссылке, которую я дал выше, это обсуждается.
Вот же ж.. Только что перелопатил весь код, убирал TopTransaction, а на завтра опять тотальный рефакторинг - убирать UpgradeOpen... 

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Перебор всех объектов
« Ответ #19 : 10-10-2018, 22:07:57 »
а с toptransaction что?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Перебор всех объектов
« Ответ #20 : 10-10-2018, 22:23:54 »
а с toptransaction что?
А я внезапно понял, что toptransaction  - это вовсе не обязательно МОЯ последняя транзакция. Мы ж в многопоточной среде! И регулярные сбои Автокада на диспозе объектов запросто могут быть из-за путаницы в транзакциях. Экономил на копейках (лишние параметры у методов не красивыми считал, раз тарнзакцию можно вроде как и не передавать), а проиграл сурово: переписывал горы кода - где транзакция длинная - заводил отдельную, где мелочевка - передаю теперь свыше в параметрах или полях классов.

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Перебор всех объектов
« Ответ #21 : 10-10-2018, 22:26:19 »
недавно как раз впервые встал перед выбором передать или вложить транзакцию - счел слишком сложным вкладывать. передавать как то приятнее мне показалось)

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Перебор всех объектов
« Ответ #22 : 10-10-2018, 22:53:16 »
if (objId.ObjectClass.IsDerivedFrom(RXObject.GetClass(typeof(MText))))
{
  MText mt = myTransaction.GetObject(objId, OpenMode.ForWrite) as MText;
  //и далее какой-то код
 }
а есть ли разница между IsDerivedFrom, Equals и, например, == в данном случае?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перебор всех объектов
« Ответ #23 : 10-10-2018, 23:09:59 »
а есть ли разница между IsDerivedFrom, Equals и, например, == в данном случае?
IsDerivedFrom - это сам класс (в данном случае MText) и его наследники. В самом AutoCAD наследников для MText нет, но теоретически можно создать Custom Entity унаследованный от AcDbMText и для него создать .NET-обертку - наследник от MText (с именем например MyMText). Ну и тогда возникнет вопрос - обрабатывать только MText или MyMText тоже. Равенство вернет только MText, а IsDerivedFrom - оба класса.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Перебор всех объектов
« Ответ #24 : 10-10-2018, 23:23:54 »
последние два одинаковы? или есть разница в их работе?
IsDerivedFrom, Equals и, например, ==

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перебор всех объектов
« Ответ #25 : 10-10-2018, 23:27:59 »
последние два одинаковы? или есть разница в их работе?
IsDerivedFrom, Equals и, например, ==

Надо смотреть внутрь класса RXClass. Но я бы наверное (для точного сравнения) сравнивал бы на равенство строки objId.ObjectClass.Name и RXObject.GetClass(typeof(MText)).Name
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Перебор всех объектов
« Ответ #26 : 10-10-2018, 23:31:48 »
Даже так..
Хорошо, спасибо!

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Перебор всех объектов
« Ответ #27 : 12-10-2018, 23:23:31 »
Вот же ж.. Только что перелопатил весь код, убирал TopTransaction, а на завтра опять тотальный рефакторинг - убирать UpgradeOpen...
На очереди ещё один рефакторинг - отказ от транзакций в пользу ObjectId.Open  8)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перебор всех объектов
« Ответ #28 : 12-10-2018, 23:58:08 »
На очереди ещё один рефакторинг - отказ от транзакций в пользу ObjectId.Open  8)
В ForRead - однозначно. А вот с ForWrite я бы сначала потестировал. Насколько я помню транзакции (я про обычные) для ForWrite лучше (быстрее).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Перебор всех объектов
« Ответ #29 : 13-10-2018, 11:18:19 »
отказ от транзакций в пользу ObjectId.Open
Ни-ни. Моя СУБДшная натура категорически против отказа от транзакций, там где они возможны. А слухи, про их тормознутость сильно преувеличены. Я проверял. :)