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

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

Как взорвать все блоки на листах разом.

Ответ
Поиск в этой теме
Непрочитано 08.11.2014, 21:48 #1
Как взорвать все блоки на листах разом.
zmejsan
 
Регистрация: 27.06.2013
Сообщений: 58

Дорогие знатоки случилась вот такая штука с которой я не смог справиться самостоятельно:
В модели работаю с блоками (обычными, динамическими) с таблицами и расчетами в них. А в листах имеются таблицы ссылающиеся на таблицы в модели и денамические блоки. С этим со всем работать умею только я. И в компании требуют это все взрывать перед сдачей. Работа трудоемкая и долгая. Нужно сделать так чтобы при нажатии 1 кнопки запустился процесс поиска и взрыва. Причем не просто взорвать блоки динамические командой автокада а командой экспрестулса. т.е. все отребуты при это перевести в текст.
Надеюсь будут хоть какие нибудь идеи для сокращения моего времени. Все заранее спасибо!!!
Просмотров: 30893
 
Непрочитано 08.11.2014, 22:04
#2
Dakar


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


а быстрым выбором вхождения блоков выбрать и применить к ним экспрестулс не получиться?
Dakar вне форума  
 
Автор темы   Непрочитано 08.11.2014, 22:10
#3
zmejsan


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


Цитата:
Сообщение от Dakar Посмотреть сообщение
а быстрым выбором вхождения блоков выбрать и применить к ним экспрестулс не получиться?
Оно можно, только в модели или в поли листа а одновременно и там и там я не знаю как. Если есть такая возможность подскажите поподробнее.
zmejsan вне форума  
 
Непрочитано 08.11.2014, 22:13
#4
Dfds


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


Какая именно программа?
Dfds вне форума  
 
Автор темы   Непрочитано 08.11.2014, 22:14
#5
zmejsan


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


Цитата:
Сообщение от Dfds Посмотреть сообщение
Какая именно программа?
AutoCad 2010
zmejsan вне форума  
 
Непрочитано 08.11.2014, 22:24
#6
Dfds


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


Воспользуйся командой ВЗОРВАТЬ
Dfds вне форума  
 
Автор темы   Непрочитано 08.11.2014, 22:26
#7
zmejsan


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


Цитата:
Сообщение от Dfds Посмотреть сообщение
Воспользуйся командой ВЗОРВАТЬ
Dfds, дорогой друг. Возможно ты недочитал или не понял о чем я спрашиваю. Суть не в том как зворвать, а в том чтобы это сделать везде (в модели, во всех листах) нажатием одной кнопки.....
zmejsan вне форума  
 
Непрочитано 08.11.2014, 22:46
#8
Dfds


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


Цитата:
Сообщение от zmejsan Посмотреть сообщение
Dfds, дорогой друг. Возможно ты недочитал или не понял о чем я спрашиваю. Суть не в том как зворвать, а в том чтобы это сделать везде (в модели, во всех листах) нажатием одной кнопки.....
а в чем проблема занести все блоки в один слой, и потом их общим выделением взорвать, перед этим отключив все остальные слои?
Насчет сразу в модели и в листах, я не уверен, что такое возможно.
Dfds вне форума  
 
Автор темы   Непрочитано 08.11.2014, 22:47
#9
zmejsan


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


Цитата:
Сообщение от Dfds Посмотреть сообщение
а в чем проблема занести все блоки в один слой, и потом их общим выделением взорвать, перед этим отключив все остальные стили?
Насчет сразу в модели и в листах, я не уверен, что такое возможно.
Спасибо, но не в тему... Это не все так просто как вам кажется.
zmejsan вне форума  
 
Непрочитано 08.11.2014, 22:48
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Например, слепить лисп типа такого (написано на коленке - но смысл понятен)

Код:
[Выделить все]
 (defun c:ExplodeAllSheet ( / NameAddSheet)
(setq NewListLayouts (layoutlist))
(foreach NameAddSheet NewListLayouts
   (progn
       (setvar "ctab" NameAddSheet)
       ...
   )
)
вместо многоточия вставите нужный код - что хотите сделать с объектами на активном листе
Сергей812 вне форума  
 
Автор темы   Непрочитано 08.11.2014, 22:49
#11
zmejsan


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


я с лиспами как раз та и не в ладах. Если подскажете и поможете буду примного благодарен))
zmejsan вне форума  
 
Непрочитано 08.11.2014, 22:53
#12
Dfds


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


Все гениальное просто
__________________
Мы тут не элита, но и не чернь..

Последний раз редактировалось Dfds, 08.11.2014 в 22:59.
Dfds вне форума  
 
Непрочитано 08.11.2014, 23:13
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Dfds Посмотреть сообщение
Все гениальное просто
Не все так просто. Сначала по нормальному файл надо сохранить в особую папку для выдачи (чтобы случайно не выдать внешникам рабочие варианты чертежей), потом обработать ссылки и т.д (смотрим шапку темы). Вроде есть методы преобразования динблоков в статику (никогда не использовал)-т.е., возможно, не обязательно все расчленять. А под конец еще почистить чертеж и проверку сделать. В коде лишь перебирает листы в активном чертеже. И вполне возможно, что это надо делать через Active-X.
А если чертежей много и собраны через подшивку? в общем вещь индивидуальная..

zmejsan, В принципе, выше все написал.
Сергей812 вне форума  
 
Непрочитано 09.11.2014, 08:49
#14
Кулик Алексей aka kpblc
Moderator

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


Если руками - то ИМХО через экспортирование листов в модель и последующим burst. И то не факт, что получится красиво
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.11.2014, 13:37
#15
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от zmejsan Посмотреть сообщение
А в листах имеются таблицы ссылающиеся на таблицы в модели и денамические блоки. С этим со всем работать умею только я.
Надеюсь с обычными блоками в компании уже научились работать?
Тогда предлагаю следующий алгоритм
1. LISP. Подготовка подосновы
2. BGCFT - Конвертирует все поля в обычный текст
3. BGBLALLDYN2S - Преобразовывает ВСЕ динамические блоки в статические
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 09.11.2014, 13:41
#16
zmejsan


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Надеюсь с обычными блоками в компании уже научились работать?
Тогда предлагаю следующий алгоритм
1. LISP. Подготовка подосновы
2. BGCFT - Конвертирует все поля в обычный текст
3. BGBLALLDYN2S - Преобразовывает ВСЕ динамические блоки в статические
Проблема только одна: при использовании данных лиспов нужно выбирать блоки, а они на разных листах.
zmejsan вне форума  
 
Непрочитано 09.11.2014, 13:48
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от zmejsan Посмотреть сообщение
Проблема только одна: при использовании данных лиспов нужно выбирать блоки, а они на разных листах.
Возникает резонный вопрос - в вашей компании рисуют прямо на листах? Откуда там появились куча связей и динблоков?
Сергей812 вне форума  
 
Автор темы   Непрочитано 09.11.2014, 13:53
#18
zmejsan


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Возникает резонный вопрос - в вашей компании рисуют прямо на листах? Откуда там появились куча связей и динблоков?
Нет)) Так черчу только я. И на листах динамически сделаны рамки, условные обозначения и другая мелочь. А в модели я могу с помощью быстрый выбор выбрать все блоки и взорвать. Даже сделать макрос на кнопку-это не сложно. А вот в листах....
zmejsan вне форума  
 
Непрочитано 09.11.2014, 14:04
1 | #19
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


