ObjectOverrule.Close

Автор Тема: ObjectOverrule.Close  (Прочитано 22496 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: ObjectOverrule.Close
« Ответ #15 : 04-02-2019, 14:25:41 »
А по сути - это то же самое, что и использование Open-Close
я это и имел ввиду )

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: ObjectOverrule.Close
« Ответ #16 : 04-02-2019, 14:38:21 »
А можно и т.п. развернуть?
Официальных данных по этому вопросу либо совсем нет, либо их мало. Поэтому - всё опытным путём, методом проб и ошибок. Поэтому, я стараюсь вообще не использовать транзакции. Нигде. Но это не всегда получается. Например, в Civil 3D API, с которым я чаще всего имею дело, есть несколько методов, для корректной работы которых требуется явный запуск транзакции.
Неиспользование транзакций требует больше внимания от программиста. Но зато меньше шансов, что в будущем появится какая-то непредвиденная плавающая ошибка. Если не используются транзакции - ошибки вылезают сразу :)

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #17 : 04-02-2019, 15:55:38 »
Например, в Civil 3D API, с которым я чаще всего имею дело, есть несколько методов, для корректной работы которых требуется явный запуск транзакции.
еще немного подробностей) какие?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: ObjectOverrule.Close
« Ответ #18 : 04-02-2019, 15:58:24 »
еще немного подробностей) какие?
Опять же - выясняется методом проб и ошибок: http://adn-cis.org/forum/index.php?topic=8589.0

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #19 : 04-02-2019, 16:05:37 »
Т е вы не используете даже OpenCloseTransaction? ну стараетесь..
GetObject с OpenCloseTransaction работает?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectOverrule.Close
« Ответ #20 : 04-02-2019, 16:19:55 »
GetObject с OpenCloseTransaction работает?
Нет. Только с обычной транзакцией.
Т е вы не используете даже OpenCloseTransaction? ну стараетесь..
Open/Close и OpenCloseTransaction - это тоже самое, но иногда важно закрыть объект/примитив принудительно в нужный момент. И в этом случае OpenCloseTransaction неудобна.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #21 : 04-02-2019, 16:22:23 »
Т е "устаревший" Open/Close самый надежный выходит, если внимательно использовать)

Спасибо за ответы)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectOverrule.Close
« Ответ #22 : 04-02-2019, 16:31:40 »
Т е "устаревший" Open/Close самый надежный выходит, если внимательно использовать)

Спасибо за ответы)
Я чаще всего использую конструкцию вида:
Код - C# [Выбрать]
  1. using (Entity ent = id.Open(OpenMode.ForRead) as Entity)
  2. {
  3.   // Здесь обработка
  4. }

В конце блока using автоматически вызывается ent.Dispose(), что в свою очередь вызывает ent.Close() для объекта/примитива в базе.
Единственный случай когда предпочтительнее обычная транзакция - это массовое изменение объектов/примитивов. Во всяком случае считается, что в транзакции это происходит быстрее. А вот на единичных чтениях/записях транзакции проигрывают в скорости, т.к. тратится время на запуск/завершение транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #23 : 05-02-2019, 12:12:55 »
после создания объекта еще раз возникает isModified
как его отфильтровать?

у меня вот так
Код - C# [Выбрать]
dbObject.IsModified && !dbObject.IsNewObject && dbObject.IsWriteEnabled


а с этим есть идеи? если работаю с полилинией то он один лишний раз заходит в этот метод есть с Pipe(немножко не по адресу может), то раз 5
хотелось бы чтоб один раз попадал в эту ветку.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: ObjectOverrule.Close
« Ответ #24 : 05-02-2019, 12:30:12 »
Что значит "лишний раз"? Объекты открываются-закрываются при необходимости получить из них какие-то данные. Полилиния - довольно простой объект, а вот труба уже гораздо сложнее. Она связана с другими объектами чертежа. Получается так: изменили трубу -> изменилась труба на виде профиля (это отдельный объект) -> изменились присоединённые колодцы -> изменилась метка трубы на плане -> изменилась метка трубы на профиле и т.д. При этом, чтобы получить нужные для связанных объектов данные, каждый раз труба открывается-закрывается.
хотелось бы чтоб один раз попадал в эту ветку
В метод Close? Но это нереально. Труба же закрывается, значит, метод вызывается. Можно лишь проверять условия и если они неподходящие, то не выполнять обработку.

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #25 : 05-02-2019, 13:48:13 »
Да я именно прл фильтррацию в методе close. Я написал какие условия я использовал. Но все равно раз 5 все равно попадаю туда, соотвественно все алгоритмы по 5 раз проходят. Не знаю какие еще условия можно прописать чтоб в идеале 1 раз туда зайти.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectOverrule.Close
« Ответ #26 : 05-02-2019, 13:56:23 »
Не знаю какие еще условия можно прописать чтоб в идеале 1 раз туда зайти.
Думаю, что никак...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: ObjectOverrule.Close
« Ответ #27 : 05-02-2019, 13:57:10 »
Без полного понимания того какие обработки выполняются и для чего сложно что-то подсказать. Пример кода нужен.

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #28 : 05-02-2019, 14:37:04 »
просто нужно узнать измененную точку конца и начала трубы, записать ее, выйти
получается что по 5 раз ее перезаписывает - нехорошо

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectOverrule.Close
« Ответ #29 : 05-02-2019, 14:48:35 »
просто нужно узнать измененную точку конца и начала трубы
Изменяется пользователем или твоим кодом?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение