Считывание атрибутов 3D модели

Автор Троицкий, 30.09.09, 00:06:03

« предыдущая - следующая »

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

Троицкий

Коллеги,
подскажите, как, каким методом добраться до атрибутов 3D модели? Атрибуты - это то, что задается при шелчке правой кнопкой мыши по пункту "Начало координат" в дереве, далее в контекстном меню "Атрибуты". Там могут быть строки, числа, таблицы. Вот есть у меня переменная типа ksPart, а дальше что?  GetUserParam стабильно возвращает nil.

Максимилиан


Slaviation

Атрибуты парта ( или любого объекта модели ) можно взять так:
iAttributeCollection := ksAttribute3DCollection(ksFeature(iPart.GetFeature).AttributeCollection(1, 10, 100, 1001, reAttrNumber));
где reAttrNumber - уникальный номер типа атрибута

Троицкий

30.09.09, 10:52:21 #3 Последнее редактирование: 30.09.09, 11:03:43 от Троицкий
Цитата: Максимилиан от 30.09.09, 05:00:11
вот пример функции
http://delphivs.ucoz.ru/forum/3-7-1


Спасибо, попробовал - компилится нормально, но я пока не понял, что означают передаваемые ей key1, key2, key3. В примере они 11,22,33 - с такими значениями у меня функция возвращает пустую строку, так как
ksattribute3dcollection(doc.AttributeCollection(key1,key2,key3,0,0,spart)) возвращает nil.

Троицкий

Цитата: Slaviation от 30.09.09, 06:27:38
Атрибуты парта ( или любого объекта модели ) можно взять так:
iAttributeCollection := ksAttribute3DCollection(ksFeature(iPart.GetFeature).AttributeCollection(1, 10, 100, 1001, reAttrNumber));
где reAttrNumber - уникальный номер типа атрибута

Если можно - поясните, что есть константы 1, 10, 100, 1001

Максимилиан

это все ключи атрибута, если они не известны, значит ввести НУЛИ  :-)))

Троицкий

Цитата: Максимилиан от 30.09.09, 11:30:39
это все ключи атрибута, если они не известны, значит ввести НУЛИ  :-)))

Ок, попробую. А как тогда организовать цикл по атрибутам? У меня задача выковырять все текстовые и числовые атрибуты 3D модели. Пока удалось вытащить значение  атрибута сборки, а как выковыривать его наименование?

Максимилиан

Следует всего лишь пройтись по атрибутам в цикле

http://delphivs.ucoz.ru/forum/3-7-1

Троицкий

Большое спасибо, все заработало!

Троицкий

Коллеги,

помогите, что надо изменить в коде (ссылка выше), чтобы он работал под 8+? В той версии нет TypeName и на строке

qq(TRIM(atr3.nameType));

дается ошибка "неизвестный идентификатор nameType".

Буду очень благодарен за пример считывания пользовательских атрибутов в 8+. Спасибо. 

Максимилиан

К сожалению есть только 9 версия
могу лишь предположить
в kstlb.pas надо найти запись типа этой
  ksAttribute3D = dispinterface
    ['{3EEB2B43-56FF-49C0-AFCF-69E990A7D84C}']
    property reference: Integer readonly dispid 1;
    function FeatureCollection(objType: Integer): ksFeatureCollection; dispid 2;
  end;

и добавить
  ksAttribute3D = dispinterface
    ['{3EEB2B43-56FF-49C0-AFCF-69E990A7D84C}']
    property reference: Integer readonly dispid 1;
    function FeatureCollection(objType: Integer): ksFeatureCollection; dispid 2;
    property nameType: WideString readonly dispid 3;
  end;
ЛИБО СРАБОТАЕТ, ЛИБО НЕ СРАБОТАЕТ