• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Регистрация будет доступна с 8:00 (мск) 12 января.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Получить ID атрибута по его имени

Автор freestyler, Вчера в 11:18:30

« назад - далее »

Михаил88 и 2 гостей просматривают эту тему.

freestyler

Дано: есть чертеж, в нем создан атрибут (не атрибут чертежа, а атрибут в чертеже). Я знаю имя этого атрибута, хочу получить Id чтобы дальше им пользоваться.
Получаю массив всех атрибутов, начинаю его перебирать, а как получить атрибут? Что передать в item в .ksGetArrayItem(n, item); ?

Пробовал
ksLtVariant item = (ksLtVariant)kompas.GetParamStruct((short)StructType2DEnum.ko_LtVariant);
ksAttributeTypeParam item = (ksAttributeTypeParam)kompas.GetParamStruct((short)StructType2DEnum.ko_AttributeType);
ksAttributeTypeParam item = (ksAttributeTypeParam)kompas.GetParamStruct(12);

Но всё не то (

Код:

ksAttributeObject attr = (ksAttributeObject)kompas.GetAttributeObject();
ksDynamicArray attrArray = attr.ksGetLibraryAttrTypesArray(string.Empty);
WriteToLog($"Count={attrArray.ksGetArrayCount()} Type={attrArray.ksGetArrayType()}"); //Пишет Count=5 (верно, их пять), Type=12 (тоже верно 12 - это LIBRARY_ATTR_TYPE_ARR)

//Попытки подставить разный item, всё не то (
//ksLtVariant item = (ksLtVariant)kompas.GetParamStruct((short)StructType2DEnum.ko_LtVariant);
ksAttributeTypeParam item = (ksAttributeTypeParam)kompas.GetParamStruct((short)StructType2DEnum.ko_AttributeType);
//ksAttributeTypeParam item = (ksAttributeTypeParam)kompas.GetParamStruct(12);

for (int n = 0; n <= attrArray.ksGetArrayCount() - 1; n++)
{
    WriteToLog($"n={n} ksGetArrayItem={attrArray.ksGetArrayItem(n, item)}"); //Пишет n=0..4 (верно), но ksGetArrayItem всегда 0, то есть не удалось получить
}

Михаил88

Цитата: freestyler от Вчера в 11:18:30Дано: есть чертеж, в нем создан атрибут (не атрибут чертежа, а атрибут в чертеже). Я знаю имя этого атрибута, хочу получить Id чтобы дальше им пользоваться.
Получаю массив всех атрибутов, начинаю его перебирать, а как получить атрибут? Что передать в item в .ksGetArrayItem(n, item); ?

Так пойдет?

kompas_document = application.ActiveDocument
kompas_document_1 = kompas_api7_module.IKompasDocument1(kompas_document)
attributes = kompas_document_1.Attributes(0, 0, 0, 0, 0, kompas_document)
print(attributes)
for attr in attributes:
    attribute_type = attr.AttributeType
    # print(attribute_type)
    type_name = attribute_type.TypeName
    print(type_name)
    value = attr.Value(0, 0)
    print(value)
    print(attr.GetKeysInfo())