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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > сENTMAKEить блок

сENTMAKEить блок

Ответ
Поиск в этой теме
Непрочитано 31.10.2003, 10:02 #1
сENTMAKEить блок
DronT
 
Сообщений: n/a

Т.е. создать блок функцией (entmake
Всегда считал что сделать такое нельзя (как- то давно пробовал даже).
Недавно прочитал что можно.
Кто может толково объяснить мне, ламеру- КАК?
Только без юзверьских штучек! По буквам.
Просмотров: 6531
 
Непрочитано 31.10.2003, 15:08
#2
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Для начала создаем сам примитив 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)
vk вне форума  
 
Непрочитано 03.11.2003, 11:40
#3
SAV


 
Сообщений: n/a


Проще всего брать DFX коды примитивов не печатая их самостоятельно, а подготовить соответствующие примитивы и набирать в командной строке (entget(car(entsel))), затем щелкать на нужном примитиве и нажимать F2. Список DFX кодов будет виден в текстовом окне КАДа. Остается скопировать вставить в ЛИСП редактор и убрать группы -1, 330 и другие которые могут оказаться ненужными или вредными в данном конкретном случае. Т.е. принадлежность к слою, текстовый стиль, принадлежность к пространству модели и т. д.
 
 
Непрочитано 03.11.2003, 12:29
#4
DronT


 
Сообщений: 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

ламера мы, гимназиев не заканчивали, Полещука почитываем и тыкаемси помалу...
 
 
Непрочитано 03.11.2003, 13:50
#5
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


....то ли тороплюсь, то ли слепну.... :roll: старею, в общем.
Точку вставки блока пропустил.
(entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") '(100 . "AcDbBlockBegin") '(2 . "MEGAOT") '(8 . "0") '(70 . 0) '(62 . 7) '(cons 10 <точка вставки>)))


В предыдущем постинге щас исправлю

А Полещука мы тож читаем. И форумы стороной не обходим.
vk вне форума  
 
Непрочитано 03.11.2003, 18:07
#6
DronT


 
Сообщений: n/a


так. спасибо за помощь, быструю и исчерпывающую!

пойдём дальше. Атцы! кто знает?

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

разблачиваешь блок, делаешь его ИЗ ТЕХ- ЖЕ ПРИМИТИВОВ, но вручную. Всё работает как надо.

игрался с группой 70. аттрибут иногда виден, но при вставке его значение не спрашивает, редактированию аттрибут не поддаётся, ни коммандой, ни через entnext (он его просто не видит)

вопрос: как сделать чтоб всё було?
 
 
Непрочитано 04.11.2003, 11:38
#7
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Ну на этот случай пришлось еще раз заглянуть в хелп, в раздел DXF.
Конечно, все на аглицком, однако в описании 70 группы Block group codes говорено буквально следующее
Цитата:
2 = This block has non-constant attribute definitions (this bit is not set if the block has any attribute definitions that are constant, or has no attribute definitions at all)
Тоесть, блок имеет описания непостоянных атрибутов. Отсюда вывод: пишем
(entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") '(100 . "AcDbBlockBegin") '(2 . "MEGAOT") '(8 . "0") '(70 . 2)... и далее по тексту.
Разок проверил - работает.
vk вне форума  
 
Непрочитано 04.11.2003, 14:57
#8
DronT


 
Сообщений: n/a


блинн, а у меня не вышло...

Какая версия акада? мой 2000.

при (70 . 2) аттрибут виден но запрашиваем при вставке и не радактируем, через entnext недостижим

ладно, попробую с другого бока...
 
 
Непрочитано 04.11.2003, 15:06
#9
DronT


 
Сообщений: n/a


блинн ошибочка- НЕ редактируем при вставке. Constant в смысле.
 
 
Непрочитано 04.11.2003, 15:17
#10
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


А Вы, случайно не попутали примитивы? У меня так:
... (list '(0 . "BLOCK") ...'(70 . 2)... - блок содержит изменяемые атрибуты
. . . . . . . .
... (list '(0 . "ATTDEF") .... '(70 . 0) .... - изменяемый атрибут

Мне кажется, что у Вас (list '(0 . "ATTDEF") ...... '(70 . 2) ... - постоянный атрибут.

У меня 2002, но и он и 2000 - это все R15. По идее, все должно работать....
vk вне форума  
 
Непрочитано 04.11.2003, 16:37
#11
DronT


 
Сообщений: n/a


вот спасибо!

говорил- же- ламера мы. тыкаемси...
 
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > сENTMAKEить блок

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

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