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

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

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

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

Дорогие знатоки случилась вот такая штука с которой я не смог справиться самостоятельно:
В модели работаю с блоками (обычными, динамическими) с таблицами и расчетами в них. А в листах имеются таблицы ссылающиеся на таблицы в модели и денамические блоки. С этим со всем работать умею только я. И в компании требуют это все взрывать перед сдачей. Работа трудоемкая и долгая. Нужно сделать так чтобы при нажатии 1 кнопки запустился процесс поиска и взрыва. Причем не просто взорвать блоки динамические командой автокада а командой экспрестулса. т.е. все отребуты при это перевести в текст.
Надеюсь будут хоть какие нибудь идеи для сокращения моего времени. Все заранее спасибо!!!
Просмотров: 15360
 
Непрочитано 21.11.2014, 23:24
#41
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,286


Цитата:
Сообщение от 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
Сообщений: 6,984


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

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,286


Цитата:
Сообщение от 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,340


Цитата:
Сообщение от Franco13 Посмотреть сообщение
Franco13
Все работает. А Вы правильно копируете код?
Миниатюры
Нажмите на изображение для увеличения
Название: Image 2.png
Просмотров: 51
Размер:	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,340


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

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


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

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,286


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


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


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

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,286


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


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


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

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


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


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


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

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


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


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

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

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


Как-то так. Без проверки
Код:
[Выделить все]
(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
__________________
Как использовать код на Лиспе читаем здесь

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


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


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

Последний раз редактировалось posetitel, 15.11.2017 в 17:33.
posetitel вне форума  
Ответ
Вернуться   Форум 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