Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Захаров Максим от 04-02-2022, 12:28:02

Название: Изменить свойства объект
Отправлено: Захаров Максим от 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()

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


Название: Re: Изменить свойства объект
Отправлено: avc от 04-02-2022, 12:39:49
Новый объект всегда открыт для записи - нет смысла проверять. У нового объекта всегда есть ObjectId, как только он записан базу данных чертежа. Тоже нет смысла проверять. Этот Id возвращает метод AppendEntity.
Ну а фаталы вылавливайте в других местах - причин может быть 100500
Название: Re: Изменить свойства объект
Отправлено: Александр Ривилис от 04-02-2022, 18:09:04
Захаров Максим,
Метод UpgradeOpen не применим к объекту, открытому в обычной транзакции.
Название: Re: Изменить свойства объект
Отправлено: Захаров Максим от 04-02-2022, 22:18:02
Благодарю.
Но все таки мне бы так сказать прояснить для себя теорию. Допустим я не знаю про объект ни чего, когда и как он был создан (теоретически). Я получил только ссылку на объект. Есть какой то универсальный способ проверить, так сказать что объект "хороший". И что я могу менять его свойства. А то знаете, допустим создаешь их файла xml 1000000 объектов с одновременным изменением свойств, бывает частенько фатал выходит. А если чертеж закрыть, открыть да еще на ошибки проверить, то свойства меняются всегда хорошо. Вот я и подумал, что какой то объект криво создается и при изменении свойств его игнорировать можно.
Название: Re: Изменить свойства объект
Отправлено: Александр Ривилис от 04-02-2022, 22:25:52
Есть какой то универсальный способ проверить, так сказать что объект "хороший".
Нет. Как и нет понятия "хороший" для объекта. Он может быть испорчен так, что и проверять нечего. Фактически для объекта перед тем как менять его свойства нужно проверить, что он IsWriteEnabled. Все остальные проверки ни к чему не приведут.
Название: Re: Изменить свойства объект
Отправлено: avc от 04-02-2022, 22:38:17
При переборе всех подряд идентификаторов (например, поиск чего-то в блоке = модели) достаточно стандартной проверки идентификатора на IsNull и IsErased. Можно еще проверить IsValid. Это совершенно никак не защитит от фаталов, только от лишних exception.
Попытка записи в объект открытый для чтения - это тоже не повод для фатала. Просто возникнет номальный, легко перехватываемый Exception. Ничего более.
Фаталы возникают позже, при работе с уже извлеченными из БД объектами. Особенно, если забывать диспозить все-все DisposableWrapper (кроме тех что получены из транзакции). Некоторые безобидные операции дают гарантированный фатал.