Тема: Изменение атрибутов у блока

Я из чертежа с нужного мне слоя читаю нужные мне блок-референсы.
Мне необходимо у этих блок-референсов изменить значение некоторого
тестового атрибута. А как достучаться до этого атрибута я не знаю. sad

Re: Изменение атрибутов у блока

BlockRef.GetAttributes()

Re: Изменение атрибутов у блока

Спасибо! smile
Но я писал "изменить значение", а не "получить"!
Более того GetAttibutes не имеет параметров, а я писал, что мне надо изменить значение конкретного (некоторого) атрибута.
Уточню вопрос:
У BlockRef есть атрибут с именем "Global_Name". Надо вписать туда значение: "Victor".
Прошу привести пример кода на Delphi.
Спасибо.

Re: Изменение атрибутов у блока

к сожалению, у меня нет готовых решений...
просто я заглянул в доку Автокада (в которую вы, видимо, заглядывать не желаете), в списке объектов имеется BlockRef (наверное то, что нужно)...
смотрю чего там у него есть по теме... ага - GetAttributes(), чего делает ? - возвращает массив объектов AttributeReference... далее смотрим, чего же это за объект и что у него есть - о!!! есть св-во: TextString - это и есть значение аттрибута, смотрим далее: TagString - это, наверное и есть "идентификатор" аттрибута.
Вот и остается прошагать по массиву, возвращенному GetAttributes() и найти элемент, у которого TagString = 'Global_Name' и присвоить св-ву TextString значение 'Victor'...
зы. а реализовать все это в Delphi труда не составит, что-то типа (без проверки ситаксиса):
procedure SetAttribute(Block : OLEVariant; const AName, AValue : string);
var
  Attr, ArrAttr : OleVariant;
  i : integer;
begin
  ArrAttr := Block.GetAttributes();
  for i:=0 to VarArrayHighBound(ArrAtttr, 0) do
    begin
      Attr := ArrAttr[i];
      if Attr.TagString = AName then
        begin
          Attr.TextString := AValue;
          break;
        end;
    end;
end;
если используется библиотека типов, то лучше OLEVariant заменить соответствующими интерфейсами.
все-таки доки "вешчь" полезная  :)))

Re: Изменение атрибутов у блока

Огромное спасибо!
Заработало!
Оказывается, что я просто не умел работать с объектами типа OleVariant, а точнее - я не знал, как можно вытащить из него нужные мне данные согласно описанию интерфейса.
Еще раз - спасибо.

Re: Изменение атрибутов у блока

> callisto
если Вы москвич, у меня есть для Вас достаточно интересное предложение о работе.
если Вам интересно, то пишите на holding-cio@mail.ru.
Можете порекомендовать какие-нибудь удачные (действительно полезные) книги по программированию для продукции Autodesk в среде Delphi?

Re: Изменение атрибутов у блока

поччти все понятно но как задать Block?

Re: Изменение атрибутов у блока

Attr := Block.GetAttributes()
выдает ошибку : "Недопустимое число параметров".
Как с этим бороться?

Re: Изменение атрибутов у блока

поборол.