Как изменить значение атрибутов и цветы атрибутов через Дельфи?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как изменить значение атрибутов и цветы атрибутов через Дельфи?

Как изменить значение атрибутов и цветы атрибутов через Дельфи?

Ответ
Поиск в этой теме
Непрочитано 28.10.2011, 15:33 #1
Как изменить значение атрибутов и цветы атрибутов через Дельфи?
Nurik
 
Регистрация: 28.10.2011
Сообщений: 5

Здраствуйте!
Как изменить значение атрибутов и цветы атрибутов через Дельфи?
Если атрибут "01" надо изменит на "02" по всей чертежи.
Заранее спасибо.

Миниатюры
Нажмите на изображение для увеличения
Название: чертеж.jpg
Просмотров: 49
Размер:	23.0 Кб
ID:	68604  

Просмотров: 3404
 
Непрочитано 28.10.2011, 15:39
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


В качестве алгоритма: получить указатель на вхождение блока, через GetAttributes получить массив атрибутов, вычленить нужный и работать с ним.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.10.2011, 16:01
#3
Nurik


 
Регистрация: 28.10.2011
Сообщений: 5


// Значение атрибута уже выучил но как изменять не знаю...

Код:
[Выделить все]
procedure ExtractBlkRefAttr(ABlkRef: OleVariant; Items: TStrings);
var
  AttrArray, AttrRef: OleVariant;
  i, LBnd, HBnd: Integer;
begin
  if ABlkRef.HasAttributes then
  begin
  if ABlkRef.Name='e fire no' then
  begin
    Items.Add(Format('[%s]', [ABlkRef.Name]));
    AttrArray:= ABlkRef.GetAttributes;
    LBnd:= VarArrayLowBound(AttrArray, 1);
    HBnd:= VarArrayHighBound(AttrArray, 1);
    for i:= LBnd to HBnd do
    begin
      AttrRef:= AttrArray[i];
       if AttrRef='01' then
        begin
          AttrRef='02';
          // Дальше как изменить в автокаде
        end;
      Items.Add(Format('%s=%s', [AttrRef.TagString, AttrRef.TextString]));
    end;
  end;
  end else
    raise Exception.CreateFmt('Блок "%s" не имеет атрибутов', [ABlkRef.Name]);
end;
Вложения
Тип файла: rar Reserv Blocks.rar (199.5 Кб, 41 просмотров)

Последний раз редактировалось Nurik, 28.10.2011 в 16:18.
Nurik вне форума  
 
Непрочитано 28.10.2011, 16:18
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


В этом коде ты работаешь с определением блока (Block), а тебе нужно вхождение - BlockRef.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.10.2011, 16:24
#5
Nurik


 
Регистрация: 28.10.2011
Сообщений: 5


Cпасибо ребята!
Блок известно, атрибут тоже известно, только остался изменить надо в автокаде.
Код:
[Выделить все]
procedure ExtractBlkRefAttr(ABlkRef: OleVariant; Items: TStrings);
var
  AttrArray, AttrRef: OleVariant;
  i, LBnd, HBnd: Integer;
begin
  if ABlkRef.HasAttributes then
  begin
  if ABlkRef.Name='e fire no' then
  begin
    Items.Add(Format('[%s]', [ABlkRef.Name]));
    AttrArray:= ABlkRef.GetAttributes;
    LBnd:= VarArrayLowBound(AttrArray, 1);
    HBnd:= VarArrayHighBound(AttrArray, 1);
    for i:= LBnd to HBnd do
    begin
      AttrRef:= AttrArray[i];
       if AttrRef='01' then
        begin
          AttrRef='02';
          // Дальше как изменить в автокаде
        end;
      Items.Add(Format('%s=%s', [AttrRef.TagString, AttrRef.TextString]));//
    end;
  end;
  end else
    raise Exception.CreateFmt('Блок "%s" не имеет атрибутов', [ABlkRef.Name]);
end;
Nurik вне форума  
 
Непрочитано 28.10.2011, 16:26
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


ну я дельфи не знал и забыл - но по сути тебе надо изменить свойство TextString аттрибута.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 28.10.2011, 16:53
#7
Nurik


 
Регистрация: 28.10.2011
Сообщений: 5


Спасибо Дима, все поличилось, Только осталось изменить цвет атрибута. Ты помнишь какие функция нужен для этого?

Код:
[Выделить все]
procedure ExtractBlkRefAttr(ABlkRef: OleVariant; Items: TStrings);
var
  AttrArray, AttrRef: OleVariant;
  i, LBnd, HBnd: Integer;
begin
  if ABlkRef.HasAttributes then
  begin
  if ABlkRef.Name='e fire no' then
  begin
    Items.Add(Format('[%s]', [ABlkRef.Name]));
    AttrArray:= ABlkRef.GetAttributes;
    LBnd:= VarArrayLowBound(AttrArray, 1);
    HBnd:= VarArrayHighBound(AttrArray, 1);
    for i:= LBnd to HBnd do
    begin
      AttrRef:= AttrArray[i];
       if AttrRef.TextString='01' then
        begin
          AttrRef.TextString:='02';
          //Только осталось изменить цвет.. Какие функции нужен?.
        end;
      Items.Add(Format('%s=%s', [AttrRef.TagString, AttrRef.TextString]));
      Acad.Update;  //вот эту хрень забыл
    end;
  end;
  end else
    raise Exception.CreateFmt('Блок "%s" не имеет атрибутов', [ABlkRef.Name]);
end;
Nurik вне форума  
 
Непрочитано 28.10.2011, 16:57
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Свойство Color - отвечает за индексированные цвета (от 0 до 255). TrueColor отвечает за установку т.н. TrueColor (RGB-цвет).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.10.2011, 16:58
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


А почитать про свойство соlor в справке не дано?
gomer вне форума  
 
Автор темы   Непрочитано 28.10.2011, 19:39
#10
Nurik


 
Регистрация: 28.10.2011
Сообщений: 5


Cпасибо ребята!
Все работает.
Код:
[Выделить все]
procedure ExtractBlkRefAttr(ABlkRef: OleVariant; Items: TStrings);
var
  AttrArray, AttrRef: OleVariant;
  i, LBnd, HBnd: Integer;
begin
  if ABlkRef.HasAttributes then
  begin
  if ABlkRef.Name='e fire no' then
  begin
    Items.Add(Format('[%s]', [ABlkRef.Name]));
    AttrArray:= ABlkRef.GetAttributes;
    LBnd:= VarArrayLowBound(AttrArray, 1);
    HBnd:= VarArrayHighBound(AttrArray, 1);
    for i:= LBnd to HBnd do
    begin
      AttrRef:= AttrArray[i];
       if AttrRef.TextString='01' then
        begin
          AttrRef.TextString:='02';
          AttrRef.color:=clRed;//вот эту хрень забыл
          
        end;
      Items.Add(Format('%s=%s', [AttrRef.TagString, AttrRef.TextString]));
      Acad.Update;  
    end;
  end;
  end else
    raise Exception.CreateFmt('Блок "%s" не имеет атрибутов', [ABlkRef.Name]);
end;
Nurik вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как изменить значение атрибутов и цветы атрибутов через Дельфи?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массовое редактирование свойств атрибутов блоков kgb Программирование 11 13.06.2023 14:39
Как изменить одно значение сложного списка ? swkx Программирование 24 28.06.2010 15:28
Редактирование блока, используя значение его атрибутов Mazai Программирование 14 19.01.2009 20:49
Как изменить свойства атрибутов блока ALFMario AutoCAD 15 25.01.2008 00:42
Как узнать и изменить значение системной переменной AutoCAD? Tramp Программирование 2 02.03.2006 16:17