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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Хранение данных о группе объектов

Хранение данных о группе объектов

Ответ
Поиск в этой теме
Непрочитано 26.01.2006, 11:10
Хранение данных о группе объектов
kserg
 
Регистрация: 22.04.2004
Сообщений: 269

Может кто имеет опыт работы с группами (образуемыми
командой "_GROUP"/"ГРУППА") объектов ? Подскажите
(посоветуйте) пожалуйста...

Создается группа объектов, предположим, текстовых строк
(однострочных текстовых примитивов).
Группа естественно имеет имя.
Необходимо в чертеже хранить данные касательно максимальной
(заданной пользователем при создании группы) ширины
текстовых строк в единицах рисунка (например, 150) для этой
группы, чтобы при редактировании ее (группы) учитывалась
вышеупомянутая ширина.
О команде "_MTEXT"/"МТЕКСТ" мне известно, но речь идет
об однострочном тексте.

Можно для решения подобной задачи использовать и невидимый
блок с атрибутом, хранящим ширину, и словарь для хранения
этой величины... Может кто еще что посоветует?

Спасибо.
Просмотров: 7513
 
Непрочитано 27.01.2006, 20:41
#21
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


А насчет удаления копай здесь:

http://www.autocad.ru/cgi-bin/f1/board.cgi?t=5649Qz

И тебе польза и сам память освежил:

Удаление xdata из группы

Код:
[Выделить все]
		    
(setq grp (vla-item (vla-get-groups adoc) grp_name)
      grp_ent (vlax-vla-object->ename grp)
      elist (entget grp_ent '("TEXTAPPNAME")))
(foreach i (cdr (assoc -3 elist))
  (setq sub (cons -3 (list (cons (car i) ())))
        elist (subst sub (assoc -3 elist) elist)
        elist (entmod elist)
  )
 )
(entupd grp_ent)
edited by Fatty 21:24

~'J'~
fixo вне форума  
 
Непрочитано 27.01.2006, 22:32
#22
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Fatty
...а если удалять приложение то пробуй...
Если мне не изменяет память, то имена приложений, на которые нет ссылок в чертеже (т.е. они не используются ни в одних расширенных данных) автоматически удаляются при сохранении чертежа. Так что IMHO нет смысла их удалять вручную.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 28.01.2006, 13:03
#23
kserg


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


>Fatty Янв 27, 2006 21:41

Цитата:
Удаление xdata из группы

Код:
[Выделить все]
(setq grp (vla-item (vla-get-groups adoc) grp_name) 
      grp_ent (vlax-vla-object->ename grp) 
      elist (entget grp_ent '("TEXTAPPNAME"))) 
(foreach i (cdr (assoc -3 elist)) 
  (setq sub (cons -3 (list (cons (car i) ()))) 
        elist (subst sub (assoc -3 elist) elist) 
        elist (entmod elist) 
  ) 
 ) 
(entupd grp_ent)
Спасибо! То что надо - работает.


Цитата:
А насчет удаления копай здесь:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=5649Qz
И тебе польза и сам память освежил
Вот это как раз я и глядел, когда "ковырялся с расширенными данными графических примитивов" (мой пост №17) на предмет навески расширенных данных, их чтения, редактирования и удаления.


Один побочный вопрос остался.
В коде

Код:
[Выделить все]
(setq acapp    (vlax-get-acad-object) 
      adoc     (vla-get-ActiveDocument acapp) 
      grp_name (getstring "\nИмя группы : \n") 
      xtype    (list 1001 1040 1000 1070) 
      xvalue   (list "TEXTAPPNAME";имя приложения 
           150.0 
           "STRING LENGTH IS 150 DRAWING UNITS";описание приложения 
           150 
          ) 
) 
(regapp "TEXTAPPNAME") 
(vlax-invoke 
  (vla-item (vla-get-groups adoc) grp_name) 
  'SetXdata 
  xType 
  xvalue 
)
,- как в примере, упоминаются кроме прочих и DXF-коды "1040" и "1070".
1040 -> Вещественное число
1070 -> 16-битовое целое число

Пробовал обойтись без "1070" :

Код:
[Выделить все]
(setq acapp    (vlax-get-acad-object) 
      adoc     (vla-get-ActiveDocument acapp) 
      grp_name (getstring "\nИмя группы : \n") 
      xtype    (list 1001 1040 1000) 
      xvalue   (list "TEXTAPPNAME";имя приложения 
           150.0 
           "STRING LENGTH IS 170 DRAWING UNITS";описание приложения 
          ) 
)
,- работает, а без "1040" :

Код:
[Выделить все]
(setq acapp    (vlax-get-acad-object) 
      adoc     (vla-get-ActiveDocument acapp) 
      grp_name (getstring "\nИмя группы : \n") 
      xtype    (list 1001 1000) 
      xvalue   (list "TEXTAPPNAME";имя приложения 
           "STRING LENGTH IS 170 DRAWING UNITS";описание приложения 
          ) 
)
,- не работает, выдает "Ошибка".
Это что же, выходит, "1040" - обязателен ?
Или может коды "1001" и "1000" идут как обязательные, и в дополнение, обязательно - должен быть еще хотя бы один код,
типа "1040" ?
kserg вне форума  
 
Автор темы   Непрочитано 28.01.2006, 16:56
#24
kserg


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


Поэкспериментировал. Теперь все ясно.

Могу считать, что для меня обязательными будут те параметры
(коды), которые затем будут мне необходимы, а именно :

1001 -> Строка-имя приложения
1040 -> Вещественное число


Код:
[Выделить все]
(setq acapp    (vlax-get-acad-object) 
      adoc     (vla-get-ActiveDocument acapp) 
      grp_name (getstring "\nИмя группы : \n") 
      xtype    (list 1001 1040) 
      xvalue   (list "TEXTAPPNAME";имя приложения 
           150.0 
          ) 
)
...И усе работает...
kserg вне форума  
 
Автор темы   Непрочитано 30.01.2006, 11:55
#25
kserg


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


Еще раз ВСЕМ большое спасибо!
kserg вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Хранение данных о группе объектов

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск