|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
31.10.2003, 10:02 | #1 | |
сENTMAKEить блок
Сообщений: n/a
|
||
Просмотров: 6556
|
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Для начала создаем сам примитив BLOCK
(entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") '(100 . "AcDbBlockBegin") '(2 . "имя_блока") '(8 . "имя_слоя") '(70 . 0) '(62 . <номер_цвета>) '(10 . <точка_вставки_блока>))) в принципе, этого достаточно, но если нужно, список можно расширить. Затем создаем примитивы блока. Также с entmake. Например, следующий фрагмент создаст примитивы, которые были в наборе ss (setq count (sslength ss)) ; количество объектов в наборе (while (/= (setq count (1- count)) -1) (entmake (entget (setq obj (ssname ss count)))) ; создаем объект для блока по описанию (entdel obj) ; удаляем старый объект ) ;_ while И наконец, завершаем описание блока примитивом ENDBLK (setq blkname (entmake (list '(0 . "ENDBLK") '(100 . "AcDbEntity") '(100 . "AcDbBlockEnd") '(8 . "имя_слоя") ) ;_ list ) ;_ entmake ) ;_ setq В переменной blkname имя только что созданного блока (на тот случай, если захотите создать анонимный блок, только в 70 группе надо поставить 1 вместо 0 и имя задать в виде *Unnn) |
|||
|
||||
Сообщений: n/a
|
Проще всего брать DFX коды примитивов не печатая их самостоятельно, а подготовить соответствующие примитивы и набирать в командной строке (entget(car(entsel))), затем щелкать на нужном примитиве и нажимать F2. Список DFX кодов будет виден в текстовом окне КАДа. Остается скопировать вставить в ЛИСП редактор и убрать группы -1, 330 и другие которые могут оказаться ненужными или вредными в данном конкретном случае. Т.е. принадлежность к слою, текстовый стиль, принадлежность к пространству модели и т. д.
|
|||
|
||||
Сообщений: n/a
|
Блинн! Мил человек, подскажи, в чём грабля- то???
(entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") '(100 . "AcDbBlockBegin") '(2 . "MEGAOT") '(8 . "0") '(70 . 0) '(62 . 7))) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(8 . "Выноски") '(6 . "Continuous") '(100 . "AcDbLine") '(10 0.0 0.0 0.0) '(11 2.10002 2.10002 0.0))) ;(setq L1 (entlast)) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(8 . "Выноски") '(6 . "Continuous") '(100 . "AcDbLine") '(10 0.0 0.0 0.0) '(11 -2.08243 2.08243 0.0))) ;(setq L2 (entlast)) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(8 . "Выноски") '(6 . "Continuous") '(100 . "AcDbLine") '(10 0.0 0.0 0.0) '(11 0.0 5.0 0.0))) ;(setq L3 (entlast)) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(8 . "Выноски") '(6 . "Continuous") '(100 . "AcDbLine") '(10 0.0 5.0 0.0) '(11 12.5 5.0 0.0))) ;(setq L4 (entlast)) (entmake (list '(0 . "ATTDEF") '(100 . "AcDbEntity") '(8 . "Выноски") '(62 . 7) '(100 . "AcDbText") '(10 1.0 6.0 0.0) '(40 . 2.5) '(1 . "0.000") '(50 . 0.0) '(41 . 0.8) '(51 . 0.0) '(7 . "ASHADE") '(71 . 0) '(72 . 0) '(11 0.0 0.0 0.0) '(100 . "AcDbAttributeDefinition") '(3 . "значение") '(2 . "0.000") '(70 . 0) '(73 . 0) '(74 . 0))) ;(setq A1 (entlast)) ;(command "select" L1 L2 L3 L4 A1 "") ;(setq SS (ssget "P")) (setq BLN (entmake (list '(0 . "ENDBLK") '(100 . "AcDbEntity") '(100 . "AcDbBlockEnd") '(8 . "0")))) примитивы, ясен пень создаёт, а вот блок- nill ламера мы, гимназиев не заканчивали, Полещука почитываем и тыкаемси помалу... |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
....то ли тороплюсь, то ли слепну.... :roll: старею, в общем.
Точку вставки блока пропустил. (entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") '(100 . "AcDbBlockBegin") '(2 . "MEGAOT") '(8 . "0") '(70 . 0) '(62 . 7) '(cons 10 <точка вставки>))) В предыдущем постинге щас исправлю А Полещука мы тож читаем. И форумы стороной не обходим. |
|||
|
||||
Сообщений: n/a
|
так. спасибо за помощь, быструю и исчерпывающую!
пойдём дальше. Атцы! кто знает? делаю блок (см. выше), в оный входит аттрибут. если блок сделан програмно- при его вставке (ручной, пробной) аттрибут не виден, запроса его значения нету. разблачиваешь блок, делаешь его ИЗ ТЕХ- ЖЕ ПРИМИТИВОВ, но вручную. Всё работает как надо. игрался с группой 70. аттрибут иногда виден, но при вставке его значение не спрашивает, редактированию аттрибут не поддаётся, ни коммандой, ни через entnext (он его просто не видит) вопрос: как сделать чтоб всё було? |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Ну на этот случай пришлось еще раз заглянуть в хелп, в раздел DXF.
Конечно, все на аглицком, однако в описании 70 группы Block group codes говорено буквально следующее Цитата:
(entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") '(100 . "AcDbBlockBegin") '(2 . "MEGAOT") '(8 . "0") '(70 . 2)... и далее по тексту. Разок проверил - работает. |
|||
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
А Вы, случайно не попутали примитивы? У меня так:
... (list '(0 . "BLOCK") ...'(70 . 2)... - блок содержит изменяемые атрибуты . . . . . . . . ... (list '(0 . "ATTDEF") .... '(70 . 0) .... - изменяемый атрибут Мне кажется, что у Вас (list '(0 . "ATTDEF") ...... '(70 . 2) ... - постоянный атрибут. У меня 2002, но и он и 2000 - это все R15. По идее, все должно работать.... |
|||