Приветствую Вас, Гость! Регистрация RSS

DelphiVS

Четверг, 25.04.2024
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Программирование » Компас » Считывание атрибутов 3D модели
Считывание атрибутов 3D модели
MaxaДата: Среда, 30.09.2009, 05:56 | Сообщение # 1
Школьник
Группа: Администраторы
Сообщений: 22
Репутация: 0
Статус: Offline
Коллеги,
подскажите, как, каким методом добраться до атрибутов 3D модели? Атрибуты - это то, что задается при шелчке правой кнопкой мыши по пункту "Начало координат" в дереве, далее в контекстном меню "Атрибуты". Там могут быть строки, числа, таблицы. Вот есть у меня переменная типа ksPart, а дальше что? GetUserParam стабильно возвращает nil.
 
MaxaДата: Среда, 30.09.2009, 05:58 | Сообщение # 2
Школьник
Группа: Администраторы
Сообщений: 22
Репутация: 0
Статус: Offline
ВОТ МАЛЕНЬКАЯ ФУНКЦИЯ НА ЧТЕНИЕ АТРИБУТА ПО КЛЮЧУ

var
kompas:KompasObject;
d3d:ksDocument3D;
sm:ksselectionmng;
part:kspart;

function findattrvalue(spart:kspart;key1,key2,key3:integer):string;
var
a3dc:ksattribute3dcollection;
attrObj:ksAttributeObject;
atr3: ksAttribute3D;
arr:ksdynamicarray;
values:ksUserParam;
val:ksLtVariant;
begin
attrObj:=ksattributeobject(kompas.GetAttributeObject);
a3dc:=ksattribute3dcollection(d3d.AttributeCollection(key1,key2,key3,0,0,spart));
if a3dc<>nil then
if a3dc.GetCount<>0 then
begin
atr3:=a3dc.First;
values:=ksUserParam(Kompas.GetParamStruct(112));
values.Init;
val:=ksLtVariant(Kompas.GetParamStruct(108));
val.Init;
val.strVal:='';
Arr:=ksDynamicArray(Kompas.GetDynamicArray(23));
values.SetUserArray( Arr );
Arr.ksAddArrayItem( -1, val );
attrObj.ksGetAttrValue(atr3.reference,0,0,nil,nil,values);
arr.ksGetArrayItem( 0, val );
case val.valType of
1:result:= vartostr(val.charVal);
2:result:= vartostr(val.uCharVal);
3:result:= vartostr(val.intVal);
4:result:= vartostr(val.uIntVal);
5:result:= vartostr(val.longVal);
6:result:= vartostr(val.floatVal);
7:result:= vartostr(val.doubleVal);
8:result:= vartostr(val.strVal);
10:result:= vartostr(val.shortVal);
end;
arr.ksDeleteArray;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
kompas:=KompasObject(GetActiveOleObject('Kompas.Application.5'));
kompas.Visible:=true;
d3d:=ksDocument3D(Kompas.ActiveDocument3D);
sm:=ksselectionmng(d3d.GetSelectionMng);
part:=kspart(sm.Last);
button1.Caption:=findattrvalue(part,11,22,33);
end;

 
MaxaДата: Четверг, 01.10.2009, 12:05 | Сообщение # 3
Школьник
Группа: Администраторы
Сообщений: 22
Репутация: 0
Статус: Offline
А как тогда организовать цикл по атрибутам? У меня задача выковырять все текстовые и числовые атрибуты 3D модели. Пока удалось вытащить значение атрибута сборки, а как выковыривать его наименование?
 
MaxaДата: Четверг, 01.10.2009, 12:07 | Сообщение # 4
Школьник
Группа: Администраторы
Сообщений: 22
Репутация: 0
Статус: Offline
НЕМНОГО ИЗМЕНИВ ФУНКЦИЮ ПОЛУЧИМ

var
kompas:KompasObject;
d3d:ksDocument3D;
sm:ksselectionmng;
part:kspart;

procedure findattrvalue(spart:kspart;key1,key2,key3:integer;var MMM:Tmemo);
var
a3dc:ksattribute3dcollection;
attrObj:ksAttributeObject;
atr3: ksAttribute3D;
arr:ksdynamicarray;
values:ksUserParam;
val:ksLtVariant;
i,j:integer;
s:string;
begin
attrObj:=ksattributeobject(kompas.GetAttributeObject);
a3dc:=ksattribute3dcollection(d3d.AttributeCollection(key1,key2,key3,0,0,spart));
if a3dc<>nil then
if a3dc.GetCount<>0 then
begin
atr3:=a3dc.First;
for j:=1 to a3dc.GetCount do
begin
values:=ksUserParam(Kompas.GetParamStruct(112));
values.Init;
val:=ksLtVariant(Kompas.GetParamStruct(108));
val.Init;
val.strVal:='';
Arr:=ksDynamicArray(Kompas.GetDynamicArray(23));
values.SetUserArray( Arr );
Arr.ksAddArrayItem( -1, val );
attrObj.ksGetAttrValue(atr3.reference,0,0,nil,nil,values);
s:='';
for i:=0 to arr.ksGetArrayCount-1 do
begin
arr.ksGetArrayItem( i, val );
case val.valType of
1:s:=s+' '+vartostr(val.charVal);
2:s:=s+' '+vartostr(val.uCharVal);
3:s:=s+' '+vartostr(val.intVal);
4:s:=s+' '+vartostr(val.uIntVal);
5:s:=s+' '+vartostr(val.longVal);
6:s:=s+' '+vartostr(val.floatVal);
7:s:=s+' '+vartostr(val.doubleVal);
8:s:=s+' '+vartostr(val.strVal);
10:s:=s+' '+vartostr(val.shortVal);
end;
end;
arr.ksDeleteArray;
mmm.Lines.Add(atr3.nameType+s);
atr3:=a3dc.Next;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
kompas:=KompasObject(GetActiveOleObject('Kompas.Application.5'));
kompas.Visible:=true;
d3d:=ksDocument3D(Kompas.ActiveDocument3D);
sm:=ksselectionmng(d3d.GetSelectionMng);
part:=kspart(sm.Last);
findattrvalue(part,0,0,0,memo1);
end;

 
Форум » Программирование » Компас » Считывание атрибутов 3D модели
  • Страница 1 из 1
  • 1
Поиск: