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

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

Разбить все блоки в чертеже

Ответ
Поиск в этой теме
Непрочитано 19.07.2019, 16:35 #1
Разбить все блоки в чертеже
Mitek
 
Мостовик-затейник
 
Москва
Регистрация: 25.02.2006
Сообщений: 76

Есть на первый взгляд элементарная задача. Нужно разбить все блоки в чертеже.
Казалось бы всё просто:
Код:
[Выделить все]
 (sssetfirst nil (ssget "_x" '((0 . "INSERT"))))
(C:Burst)
Но... Проблема в том, что в файлах содержится огромное количество блоков (иногда до 10-20 тысяч).
Я банально не смог дождаться завершения разбиения командой Burst.
Руками всё просто и понятно. Быстрый выбор и взорвать. Тогда взрывание происходит за адекватное время. Но если в лиспе после выбора блоков ставить не (C:Burst), а (command "_explode"), то она не видит выделенных блоков. К тому же по команде взорвать в некоторых версиях AutoCAD (в частности 2015, 2016) вылезает диалоговое окно о том, что операция может занять долгое время и предлагает убрать порядок наложения объектов для ускорения.
Есть варианты как использовать (command "_explode") для выбранных объектов с подавлением этого диалогового окна (с ответом "Да")?
Просмотров: 3795
 
Непрочитано 19.07.2019, 16:58
#2
Кулик Алексей aka kpblc
Moderator

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


А ты в курсе про принципиальную разницу между _.explode и burst?
И потом, на форуме, насколько я помню, были решения по пакетному взрыву блоков.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.07.2019, 17:05
#3
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,090


Дустом Bgtools не пробовали?
Чертежей с таким бешенным количеством блоков не встречал, но с теми, с которыми мне приходилось работать, нормально справляется.
Код там открытый, так что если задача подрыва всех блоков стоит не сама по себе, то можно почерпнуть какие-то идеи для своей проги.

Еще тут кое-что есть по теме.

Offtop: Вопрос "Зачем????" даже стесняюсь задать
kp+ вне форума  
 
Непрочитано 19.07.2019, 17:07
#4
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,766


Цитата:
Сообщение от Mitek Посмотреть сообщение
огромное количество блоков (иногда до 10-20 тысяч)
Подоснова что ли? Али ар из архикада?
engngr вне форума  
 
Непрочитано 19.07.2019, 17:56
#5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
Проблема в том, что в файлах содержится огромное количество блоков (иногда до 10-20 тысяч).
не дождёшся
trir вне форума  
 
Непрочитано 19.07.2019, 19:34
#6
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Привет!

Цитата:
Есть варианты как использовать (command "_explode") для выбранных объектов с подавлением этого диалогового окна (с ответом "Да")?
Системная переменная EXPERT не поможет?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 20.07.2019, 18:54
#7
VVA

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


Цитата:
Сообщение от Mitek Посмотреть сообщение
Есть варианты как использовать (command "_explode") для выбранных объектов с подавлением этого диалогового окна (с ответом "Да")?
Еще учти особенности работы команды Explode при вызове из лиспа или скрипта
Цитата:
Сообщение от VVA Посмотреть сообщение
Обнаружился еще один интересный нюанс использования QAFLAGS. Это касаестя использования команды _EXPLODE при вызове из Lisp-функций и Lisp-скриптов.
QAFLAGS (Системная переменная)

----- добавлено через ~23 мин. -----
Хотя на практике файлы с 10К-20К блоками не встречал
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.07.2019, 02:08
#8
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
Хотя на практике файлы с 10К-20К блоками не встречал
любая топо-съёмка большой площади
trir вне форума  
 
Автор темы   Непрочитано 22.07.2019, 09:11
#9
Mitek

Мостовик-затейник
 
Регистрация: 25.02.2006
Москва
Сообщений: 76


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А ты в курсе про принципиальную разницу между _.explode и burst?
Да, конечно. _explode - встроенная команда акада, Burst - lisp из ET.
Цитата:
Сообщение от kp+ Посмотреть сообщение
Bgtools не пробовали?
Пробовал. Не сложилось с ним что-то... Попробую ещё помучить, но есть подозрение, что выполняться по времени он будет как burst.
Цитата:
Сообщение от engngr Посмотреть сообщение
Подоснова что ли?
Она самая, зараза
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Системная переменная EXPERT не поможет?
Она вроде другие запросы подавляет.
Цитата:
Сообщение от VVA Посмотреть сообщение
QAFLAGS (Системная переменная)
О, спасибо, поизучаю на досуге

Последний раз редактировалось Mitek, 22.07.2019 в 09:25.
Mitek вне форума  
 
Непрочитано 22.07.2019, 09:15
#10
Кулик Алексей aka kpblc
Moderator

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


Mitek, ты проверь, какие будут результаты разбития одного и того же блока с атрибутами командой explode и командой burst. Что там с атрибутами получится?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.07.2019, 09:32
#11
Mitek

Мостовик-затейник
 
Регистрация: 25.02.2006
Москва
Сообщений: 76


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Mitek, ты проверь, какие будут результаты разбития одного и того же блока с атрибутами командой explode и командой burst. Что там с атрибутами получится?
Про проблему разбиения блоков с атрибутами в курсе. Слава богу в этой куче нет блоков с атрибутами. Это файлы топосъёмки (экспорт из MicroStation, насколько я знаю).
Mitek вне форума  
 
Непрочитано 22.07.2019, 09:45
#12
Кулик Алексей aka kpblc
Moderator

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


Так если нет атрибутов, на фига использовать burst?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.07.2019, 09:46
#13
Mitek

Мостовик-затейник
 
Регистрация: 25.02.2006
Москва
Сообщений: 76


Цитата:
Сообщение от VVA Посмотреть сообщение
Еще учти особенности работы команды Explode при вызове из лиспа или скрипта

QAFLAGS (Системная переменная)

----- добавлено через ~23 мин. -----
Хотя на практике файлы с 10К-20К блоками не встречал
Вот просто реально огромнейшее спасибо!!! То что надо! Вариант с использованием QAFLAGS работает отлично. Осталось подавить запрос (точнее ответить на него "Да") и вообще будет супер
Кстати, если на запрос ответить "Нет", то разбивка блоков занимает долгое время даже командой explode.

----- добавлено через 55 сек. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Так если нет атрибутов, на фига использовать burst?
А ты что предлагаешь использовать?

----- добавлено через ~25 мин. -----
А, всё, разобрался с запросом Есть переменная DRAWORDERCTL. Если её выставить в 0, то запрос не выскакивает! https://www.cadforum.cz/cadforum_en/...ration-tip6748
Всё, всем огромнейшее спасибо, особенно ещё раз VVA!!!

Последний раз редактировалось Mitek, 22.07.2019 в 10:00.
Mitek вне форума  
 
Непрочитано 22.07.2019, 10:29
#14
Кулик Алексей aka kpblc
Moderator

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


Пока не знаю. Есть ли в файле неравномасштабные блоки, сколько реально описаний блоков и т.п. Может быть, наиболее быстрым решением вообще окажется работа в неактивном документе.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.07.2019, 10:56
#15
Mitek

Мостовик-затейник
 
Регистрация: 25.02.2006
Москва
Сообщений: 76


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Пока не знаю. Есть ли в файле неравномасштабные блоки, сколько реально описаний блоков и т.п. Может быть, наиболее быстрым решением вообще окажется работа в неактивном документе.
Да всё, решил проблему благодаря VVA и поиску. Решение хоть и немного топорненькое, но вполне устраивает. Вызов 3 раза разбиения - разбивка блоков внутри блоков.
Сейчас воткну людям в менюшку и пусть пользуются

Код:
[Выделить все]
 (defun blkexpl ( / *error* ss qf ) ;(blkexpl)
 ;; © Lee Mac 2010
  (defun *error* ( msg )
    (and qf (setvar 'QAFLAGS qf))
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
        (princ (strcat "\n** Error: " msg " **")))
    (princ)
  )
  (if (setq ss (ssget "_X" '((0 . "INSERT"))))
    (progn
      (setq qf (getvar 'QAFLAGS))
      (setvar 'QAFLAGS 5)
      (command "_.explode" ss "")
      (setvar 'QAFLAGS qf)
    )
  )
  (princ)
)

(defun geoprepare()
 (setq droc (getvar "DRAWORDERCTL"))
 (setvar "DRAWORDERCTL" 0)
 (blkexpl)
 (blkexpl)
 (blkexpl)
 (setvar "DRAWORDERCTL" droc)
 (command "_.-purge" "_b" "*" "_n")
 (princ)
)
----- добавлено через ~45 мин. -----
Есть правда ещё одна небольшая задачка в дополнение к этой. Выставить свойства всех объектов чертежа: цвет и толщина "По слою". Но наверное это уже другая тема. Помучаю поиск попозже.
Ну или можете ткнуть в соответствующую тему

Последний раз редактировалось Mitek, 22.07.2019 в 11:56.
Mitek вне форума  
 
Непрочитано 22.07.2019, 15:19
1 | #16
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,766


Offtop:
Цитата:
Сообщение от Mitek Посмотреть сообщение
Выставить свойства всех объектов чертежа: цвет и толщина "По слою"
Командными - _change или _setbylayer
engngr вне форума  
 
Автор темы   Непрочитано 22.07.2019, 15:58
#17
Mitek

Мостовик-затейник
 
Регистрация: 25.02.2006
Москва
Сообщений: 76


Цитата:
Сообщение от engngr Посмотреть сообщение
Offtop:
Командными - _change или _setbylayer
Большое человеческое спасибо Сколько лет работаю в акаде, а не знал про такие команды
Mitek вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Разбить все блоки в чертеже

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCAD MEP 2014: Откуда возникли непонятные блоки и стили в новом блоке? Новичёк Вертикальные решения на базе AutoCAD 7 14.12.2015 11:09
Разбить блоки с атрибутами Leo_fmf Программирование 26 03.07.2014 13:12
Именованные блоки превращаются в неименованные. Что делать? Autocad 2008SP1 emich AutoCAD 7 25.06.2014 10:30
Помогите разбить подпорную стену на блоки Alex_mgsu2012 Железобетонные конструкции 9 11.09.2013 18:16