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

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

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

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

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

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

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

Спасибо.
Просмотров: 7545
 
Непрочитано 26.01.2006, 11:24
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Если группа имеет имя, пусть оно будет информативным
Например:
MYGROUP_150_1
MYGROUP-твоя сигнатура
150 - ширина
1 - индекс уникальности
VVA вне форума  
 
Непрочитано 26.01.2006, 12:22
#3
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Есть еще один способ, почему то редко используемый...
Можно создать в "color book" свою таблицу цветов с нормальными названиями...
Из плюсов - легко фильтровать по цвету
Из минусов - для передачи на другой компьютер нужно передавать и цвет.
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 26.01.2006, 13:14
#4
kserg


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


>Елпанов Евгений Чт Янв 26, 2006 13:22

Цитата:
Можно создать в "color book" свою таблицу цветов
А это о чем?


>VVA

Цитата:
Если группа имеет имя, пусть оно будет информативным
Спасибо. Была и такая мыслишка...



Может еще кто что подскажет?
kserg вне форума  
 
Непрочитано 26.01.2006, 13:52
#5
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Если открыть окно выбора цвета и перейти на последнюю вкладку с пантонами, то увидишь готовую реализацию...
Есть возможность добавить туда свои цвета, причем цвет может быть и один, разные его названия
Создавать новые наборы цветов можно в безплатной програмке от автодеска, называется
"AutoCadBookEditor", а файл (установочный) ACBEditor.exe 2,23 МБ (2*341*352 байт)
Это в той версии, что я использую, возможно давно появилоась новая версия...
Елпанов Евгений вне форума  
 
Непрочитано 26.01.2006, 15:11
#6
fixo

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


Я тут по слабости ума чего не понимаю, но данные о группе
нигде не надо хранить, они сами спокойно себе хранятся в
словаре групп, а вместо описания группы можешь задать любую
текстовую строку (а хотя бы и список в виде строки):

Код:
[Выделить все]
(setq data nil)
(setq grp_dict (dictsearch (namedobjdict) "ACAD_GROUP"))
(while (setq datum (assoc 3 grp_dict))
    (setq gname (cdr datum))
    (setq grp_ent (cdr (assoc 350 (member datum grp_dict))))
    (setq grp_list (entget grp_ent))
    (setq gdesc (cdr (assoc 300 grp_list)))    
    (setq data (cons (cons gname gdesc) data))
    (setq grp_dict (cdr (member (assoc 3 grp_dict) grp_dict))))
(setq data (reverse data))
(alert (apply 'strcat (mapcar (function (lambda (x)
	(strcat (vl-prin1-to-string x) "\n")))
	       data)))
Копай глубже, может еще чего найдешь
fixo вне форума  
 
Автор темы   Непрочитано 26.01.2006, 17:00
#7
kserg


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


>VVA
>Fatty

Оба предложения достойны внимания, но лишь при условии,
что юзверю не взбредет потом в голову переименовывать
группы или(и) менять их описание, что вполне реально
(с помощью команды "_GROUP"/"ГРУППА").
kserg вне форума  
 
Непрочитано 26.01.2006, 17:28
#8
Александр Ривилис

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


Храни в расширенных данных группы - пользователь вручную испортить эти данные не сможет.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 27.01.2006, 13:38
#9
kserg


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


А как насчет X-записей?
Или это выльется в те же (Lisp-)затраты, что и при использовании
расширенных данных (в смысле - что в лоб, что по лбу...)?

Спрашиваю потому, что ни расширенными данными ни X-записями
(обходился как-то...) ранее не пользовался.
kserg вне форума  
 
Непрочитано 27.01.2006, 13:46
#10
Александр Ривилис

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


С расширенными данными в данном случае работать будет значительно проще.
Александр Ривилис вне форума  
 
Непрочитано 27.01.2006, 13:56
#11
fixo

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


Цитата:
Сообщение от kserg
А как насчет X-записей?
Или это выльется в те же (Lisp-)затраты, что и при использовании
расширенных данных (в смысле - что в лоб, что по лбу...)?

Спрашиваю потому, что ни расширенными данными ни X-записями
(обходился как-то...) ранее не пользовался.
См. здесь:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21053aM

~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 27.01.2006, 14:51
#12
kserg


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


Да, похоже лучше - расширенные данные.

Расширенные данные :
-- удалятся (стирается) группа примитивов, значит автоматом удаляются расширенные данные, "навешенные" на эту группу.

X-записи :
-- удалятся (стирается) группа примитивов, а X-записи для этой
группы в чертеже остаются.

Так кажется?
kserg вне форума  
 
Автор темы   Непрочитано 27.01.2006, 14:54
#13
kserg


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


Всем большое спасибо!

Новое поколение выбирает расширенные данные!
kserg вне форума  
 
