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

ADN Club => Inventor API => Тема начата: R.I.Chernov от 19-07-2016, 21:34:13

Название: Проверка наличия пользовательского своства в PropertySets.
Отправлено: R.I.Chernov от 19-07-2016, 21:34:13
Доброго времени суток, уважаемые форумчане. Прошу вашей помощи в решении такой вот задачи:
В свойствах некоторых деталей в сборке я добавил пользовательское свойство с именем, например ID. И задал свойству какое-то значение. Это значение необходимо для идентификации деталей, с последующими манипуляциями над ними. Создавать такое свойство во всех деталях нет смысла, так как это пустая трата времени. А если не создавать, то при попытке считывания несуществующего свойства (в деталях, где оно не создано) возникает ошибка. Не могу разобраться как (если это возможно) проверить, существует ли в детали пользовательское свойство с каким-либо именем, например:
Код - C# [Выбрать]
  1.  oDoc.PropertySets["Inventor User Defined Properties"]["ID"]
Я понимаю, что наверно могу перебирать каждый раз коллекцию PropertySets и проверять вхождения на соответствие имени ID, но не существует ли какого-то более простого способа?
Название: Re: Проверка наличия пользовательского своства в PropertySets.
Отправлено: mikazakov от 20-07-2016, 06:30:44
вот для поиска PropertySet существует метод
PropertySets.PropertySetExists

А для конкретного свойства такого метода нет, поэтому всего два варианта:

1. поиск перебором
2. поиск через перехват ошибки

Если сборки крупные то может подтормаживать, по скольку в NET и массивный перебор требует времени и перехват ошибки тоже жрет ресурс.
С++ конечно рулит, т.к. функции в С++ обычно возвращают значение по которому как раз и определяется успешно функция выполнена или нет, при это скорость работы большая.
Название: Re: Проверка наличия пользовательского своства в PropertySets.
Отправлено: R.I.Chernov от 20-07-2016, 11:48:43
Спасибо, Михаил. Жаль конечно что аналогичного свойства нет для свойств, извиняюсь за тавтологию. :) Придется работать перебором.
П.С. Копаясь в объектном браузере, наткнулся на свойство Property.Dirty ... случайно не знаете, как оно работает?
Название: Re: Проверка наличия пользовательского своства в PropertySets.
Отправлено: mikazakov от 20-07-2016, 13:15:02
Property.Dirty ... случайно не знаете, как оно работает?
Ну в хэлпе написано, что оно будет равно true если свойство было создано или отредактировано в течении данного сеанса работы с данным документом. Есть похожее свойство для документа Document.Dirty, по нему можно судить нуждается ли документ в сохранении на винчестер или нет.
Название: Re: Проверка наличия пользовательского своства в PropertySets.
Отправлено: R.I.Chernov от 21-07-2016, 13:04:26
Ааа, разговор идёт про текущий сеанс. Спасибо. Теперь понятно, а то вроде в детали свойство создано, а оно  мне фолс возвращает.