То ли из-за нелюбви взрывать блоки форумчане не хотят подсказать, то ли я чего-то не пойму, но ведь все решается одной строчкой. Я имею в виду выбор блоков на всем чертеже: и в модели, и в листах. Вот эта строчка:
Код:
[Выделить все]
(sssetfirst nil (ssget "_X" '((0 . "INSERT"))))
Она заминирует все блоки

Последний раз редактировалось skkkk, 09.11.2014 в 14:11.
skkkk вне форума  
 
Автор темы   Непрочитано 09.11.2014, 14:12
#20
zmejsan


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
То ли из-за нелюбви взрывать блоки форумчане не хотят подсказать, то ли я чего-то не пойму, но ведь все решается одной строчкой. Я имею в виду выбор блоков на всем чертеже: и в модели, и в листах. Вот эта строчка:
Код:
[Выделить все]
(sssetfirst nil (ssget "_X" '((0 . "INSERT"))))
Не совсем понял данной команды. Ввожу-выделяет блоки на листе, взрываю, а на другом листе все по прежнему. Она как бы показывает сколько есть блоков в файле но выделяет только те что видит. Подскажите возможно я делаю чтото не так
zmejsan вне форума  
 
Непрочитано 09.11.2014, 14:13
#21
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от skkkk Посмотреть сообщение
То ли из-за нелюбви взрывать блоки форумчане не хотят подсказать, то ли я чего-то не пойму, но ведь все решается одной строчкой. Я имею в виду выбор блоков на всем чертеже: и в модели, и в листах. Вот эта строчка:
Это или в модели, или в одном листе. И речь, если судить по топику ветки - идет не только о расчленении блоков) Насчет самой операции расчленения блоков - сейчас это стало своего рода символом дилетанства, имхо.. не разбираясь, все расчленить и рисовать в примитивах. Еще и в нулевом слое желательно)

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от zmejsan Посмотреть сообщение
Нет)) Так черчу только я. И на листах динамически сделаны рамки, условные обозначения и другая мелочь.
Зачем на листах динамические форматы? Или не печатаете сами?
А условные обозначения и прочая мелочь на листе - даже говорить не хочется)
На листе должна быть рамка со штампом и видовые экраны, и все. имхо.
Сергей812 вне форума  
 
Непрочитано 09.11.2014, 14:20
#22
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Ах вот в чем тут дело, а я думаю сижу тут, что самый умный. На кнопочку-то на детонаторе я-то и не нажал! А оказалось, надо еще провода протягивать на листы. Сам блоки взрывать ненавижу просто... Ну по возможности гляну, что тут можно сделать.
skkkk вне форума  
 
Непрочитано 09.11.2014, 14:25
#23
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Интересно, если пост #10 скрестить с постом #19, добавив команду расчленения блоков - работать будет?)
Сергей812 вне форума  
 
Автор темы   Непрочитано 09.11.2014, 14:25
#24
zmejsan


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
То ли из-за нелюбви взрывать блоки форумчане не хотят подсказать, то ли я чего-то не пойму, но ведь все решается одной строчкой. Я имею в виду выбор блоков на всем чертеже: и в модели, и в листах. Вот эта строчка:
Код:
[Выделить все]
(sssetfirst nil (ssget "_X" '((0 . "INSERT"))))
Она заминирует все блоки
Хорошая команда. Я не знал про нее. Подкрепил к кнопке перед взрывом и немного ускорило мне это. Спасибо!
zmejsan вне форума  
 
Непрочитано 09.11.2014, 14:27
#25
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


правда еще надо проверку делать или принудительно разблокировать слои перед расчленением..
Сергей812 вне форума  
 
Непрочитано 09.11.2014, 15:12
#26
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Вобще из конторы в которой не работают с блоками, а тех кто работае заставляют взрывать вместо того что бы хоть одну кнопку выучить и взрывать самому, заставляют автора взрывать блоки, бежать нужно, всёравно это будет не работа а мучение. У меня тут одна умная рвёт всё подряд, я стал закрывать блоки от возможности взрывать.
Valery Brelovsky вне форума  
 
Автор темы   Непрочитано 09.11.2014, 15:14
#27
zmejsan


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


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Вобще из конторы в которой не работают с блоками, а тех кто работае заставляют взрывать вместо того что бы хоть одну кнопку выучить и взрывать самому, заставляют автора взрывать блоки, бежать нужно, всёравно это будет не работа а мучение. У меня тут одна умная рвёт всё подряд, я стал закрывать блоки от возможности взрывать.
А я и ищу как раз)) Можете подсказать мне где лучше
zmejsan вне форума  
 
Непрочитано 09.11.2014, 15:28
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Offtop:
Цитата:
Сообщение от zmejsan Посмотреть сообщение
А я и ищу как раз)) Можете подсказать мне где лучше
Главное, помните - в первую очередь выгоняют из шаражек тех, кто не вписывается в общую корпоративную струю - чтобы не наводил смуту Если будете нажатием трех кнопок делать работу половины отдела за неделю-сживут..
Сергей812 вне форума  
 
Непрочитано 09.11.2014, 20:40
#29
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Вот, для всеобщего взрыва всех блоков во всех пространствах:
Код:
[Выделить все]
 (defun C:ALLSPACESBURST	(/ layout-list current-tab ss)
  (setq	layout-list
		    (mapcar 'cdr
			    (vl-remove-if-not
			      (function
				(lambda (x) (= (car x) 3))
			      ) ;_ end of function
			      (dictsearch (namedobjdict) "ACAD_LAYOUT")
			    ) ;_ end of vl-remove-if-not
		    ) ;_ end of mapcar
	current-tab (getvar "CTAB")
  ) ;_ end of setq
  (repeat (setq i (length layout-list))
    (setvar "CTAB" (nth (setq i (1- i)) (reverse layout-list)))
    (setq
      ss (ssget	"_X"
		(list (cons 0 "INSERT") (cons 410 (getvar "CTAB")))
	 ) ;_ end of ssget
    ) ;_ end of setq
    (sssetfirst nil ss)
    (if	ss
      (C:BURST)
    ) ;_ end of if
  ) ;_ end of repeat
  (setvar "CTAB" current-tab)
) ;_ end of defun
Программа откроет по очереди все вкладки чертежа, включая модель, и взорвет в каждой их них все блоки, которые сможет, командой BURST, затем вернется на первоначально открытую вкладку. Проверок никаких не делал, поэтому сначала лучше разблокировать слои, на которых есть блоки. Бегло потестировал, некоторые блоки команда BURST почему-то не взрывает, пишет: "Невозможно расчленить этот блок." С чем это связано - не разбирался. Тестируем, в общем, если что - подправлю. Главное - случайно не нажать в том чертеже в котором не надо. Может вопрос в начале добавить, типа "Вы уверены?"??
skkkk вне форума  
 
Непрочитано 09.11.2014, 21:08
#30
Andrey_13

Инженер-проектировщик РЗА, ПА, ВК
 
Регистрация: 06.02.2014
Екатеринбург
Сообщений: 32


Код:
[Выделить все]
  (setq	layout-list
		    (mapcar 'cdr
			    (vl-remove-if-not
			      (function
				(lambda (x) (= (car x) 3))
			      ) ;_ end of function
			      (dictsearch (namedobjdict) "ACAD_LAYOUT")
			    ) ;_ end of vl-remove-if-not
		    ) ;_ end of mapcar
	current-tab (getvar "CTAB")
  ) ;_ end of setq
