Изменить свойства объект

Автор Тема: Изменить свойства объект  (Прочитано 3875 раз)

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

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Изменить свойства объект
« : 04-02-2022, 12:28:02 »
Добрый день.
Подскажите пожалуйста такую тему. Как мне корректно менять свойства объекта, а то бывают фатальные ошибки иногда.
Допустим мне надо поменять свойства программно созданного объекта.
Первым делом я так понимаю проверяю создался ли вообще объект. Я делаю так
Код - vb.net [Выбрать]
  1. if isNothing(UserObj)=False then
  2.    If UserObj.Id.IsNull=false then

А вот потом начинаю проверять открыт он на чтение или на запись
Код - vb.net [Выбрать]
  1. if UserObj.IsWriteEnabled=false then
  2.   UserObj..UpgradeOpen()

Это корректно вообще? Может как то по другому надо. У меня все работает, но без фаталов не обходится, вот я и подумал, может еще что-то надо



Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 809
  • Карма: 166
    • Мои плагины к Автокаду
Re: Изменить свойства объект
« Ответ #1 : 04-02-2022, 12:39:49 »
Новый объект всегда открыт для записи - нет смысла проверять. У нового объекта всегда есть ObjectId, как только он записан базу данных чертежа. Тоже нет смысла проверять. Этот Id возвращает метод AppendEntity.
Ну а фаталы вылавливайте в других местах - причин может быть 100500

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изменить свойства объект
« Ответ #2 : 04-02-2022, 18:09:04 »
Захаров Максим,
Метод UpgradeOpen не применим к объекту, открытому в обычной транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 139
  • Карма: 3
Re: Изменить свойства объект
« Ответ #3 : 04-02-2022, 22:18:02 »
Благодарю.
Но все таки мне бы так сказать прояснить для себя теорию. Допустим я не знаю про объект ни чего, когда и как он был создан (теоретически). Я получил только ссылку на объект. Есть какой то универсальный способ проверить, так сказать что объект "хороший". И что я могу менять его свойства. А то знаете, допустим создаешь их файла xml 1000000 объектов с одновременным изменением свойств, бывает частенько фатал выходит. А если чертеж закрыть, открыть да еще на ошибки проверить, то свойства меняются всегда хорошо. Вот я и подумал, что какой то объект криво создается и при изменении свойств его игнорировать можно.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изменить свойства объект
« Ответ #4 : 04-02-2022, 22:25:52 »
Есть какой то универсальный способ проверить, так сказать что объект "хороший".
Нет. Как и нет понятия "хороший" для объекта. Он может быть испорчен так, что и проверять нечего. Фактически для объекта перед тем как менять его свойства нужно проверить, что он IsWriteEnabled. Все остальные проверки ни к чему не приведут.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 809
  • Карма: 166
    • Мои плагины к Автокаду
Re: Изменить свойства объект
« Ответ #5 : 04-02-2022, 22:38:17 »
При переборе всех подряд идентификаторов (например, поиск чего-то в блоке = модели) достаточно стандартной проверки идентификатора на IsNull и IsErased. Можно еще проверить IsValid. Это совершенно никак не защитит от фаталов, только от лишних exception.
Попытка записи в объект открытый для чтения - это тоже не повод для фатала. Просто возникнет номальный, легко перехватываемый Exception. Ничего более.
Фаталы возникают позже, при работе с уже извлеченными из БД объектами. Особенно, если забывать диспозить все-все DisposableWrapper (кроме тех что получены из транзакции). Некоторые безобидные операции дают гарантированный фатал.