Тема: Изменение атрибутов у блока
Я из чертежа с нужного мне слоя читаю нужные мне блок-референсы.
Мне необходимо у этих блок-референсов изменить значение некоторого
тестового атрибута. А как достучаться до этого атрибута я не знаю.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Delphi → Изменение атрибутов у блока
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Я из чертежа с нужного мне слоя читаю нужные мне блок-референсы.
Мне необходимо у этих блок-референсов изменить значение некоторого
тестового атрибута. А как достучаться до этого атрибута я не знаю.
Спасибо!
Но я писал "изменить значение", а не "получить"!
Более того GetAttibutes не имеет параметров, а я писал, что мне надо изменить значение конкретного (некоторого) атрибута.
Уточню вопрос:
У BlockRef есть атрибут с именем "Global_Name". Надо вписать туда значение: "Victor".
Прошу привести пример кода на Delphi.
Спасибо.
к сожалению, у меня нет готовых решений...
просто я заглянул в доку Автокада (в которую вы, видимо, заглядывать не желаете), в списке объектов имеется 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 заменить соответствующими интерфейсами.
все-таки доки "вешчь" полезная :)))
Огромное спасибо!
Заработало!
Оказывается, что я просто не умел работать с объектами типа OleVariant, а точнее - я не знал, как можно вытащить из него нужные мне данные согласно описанию интерфейса.
Еще раз - спасибо.
> callisto
если Вы москвич, у меня есть для Вас достаточно интересное предложение о работе.
если Вам интересно, то пишите на holding-cio@mail.ru.
Можете порекомендовать какие-нибудь удачные (действительно полезные) книги по программированию для продукции Autodesk в среде Delphi?
поччти все понятно но как задать Block?
Attr := Block.GetAttributes()
выдает ошибку : "Недопустимое число параметров".
Как с этим бороться?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Delphi → Изменение атрибутов у блока
Форум работает на PunBB, при поддержке Informer Technologies, Inc