Возвращает список вкладок листов? Можно заменить на более изящное
Код:
Andrey_13 вне форума  
 
Автор темы   Непрочитано 09.11.2014, 21:12
#31
zmejsan


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


Друзья большое спасибо! Маленькая просьба. немогли бы собрать все в один файл и сказать как пользоваться. Я с лиспами вообще не лады(((
Еще просьба взрывать блоки с переводом отребутов в текст. И взорвать все таблицы как обычным взрывом. Т.е. упростить все до линий и текста. Большое спасибо!
zmejsan вне форума  
 
Непрочитано 09.11.2014, 21:13
#32
Кулик Алексей aka kpblc
Moderator

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


skkkk, посмотри: команда burst обращается к внутренней функции burst-one. Так что можно и ее попробовать использовать по мере надобности.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.11.2014, 21:43
#33
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от skkkk Посмотреть сообщение
Главное - случайно не нажать в том чертеже в котором не надо. Может вопрос в начале добавить, типа "Вы уверены?"??
Может, лучше сначала скопировать/сохранить как в %имя файла%_burst.dwg ?

----- добавлено через ~41 мин. -----
Типа такого
Код:
[Выделить все]
 ( vl-load-com )
	( setq lDoc (vla-get-activedocument (vlax-get-acad-object)) )
	( setq lFullNameFile (vla-get-fullname lDoc))
	( setq lNewNameFile (strcat ( vl-filename-directory lFullNameFile) "\\"
		( vl-filename-base lFullNameFile) "_burst" ( vl-filename-extension lFullNameFile)) )
  	( vla-SaveAs lDoc lNewNameFile acNative)
давно уже не рассчитываю - что пользователь что-то читает..)
Сергей812 вне форума  
 
Непрочитано 09.11.2014, 23:39
#34
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от skkkk Посмотреть сообщение
"Невозможно расчленить этот блок."
два варианта :
1. блоку "запрещено" взрываться (vla-get-explodable)
2. не равные коэффициенты по x y z
+
3. В штатной команде есть много глюков и при большом кол-ве блоков может долго выполняться. см Express Tools Bugs ( Ошибки Express Tools )
еще полезная ссылка
4. Нюансы _EXPLODE (РАСЧЛЕНИТЬ)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.11.2014, 14:25
#35
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от zmejsan Посмотреть сообщение
Т.е. упростить все до линий и текста
Есть ещё _wmfin всё упростится и текст до линий.
Valery Brelovsky вне форума  
 
Непрочитано 12.11.2014, 16:43
#36
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


еще немного советов.
после того как вам тут соберут лисп ,который будет все делать.
далее закидываете в какую нить папку , создаете батник в нем пишете аля
Код:
[Выделить все]
FOR %%f in (D:\111\*.dwg) DO START /wait C:\"Program Files"\"AutoCAD 2009"\acad.exe "%%f" /b D:\111\222.scr
222.src это обычный текстовый файл переименованный в котором будет только надпись "ALLSPACESBURST" (без кавычек, если так будет в конце обзываться конечный лисп)
не забудьте добавить этот лисп в автозагрузку
ну и в конце лиспа надо добавить
Код:
[Выделить все]
 (vla-save(vla-get-activedocument(vlax-get-acad-object)))
(vla-quit(vlax-get-acad-object))
тогда при запуске батника будут открываться все файлы dwg по очереди в этой папке , врываться все блоки (если вам допишут до конца лисп),сохранятся и закрываться. а вы сможете пойти чайку попить
Composter вне форума  
 
Автор темы   Непрочитано 12.11.2014, 16:57
#37
zmejsan


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


Спасибо за совет, но лисп мой ни как не напишут... Сложно наверное.
zmejsan вне форума  
 
Непрочитано 12.11.2014, 19:02
#38
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Andrey_13 Посмотреть сообщение
Возвращает список вкладок листов? Можно заменить на более изящное
Да, именно их возвращает. Согласен, можно, забыл я об этой функции, просто такая конструкция в моих функциях получает список объектов любых словарей: не только список листов, но и список групп, фильтров слоев, стилей мультивыносок, мультилиний и т.д. Более универсально просто, а так, спасибо, учту.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
skkkk, посмотри: команда burst обращается к внутренней функции burst-one. Так что можно и ее попробовать использовать по мере надобности.
Насколько я понял, она тоже не повзрывает блоки в другом пространстве, тогда какой в этом смысл? Или я не так понял? Сейчас нет возможности проверить. Но по возможности попробую.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Может, лучше сначала скопировать/сохранить как в %имя файла%_burst.dwg ?
Думаю, это не лишено смысла.
Цитата:
Сообщение от VVA Посмотреть сообщение
два варианта :
Спасибо, Володь, тут все теперь предельно понятно. Кроме одного. Взрывать все-таки невзрываемые блоки или нет? Это к вопросу о Правильном Техническом Задании.
Цитата:
Сообщение от VVA Посмотреть сообщение
3. В штатной команде есть много глюков и при большом кол-ве блоков может долго выполняться. см Express Tools Bugs ( Ошибки Express Tools )
еще полезная ссылка
За эти ссылки особое спасибо. Очень приятно осознавать, что VVA и Do$ утёрли нос америкосов.
Цитата:
Сообщение от VVA Посмотреть сообщение
4. Нюансы _EXPLODE (РАСЧЛЕНИТЬ)
Ну это ты вообще... как шахматист. На несколько ходов вперёд . Я еще споткнуться не успел, а уже все тут мне на блюдечке с золотой каёмочкой.
Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Есть ещё _wmfin всё упростится и текст до линий
В смысле связка _WMFOUT -> _WMFIN?
Цитата:
Сообщение от Composter Посмотреть сообщение
будут открываться все файлы dwg по очереди в этой папке , врываться все блоки (если вам допишут до конца лисп),сохранятся и закрываться.
Вот это вообще сможет стать опасной гранатой в руках какой-нибудь обезьяны. Ясное дело, эта обезьяна может и просто файлы все поудалять или вообще компьютер уронить с четвертого этажа, но я бы под таким подписываться не стал.
Цитата:
Сообщение от zmejsan Посмотреть сообщение
лисп мой ни как не напишут...
zmejsan, а как продвигается тестирование лиспа из #29? Как работает? Медленно ли? А не быстрее ли с замененным burst.lsp из ссылок VVA в #34? Какие замечания и предложения кроме обработки таблиц? Сложно-то - не сложно, но когда от "Заказчика" не слышно обратной связи, то и делать вроде как нечего, не так ли? Может, вообще уже и не надо...
skkkk вне форума  
 
Автор темы   Непрочитано 21.11.2014, 21:53
#39
zmejsan


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


skkkk, спасибо за старания! Я писал в посте #31, что я не умею пользоваться лиспами. Попробовал, но не заработало. Если не сложно сварганить готовый лисп и написать какую команду вводить для работы буду примного благодарен.
За труд СПАСИБО!!!
zmejsan вне форума  
 
Непрочитано 21.11.2014, 23:01
#40
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от zmejsan Посмотреть сообщение
Попробовал, но не заработало. Если не сложно сварганить готовый лисп и написать какую команду вводить для работы буду примного благодарен
Что не заработало то? И по вашему в посте #29 не готовый лисп?
Сергей812 вне форума  
 
Непрочитано 21.11.2014, 23:24
#41
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от zmejsan Посмотреть сообщение
Я писал в посте #31, что я не умею пользоваться лиспами.
zmejsan, вроде по другим темам я понял, что это уже устаревшая информация, потому как лисп там шел на "ура". Как использовать лисп-код, см. здесь. Только нужно брать код без номеров строк, для этого нужно нажать Выделить все, а затем кнопку Копировать, которая появится справа вверху зоны с кодом, ограниченной тэгом Код.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
в посте #29 не готовый лисп?
Ну, готовым бы я его не назвал, поскольку
Цитата:
Сообщение от skkkk Посмотреть сообщение
Проверок никаких не делал
и
Цитата:
Сообщение от skkkk Посмотреть сообщение
Бегло потестировал
но планирую "допилить" при выявлении замечаний и предложений. Однако взорвать взрываемые блоки на всех вкладках он уже должен суметь.
P.S.: А может быть и такое, что Express Tools не установлены. Что пишет в комстроке?

Последний раз редактировалось skkkk, 21.11.2014 в 23:35.
skkkk вне форума  
 
Непрочитано 22.11.2014, 00:02
#42
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от skkkk Посмотреть сообщение
Ну, готовым бы я его не назвал, поскольку
Готовым - в плане того, что он оформлен в виде готовой лисп-функции/команды, т.е. который уже можно скопировать в *.lsp файл, загрузить и опробовать. А не просто кусок примера-кода)
Сергей812 вне форума  
 
Непрочитано 25.11.2015, 00:09
#43
Franco13


 
Регистрация: 11.08.2007
Москва
Сообщений: 48


Цитата:
Сообщение от skkkk Посмотреть сообщение
Вот, для всеобщего взрыва всех блоков во всех пространствах
Мне этот код очень помог.
Но, у меня также похожая задача, мне нужно взорвать весь mtext на всех листах и в модели. Сам в программировании не понимаю, сам исходный код не смогу изменить.
Franco13 вне форума  
 
Непрочитано 25.11.2015, 08:12
1 | #44
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Franco13 Посмотреть сообщение
мне нужно взорвать весь mtext на всех листах и в модели
Код:
[Выделить все]
 (defun C:EXPLODEALLMTXT (/ layout-list current-tab i k ss)
	(setq layout-list
		(mapcar 'cdr
			(vl-remove-if-not
				(function
					(lambda (x) (= (car x) 3))
				) ;_ end of function
			    (dictsearch (namedobjdict) "ACAD_LAYOUT")
			) ;_ end of vl-remove-if-not
		) ;_ end of mapcar
		current-tab (getvar "CTAB")
	) ;_ end of setq
	(repeat (setq i (length layout-list))
		(setvar "CTAB" (nth (setq i (1- i)) (reverse layout-list)))
		(if	(setq ss (ssget	"_X" (list (cons 0 "MTEXT") (cons 410 (getvar "CTAB")))))
			(repeat (setq k (sslength ss))
				(vl-cmdf "_.EXPLODE" (ssname ss (setq k (1- k))) "")
			) ;_ end of repeat			
		) ;_ end of if
	) ;_ end of repeat
	(setvar "CTAB" current-tab)
) ;_ end of defun

Последний раз редактировалось skkkk, 26.11.2015 в 09:44. Причина: исправления кода с учетом замечаний VVA в ##34, 49
skkkk вне форума  
 
Непрочитано 25.11.2015, 19:00
#45
Franco13


 
Регистрация: 11.08.2007
Москва
Сообщений: 48


skkkk
У меня не работает почему то..
Franco13 вне форума  
 
Непрочитано 25.11.2015, 19:33
#46
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,377


Цитата:
Сообщение от Franco13 Посмотреть сообщение
Franco13
Все работает. А Вы правильно копируете код?
Миниатюры
Нажмите на изображение для увеличения
Название: Image 2.png
Просмотров: 86
Размер:	18.8 Кб
ID:	161076  
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 25.11.2015, 19:54
#47
Franco13


 
Регистрация: 11.08.2007
Москва
Сообщений: 48


sertor
Именно так и делал. Сейчас сделал тестовый файл, за одно применение лиспа почему то разбивает только по одному mtextу из листа и из модели.

Последний раз редактировалось Franco13, 25.11.2015 в 20:00.
Franco13 вне форума  
 
Непрочитано 25.11.2015, 20:04
#48
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,377


Цитата:
Сообщение от Franco13 Посмотреть сообщение
разбивает только по одному mtextу из листа и из модели.
Да, согласен. Проверку работоспособности проверял именно по одному образцу текста в модели и в листе.
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 25.11.2015, 23:37
#49
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от sertor Посмотреть сообщение
разбивает только по одному mtextу из листа и из модели.
цитата из справки по команде _EXPLODE (РАСЧЛЕНИТЬ))
Цитата:
Примечание:Если используется какой-либо пакет или функция ObjectARX®, то за один раз можно выполнить расчленение только одного объекта.
Код:
[Выделить все]
(if ss
  (vl-cmdf "_EXPLODE" ss "")
 ) ;_ end of if
В #34 давал ссылку на особенности использования команды _EXPLODE при вызове из Lisp-функций
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.11.2015, 07:50
#50
Franco13


 
Регистрация: 11.08.2007
Москва
Сообщений: 48


VVA
Подскажите, как изменить код чтобы работал с пакетным расчленением.
Franco13 вне форума  
 
Непрочитано 26.11.2015, 09:45
1 | #51
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от VVA Посмотреть сообщение
В #34 давал ссылку на особенности использования команды _EXPLODE при вызове из Lisp-функций
Прошу прощения, упустил я этот момент, точнее, забыл о нем, и тоже тестировал на файле, в котором создал по одному Мтексту на каждом из пространств.
Исправил в #44.
skkkk вне форума  
 
Непрочитано 15.08.2017, 11:57
#52
posetitel


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


Цитата:
Сообщение от Andrey_13 Посмотреть сообщение
Код:
[Выделить все]
  (setq	layout-list
		    (mapcar 'cdr
			    (vl-remove-if-not
			      (function
				(lambda (x) (= (car x) 3))
			      ) ;_ end of function
			      (dictsearch (namedobjdict) "ACAD_LAYOUT")
			    ) ;_ end of vl-remove-if-not
		    ) ;_ end of mapcar
	current-tab (getvar "CTAB")
  ) ;_ end of setq
Возвращает список вкладок листов? Можно заменить на более изящное
Код:
заменил указанные строчки на команду и лисп перестал работать
posetitel вне форума  
 
Непрочитано 15.08.2017, 20:46
#53
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Надо заменить на
Код:
[Выделить все]
 (setq layout-list (layoutlist))
----- добавлено через ~58 мин. -----
Кстати, вспомнил, что немного это изящество не полностью соответствует изначальной задумке. Эта функция (layoutlist) возвращает только список листов, а в mapcar в данном случае собирает список, в котором есть еще и модель. Поэтому менять эти строки не нужно.
skkkk вне форума  
 
Непрочитано 16.08.2017, 08:55
#54
posetitel


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


понятно, спасибо
а как сделать объединение в лиспе следующих действий:
1) Выполнить команду BGCFT - Конвертирует все поля в обычный текст (из лиспа подосновы, была на форуме тема)
2) Выполнить команду BGBLALLDYN2S - Преобразовывает ВСЕ динамические блоки в статические (тоже от туда)
3) Выполнить команду ALLSPACESBURST - взрывает все блоки (лисп из темы)
4) Выполнить команду ОЧИСТИТЬ
5) Сохранить файл в этой же папке с добавлением к имени файла приписки типа "_взорв"
posetitel вне форума  
 
Непрочитано 16.08.2017, 20:12
#55
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Не иначе как для заказчика я помочь смогу после 26. В отпуске
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.08.2017, 09:14
#56
posetitel


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


для него самого ) буду ждать 26 августа или добрых форумчан, которые смогут пораньше)
posetitel вне форума  
 
Непрочитано 29.08.2017, 18:11
#57
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от posetitel Посмотреть сообщение
а как сделать объединение в лиспе следующих действий:
1) Выполнить команду BGCFT - Конвертирует все поля в обычный текст (из лиспа подосновы, была на форуме тема)
2) Выполнить команду BGBLALLDYN2S - Преобразовывает ВСЕ динамические блоки в статические (тоже от туда)
3) Выполнить команду ALLSPACESBURST - взрывает все блоки (лисп из темы)
4) Выполнить команду ОЧИСТИТЬ
5) Сохранить файл в этой же папке с добавлением к имени файла приписки типа "_взорв"
Как то так. BGTOOLS и ALLSPACESBURST должны быть загружены
Код:
[Выделить все]
(defun C:ARMAGEDON ()
;;;BGTOOLS и ALLSPACESBURST должны быть загружены
;;; http://forum.dwg.ru/showthread.php?p=1671168#post1671168
(vl-load-com)
(bg:progress-clear)
(bg:progress-init "Работаю..." 6)
(bg:progress 1)
(ConvField->Text nil) ;_(C:BGCFT) Без запроса
(bg:progress 2)
(C:BGBLALLDYN2S)
(bg:progress 3)
(bg:blfix (cons 49444 (tablelist "BLOCK"))) ;_устанавливаем у всех блоков разрешить расчленение - Да
(bg:progress 4) 
(C:ALLSPACESBURST)
(bg:progress 5)  
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
(bg:progress 6)
(vla-SaveAs
  (vla-get-activedocument (vlax-get-acad-object))
  (strcat
    (getvar "DWGPREFIX")
    (vl-filename-base(getvar "DWGNAME"))
    "_взорв"
    (vl-filename-extension(getvar "DWGNAME"))
    )
    acNative
  )
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.11.2017, 16:43
#58
posetitel


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


Уважаемые программисты, и автор кода VAA, подскажите, как в этот лисп еще добавить команду удаления слоя с подписями?
Слой с подписями при выполнении лиспа нужно выбрать (например, по аналогии с командой "слойудал"), если слой не выбран, то не удалять слои. Ну т.е. запускаем лисп, предлагается выбрать слой с подписями, выбираем его (или жмем Esc), дальше лисп как и был написан в предыдущем сообщении, т.е. взрываются блоки, чистится чертеж и сохраняется в отдельный файл

Последний раз редактировалось posetitel, 15.11.2017 в 16:54.
posetitel вне форума  
 
Непрочитано 15.11.2017, 17:11
#59
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Как-то так. Без проверки
Код:
[Выделить все]
(defun C:ARMAGEDON ()
;;;BGTOOLS и ALLSPACESBURST должны быть загружены
;;; http://forum.dwg.ru/showthread.php?p=1671168#post1671168
(vl-load-com)
(VL-CATCH-ALL-APPLY
  '(lambda( / lay)
     (if(setq lay(mydcl "Выберите слой для удаления" (acad_strlsort(vl-remove "0"(tablelist "LAYER")))))
       (progn
         (if (= (getvar "CLAYER") lay)(setvar "CLAYER" "0"))
         (bg:layer-status-save)
         (vla-put-Freeze (vla-item (vla-get-Layers (vla-get-ActiveDocument(vlax-get-acad-object))) lay) :vlax-true)
         (bg:delete-from-layer)
         (bg:layer-status-restore)
         )
       )
     )
  )  
(bg:progress-clear)
(bg:progress-init "Работаю..." 6)
(bg:progress 1)
(ConvField->Text nil) ;_(C:BGCFT) Без запроса
(bg:progress 2)
(C:BGBLALLDYN2S)
(bg:progress 3)
(bg:blfix (cons 49444 (tablelist "BLOCK"))) ;_устанавливаем у всех блоков разрешить расчленение - Да
(bg:progress 4) 
(C:ALLSPACESBURST)
(bg:progress 5)  
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
(bg:progress 6)

(vla-SaveAs
  (vla-get-activedocument (vlax-get-acad-object))
  (strcat
    (getvar "DWGPREFIX")
    (vl-filename-base(getvar "DWGNAME"))
    "_взорв"
    (vl-filename-extension(getvar "DWGNAME"))
    )
    acNative
  )
)
(defun mydcl (zagl info-list / fl ret dcl_id)
      ;;;Use
      ;;;(mydcl "Test" '("1" "2" "3" "4"))
      (vl-load-com)
      (if (null zagl)
        (setq zagl "Выбор")
      ) ;_ end of if
      (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
      (setq ret (open fl "w"))
      (mapcar
        '(lambda (x) (write-line x ret))
        (list "mip_msg : dialog { "
              (strcat "label=\"" zagl "\";")
              " :list_box {"
              "alignment=top ;"
              "width=51 ;"
              "allow_accept = true;"
              "tabs = \"16 32\";"
              "tab_truncate = true;"
              (if (> (length info-list) 26)
                "height= 26 ;"
                (strcat "height= " (itoa (+ 3 (length info-list))) ";")
              ) ;_ end of if
              "is_tab_stop = false ;"
              "key = \"info\";}"
              "ok_cancel;}"
        ) ;_ end of list
      ) ;_ end of mapcar
      (setq ret (close ret))
      (if (and (not (minusp (setq dcl_id (load_dialog fl))))
               (new_dialog "mip_msg" dcl_id)
          ) ;_ end of and
        (progn
          (start_list "info")
          (mapcar 'add_list info-list)
          (end_list)
          (set_tile "info" "0")
          (setq ret (car info-list))
          (action_tile
            "info"
            "(setq ret (nth (atoi $value) info-list))"
          ) ;_ end of action_tile
          (action_tile
            "cancel"
            "(progn(setq ret nil)(done_dialog 0))"
          ) ;_ end of action_tile
          (action_tile "accept" "(done_dialog 1)")
          (start_dialog)
        ) ;_ end of progn
      ) ;_ end of if
      (unload_dialog dcl_id)
      (vl-file-delete fl)
      ret
    ) ;_ end of defun
== Аналог ALLSPACESBURST от Lee Mac'a отсюда
Код:
[Выделить все]
(defun c:explodeall ( / explode layouts )
   (setq layouts (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
         explode t
   )
   (while explode
       (setq explode nil)
       (vlax-for layout layouts
           (vlax-for obj (vla-get-block layout)
               (and
                   (= "AcDbBlockReference" (vla-get-objectname obj))
                   (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-explode (list obj))))
                   (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete  (list obj))))
                   (setq explode t)
               )
           )
       )
   )
   (princ)
)
(vl-load-com) (princ)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 03.05.2023 в 13:08. Причина: добавлена c:explodeall
VVA вне форума  
 
Непрочитано 15.11.2017, 17:21
#60
posetitel


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


Пишет "необрабатываемое исключение" С0000005 (Access Violation reading 0x0018) по адресу 25D0340Bh
автокад чуть ли не с фатальной ошибкой вылетает.
При чем слой удалять необходимо перед выполнением предыдущего лиспа, иначе некоторе подписи бывают в блоке и они останутся в памяти чертежа, т.к. очистка уже выполнялась раньше. Я так понял здесь удаление слоя происходит в конце.

Последний раз редактировалось posetitel, 15.11.2017 в 17:33.
posetitel вне форума  
 
Непрочитано 15.11.2017, 17:37
#61
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


posetitel, Поставил в начало. Обновил #59
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.11.2017, 17:42
#62
posetitel


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


Команда: ARMAGEDON _-LAYER
Текущий слой: "0"
Задайте параметр [?/Создать/Установить/Новый/переименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/Прозрачность/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать]: _Unlock
Список имен слоев для разблокирования или <выбрать объекты>: Шаблон_Рамка_модель Задайте параметр [?/Создать/Установить/Новый/переименоватЬ/Вкл/Откл/Цвет/Тип/вЕс/Прозрачность/Материал/пеЧать/Заморозить/Разморозить/Блок/рАзблок/Конфигурация/опИсание/соГласовать]:
Команда: _LAYDEL
Выберите объект на слое для удаления или [Имя]: _NAME
Введите имя слоя или [?]: Шаблон_Рамка_модель
Выбранные слои: Шаблон_Рамка_модель.
Выберите объект на слое, который требуется удалить, или [Имя/оТменить]:
******** ПРЕДУПРЕЖДЕНИЕ********

Имеется 4 определений блоков, которые вставляются на слой(и) для удаления.
Блок(и) будут переопределены, а объекты, входящие в слой(и),
будут удалены из определения(й) блока(ов).

Сейчас произойдет удаление слоя "Шаблон_Рамка_модель" из этого чертежа.

Продолжить? [Да/Нет] <Нет>: _Y
Переопределение блока "Рамка_и_штамп_лист".
Переопределение блока "Рамка_и_штамп_модель".
Переопределение блока "*U4".
Переопределение блока "*U5".

Идет удаления слоя "Шаблон_Рамка_модель".
Слои 1 удалены.
Команда: ; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; предупреждение: раскрутка пропущена для исключение


дальше лисп не выполняется
posetitel вне форума  
 
Непрочитано 15.11.2017, 17:58
#63
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Судя по логу слой удалился. Поэтому сделай 2 кнопки (2 разные команды). Удаления слоя и чистки. и пользуйся старой версией
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.11.2017, 18:21
#64
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


По мне, так куда удобнее выключить все ненужные слои перед чисткой, а затем - BGLAYDEL
skkkk вне форума  
 
Непрочитано 15.11.2017, 18:27
1 | #65
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Немного изменил код в #59
Пробуй снова

----- добавлено через 32 сек. -----
Цитата:
Сообщение от skkkk Посмотреть сообщение
По мне, так куда удобнее выключить все ненужные слои перед чисткой, а затем - BGLAYDEL
По такому пути и пошел, только слой заморозил
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.11.2017, 19:21
#66
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Я имел в виду, что для заказчика порой многие слои не нужны. Разного рода вспомогательные и т.д. Более того, зачастую лишние слои даже "запрещены", а в файле куча ненужных слоев, которые вообще непонятно как удалить, искать объекты, в том числе внутри блоков, и т.д. Поэтому, программа по удалению определенного слоя не очень эффективна. Лучше - отключить все ненужное и поудалять это. А нужное - пообъединять с "разрешенными" слоями командой _LAYMRG
skkkk вне форума  
 
Непрочитано 15.11.2017, 20:22
#67
posetitel


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


Новый код на рабочем месте протестирую.
Всегда удалял командой СЛОЙУДАЛ, при ее вызове слой выбирается мышкой, поэтому думал, что добавить одну команду в лисп будет несложно. Но раз появились такие сложности (заморозка всех слоев, потом удаление их), лисп не с первого раза заработал, то проще, действительно, по старинке.
А вот лисп по взрыванию блоков, о чем собственно тема, взрывает только однократно, т.е. если в блоке есть еще один блок, то внутренний блок не расчленяется. Как сделать (какую команду скопировать), чтобы блоки взрывались хотя бы трижды? При этом, например, текст не распадался на отдельные буквы.
posetitel вне форума  
 
Непрочитано 15.11.2017, 21:16
1 | #68
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от posetitel Посмотреть сообщение
ак сделать (какую команду скопировать), чтобы блоки взрывались хотя бы трижды?
Вероятно, должен сработать тройной (C:ALLSPACESBURST). Не проверял. Сколько времени это может занять на тяжелых файлах, предсказать трудно.
skkkk вне форума  
 
Непрочитано 16.11.2017, 09:42
#69
posetitel


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


VVA, skkkk, спасибо
(по правилам вроде нельзя благодарить отдельным сообщением, а как удалить это сообщение - не знаю)
posetitel вне форума  
 
Непрочитано 16.11.2017, 13:20
#70
posetitel


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


заметил такой глюк:
если в блоке атрибут скрытый или есть блок с параметром "видимость" и на разных видимостях есть атрибуты, то при выполнении лиспа C:ALLSPACESBURST эти атрибуты появляются на чертеже. так быть не должно. прилагаю файл
Вложения
Тип файла: dwg
DWG 2013
Чертеж1.dwg (48.8 Кб, 25 просмотров)
posetitel вне форума  
 
Непрочитано 16.11.2017, 14:59
1 | #71
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


posetitel, Попробуй в коде C:ALLSPACESBURST в строке №22 вместо (C:BURST) вписать (C:BGBLEXP)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.11.2017, 15:54
#72
posetitel


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


оно! даже тройной запуск (C:ALLSPACESBURST) удалил, т.к. BGBLEXP делает все за один проход.

Последний раз редактировалось posetitel, 16.11.2017 в 16:03.
posetitel вне форума  
 
Непрочитано 01.10.2018, 14:48
#73
Duero


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


туго с программированием. Можете подсказать куда в код дописать какие команды, что бы дополнительно взорвать блоки AutoDesk'ового СПДС, штриховки и Мтекст?
Забыл, еще по хорошему надо выделить все на чертеже и переместить на 0 слой с установкой цвета черного...

Последний раз редактировалось Duero, 01.10.2018 в 15:00.
Duero вне форума  
 
Непрочитано 01.10.2018, 15:36
#74
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от Duero Посмотреть сообщение
туго с программированием. Можете подсказать куда в код дописать какие команды, что бы дополнительно взорвать блоки AutoDesk'ового СПДС, штриховки и Мтекст?
Забыл, еще по хорошему надо выделить все на чертеже и переместить на 0 слой с установкой цвета черного...
А с какой целью это делать то? Зачем взрывать штриховки и мтексты?
Boxa вне форума  
 
Непрочитано 01.10.2018, 15:46
#75
Duero


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


Увы, есть программа на разработчиков которой я не могу ни как повлиять, а они использую древние компоненты, которые могут отображать только файл DWG 2007, и только в виде разбитых примитивов, если не разбить текст или штриховку, то чертеж может "разбегаться"
Duero вне форума  
 