Непрочитано 27.01.2006, 14:56
#14
Александр Ривилис

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


Цитата:
Сообщение от kserg
Новое поколение выбирает расширенные данные!
Здравое решение конкретной проблемы!
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 27.01.2006, 15:13
#15
kserg


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


Жалко вот только - осталась "за кадром" таинственноая "color book" (посты 3 и 5). Ну да ничего! Доберемся и до нее!!!!!!!!!!
kserg вне форума  
 
Непрочитано 27.01.2006, 15:54
#16
fixo

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


Цитата:
Сообщение от kserg
Жалко вот только - осталась "за кадром" таинственноая "color book" (посты 3 и 5). Ну да ничего! Доберемся и до нее!!!!!!!!!!
Пока добираешься попробуй
Записать можно так :
Код:
[Выделить все]
(vl-load-com)
(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
)
А получить обратно так :
Код:
[Выделить все]
(vla-getXdata
  (vla-item (vla-get-groups adoc)
	    grp_name
  )
  "TEXTAPPNAME"
  'xtp
  'xdv
)

(setq data
       (mapcar 'vlax-variant-value
	       (vlax-safearray->list xdv)
       )
)
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 27.01.2006, 18:15
#17
kserg


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


>Fatty Янв 27, 2006 16:54

Спасибо, предложенный Вами код работает.

Поковырявшись с расширенными данными графических примитивов,
собирался (простым Lisp-ом) влезть и в группы, а тут - Ваш пример,
с VLisp-ом... Вовремя!
Так что, большое спасибо.

Заодно, не подскажите, как с VLisp удалять расширенные данные,
хотя бы на том же примере групп?
kserg вне форума  
 
Непрочитано 27.01.2006, 20:14
#18
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от kserg
Жалко вот только - осталась "за кадром" таинственноая "color book" (посты 3 и 5). Ну да ничего! Доберемся и до нее!!!!!!!!!!
Я для примера сделал одну такую книжечку цветов...
http://www.autocad.ru/cgi-bin/f1/boa...20060127195520
[ATTACH]1138382049.rar[/ATTACH]
Елпанов Евгений вне форума  
 
Непрочитано 27.01.2006, 20:16
#19
fixo

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


Цитата:
Сообщение от kserg
>Fatty Янв 27, 2006 16:54

Спасибо, предложенный Вами код работает.

Поковырявшись с расширенными данными графических примитивов,
собирался (простым Lisp-ом) влезть и в группы, а тут - Ваш пример,
с VLisp-ом... Вовремя!
Так что, большое спасибо.

Заодно, не подскажите, как с VLisp удалять расширенные данные,
хотя бы на том же примере групп?
А вот в этом случае будет эффективней простым лиспом, нужно
будет удалять из списка примитива группу с кодом -3,
а если удалять приложение то пробуй:
Сначала удаляешь группу, потом
Код:
[Выделить все]
;;"TEXTAPPNAME" - имя приложения, поменяй на свое
(if 
(tblobjname "APPID" "TEXTAPPNAME")
(vlax-for a (vla-get-registeredapplications adoc)
(if (eq "TEXTAPPNAME" (vla-get-name a))
(progn
(if  
(vl-catch-all-error-p 
(if (eq  "Automation Error. Object is referenced by other object(s)" 
(vl-catch-all-error-message
(vl-catch-all-apply (function (lambda ()
(vla-delete a))))))
(alert "Приложение \"TEXTAPPNAME\" \nсвязано с объектом")))
(alert "Приложение \"TEXTAPPNAME\" \nневозможно удалить")))))
(alert "Приложение \"TEXTAPPNAME\" \nне существует"))
Проверяешь на удаление:
Код:
[Выделить все]
(if (vl-catch-all-error-p
      (vl-catch-all-apply
      (function (lambda()(vla-item
			   (vla-get-registeredapplications adoc)
				    "TEXTAPPNAME")))))
 (alert "Приложение \"TEXTAPPNAME\" \nудалено")
  (alert "Приложение \"TEXTAPPNAME\" \nне удалено"))
Попробуй копать дальше, почти не проверял,
возможны неточности...

Или удалить все (но тут надо бы сначала проверить весь
список приложений, как бы чего не вышло
Код:
[Выделить все]
(vlax-for a (vla-get-registeredapplications adoc)
(if (not (wcmatch  (vla-get-name a) "ACAD,ACAD*"))
(vl-catch-all-apply (function (lambda ()
(vla-delete a))))))
И в конце естественно release & regen IMHO

~'J'~
fixo вне форума  
 
Непрочитано 27.01.2006, 20:16
#20
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Забыл добавить, програмку можно взять
http://usa.autodesk.com/adsk/servlet...&siteID=123112
Работает только с интернет эксплорером с минимальной безопасностью :(
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Хранение данных о группе объектов

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

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