Непрочитано 07.11.2018, 11:31
#76
posetitel


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Как-то так. Без проверки
Код:
[Выделить все]
(defun C:ARMAGEDON ()
;;;BGTOOLS и ALLSPACESBURST должны быть загружены
;;; http://forum.dwg.ru/showthread.php?p=1671168#post1671168
(vl-load-com)
(VL-CATCH-ALL-APPLY
  '(lambda( / lay)
     (if(setq lay(mydcl "Выберите слой для удаления" (acad_strlsort(vl-remove "0"(tablelist "LAYER")))))
       (progn
         (if (= (getvar "CLAYER") lay)(setvar "CLAYER" "0"))
         (bg:layer-status-save)
         (vla-put-Freeze (vla-item (vla-get-Layers (vla-get-ActiveDocument(vlax-get-acad-object))) lay) :vlax-true)
         (bg:delete-from-layer)
         (bg:layer-status-restore)
         )
       )
     )
  )  
(bg:progress-clear)
(bg:progress-init "Работаю..." 6)
(bg:progress 1)
(ConvField->Text nil) ;_(C:BGCFT) Без запроса
(bg:progress 2)
(C:BGBLALLDYN2S)
(bg:progress 3)
(bg:blfix (cons 49444 (tablelist "BLOCK"))) ;_устанавливаем у всех блоков разрешить расчленение - Да
(bg:progress 4) 
(C:ALLSPACESBURST)
(bg:progress 5)  
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
(bg:progress 6)

(vla-SaveAs
  (vla-get-activedocument (vlax-get-acad-object))
  (strcat
    (getvar "DWGPREFIX")
    (vl-filename-base(getvar "DWGNAME"))
    "_взорв"
    (vl-filename-extension(getvar "DWGNAME"))
    )
    acNative
  )
)
(defun mydcl (zagl info-list / fl ret dcl_id)
      ;;;Use
      ;;;(mydcl "Test" '("1" "2" "3" "4"))
      (vl-load-com)
      (if (null zagl)
        (setq zagl "Выбор")
      ) ;_ end of if
      (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
      (setq ret (open fl "w"))
      (mapcar
        '(lambda (x) (write-line x ret))
        (list "mip_msg : dialog { "
              (strcat "label=\"" zagl "\";")
              " :list_box {"
              "alignment=top ;"
              "width=51 ;"
              "allow_accept = true;"
              "tabs = \"16 32\";"
              "tab_truncate = true;"
              (if (> (length info-list) 26)
                "height= 26 ;"
                (strcat "height= " (itoa (+ 3 (length info-list))) ";")
              ) ;_ end of if
              "is_tab_stop = false ;"
              "key = \"info\";}"
              "ok_cancel;}"
        ) ;_ end of list
      ) ;_ end of mapcar
      (setq ret (close ret))
      (if (and (not (minusp (setq dcl_id (load_dialog fl))))
               (new_dialog "mip_msg" dcl_id)
          ) ;_ end of and
        (progn
          (start_list "info")
          (mapcar 'add_list info-list)
          (end_list)
          (set_tile "info" "0")
          (setq ret (car info-list))
          (action_tile
            "info"
            "(setq ret (nth (atoi $value) info-list))"
          ) ;_ end of action_tile
          (action_tile
            "cancel"
            "(progn(setq ret nil)(done_dialog 0))"
          ) ;_ end of action_tile
          (action_tile "accept" "(done_dialog 1)")
          (start_dialog)
        ) ;_ end of progn
      ) ;_ end of if
      (unload_dialog dcl_id)
      (vl-file-delete fl)
      ret
    ) ;_ end of defun
Пониму тему.
Подскажите, пожалуйста, как после удаления слоев в лисп добавить команды:
1) Сначала внедрить все ссылочные чертежи (вставленные и наложенные) в рабочий чертеж
2) Затем удалить неиспользуемые области подрезанных блоков (команда BGBLXCLIPEXP)
3) продолжить выполнение лиспа, т.е. чистку ненужных слоев и взрывание блоков
posetitel вне форума  
 
Непрочитано 01.02.2019, 14:52
#77
allar8


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


Народ за ранее прошу прощения, за то что не прочитал все сообщения по этой теме, мож решение уже тут и есть - сориентируйте тогда пожалуйста
В чертеже есть много разных блоков. Во всех стоит запрет на расчленение. Нужно все разбить, но не очень удобно заходить в каждый блок и ставить расрешение на расчленение поштучно. Можно ли сразу каким нить лиспом, командой или переменной пакетно разом разрешить расчленение разных блоков
allar8 вне форума  
 
Непрочитано 01.02.2019, 15:21
1 | #78
alex101000


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


...
Миниатюры
Нажмите на изображение для увеличения
Название: AllBlocks.jpg
Просмотров: 66
Размер:	108.9 Кб
ID:	210554  
alex101000 вне форума  
 
Непрочитано 01.02.2019, 15:38
1 | #79
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


LISP. Подготовка подосновы
Цитата:
BGBLFIX - Нормализация блоков (цвет, слой, взрываемость и т.п.)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.02.2019, 15:58
#80
allar8


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


Цитата:
Сообщение от VVA Посмотреть сообщение
BGBLFIX - Нормализация блоков (цвет, слой, взрываемость и т.п.)
Спасибо большое - не знал что новая версия вышла. У меня была 3.3 - там вроде не было этого
allar8 вне форума  
 
Непрочитано 24.05.2023, 14:54
#81
posetitel


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Как-то так. Без проверки
Код:
[Выделить все]
(defun C:ARMAGEDON ()
;;;BGTOOLS и ALLSPACESBURST должны быть загружены
;;; http://forum.dwg.ru/showthread.php?p=1671168#post1671168
(vl-load-com)
(VL-CATCH-ALL-APPLY
  '(lambda( / lay)
     (if(setq lay(mydcl "Выберите слой для удаления" (acad_strlsort(vl-remove "0"(tablelist "LAYER")))))
       (progn
         (if (= (getvar "CLAYER") lay)(setvar "CLAYER" "0"))
         (bg:layer-status-save)
         (vla-put-Freeze (vla-item (vla-get-Layers (vla-get-ActiveDocument(vlax-get-acad-object))) lay) :vlax-true)
         (bg:delete-from-layer)
         (bg:layer-status-restore)
         )
       )
     )
  )  
(bg:progress-clear)
(bg:progress-init "Работаю..." 6)
(bg:progress 1)
(ConvField->Text nil) ;_(C:BGCFT) Без запроса
(bg:progress 2)
(C:BGBLALLDYN2S)
(bg:progress 3)
(bg:blfix (cons 49444 (tablelist "BLOCK"))) ;_устанавливаем у всех блоков разрешить расчленение - Да
(bg:progress 4) 
(C:ALLSPACESBURST)
(bg:progress 5)  
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
(bg:progress 6)

(vla-SaveAs
  (vla-get-activedocument (vlax-get-acad-object))
  (strcat
    (getvar "DWGPREFIX")
    (vl-filename-base(getvar "DWGNAME"))
    "_взорв"
    (vl-filename-extension(getvar "DWGNAME"))
    )
    acNative
  )
)
(defun mydcl (zagl info-list / fl ret dcl_id)
      ;;;Use
      ;;;(mydcl "Test" '("1" "2" "3" "4"))
      (vl-load-com)
      (if (null zagl)
        (setq zagl "Выбор")
      ) ;_ end of if
      (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
      (setq ret (open fl "w"))
      (mapcar
        '(lambda (x) (write-line x ret))
        (list "mip_msg : dialog { "
              (strcat "label=\"" zagl "\";")
              " :list_box {"
              "alignment=top ;"
              "width=51 ;"
              "allow_accept = true;"
              "tabs = \"16 32\";"
              "tab_truncate = true;"
              (if (> (length info-list) 26)
                "height= 26 ;"
                (strcat "height= " (itoa (+ 3 (length info-list))) ";")
              ) ;_ end of if
              "is_tab_stop = false ;"
              "key = \"info\";}"
              "ok_cancel;}"
        ) ;_ end of list
      ) ;_ end of mapcar
      (setq ret (close ret))
      (if (and (not (minusp (setq dcl_id (load_dialog fl))))
               (new_dialog "mip_msg" dcl_id)
          ) ;_ end of and
        (progn
          (start_list "info")
          (mapcar 'add_list info-list)
          (end_list)
          (set_tile "info" "0")
          (setq ret (car info-list))
          (action_tile
            "info"
            "(setq ret (nth (atoi $value) info-list))"
          ) ;_ end of action_tile
          (action_tile
            "cancel"
            "(progn(setq ret nil)(done_dialog 0))"
          ) ;_ end of action_tile
          (action_tile "accept" "(done_dialog 1)")
          (start_dialog)
        ) ;_ end of progn
      ) ;_ end of if
      (unload_dialog dcl_id)
      (vl-file-delete fl)
      ret
    ) ;_ end of defun
А можно сюда дописать еще команду, чтобы созданный чертеж (тот чертеж, который получился путем выполнения лиспа, с именем DWGNAME_взорв.dwg) закрылся и открылся исходный, в котором остались невзорванные блоки, неудаленные слои, ну т.е. изначальный чертеж DWGNAME.dwg ?
posetitel вне форума  
 
Непрочитано 30.05.2023, 13:20
1 | #82
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от posetitel Посмотреть сообщение
А можно сюда дописать еще команду, чтобы созданный чертеж (тот чертеж, который получился путем выполнения лиспа, с именем DWGNAME_взорв.dwg) закрылся и открылся исходный, в котором остались невзорванные блоки, неудаленные слои, ну т.е. изначальный чертеж DWGNAME.dwg ?
Без проверки. Добавленные строки помечены ;_Add 2023_05_30
Код:
[Выделить все]
(defun C:ARMAGEDON ( / o_dwg)
;;;BGTOOLS и ALLSPACESBURST должны быть загружены
;;; http://forum.dwg.ru/showthread.php?p=1671168#post1671168
(vl-load-com)
(VL-CATCH-ALL-APPLY
  '(lambda( / lay)
     (if(setq lay(mydcl "Выберите слой для удаления" (acad_strlsort(vl-remove "0"(tablelist "LAYER")))))
       (progn
         (if (= (getvar "CLAYER") lay)(setvar "CLAYER" "0"))
         (bg:layer-status-save)
         (vla-put-Freeze (vla-item (vla-get-Layers (vla-get-ActiveDocument(vlax-get-acad-object))) lay) :vlax-true)
         (bg:delete-from-layer)
         (bg:layer-status-restore)
         )
       )
     )
  )  
(bg:progress-clear)
(bg:progress-init "Работаю..." 6)
(bg:progress 1)
(ConvField->Text nil) ;_(C:BGCFT) Без запроса
(bg:progress 2)
(C:BGBLALLDYN2S)
(bg:progress 3)
(bg:blfix (cons 49444 (tablelist "BLOCK"))) ;_устанавливаем у всех блоков разрешить расчленение - Да
(bg:progress 4) 
(C:ALLSPACESBURST)
(bg:progress 5)  
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
(bg:progress 6)
(setq o_dwg (strcat(getvar "DWGPREFIX")(getvar "DWGNAME"))) ;_Add 2023_05_30
(vla-SaveAs
  (vla-get-activedocument (vlax-get-acad-object))
  (strcat
    (getvar "DWGPREFIX")
    (vl-filename-base(getvar "DWGNAME"))
    "_взорв"
    (vl-filename-extension(getvar "DWGNAME"))
    )
    acNative
  )
 (vla-activate(vla-open (vla-get-documents (vlax-get-acad-object))(findfile o_dwg) :vlax-false)) ;_Add 2023_05_30
 )
(defun mydcl (zagl info-list / fl ret dcl_id)
      ;;;Use
      ;;;(mydcl "Test" '("1" "2" "3" "4"))
      (vl-load-com)
      (if (null zagl)
        (setq zagl "Выбор")
      ) ;_ end of if
      (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
      (setq ret (open fl "w"))
      (mapcar
        '(lambda (x) (write-line x ret))
        (list "mip_msg : dialog { "
              (strcat "label=\"" zagl "\";")
              " :list_box {"
              "alignment=top ;"
              "width=51 ;"
              "allow_accept = true;"
              "tabs = \"16 32\";"
              "tab_truncate = true;"
              (if (> (length info-list) 26)
                "height= 26 ;"
                (strcat "height= " (itoa (+ 3 (length info-list))) ";")
              ) ;_ end of if
              "is_tab_stop = false ;"
              "key = \"info\";}"
              "ok_cancel;}"
        ) ;_ end of list
      ) ;_ end of mapcar
      (setq ret (close ret))
      (if (and (not (minusp (setq dcl_id (load_dialog fl))))
               (new_dialog "mip_msg" dcl_id)
          ) ;_ end of and
        (progn
          (start_list "info")
          (mapcar 'add_list info-list)
          (end_list)
          (set_tile "info" "0")
          (setq ret (car info-list))
          (action_tile
            "info"
            "(setq ret (nth (atoi $value) info-list))"
          ) ;_ end of action_tile
          (action_tile
            "cancel"
            "(progn(setq ret nil)(done_dialog 0))"
          ) ;_ end of action_tile
          (action_tile "accept" "(done_dialog 1)")
          (start_dialog)
        ) ;_ end of progn
      ) ;_ end of if
      (unload_dialog dcl_id)
      (vl-file-delete fl)
      ret
    ) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.05.2023, 13:55
#83
posetitel


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


Спасибо, лисп работает, но если можно, попрошу небольшую отладку:
после выполнения лиспа остается открытый взарванный чертеж и открывается нормальный рабочий чертеж.
Если самому не закрыть взорванный, то повторно лисп не сработает.
Доработка - это закрыть сохраненный взорванный чертеж.
Идея то была как раз, чтобы когда выполнил всю работу с чертежом, сохранил его, взорвал для передачи, и тут как раз попалась на глаза досадная очепятка, вот чтобы не заходить заново в рабочий, просто еще разок взорвал, т.е. пересохранил прошлый взорванный и радуешься результату).
Понимаю, что это уже будет правка исходной идеи кода, т.к. первоначально как раз и оставался открытым взорванный чертеж (вот как раз на нем если попадаются на глаза опечатки, начинается поиск исходника, повторное открытие и т.д.)
posetitel вне форума  
 
Непрочитано 30.05.2023, 14:24
#84
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от posetitel Посмотреть сообщение
Доработка - это закрыть сохраненный взорванный чертеж
Взорвать
Saveas
Undo
__________________
Мастерская СПДС
doctorraz вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как взорвать все блоки на листах разом.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменяли плоттер. Как заменить разом плоттер на всех листах, в параметрах листов, на другой плоттер? Palomnic AutoCAD 5 14.12.2012 12:41
Динамические блоки при копировании перестают быть динамическими. *Voland* Динамические блоки 11 04.07.2012 10:51
ЛИСП слои цвета преобразование Gotch LISP 97 08.11.2011 10:22
Разбиение черечежа откоса на геологические блоки в VBA Skyper Программирование 1 18.03.2010 08:54
Взорвать все блоки файла сразу Red Nova AutoCAD 9 26.05.2009 11:16